同上。
解决方案 »
- 打包的问题
- 提供北京工作机会
- dbgrid的简单问题
- 一个奇怪的问题:TStringList <> nil ,但访问TStringList.Text出现地址错误
- 谁能提供几本电子图书的下载地址dephi的
- 兄弟姐妹们来看看,一个字段显示的问题!
- cg1120散分贴--->郁闷啊,公司局域网出问题,一上午都没登陆CSDN
- 国庆节大家都散分,我专家分不多,但可用分不少,也散一点吧。顺便庆祝中国亚运队两天里夺得7枚金牌了。
- 请问用intraweb 生成的isapi在浏览器中如何访问?
- 实现多选功能。
- 我用WebSnap技术开发数据库网页时,用D6能正常显示,但用D7同样的操作步骤却发生Internal Application Error 尚未调用 CoInitialize错误
- 关于stringgrid列宽
MyForm: TForm;
s: String;
begin
s:= 'Form2'; //从数据库取出窗体名,如: s:= ADODataSet.FieldValue['窗体'];
MyForm:= TForm.Create(self);
MyForm.Name:= s;
MyForm.ShowModal;
end;
glCurrentFormName字符型,表示当前窗体的名称
Tform(application.FindComponent(glCurrentFormName)).ShowModal;
感觉上就是根据一个字符串值,创建一个类名等于该字符串的类。
我不知道怎么实现。因为不同的窗体应该具有不同的数据结构,感觉上像是不大可能实现,请高手指教。
我的想法是:
如果要创建的窗体具有相同的结构,只不过属性不同的话,实现比较容易。
只要把窗体的属性保存在数据库,然后创建该结构窗体,然后根据数据库内容对窗体进行赋值就可以了。
如果过程和函数具有相同的参数而实现方式不同,可以在数据库中保存相应实现的dll文件,然后根据数据库内容拷贝相应的文件。
if data.ads_common.fieldbyname('tableform').asstring='frmbase_xzgb' then
openform(Tform(frmbase_xzgb),Tfrmbase_xzgb,self);
就可以了~如果说你的窗体整个都是根据数据库中项目的个数来自动创建的那么你就可以把没个窗体的name属性都设置成你数据库中的值了假设你把所有的数据库值都保存在一个数组nameArray[1..10]里面了
你就可以在主窗口的show事件里面动态的创建你所要的窗口了~var myForm:tform;for i:=1 to high(nameArray) do
begin
myForm:=tForm.create(self);
myForm.name:=nameArray[i];
myForm.caption:=nameArray[i];
.......//设置其他属性
myForm.show;//我不建议使用showmodel,具体原因可以查一下delphi的help
end;
registerclasses([TForm1],[TForm2],...,[TFormn]);
然后,读出数据库中的类名classname
最后:
var
myClass:TForm;
begin
myClass:=TFormClass(getclass(classname)).create(self);
myClass.show;
end;
我是这个意思:
给窗体的名字来打开指定的窗体?
如数据库有下面的表:
formname re(字段名)
jhd 进货单
xsd 销售蛋
. .另外加100分。
begin
tmpForm := TForm.Create(Application) ;
tmpForm.Name := formname;
...
end
else
TForm(Application.FindComponent(formname)).BringToFront ;
楼上的老兄都说了。快结贴吧。
Windows, Messages, SysUtils, Variants, Classes, Controls, StdCtrls,Forms;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
public
procedure CreateSubForm(AClassName:string);
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
CreateSubForm('TForm1');
end;
procedure TForm1.CreateSubForm(AClassName: string);
begin
if GetClass(AClassName)<>nil then
with TFormClass(FindClass(AClassName)).Create(self) do
begin
ShowModal;
end;
end;////下面的代码注册窗体类,你要注册才能用FindClass找到
initialization
RegisterClass(TForm1);end.
var
i: Integer;
RetForm: TForm;
begin
Result := nil;
try
AFormName := LowerCase(AFormName);
for i := 0 to Application.ComponentCount-1 do
if Application.Components[i] is TForm then
begin
RetForm := TForm(Application.Components[i]);
if LowerCase(RetForm.name) = AFormName then
begin
Result:= RetForm;
Break;
end;
end;
except
end;
end;这样你可以得到你的窗体名,然后就可以调用他了