Конференция "Media" » Странная проблема с GDI+ [D7, WinXP]
 
  • s7r © (24.07.07 13:18) [0]
    Здравствуйте господа. У меня возникла следующая проблема: При выводе изображения на компонент TImage средствами gdi+ происходят странные вещи, а именно если после создания объекта TGPGraphics изменить например свойство caption у кнопки Button1, то в результате на image ничего не будет. Если же закомментировать
    изменение caption то все работает в норме. Почему так происходит? Заранее благодарен.
    Код собственно следующий:
    procedure TForm1.Button1Click(Sender: TObject);
    var
     SolidBrush: TGPSolidBrush;
     gdigraphics: TGPGraphics;
    begin
     gdigraphics:=TGPGraphics.Create(Image1.Canvas.Handle);
     Button1.Caption:='test';{если эту строку закомментировать то работать будет.}
     SolidBrush := TGPSolidBrush.Create(MakeColor(255, 255, 0, 0));
     gdigraphics.FillEllipse(solidBrush, 10, 0, 100, 60);
     SolidBrush.Free;
     gdigraphics.Free;
    end;

  • s7r © (24.07.07 14:19) [1]
    p.s. Да кстати для работы с gdi+ я использую заголовочные файлы с сайта http://www.progdigy.com
  • SamBrook © (25.07.07 01:10) [2]
    Для Вас новость, что HDC может изменяться?
    Естественно, поскольку старое значение стало неактуальным,  объект GPGraphics рисует в никуда (подозреваю, что Status об этом извещает).
    Можете проверить, сравнив Image.Canvas.Handle до и после отмеченной строки.
  • s7r © (25.07.07 17:54) [3]
    Да о том что HDC может меняться я действительно не знал, спасибо за информацию. Status кстати говорит что все ok. Теперь получаеться что мне нужно создавать объект gdiplus сразу перед рисованием? А если необходимо сделать тоже самое но в цикле? Нет ли какого либо метода предотвратить изменение HDC? Заранее спасибо за ответы.
  • SamBrook © (25.07.07 19:31) [4]
    HDC постоянно только внутри процедуры отрисовки, которой соответсвует обработчик WM_PAINT. Для некоторых компонент он вызывает пользовательское событие OnPaint, в котором и нужно рисовать.
    В TImage холст сделан настолько криво, что я вообще не рекомендую им пользоваться.  Лучше рисовать или на PaintBox или в буферном tBitmap.
  • s7r © (25.07.07 20:30) [5]
    Да я в принципе в буфере(на TBitmap) и рисую. Однако с ним та же самая проблема т.е. его handle точно также изменяется.
  • SamBrook © (25.07.07 20:58) [6]

    > Да я в принципе в буфере(на TBitmap) и рисую. Однако с ним
    > та же самая проблема т.е. его handle точно также изменяется

    OFF:
    Разработчиков модуля Graphics нужно преобразить в топологический эквивалент Венеры Милосской.
    ON:
    Да, хрень полная.  
    А, может, и нет  В gdi+ есть свой вариант буфера, CashedBitmap, по моему. Посмотрите туда.
  • MetalFan © (03.08.07 23:35) [7]
    перед использованием Canvas.Handle сделай Canvas.Lock. ну и в конце Canvas.Unlock соотв
  • ^_____^ (06.08.07 17:57) [8]
    Удалено модератором
  • ^_______^(2) (14.08.07 14:51) [9]
    Между прочим GDIшники NOD'ами хорошо выносяца!! :-(
    Например если хотябы юзать лазерные танки в комбе с venomam'и....
 
Конференция "Media" » Странная проблема с GDI+ [D7, WinXP]
Есть новые Нет новых   [134431   +10][b:0][p:0.001]