Форум: "Основная";
Текущий архив: 2004.01.20;
Скачать: [xml.tar.bz2];
ВнизПерекрыть 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c