Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.032 c
2-1130578543
Agi
2005-10-29 13:35
2005.11.20
В чем дело?


3-1128587181
msguns
2005-10-06 12:26
2005.11.20
Access. JOIN более 2 таблиц


6-1123497734
ronyn
2005-08-08 14:42
2005.11.20
Как синхронизировать страницу?


14-1128758475
Kerk
2005-10-08 12:01
2005.11.20
[Порка] WordLines 2 Final


2-1130849562
BFG9k
2005-11-01 15:52
2005.11.20
Закрытие программы в OnCreate





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