![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как автоматизировать процесс создания однотипных форм [D7]
Layner © (2005-06-16 08:35:00)D7, требуется создать ~20 MDIChild форм, с одинаковыми OnClose обработчиками, например у всех надо прописать
procedure Tft.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
ft:=nil;
end;
И ещё пару свойств.
Это конечно можно сделать как, сделать 1 форму как надо, потом копировать её DFM и PAS файл под другим названием, потом автоматически менять название форм в блокноте... Но может быть есть решение проще?
ЮЮ (2005-06-16 11:00:00) [1]procedure Tfmain.N2Click(Sender: TObject);
var
frm: TForm;
begin
frm := Tfstandart.Create(Application);
frm.Show;
end;
если перед Show не нужны никакие "настойки" frm, то можно обойтись и без переменной:
Tfstandart.Create(Application).Show;
Layner (2005-06-16 10:48:00) [2]
[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 10:40:00) [3]var
fstandart: Tfstandart;
Эта строчка для MDIChild форм - источник проблем. Убери её и не надо будет обNilять. А указатели на все MDIChild-ы есть у главной формы, так что fstandart - лишнее.
Layner (2005-06-16 10:39:00) [4]Где fstandart - имя закрываемой формы...
Layner (2005-06-16 10:39:00) [5]А че ты хочешь написать там? Какие операции должны выполнятся по закрытии формы?
В каждой дочерней форме в MDI приложении должно отработаться вот это(ниже) по закрытию. Не хочется переписывать это 20 раз (хоть и 2 строки, а может и 22 нужно будет...), для каждой формы, если есть возможность сделать 1 раз.
Action := caFree;
fstandart:=nil;
КаПиБаРа (2005-06-16 10:33:00) [6]Layner © (16.06.05 10:29) [15]
Тогда что в Tfstandart на OnClose написать?
А че ты хочешь написать там? Какие операции должны выполнятся по закрытии формы?
Layner (2005-06-16 10:29:00) [7]
[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.
msguns (2005-06-16 10:20:00) [8]>-=XP=- © (16.06.05 10:09) [10]
Зачем для наследования форм в рамках одного проекта использовать репозиторий ?
-=XP=- (2005-06-16 10:14:00) [9]Вопрос, как в fstandart написать OnClose для всех?
Надо всех унаследоватьот Tfstandart.
-=XP=- (2005-06-16 10:12:00) [10](Sender AS TForm):=nil;
(Sender AS Tfstandart):=nil;
Шикарно... :)
Layner (2005-06-16 10:11:00) [11]Есть шаблон формы, как тут был совет, у этого шаблона есть обработчик OnClose, хотелось бы чтобы по этому OnClose обрабатывалась любая форма, унаследованная от шаблона - fstandart.
Вопрос, как в fstandart написать OnClose для всех? :)
-=XP=- (2005-06-16 10:09:00) [12]1. Написать базовую форму.
2. Правой кнопкой на форме - Add to repository. Заполнить регистрационный диалог. Ну, и там все такое...
3. Создать новый проект (это для примера, вообще можно и в старом).
4. File-New-Other-<Закладка репозитория, которую указали в п. 2>
5. Выбрать Вашу добавленную форму. Не забыть поставить опцию создания новой формы (внизу диалога): Copy, Inherit, Use.
КаПиБаРа (2005-06-16 10:01:00) [13]Layner © (16.06.05 9:59) [8]
Ты чего хочешь сделать?
Layner (2005-06-16 09:59:00) [14]
КаПиБаРа © (16.06.05 09:56)
Так даже не компилируется :(
КаПиБаРа (2005-06-16 09:56:00) [15](Sender AS Tfstandart):=nil;
Layner (2005-06-16 09:49:00) [16]Мда.. так то оно хорошо, только как заменить код в "опорной форме", что бы он корректно отрабатывал по закрытию другой формы?
procedure Tfstandart.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
(Sender AS TForm):=nil; //???
end;
Layner (2005-06-16 09:03:00) [17]Понятно теперь, спасибо! Сделаю опорную форму, от нее и буду наследовать.
КаПиБаРа (2005-06-16 08:46:00) [18]File - New - Other - Вкладка с названием твоего проекта - Нужная форма
Kerk (2005-06-16 08:45:00) [19]Layner © (16.06.05 8:40) [2]
Полазь в диалоге выбора чего создавать. Там можно выбирать какую форму наследовать.
Layner (2005-06-16 08:40:00) [20]Kerk © (16.06.05 08:37)
А как форму унаследовать? Я сейчас добавляю в проект File-New-Form, и потом эту Form под MDI доделываю. С другим элементом проблем нет, написать потомка со своими параметрами, а как с формой?