Главная страница
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.079 c
2-1131170308
balepa
2005-11-05 08:58
2005.11.20
Как прочитать *.bin


2-1129390436
OSokin
2005-10-15 19:33
2005.11.20
Сортировка по бд


2-1131216750
Groof
2005-11-05 21:52
2005.11.20
Помоги, люди добрые...


14-1130330554
Вопрошающий
2005-10-26 16:42
2005.11.20
задачка


14-1130658164
SPeller
2005-10-30 10:42
2005.11.20
Бред?