Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];

Вниз

Как автоматизировать процесс создания однотипных форм   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.043 c
14-1118254778
digger
2005-06-08 22:19
2005.07.11
Обрезали UTP кабель :-(


6-1112869182
_Alexander_
2005-04-07 14:19
2005.07.11
Сообщение через сокет передается не полностью


8-1103872182
WondeRu
2004-12-24 10:09
2005.07.11
FFTW.dll - кто нибудь пользовался?


3-1116859672
Dimedrol
2005-05-23 18:47
2005.07.11
Как выключить Trusted Connection ?


1-1119592706
dea
2005-06-24 09:58
2005.07.11
форма в dll





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский