+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
Lure Of Chaos 13.01.2011 13:11 # 0
TarasB 13.01.2011 15:54 # 0
Нет, она не будет выпилена. Она будет выпилена и создана заново.
В ВЦЛ многое так: чтобы поменять свойство чего-либо, надо это что-либо уничтожить, а потом создать заново с новым значением свойства. Даже чтобы поменять пустяковое свойство.
Поэтому в ВЦЛ+ОпенГЛ постоянно ДЦ теряется: форма всё время новая создаётся.
Короче, я на ВинАПИ перешёл, обмазываюсь винапишными структурами, и своими говноструктурами тоже обмазываюсь.
StriderMan 13.01.2011 16:09 # +1
Вот пример:
закачиваем, например, иконку:
picture.icon.LoadFromFile(....)
....делаем что-то...
if picture.Bitmap..... //дальше можно не продолжать, иконки больше нет
TarasB 13.01.2011 16:17 # 0
bugmenot 13.01.2011 21:58 # +1
> Delphi7
альзо, слоупок детектед
StriderMan 13.01.2011 23:24 # 0
>>слоупок детектед
у меня еще есть D3! Очень православная вещь! алсо RAD2007 и RAD2009 паралелльно. Разные проекты видите ли поддерживать приходится
Заглянул ради интереса в graphics от 2009. Нихуя не изменилось. Зато с блэкджеком и шлюхами
bugmenot 14.01.2011 00:00 # 0
а ворочать миллионы пикселов в при вызове геттера это вообще сказочная хуйня.
портабельность кстати внушает, если приходится замшелую версию из 1997 года держать
> и RAD2009
точно, слоупок :-D
StriderMan 14.01.2011 00:10 # 0
>>если приходится замшелую версию из 1997 года держать
каприз босса. Он на D3 в молодости этот проект сбацал. Теперь изредка отвлекается от директорства чтобы покодить для разминки надмозга. Кстати проект продается до сих пор неплохо, как "стабильная, проверенная годами версия"
>>точно, слоупок :-D
Я кстати им не пользуюсь почти. тормознутый он какой-то. Основной рабочий проект на D7. Вызывает конечно регулярное желание "взять и уебать" но что делать? полмиллиона строк...
TyVin 31.01.2011 16:07 # +1
Если юзеру надо, пусть сам уничтожает, или к типу нужному кастует. Оставлять такую медвежью услугу можно только при хорошо бросающемся в глаза комментарии. Лучше прямо в названии свойств)
А если типов больше будет? "Всё хуйня Серёжа давай заново"
вообще можно с шаблоном очень красиво написать.
TyVin 31.01.2011 16:08 # 0
bugmenot 31.01.2011 16:46 # 0
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.
StriderMan 10.02.2011 10:37 # 0
bugmenot 10.02.2011 11:30 # 0
StriderMan 10.02.2011 21:19 # +2
Ваще проблема в самом устройстве TPicture. Я уже писал, нахуй не нужны эти проперти BitMap, Icon, Metafile. Это костыли для убогих
bugmenot 10.02.2011 22:15 # 0
а вообще хер знает зачем так сделали
может какой сакральный смысл (кусок его: см. TImage.Canvas)
StriderMan 11.02.2011 15:00 # 0
StriderMan 10.02.2011 10:36 # 0
guest 22.09.2012 09:28 # 0
guest 13.01.2011 16:23 # +3
StriderMan 13.01.2011 16:32 # +1
Aligan 24.08.2021 02:10 # 0