Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.51 MB
Время: 0.043 c
14-1118050027
diwww
2005-06-06 13:27
2005.07.11
отследить, куда пишутся временные файлы


3-1117189673
vader
2005-05-27 14:27
2005.07.11
SQL-запрос ОСТАТОК ТОВАРОВ НА СКЛАДЕ


14-1118325533
vecna
2005-06-09 17:58
2005.07.11
А кто еще ездеет без дневного/ближнего света? =)


14-1118596069
le[x]
2005-06-12 21:07
2005.07.11
Помогите с курсовой


6-1110566218
Arazel
2005-03-11 21:36
2005.07.11
Передача файлов удаленна через сокет ВОЗМОЖНО ЛИ ЭТО?