![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Странная проблема с GDI+ [D7, WinXP]
s7r © (2007-07-24 13:18:00)Здравствуйте господа. У меня возникла следующая проблема: При выводе изображения на компонент 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;
^_______^(2) (2007-08-14 14:51:00) [1]Между прочим GDIшники NOD'ами хорошо выносяца!! :-(
Например если хотябы юзать лазерные танки в комбе с venomam'и....
^_____^ (2007-08-06 17:57:00) [2]Удалено модератором
MetalFan (2007-08-03 23:35:00) [3]перед использованием Canvas.Handle сделай Canvas.Lock. ну и в конце Canvas.Unlock соотв
SamBrook (2007-07-25 20:58:00) [4]
> Да я в принципе в буфере(на TBitmap) и рисую. Однако с ним
> та же самая проблема т.е. его handle точно также изменяется
OFF:
Разработчиков модуля Graphics нужно преобразить в топологический эквивалент Венеры Милосской.
ON:
Да, хрень полная.
А, может, и нет В gdi+ есть свой вариант буфера, CashedBitmap, по моему. Посмотрите туда.
s7r (2007-07-25 20:30:00) [5]Да я в принципе в буфере(на TBitmap) и рисую. Однако с ним та же самая проблема т.е. его handle точно также изменяется.
SamBrook (2007-07-25 19:31:00) [6]HDC постоянно только внутри процедуры отрисовки, которой соответсвует обработчик WM_PAINT. Для некоторых компонент он вызывает пользовательское событие OnPaint, в котором и нужно рисовать.
В TImage холст сделан настолько криво, что я вообще не рекомендую им пользоваться. Лучше рисовать или на PaintBox или в буферном tBitmap.
s7r (2007-07-25 17:54:00) [7]Да о том что HDC может меняться я действительно не знал, спасибо за информацию. Status кстати говорит что все ok. Теперь получаеться что мне нужно создавать объект gdiplus сразу перед рисованием? А если необходимо сделать тоже самое но в цикле? Нет ли какого либо метода предотвратить изменение HDC? Заранее спасибо за ответы.
SamBrook (2007-07-25 01:10:00) [8]Для Вас новость, что HDC может изменяться?
Естественно, поскольку старое значение стало неактуальным, объект GPGraphics рисует в никуда (подозреваю, что Status об этом извещает).
Можете проверить, сравнив Image.Canvas.Handle до и после отмеченной строки.
s7r (2007-07-24 14:19:00) [9]p.s. Да кстати для работы с gdi+ я использую заголовочные файлы с сайта http://www.progdigy.com