Форум: "Основная";
Текущий архив: 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]Description
Use CreateNew instead of Create to create a form without using the associated .DFM file to initialize it. Always use CreateNew if the TCustomForm descendant is not a TForm object or a descendant of TForm.
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.46 MB
Время: 0.006 c