Текущий архив: 2005.07.11;
Скачать: CL | DM;
ВнизКак автоматизировать процесс создания однотипных форм Найти похожие ветки
← →
Layner © (2005-06-16 08:35) [0]D7, требуется создать ~20 MDIChild форм, с одинаковыми OnClose обработчиками, например у всех надо прописать
procedure Tft.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
ft:=nil;
end;
И ещё пару свойств.
Это конечно можно сделать как, сделать 1 форму как надо, потом копировать её DFM и PAS файл под другим названием, потом автоматически менять название форм в блокноте... Но может быть есть решение проще?
← →
Kerk © (2005-06-16 08:37) [1]наследование
← →
Layner © (2005-06-16 08:40) [2]Kerk © (16.06.05 08:37)
А как форму унаследовать? Я сейчас добавляю в проект File-New-Form, и потом эту Form под MDI доделываю. С другим элементом проблем нет, написать потомка со своими параметрами, а как с формой?
← →
Kerk © (2005-06-16 08:45) [3]Layner © (16.06.05 8:40) [2]
Полазь в диалоге выбора чего создавать. Там можно выбирать какую форму наследовать.
← →
КаПиБаРа © (2005-06-16 08:46) [4]File - New - Other - Вкладка с названием твоего проекта - Нужная форма
← →
Layner © (2005-06-16 09:03) [5]Понятно теперь, спасибо! Сделаю опорную форму, от нее и буду наследовать.
← →
Layner © (2005-06-16 09:49) [6]Мда.. так то оно хорошо, только как заменить код в "опорной форме", что бы он корректно отрабатывал по закрытию другой формы?
procedure Tfstandart.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
(Sender AS TForm):=nil; //???
end;
← →
КаПиБаРа © (2005-06-16 09:56) [7](Sender AS Tfstandart):=nil;
← →
Layner © (2005-06-16 09:59) [8]
КаПиБаРа © (16.06.05 09:56)
Так даже не компилируется :(
← →
КаПиБаРа © (2005-06-16 10:01) [9]Layner © (16.06.05 9:59) [8]
Ты чего хочешь сделать?
← →
-=XP=- © (2005-06-16 10:09) [10]1. Написать базовую форму.
2. Правой кнопкой на форме - Add to repository. Заполнить регистрационный диалог. Ну, и там все такое...
3. Создать новый проект (это для примера, вообще можно и в старом).
4. File-New-Other-<Закладка репозитория, которую указали в п. 2>
5. Выбрать Вашу добавленную форму. Не забыть поставить опцию создания новой формы (внизу диалога): Copy, Inherit, Use.
← →
Layner © (2005-06-16 10:11) [11]Есть шаблон формы, как тут был совет, у этого шаблона есть обработчик OnClose, хотелось бы чтобы по этому OnClose обрабатывалась любая форма, унаследованная от шаблона - fstandart.
Вопрос, как в fstandart написать OnClose для всех? :)
← →
-=XP=- © (2005-06-16 10:12) [12](Sender AS TForm):=nil;
(Sender AS Tfstandart):=nil;
Шикарно... :)
← →
-=XP=- © (2005-06-16 10:14) [13]Вопрос, как в fstandart написать OnClose для всех?
Надо всех унаследовать от Tfstandart.
← →
msguns © (2005-06-16 10:20) [14]>-=XP=- © (16.06.05 10:09) [10]
Зачем для наследования форм в рамках одного проекта использовать репозиторий ?
← →
Layner © (2005-06-16 10:29) [15]
[13] -=XP=- © (16.06.05 10:14)
Надо всех унаследовать от Tfstandart.
Все последующие формы создаются от Tfstandart. Тогда что в Tfstandart на OnClose написать?unit standart;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
Tfstandart = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fstandart: Tfstandart;
implementation
{$R *.dfm}
procedure Tfstandart.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
fstandart:=nil;
end;
end.
А вот ее потомки "генерятся":unit standart1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, standart;
type
Tfstandart1 = class(Tfstandart)
private
{ Private declarations }
public
{ Public declarations }
end;
var
fstandart1: Tfstandart1;
implementation
{$R *.dfm}
end.
← →
КаПиБаРа © (2005-06-16 10:33) [16]Layner © (16.06.05 10:29) [15]
Тогда что в Tfstandart на OnClose написать?
А че ты хочешь написать там? Какие операции должны выполнятся по закрытии формы?
← →
Layner © (2005-06-16 10:39) [17]А че ты хочешь написать там? Какие операции должны выполнятся по закрытии формы?
В каждой дочерней форме в MDI приложении должно отработаться вот это(ниже) по закрытию. Не хочется переписывать это 20 раз (хоть и 2 строки, а может и 22 нужно будет...), для каждой формы, если есть возможность сделать 1 раз.Action := caFree;
fstandart:=nil;
← →
Layner © (2005-06-16 10:39) [18]Где fstandart - имя закрываемой формы...
← →
ЮЮ © (2005-06-16 10:40) [19]var
fstandart: Tfstandart;
Эта строчка для MDIChild форм - источник проблем. Убери её и не надо будет обNilять. А указатели на все MDIChild-ы есть у главной формы, так что fstandart - лишнее.
← →
Layner © (2005-06-16 10:48) [20]
[19] ЮЮ © (16.06.05 10:40)
А как тогда ее открывать? Т.е как к ней обращатся из др. модулей?procedure Tfmain.N2Click(Sender: TObject);
begin
if not assigned (fstandart) then Application.CreateForm(Tfstandart, fstandart);
fstandart.Show;
end;
← →
ЮЮ © (2005-06-16 11:00) [21]procedure Tfmain.N2Click(Sender: TObject);
var
frm: TForm;
begin
frm := Tfstandart.Create(Application);
frm.Show;
end;
если перед Show не нужны никакие "настойки" frm, то можно обойтись и без переменной:
Tfstandart.Create(Application).Show;
Страницы: 1 вся ветка
Текущий архив: 2005.07.11;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.056 c