Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.01;
Скачать: CL | DM;

Вниз

Как создать форму из 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.01 c
1-643
exo
2003-04-19 15:21
2003.05.01
перевести на делфи


14-701
NetBreaker666
2003-04-12 18:32
2003.05.01
test


1-604
Alex-21
2003-04-18 21:27
2003.05.01
Путь файла


7-807
cybermonk
2003-03-06 10:15
2003.05.01
Низкоуровневая запись-чтение с дискеты


14-766
-=Korn=-
2003-04-13 19:37
2003.05.01
String => Char (Помогите с преобразованием)