Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TForm [D6, Win2k]


Alibaba ©   (2004-08-19 06:18:00) 

Привет.

Есть проект.
В нем три формы: frmA, frmB, frmC: TForm.
В каждой форме в разделе public описал переменную
ShiftLeft: integer;

Алгоритм работы с переменной одинаков для всех форм.

Поэтому, пишу процедуру:
procedure CalkShift(frm: TForm; 'дополнительные параметры');
begin
frm.ShiftLeft:='вычисления';
end;

Хочу построить работу таким образом:
CalkShift(frmA,'дополнительные параметры A');
CalkShift(frmB,'дополнительные параметры B');
CalkShift(frmC,'дополнительные параметры C');

Компилятор мне говорит:
Undeclared identifier: 'ShiftLeft'

Совершенно с ним согласен.
Класс TForm не имеет свойства ShiftLeft.

Как решить этот вопрос?

Описывать
TMyForm = class(TForm)
public
 ShiftLeft: integer;
end;

не хочется...


Партизан   (2004-08-20 09:14:00) [1]

А нужны ли вообще тебе 3 переменные? Если алгоритм одинаков для всех 3-х форм и тебе не хочется пихать данные в Тag, опиши в одном из юнитов (напр. unit1) эту переменную, а потом в имплементэйшене других юнитов делай uses unit1. А если одна переменная не подходит - лучше всё-таки Tag.


Думкин   (2004-08-20 09:14:00) [2]

> [4] Alibaba ©   (20.08.04 04:09)
> Пожалуй, вариант с тремя переменными самый простой...
> Его и выберу.

Не так. Я бы таки остановился на
> [3] TUser ©   (19.08.04 06:42)

Ничто не мешает тебе потом вместо
TfMain = class(TForm)
сделать
TfMain = class(TGeneralForm)
где
TGeneralForm = class(TForm) c нужной доп функциональностью.


Digitman   (2004-08-20 09:02:00) [3]


> Alibaba ©   (20.08.04 04:09) [4]
> Пожалуй, вариант с тремя переменными самый простой...
> Его и выберу.


TForm есть наследник TComponent

TComponent имеет публичное св-во Tag, куда можно записать произвольную инф-цию

так что городить огород с доп.переменными в самом простоми случае, наверно, нет резона, при том что св-во Tag прямо под рукой


Alibaba   (2004-08-20 04:09:00) [4]

Пожалуй, вариант с тремя переменными самый простой...
Его и выберу.


TUser   (2004-08-19 06:42:00) [5]

Все 3 формы отнаследовать от кого-то, кто наследуется от TForm


Skyle   (2004-08-19 06:41:00) [6]

1. Сделай CalcShift функцией, возвращающей нужное значение. В этом случае возможно удасться избавиться от первого параметра.

2. Сделай базовый класс формы с этим свойством, остальные наследуй от неё.

3. Опиши и реализуй во всех формах какой-нибудь интерфейс и передавай его как параметр в процедуру вместо формы.


QuasiLamo   (2004-08-19 06:37:00) [7]

завести три переменные, смотреть какая форма вызывает, и действовать по обстановке а чем собсно не нравится описать переменную для класса? и необязательно ее в паблик пихать, можно просто после TMyForm = class(TForm) дописать shiftleft:integer;


Наверх

Титульная страница Поиск, карта сайта Написать письмо