Форум: "Компоненты";
Текущий архив: 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.048 c