主页
Top.Mail.Ru Yandeks.Metrika
论坛:“主要”;
当前存档:2003.05.01;
下载:[xml.tar.bz2];

向下

如何从dfm创建表单? 找到类似的分支


AndrewK   (2003-04-16 14:15) [0]

有一种动态创建表单的愿望。 是否可以从dfm作为线程加载表单,还是我必须描述一组有限的控件并编写自己的格式来创建表单?



evvcom   (2003-04-16 14:51) [1]

А
Form1 := TForm.Create;
Button1 := TButton.Create(Form1);
Button1.Parent := Form1;

и так далее не устраивает?



kull   (2003-04-16 15:52) [2]

Смотри в Help: TCustomForm.CreateNew

Может это тебе нужно?



Shirson   (2003-04-16 16:09) [3]

По ходу AndrewK другое спрашивает. В dfm набрасывать болванки форм, используя Delphi как редактор форм, а потом эти формы цеплять к проге динамически. Т.е. смысл в том, чтобы прога не перекомпилировалась при добавлении новых форм.
IMHO задачка та ещё...



kull   (2003-04-16 16:18) [4]

产品详情

不要使用.DFM文件来初始化它。 如果TCustomForm是TForm对象或TForm对象,则始终使用CreateNew。

WriteComponentResFile("Temp.dfm", Form1);

...
Form2 := TForm.CreateNew(Application);

ReadComponentResFile("Temp.dfm", Form2);




AndrewK   (2003-04-18 09:49) [5]

Че то не работает... :(



savva   (2003-04-18 11:00) [6]

我这样做了:

项目
program Project1;
uses
Forms,
Classes,
Unit1 in "Unit1.pas" {Form1};

{$R *.RES}

//{$DEFINE REFRESH_FORM}
begin
Application.Initialize;
{$IFDEF REFRESH_FORM}
Application.CreateForm(TForm1,Form1);
WriteComponentResFile("Test.dfm", Form1);
Form1.free;
{$ENDIF}
Form1 := TForm1.CreateNew(Application);
ReadComponentResFile("Test.dfm", Form1);
Form1.Show;
repeat
Application.HandleMessage
until Application.Terminated;
Form1.free;
end.

形式
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
btnSaveForm: TButton;
Memo1: TMemo;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.btnSaveFormClick(Sender: TObject);
begin
WriteComponentResFile("Test.dfm", Form1);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Application.Terminate;
end;

end.

выделены важные моменты:
1) директива REFRESH_FORM используется чтоб обновит форму, если вы ее модифицировали (в частности новые компоненты и обработчики событий)
2) Так как форма в примере одна, то есть она главная, когда мы ее закрываем будем считать что приложение завершается (здесь возможны вариации).



savva   (2003-04-18 11:09) [7]

尽管也没有什么意义-最多只能进行移动,更改文字等操作。 即,仅更改属性。 要处理事件,代码必须存在于程序主体中。 即使将按钮(或任何其他控件元素)添加到窗体,也将很难连接事件(很难预见所有可能的选项)。



Страницы: 1 整个分支

论坛:“主要”;
当前存档:2003.05.01;
下载:[xml.tar.bz2];

楼上









内存:0.58 MB
时间:0.044 c
14-727
伊万湖
2003-04-13 22:39
2003.05.01
组件调色板


14-685
Anonimus
2003-04-11 10:41
2003.05.01
改变图标


3-391
HanIP
2003-04-15 09:58
2003.05.01
DBGrid中


1-495
Zerul
2003-04-19 23:32
2003.05.01
如何从dll调用表单?


3-457
不逞之徒
2003-04-14 09:22
2003.05.01
ib中的数组





南非荷兰语 阿尔巴尼亚人 阿拉伯语 亚美尼亚 阿塞拜疆 巴斯克 白俄罗斯 保加利亚语 加泰罗尼亚 简体中文 中国(繁体) 克罗地亚 捷克 丹麦语 荷兰人 英语 爱沙尼亚语 菲律宾人 芬兰 法文
加利亚西语 格鲁吉亚语 德语 希腊语 海地克里奥尔语 希伯来语 印地语 匈牙利 北日耳曼语 印度尼西亚人 爱尔兰语 意大利语 日本性玩偶 韩语 拉脱维亚 立陶宛 马其顿 马来语 马耳他语 挪威语
波斯语 波兰语 葡萄牙语 罗马尼亚 俄语 塞尔维亚 斯洛伐克 斯洛文尼亚 西班牙语 斯瓦希里 瑞典语 泰国人 土耳其 乌克兰 乌尔都语 越南人 威尔士语 意第绪语 孟加拉 波斯尼亚
宿务 世界语 古吉拉特语 豪萨语 苗族 伊博 爪哇 卡纳达语 高棉 老挝 拉丁语 毛利 马拉 蒙古人 尼泊尔 旁遮普 索马里 泰米尔人 泰卢固语 约鲁巴语
祖鲁
英文 Французский Немецкий Итальянский Португальский 俄文 Испанский