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

Вниз

Перекрыть stored   Найти похожие ветки 

 
Sandman25 ©   (2004-01-03 18:05) [0]

Доброе время суток. Есть ли способ перекрыть только stored?

В TBitBtn есть property Glyph: TBitmap read GetGlyph write SetGlyph stored IsCustom;
причем GetGlyph, SetGlyph и IsCustom описаны в разделе private.
Я написал наследника с
property Glyph: TBitmap read GetGlyph write SetGlyph stored IsStoredGlyph;

function TImageBtn.GetGlyph: TBitmap;
begin
Result := TBitBtn(Self).Glyph;
end;

procedure TImageBtn.SetGlyph(const Value: TBitmap);
begin
TBitBtn(Self).Glyph := Value;
end;

и самое главное, ради чего все это затевалось:
function TImageBtn.IsStoredGlyph: Boolean;
begin
Result := (Kind = bkCustom) and not DisplayActionShortCut;
end;

Существует ли способ перекрыть только stored секцию?


 
default ©   (2004-01-03 19:00) [1]

"Существует ли способ перекрыть только stored секцию?"
а зачем?ради интереса?
только, наверно, помещая по адресу метода IsCustom свой код,
как получить адрес IsCustom?из окна CPU, делаешь присвоение
Glyph-у открываешь окно CPU, заходишь в этот метод, там ниже будет
код IsCustom, таким образом ты получишь его адрес, он же может меняться!?
тогда попробуй поищи какой-нить public метод(его адрес можно получить) и уже
отсчитывая от него нужное количество байт(ведь расположение методов в памяти
чётко определено!), заранее определённое(что следует из предыдущей скобки
при определённом выравнивании кода), можно получать адрес IsCustom уже более
уверено. Оно тебе надо?канитель это...


 
Sandman25 ©   (2004-01-04 10:30) [2]

[1] default © (03.01.04 19:00)

Жаль. Просто мне не нравится, что приходится "переопределять" GetGlyph и SetGlyph, тем более таким странным образом. Спасибо за ответ!


 
default ©   (2004-01-04 12:54) [3]

Sandman25 © (04.01.04 10:30) [2]
сделать-то можно, только время и сил жалко будет, если бы можно было обобщить это решение на все классы, а так смысла нет


 
Sandman25 ©   (2004-01-04 13:05) [4]

[3] default © (04.01.04 12:54)

Можно еще вообще перетащить все из TBitBtn и наследоваться от TButtonControl, но тогда не будет нормальной переносимости под другую версию Delphi. Спасибо. Оставлю уже, как есть.


 
Sandman25 ©   (2004-01-06 11:39) [5]

Решил перечитать Object Pascal Langage Guide в последний день работы перед праздниками...
Надо было всего-то объявить property Glyph stored IsStoredGlyph...
Позор на мои седины...


 
Юрий Зотов ©   (2004-01-06 12:04) [6]

> Sandman25 © (06.01.04 11:39) [5]

Совершенно верно. Написав read и write, Вы объявили новое свойство, а не модифицировали старое. Поэтому надо просто выкинуть read и write (и, соответственно, методы Get и Set тоже).


 
Sandman25 ©   (2004-01-06 12:31) [7]

[6] Юрий Зотов © (06.01.04 12:04)

Не совсем так. Я сначала пытался не писать read и write, но Delphi их требовал (read expected).
Проблема была в том, что я объявлял

property Glyph: TBitmap stored IsStoredGlyph

а надо было не указывать тип и писать просто

property Glyph stored IsStoredGlyph
и тогда компилятор "понимает", что я переопределяю старое свойство.
Немного нелогично, хоть именно так и описано в Object Pascal Language Guide


 
Alekc   (2004-01-07 14:36) [8]


> function TImageBtn.GetGlyph: TBitmap;
> begin
> Result := TBitBtn(Self).Glyph;
> end;
>
> procedure TImageBtn.SetGlyph(const Value: TBitmap);
> begin
> TBitBtn(Self).Glyph := Value;
> end;


Просто на будущее...


function TImageBtn.GetGlyph: TBitmap;
begin
Result := Inherited Glyph;
end;

procedure TImageBtn.SetGlyph(const Value: TBitmap);
begin
Inherited Glyph := Value;
end;


 
erik ©   (2004-01-07 16:25) [9]

Просто на будущее :)
Неподню директиву, но пожно просто описать сою процедуру а после "воспользуйся SetGlyph;"
Возможно не в тему, но если уж все впоминать. Мне никогда нетребовалась. Возможно это я с описанием интерфейсов спутал.



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

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

Наверх




Память: 0.49 MB
Время: 0.027 c
1-63127
Int64
2004-01-07 17:51
2004.01.20
Как узнать положение курсора в TRichEdit


1-63102
EgorT
2004-01-08 12:24
2004.01.20
Как при помощи Delphi записать формулу в Excel


3-63007
DeniM
2003-12-23 10:36
2004.01.20
А как правильно делать ручную репликацию? (+)


1-63246
Вованчик
2004-01-09 09:38
2004.01.20
Hint


1-63085
MikeZ
2004-01-06 17:34
2004.01.20
Дерево компонентов