我的目的是可以修改Dfm文件,然后利用Dfm文件创建动态窗体.
读取Dfm文件创建动态窗体我现在可以做到.但是如果想响应个按钮事件,则不知道如何下手.不知道事件程序该写在什么地方,该怎么调用.
请給我例子,实现的目的如下:
1.我的程序有个按钮,点击按钮时可按照预先设计好的Dfm文件动态窗体.
2.动态窗体上也有个按钮,点击按钮时可响应按钮的点击事件.
读取Dfm文件创建动态窗体我现在可以做到.但是如果想响应个按钮事件,则不知道如何下手.不知道事件程序该写在什么地方,该怎么调用.
请給我例子,实现的目的如下:
1.我的程序有个按钮,点击按钮时可按照预先设计好的Dfm文件动态窗体.
2.动态窗体上也有个按钮,点击按钮时可响应按钮的点击事件.
解决方案 »
- 不用安装驱动的桌面数据库?
- 请大家帮忙,来者有分
- D-LINK的密码忘记了怎么办?有没有一种渠道查询?着急!
- 怎么实现在DBGrid中双击某一行而获得该行中某一列的值?
- 我下载了一个RWXLS控件但不知道如何使用他,如何将数字,图表,导出excel
- 大家好!如何把一个文本重新整理排列?
- 请教,在SQL-Server中怎样将生成的大量数据快速存储,急!急!急!急!急!
- property Connection:TADOConnection read FConnection write FConnection中read和write 的作用
- 很简单的问题,如果得到OS是什么啊?
- 如何取得单击link的url的地址?像腾讯浏览器, 高手请进
- 菜鸟问题,帮忙看看,怎么取得数据库查询的字段值?-
- 关于怎样打开当前运行的程序目录下网页的问题
Form生成时同时生成Button
参考
http://search.csdn.net/Expert/topic/944/944820.xml?temp=.3605158
XXX.onclick := MyclickEvent;或者,只能用 vbScript 或 PascalScript 这些动态脚本编写了
我把我看的资料放出来,大家参考一下,资料里把DFM文件生成窗体是可以做出来但是不知道该如何对控件添加事件.
资料如下:
Delphi的“动态窗体”技术实际应用 在Delphi可视化设计环境中,允许程序员在代码编辑器中以文本的方式浏览和修改DFM文件内容。当用FileOpen命令直接打开DFM文件或者选择窗体设计窗口的弹出式菜单上的View as Text命令时,就会在编辑器中出现文本形式的信息。在一些资料中将这种文本形式称之为窗体设计脚本。Delphi提供的这种脚本编辑功能是对Delphi可视化设计的一大补充。当然这个脚本编辑能力是有限制的,比方说不能在脚本任意地添加和删除部件,因为代码和DFM脚本是紧密相连的,任意添加和修改会导致不一致性。但在动态生成的DFM文件中,就不存在这一限制。 实际上,DFM文件内容是二进制数据,它的脚本是经过Delphi开发环境自动转化的,而且Delphi VCL中的Classes库单元提供了在二进制流中的文件DFM和它的脚本之相互转化的过程。它们是ObjectBinaryToText和ObjectTextToBinary、ObjectResourceToText和ObjectTextToResource。 ObjectBinaryToText过程将二进制流中存储的部件转化为基于文本的表现形式,这样就可以用文本处理函数进行处理,还可以用文本编辑器进行查找和替代操作,最后可以将文本再转化成二进制流中的部件。 ObjectTextToBinary过程执行的功能与ObjectBinaryToText相反,将TXT文件转换为二进制流中的部件,而且只要TXT文件内容的书写符合DFM脚本语法,ObjectTextToBinary可将任何程序生成的TXT文件转换为部件,这一功能也为DFM文件的动态生成和编辑奠定了基础。 如何在运行过程中将本窗体保存成一个文本格式的.dfm文件? function ComponentToString(Component: TComponent): string;varBinStream: TMemoryStream;StrStream: TStringStream;s: string;beginBinStream := TMemoryStream.Create;tryStrStream := TStringStream.Create(s);tryBinStream.WriteComponent(Component);BinStream.Seek(0, soFromBeginning);ObjectBinaryToText(BinStream, StrStream);StrStream.Seek(0, soFromBeginning);Result := StrStream.DataString;finallyStrStream.Free;end;finallyBinStream.Freeend;end; { ComponentToString }function StringToComponent(Value: string; Instance: TComponent): TComponent;varStrStream: TStringStream;BinStream: TMemoryStream;beginStrStream := TStringStream.Create(Value);tryBinStream := TMemoryStream.Create;tryObjectTextToBinary(StrStream, BinStream);BinStream.Seek(0, soFromBeginning);Result := BinStream.ReadComponent(Instance);finallyBinStream.Free;end;finallyStrStream.Free;end;end; { StringToComponent } procedure TForm1.Button1Click(Sender: TObject);beginMemo1.Text := ComponentToString(Self);end; procedure TForm1.Button2Click(Sender: TObject);beginStringToComponent(‘object Label1: TLabel‘#13#10 +‘ Left = 232‘#13#10 +‘ Top = 56‘#13#10 +‘ Width = 26‘#13#10 +‘ Height = 13‘#13#10 +‘ Caption = #20320#22909‘#13#10 +‘ Font.Charset = GB2312_CHARSET‘#13#10 +‘ Font.Color = clRed‘#13#10 +‘ Font.Height = -13‘#13#10 +‘ Font.Name = #23435#20307‘#13#10 +‘ Font.Style = []‘#13#10 +‘ ParentFont = False‘#13#10 +‘end‘#13#10, Label1);end;//要注册类==end=================================