Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1079100141
Prohodil Mimo
2004-03-12 17:02
2004.04.04
Как сделать чтобы у TPanel был Scroll ?


7-1074459243
Thor
2004-01-18 23:54
2004.04.04
переделка схемы для порта.


4-1075131178
Артём
2004-01-26 18:32
2004.04.04
Инересная проблема Помогите решить


1-1079255371
Hlado
2004-03-14 12:09
2004.04.04
Вставить из файла в TMemo


3-1078152683
Rule
2004-03-01 17:51
2004.04.04
Помогите разобратся чего я не так делаю при создании Мидас прилож





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский