Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.05;
Скачать: CL | DM;

Вниз

Странная проблема с GDI+   Найти похожие ветки 

 
s7r ©   (2007-07-24 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 ©   (2007-07-24 14:19) [1]

p.s. Да кстати для работы с gdi+ я использую заголовочные файлы с сайта http://www.progdigy.com


 
SamBrook ©   (2007-07-25 01:10) [2]

Для Вас новость, что HDC может изменяться?
Естественно, поскольку старое значение стало неактуальным,  объект GPGraphics рисует в никуда (подозреваю, что Status об этом извещает).
Можете проверить, сравнив Image.Canvas.Handle до и после отмеченной строки.


 
s7r ©   (2007-07-25 17:54) [3]

Да о том что HDC может меняться я действительно не знал, спасибо за информацию. Status кстати говорит что все ok. Теперь получаеться что мне нужно создавать объект gdiplus сразу перед рисованием? А если необходимо сделать тоже самое но в цикле? Нет ли какого либо метода предотвратить изменение HDC? Заранее спасибо за ответы.


 
SamBrook ©   (2007-07-25 19:31) [4]

HDC постоянно только внутри процедуры отрисовки, которой соответсвует обработчик WM_PAINT. Для некоторых компонент он вызывает пользовательское событие OnPaint, в котором и нужно рисовать.
В TImage холст сделан настолько криво, что я вообще не рекомендую им пользоваться.  Лучше рисовать или на PaintBox или в буферном tBitmap.


 
s7r ©   (2007-07-25 20:30) [5]

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


 
SamBrook ©   (2007-07-25 20:58) [6]


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

OFF:
Разработчиков модуля Graphics нужно преобразить в топологический эквивалент Венеры Милосской.
ON:
Да, хрень полная.  
А, может, и нет  В gdi+ есть свой вариант буфера, CashedBitmap, по моему. Посмотрите туда.


 
MetalFan ©   (2007-08-03 23:35) [7]

перед использованием Canvas.Handle сделай Canvas.Lock. ну и в конце Canvas.Unlock соотв


 
^_____^   (2007-08-06 17:57) [8]

Удалено модератором


 
^_______^(2)   (2007-08-14 14:51) [9]

Между прочим GDIшники NOD"ами хорошо выносяца!! :-(
Например если хотябы юзать лазерные танки в комбе с venomam"и....



Страницы: 1 вся ветка

Текущий архив: 2008.10.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
2-1219324963
Nucer
2008-08-21 17:22
2008.10.05
Дочерний класс со ссылкой на родителя


15-1218452500
dik
2008-08-11 15:01
2008.10.05
Восстановление реакции на ошибку


15-1218022106
Palladin
2008-08-06 15:28
2008.10.05
Покупка Delphi 6


2-1219902669
vvrz
2008-08-28 09:51
2008.10.05
несколько колонок в QReport


15-1218525210
oldman
2008-08-12 11:13
2008.10.05
Последовательность действий при заправке кардриджа (лазер)