![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Зачем такое объявление класса?
Iconka © (2004-09-29 17:21:00)Смотрю исходники RxLib, вижу такую строчку в файле RxGrids:
type
TWinControlCracker = class(TWinControl);
Зачем такое?
KSergey (2004-09-30 12:14:00) [1]Ну если это принципиально - факт ;)
Sandman25 (2004-09-30 12:08:00) [2][25] KSergey © (30.09.04 12:01)
Я видел, как такой прием использовался с гридами в таком контексте, когда напрашивался наследник. Теперь факт? :)
KSergey (2004-09-30 12:01:00) [3]> [24] Sandman25 © (30.09.04 11:44)
> Обычно такой приемчик используется с гридами
Не факт
Sandman25 (2004-09-30 11:44:00) [4][23] KSergey © (30.09.04 11:09)
Обычно такой приемчик используется с гридами, когда написание полнофункционального наследника было бы лучше.
В данном случае с WinControlCracker Вы правы, компонент в палитру не добавить :)
KSergey (2004-09-30 11:09:00) [5]Ну раз уж пошла перепись - то я T..Friend ;)
Впрочем как не назови - один фиг ;)
> [6] Sandman25 © (29.09.04 17:57)
> Это не засады ООП, а лень разработчиков приложений, которым
> неохота писать нормального наследника и устанавливать его
> в палитру компонент.
При чем тут лень? Просто в таких случаях и нафиг не надо совершенно наследника полноценного создавать, да еще и в палитру - это уж совсем что-то странное вы батенька брякнули...
Гаврила (2004-09-30 02:27:00) [6]
> [20] jack128 © (30.09.04 01:52)
да слово кривое какое-то :-)
я такие классы называю типа
TReaderAccess = class(TReader);
GuAV (2004-09-30 02:25:00) [7]TXControl - e Xpose Control's properties :)
jack128 (2004-09-30 01:52:00) [8]Гаврила © (30.09.04 1:47) [19]
Почему?? Я подобные классы вот так называю:
type
TReaderCrack = class(TReader);
TWriterCrack = class(TWriter);
TPersistentCrack = class(TPersistent);
Гаврила (2004-09-30 01:47:00) [9]
> TWinControlCracker
Дурное какое название, однако.... не так надо называть
jack128 (2004-09-30 01:16:00) [10]jack128 © (30.09.04 1:09) [17]
olookin © (29.09.04 23:49) [16]
нет. то что имеешь виду делается так:
TSameClass = class; // отметь - мы не указываем предка!! Только говорим, что есть такой класс TSameClass, но про него (кроме того, что это класс) еще ничего не известно.
TSameOtherClass = class(TObject)
FObj: TSameClass;
end;
TSameClass = class(TWinControl); - а вот тут мы уже объявляем класс, добавляем новые методы, если нужно и тд..
сорри
jack128 (2004-09-30 01:09:00) [11]olookin © (29.09.04 23:49) [16]
нет. то что имеешь виду длается так:
TSameClass = class; // отметь - мы не указываем предка!! Только говорил, что есть такое класс TSameClass, но про него (кроме того, что это класс) еще ничего не известно.
TSameOtherClass = class(TObject)
FObj: TSameClass;
end;
TSameClass = class(TWinControl); - а вот тут мы уже объявляем класс, добовляем новые методы, если нужно и тд..
olookin (2004-09-29 23:49:00) [12]Такя прав?
Cobalt (2004-09-29 23:04:00) [13]Хм... действительно есть:
type
TWinControlCracker = class(TWinControl);
procedure TRxInplaceEdit.KeyDown(var Key: Word; Shift: TShiftState);
begin
if (EditStyle = ieEllipsis) and (Key = VK_RETURN) and (Shift = [ssCtrl]) then
begin
TRxDrawGrid(Grid).EditButtonClick;
KillMessage(Handle, WM_CHAR);
end
else inherited KeyDown(Key, Shift);
end;
И нигдебольше не используется...
jack128 (2004-09-29 18:23:00) [14]Iconka © (29.09.04 17:36) [3]
Дальше в модуле TWinControlCracker не встречается. Это его единственное упоминание.
Очень маловероятно. Объявление кряк-класса нужно для вот таких манипуляций:
unit Forms;
...
type
TMenuItemAccess = class(TMenuItem);
procedure TCustomForm.WndProc(var Message: TMessage);
..
begin
...
TMenuItemAccess(MenuItem).MeasureItem(Canvas,
Integer(itemWidth), Integer(itemHeight));
...
end;
end;
Iconka (2004-09-29 18:07:00) [15]
> Внук © (29.09.04 18:03) [12][Ответить]
Вы правы...
:)
Внук (2004-09-29 18:03:00) [16]Ой. А я всегда получал, потому что не знал, что нельзя. А если в том же модуле, я, извиняюсь, и к private получу.
Iconka (2004-09-29 18:00:00) [17]По теории :)
К protected можно получить если наследник в том же модуле находится.
Iconka (2004-09-29 18:00:00) [18]По теории :)
К protected можно получить если наследник в том же модуле находится.
Внук (2004-09-29 17:59:00) [19]Почему не получишь?
Внук (2004-09-29 17:57:00) [20]Простым образом. Наследник имеет доступ к защищенным методам предка. Вот этого наследника и создали.