Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.47 MB
Время: 0.011 c
3-63025
eds
2003-12-22 11:34
2004.01.20
Возможно ли сделать доступ к БД в формате DBF многопользовательск


9-62954
c4
2003-06-24 12:26
2004.01.20
Как проверить столкновение полигона и сферы?


11-63045
=Sniper=
2003-05-04 12:32
2004.01.20
Editbox и Combobox


14-63361
Babay
2003-12-29 12:05
2004.01.20
С НОВЫМ ГОДОМ ДОРОГИЕ ТОВАРИЩИ !!!!!


1-63118
diMAN
2004-01-06 15:11
2004.01.20
Преобразование произвольной строки в TDateTime





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