Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
ВнизОптимизация кода Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.051 c