如何用一条语句起不同的窗体(100分)

  • 主题发起人 主题发起人 Dogruo
  • 开始时间 开始时间
D

Dogruo

Unregistered / Unconfirmed
GUEST, unregistred user!
我将多个窗体名存于数据库中的‘A’字段中,如何起对应于当前记录‘A’字段值
的窗体却不用判断‘A’的值,比如 C 中的宏替换, 用 DELPHI 描述为:
var MyWindow:String;
begin
MyWindow:=Table1.FieldByName('A').AsString;
if &MyWindow=nil then
Application.CreateForm(T&MyWindow, &MyWindow);
&MyWindow.Show;
end;
delphi 中当然不能这样写, 如何实现这样的思想?我愿送出所有分数。


 
case语句:
case a
a1:begin
if a1Window=nil
then Application.CreateForm(Ta1Window, a1Window);
a1Window.Show;
end
a2:begin
if a2Window=nil
then Application.CreateForm(Ta2Window, a2Window);
a2Window.Show;
end
........依此类推。
 
;Dogruo 大虾的意思是说窗口的类名保存在表中,需要根据不同的名字创建不同类型的窗口。
一般语言是不支持这种特性的。(Btw: C 中有宏替换吗?)
Delphi 由于有运行时类型信息 RTTI (Run Time Type Info),所以能够实现你的要求。
方法就是使用 GetClass 函数。
var
MyString: String;
Form: TForm;
begin
MyString := 'TForm1'; // 假设 MyString 值是从表中来的,这里暂时直接赋值
Form := TForm(GetClass(MyString)).Create(Self);
...
 
BaKuBaKu:
非常感谢你,由于刚接触DELHPI, 这个问题一直困扰着我,你帮了我这个大忙。
真的想请你吃顿饭,希望能和你保持联系。我的Email: Dogruo@263.net
 
后退
顶部