Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.04;
Скачать: CL | DM;

Вниз

Оптимизация кода   Найти похожие ветки 

 
DmitryNekl ©   (2004-03-15 19:04) [0]

Доброе время суток.

Проблема такая. Есть главная форма приложения и несколько дочерних (т.е. классов дочерних форм), в которых выполняются однотипные операции, различающиеся параметрами. Например, у одной дочерней формы при обработке события onCreate tag:=15, а у другой tag:=17, и т.д. - и куча процедур с такими незначительными отличиями.

Как бы облегчить себе жизнь и не переписывать все это заново, а написать только один раз, и вызывать с разными параметрами?

Чувствую, что нужно использовать наследование, но... опыта у меня ООП совсем нет. Если можно - маленький и примитивный пример на тему, как это делается...

Заранее спасибо.


 
Плохиш   (2004-03-15 19:18) [1]


> опыта у меня ООП совсем нет

... и денег на книжку тоже ...

А пример вот он:

TForm1 = class(TForm)
end;

TForm2 = class(TForm1)
end;

...


 
DmitryNekl ©   (2004-03-15 19:26) [2]

А параметры тут куда передавать? Если можно - пример с тэгами.
Насколько я понимаю, должна быть форма, от которой наслудцются все дочерние. Т.е.:

TParentForm = class(TForm)
 procedure FormCreate(Sender: TObject);
end;

А потом
TForm1 = class(TParentForm) и
TForm2 = class(TParentForm),
и нужно как-то вызвать FormCreate от предка, причем в процедуру в качестве параметра нужно умудриться передать tag. Вот это как делается?


 
Плохиш   (2004-03-15 19:35) [3]

property, override, constructor + F1/Help


 
DmitryNekl ©   (2004-03-16 08:52) [4]

Господа!

Может быть, у кого-нибудь еще найдется практический пример?


 
Алхимик ©   (2004-03-16 08:54) [5]

[Папка установки Delphi]\Demos
+Толковая книжка по ООП
+Yandex найдется всё


 
KSergey ©   (2004-03-16 09:14) [6]

Технически наследование в принципе делается просто в дельфи: вы создали форму, после в меню Файл->New->вкладка с именем проекта - и там все формы. При создании новой форме на основе там выбранной новая как раз от выбранной и пронаследуется.

осталось решиться что со всем этим вы будете делать...

Изначальный вопрос про tag мне не совсем понятен: а может просто сделать некую внешнюю процедурку, кута передавать параметром нужное значение tag и, наверное, ссылку собственно на форму? Может это решит проблему?

unit CommUnit;

interface
uses Forms;

procedure OnCreateForm (Frm: TForm; ATag: Integer);

inmplementation

procedure OnCreateForm (Frm: TForm; ATag: Integer);
begin
 with Frm do
 begin
   // какие-то действия
   Tag := ATag;
   // какие-то действия
 end;
end;


В модуле с формой:

uses ...., CommUnit;

porcedure TForm1.FormCreate(..);
begin
 OnCreateForm (Self, 15);
end;


 
DmitryNekl ©   (2004-03-16 09:27) [7]

Спасибо огромное! Все понятно вроде как... :)

Наследование и впрямь ни к чему... хотя разобраться все равно интересно :)

Вопрос про tag - он и не про tag вовсе на самом деле... там хитро все. Просто есть куча однотипных процедур в разных формах, хочется оптимизировать, а tag - это наиболее простой пример...


 
DmitryNekl ©   (2004-03-16 17:17) [8]

2 KSergey:

Еще один маленький вопрос... как внутри OnCreateForm узнать, к какому классу принадлежит Frm? Можно имя класса передавать в качестве параметра, но это несолидно как-то...


 
Плохиш   (2004-03-16 17:30) [9]

ClassName

Но лучше использовать, как написано в справке, операторы is и as


 
DmitryNekl ©   (2004-03-16 18:46) [10]

Дык если передается форма как TForm, разве is и as определит ее как TForm1???


 
Плохиш   (2004-03-16 18:50) [11]


> DmitryNekl ©   (16.03.04 18:46) [10]
> Дык если передается форма как TForm, разве is и as определит
> ее как TForm1???

Что денег на книжку так и не нашёл?


 
KSergey ©   (2004-03-16 18:57) [12]

> DmitryNekl ©   (16.03.04 18:46) [10]
> Дык если передается форма как TForm, разве is и as определит
> ее как TForm1???

Разумеется. А иначе смысла бы в них не было: и так понятно, что имеем TForm, однако, возможно, и наследника TForm.



Страницы: 1 вся ветка

Текущий архив: 2004.04.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
4-1074605453
Bers01
2004-01-20 16:30
2004.04.04
Перетаскивание окна(формы)


3-1078214709
Laymer
2004-03-02 11:05
2004.04.04
Memo - поле


11-1059449741
Юля
2003-07-29 07:35
2004.04.04
TaskBar


1-1079465653
Destroyer
2004-03-16 22:34
2004.04.04
Поиск Edit-а на форме


1-1079085420
ORMADA
2004-03-12 12:57
2004.04.04
Синхронизация 2-х Memo