Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2008.10.05;
Скачать: [xml.tar.bz2];

Вниз

Странная проблема с 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 вся ветка

Форум: "Media";
Текущий архив: 2008.10.05;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.008 c
2-1219393623
Jimmy
2008-08-22 12:27
2008.10.05
Инсталляция шрифтов


3-1207286680
Alexey
2008-04-04 09:24
2008.10.05
Отчёты для БД


2-1219998340
evger
2008-08-29 12:25
2008.10.05
вопрос о dll


2-1219232190
AndreyBg
2008-08-20 15:36
2008.10.05
Проблема с изменением св-в компонент в реалтайм.


4-1197378338
Игорь00
2007-12-11 16:05
2008.10.05
Static без мерцания





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский