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

Вниз

procedure TCustomImageList.DefineProperties(Filer: TFiler);   Найти похожие ветки 

 
GuAV ©   (2005-03-08 15:39) [0]

Можно ли запретить сохранять Bitmap ?
И если да. то как ?


 
Набережных С. ©   (2005-03-08 16:29) [1]

Подробней?


 
Юрий Зотов ©   (2005-03-08 17:20) [2]

Возможно, "легальный" способ - переобъявить то же самое свойство с параметрами ("Bitmap", nil, nil, False). Но не уверен, не пробовал.

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

Еще возможно, что решение лучше искать не в DefineProperties, а где-то еще. Надо полазить по коду VCL.


 
Набережных С. ©   (2005-03-08 17:28) [3]

Вероятно, TCustomImageList не сам по себе используется, а в составе чего-то? Имхо, оттуда и надо начинать рыть.


 
GuAV ©   (2005-03-08 21:09) [4]

>Юрий Зотов ©   (08.03.05 17:20) [2]

> Возможно, "легальный" способ - переобъявить то же
> самое свойство с параметрами ("Bitmap", nil, nil,
> False). Но не уверен, не пробовал.


Проверил.
Нет. Переобъявить таким образов св-во не получится.


>Зато точно сработает "хакерский" способ - вызвать
>унаследованный метод "деда", не вызывая
>унаследованного метода "отца".


Как ?

>Набережных С. ©   (08.03.05 16:29) [1]

> Подробней?


наследник TCustomImageList сам заполняется изображениями после создания при изменении размеров и добавленых свойств.

Проблема в том что при сохранении Bitmap он загружается уже после создания и если ни одно из published свойств влияющих на изображения не изменено, то в нём остаётся Design-time версия изображений.

Уже понял что если компонент читается из dfm, то надо создавать изображения после прочтения. Как это грамотно реализовать, при условии что компонент не обязательно создаётся в дезайнтайме ?

Кроме того, хотелось бы всё же избавится от хранения Bitmap, всё равно от него никакой пользы.


 
Набережных С. ©   (2005-03-08 21:37) [5]


> GuAV ©   (08.03.05 21:09) [4]

Код покажи. Хотя бы объявления, в той части которая касается вопроса, с краткими пояснениями. А то я опять ничего не понял. Собственно, за вызов DefineProperties листа отвечает его владелец. Может просто объявить это свойство с STORED FALSE?


 
GuAV ©   (2005-03-08 22:24) [6]

Вопрос [0] снимается.
Оказывается методы ReadData и WriteData виртуальные и ни на что кроме DefineProperties не влияют и их можно заменить пустыми. Как я смотрел .. ? :(

всем спасибо.


 
Юрий Зотов ©   (2005-03-21 00:27) [7]

> GuAV ©   (08.03.05 21:09) [4]

>>Зато точно сработает "хакерский" способ - вызвать
>>унаследованный метод "деда", не вызывая
>>унаследованного метода "отца".

> Как ?

Очень просто, если речь идет о виртуальном методе (а о нем она и идет).

Первые 4 байта любого объекта содержат ссылку на его класс (то есть, на VMT). Подменяем их содержимое нужным, вызываем метод, потом все восстанавливаем обратно. И вся наука.

Причем заметьте, что так можно вызвать виртуальный метод любого предка, и даже не только предка.


 
GuAV ©   (2005-03-21 21:23) [8]

>Юрий Зотов ©   (21.03.05 0:27) [7]


> Причем заметьте, что так можно вызвать виртуальный
> метод любого предка, и даже не только предка.


И даже, оказывается не толко виртуальный.

PPointer(Self)^ := ClassParent; - работает и для динамических методов.

Спасибо.


 
jack128 ©   (2005-03-26 00:33) [9]

GuAV ©   (21.03.05 21:23) [8]
PPointer(Self)^ := ClassParent;


очень опасный способ, череватый очень трудно вылавливаемыми глюками, ИМХО



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

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

Наверх




Память: 0.47 MB
Время: 0.031 c
6-1123018178
vitorg
2005-08-03 01:29
2005.11.20
Уникальность входящего dialup


2-1130424110
zaN0za
2005-10-27 18:41
2005.11.20
Вопрос по потокам


2-1130853359
3JIO
2005-11-01 16:55
2005.11.20
Базы


1-1130314479
gVisio
2005-10-26 12:14
2005.11.20
TFrame в Dll


6-1122990135
Dyakon_Frost
2005-08-02 17:42
2005.11.20
Обработка интернет страницы!





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