+97
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
TPicture = class(TInterfacedPersistent, IStreamPersist)
....
property Bitmap: TBitmap read GetBitmap write SetBitmap;
property Icon: TIcon read GetIcon write SetIcon;
property Metafile: TMetafile read GetMetafile write SetMetafile;
....
procedure TPicture.ForceType(GraphicType: TGraphicClass);
begin
if not (Graphic is GraphicType) then
begin
FGraphic.Free; // 0_0 йобаный стыд!!
FGraphic := nil;
FGraphic := GraphicType.Create;
FGraphic.OnChange := Changed;
FGraphic.OnProgress := Progress;
Changed(Self);
end;
end;
function TPicture.GetBitmap: TBitmap;
begin
ForceType(TBitmap);
Result := TBitmap(Graphic);
end;
function TPicture.GetIcon: TIcon;
begin
ForceType(TIcon);
Result := TIcon(Graphic);
end;
function TPicture.GetMetafile: TMetafile;
begin
ForceType(TMetafile);
Result := TMetafile(Graphic);
end;
Взято из "ДНК", т.е. VCL от Delphi7. unit graphics.pas
Методы get-аксессоры свойств Bitmap, Icon и Metafile вызывают ForceType(). Шутка в том, что если картинка у вас другого типа - то она будет ВНЕЗАПНО выпилена насовсем, стоит только прочитать(sic!) не то свойство объекта класса TPicture.
Наступил сам на эти грабли и потратил драгоценный, час пока понял в чем дело.
Запостил:
StriderMan,
13 Января 2011
Нет, она не будет выпилена. Она будет выпилена и создана заново.
В ВЦЛ многое так: чтобы поменять свойство чего-либо, надо это что-либо уничтожить, а потом создать заново с новым значением свойства. Даже чтобы поменять пустяковое свойство.
Поэтому в ВЦЛ+ОпенГЛ постоянно ДЦ теряется: форма всё время новая создаётся.
Короче, я на ВинАПИ перешёл, обмазываюсь винапишными структурами, и своими говноструктурами тоже обмазываюсь.
Вот пример:
закачиваем, например, иконку:
picture.icon.LoadFromFile(....)
....делаем что-то...
if picture.Bitmap..... //дальше можно не продолжать, иконки больше нет
> Delphi7
альзо, слоупок детектед
>>слоупок детектед
у меня еще есть D3! Очень православная вещь! алсо RAD2007 и RAD2009 паралелльно. Разные проекты видите ли поддерживать приходится
Заглянул ради интереса в graphics от 2009. Нихуя не изменилось. Зато с блэкджеком и шлюхами
а ворочать миллионы пикселов в при вызове геттера это вообще сказочная хуйня.
портабельность кстати внушает, если приходится замшелую версию из 1997 года держать
> и RAD2009
точно, слоупок :-D
>>если приходится замшелую версию из 1997 года держать
каприз босса. Он на D3 в молодости этот проект сбацал. Теперь изредка отвлекается от директорства чтобы покодить для разминки надмозга. Кстати проект продается до сих пор неплохо, как "стабильная, проверенная годами версия"
>>точно, слоупок :-D
Я кстати им не пользуюсь почти. тормознутый он какой-то. Основной рабочий проект на D7. Вызывает конечно регулярное желание "взять и уебать" но что делать? полмиллиона строк...
Если юзеру надо, пусть сам уничтожает, или к типу нужному кастует. Оставлять такую медвежью услугу можно только при хорошо бросающемся в глаза комментарии. Лучше прямо в названии свойств)
А если типов больше будет? "Всё хуйня Серёжа давай заново"
вообще можно с шаблоном очень красиво написать.
If Bitmap is referenced when the picture contains a Metafile or Icon graphic, the graphic won't be converted. Instead, the original contents of the picture are discarded and Bitmap returns a new, blank bitmap.
Ваще проблема в самом устройстве TPicture. Я уже писал, нахуй не нужны эти проперти BitMap, Icon, Metafile. Это костыли для убогих
а вообще хер знает зачем так сделали
может какой сакральный смысл (кусок его: см. TImage.Canvas)