Главная страница
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.49 MB
Время: 0.04 c
14-1130311611
Sandman29
2005-10-26 11:26
2005.11.20
О возможности повторения в России сингапурского чуда


14-1130411016
TButton
2005-10-27 15:03
2005.11.20
влияет ли визуальный стиль вндовс ХР на загрузку процессора


3-1128493285
Juice
2005-10-05 10:21
2005.11.20
Проблемка с удалением записей из набора данных


10-1107963374
Grant
2005-02-09 18:36
2005.11.20
RegisterTypeLib


1-1130431403
Криворукий
2005-10-27 20:43
2005.11.20
освобождаелся ли память ...