Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как автоматизировать процесс создания однотипных форм [D7]


Страницы:   1 2

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 доделываю. С другим элементом проблем нет, написать потомка со своими параметрами, а как с формой?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо