代码中如何实现界面的导航
声明:这篇短文所要叙述的方法是基于我上一篇文章的
《如何实现导航界面的独立性 --创建TForm2窗体,却无需 uses 其对应的unit》
这里叙述两种:
利用事件的方式,利用消息的方式
利用事件的方式:
这是我同事 黄 现在的使用方式。
具体做法:
1、对每个窗体类做唯一的ID标识。
2、把TButton的Tag标识赋值为其所要创建的窗体所对应的ID.
3、在TButton的Click事件中,根据其Tag值,创建对应的窗体。
代码类似如下:
procedure TfrmNavigation.Buttonclick(sender: Tobject);
begin
case TButton(sender).Tag of
1: CreateForm('Tform1');
2: CreateForm('Tform2');
....
end;
end;
利用消息的方式:
这是我设想的方式。
具体做法:
1、在导航窗体中增加对消息的处理。
其处理过程就是把窗体创建出来。
2、在各个TButton.Click的事件中的发送字符指针消息给导航窗体
代码如下:
在导航窗体中增加对消息的处理:
procedure TfrmNavigation.HandleMsg(var Msg: TMessage);
var
Wp,Lp:string;
begin
Wp := string(Msg.WParam);
Lp := string(Msg.LParam);
CreateForm(Wp);
end;
procedure TfrmNavigation.btn3Click(Sender: TObject);
var
wp,lp: string;
begin
wp := 'TfrmLoadFromExl';
lp := 'aa';
SendMessage(Handle,WM_Form,Integer(wp),Integer(lp));
end;
我现在看到的两者的优劣:
1.利用事件的方式将很难实现在任何一个窗体上创建另一个窗体的需求。
因为假如上述ButtonClick代码写在unitcreateform单元中,那么任何一个窗体上
要实现创建某个窗体就得uses unitcreateform.
但利用消息却只需要得到处理消息的那个窗体的Handle。