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

Вниз

Цвет Brush   Найти похожие ветки 

 
REA ©   (2003-10-08 16:04) [0]

Что за мистика? - конструкция
Canvas.Brush.Color := $00B9FAFF; вызывает утечку ресурсов, а
Canvas.Brush.Color := clRed; не вызывает


(Delphi 7)


 
Skier ©   (2003-10-08 16:07) [1]


> Canvas.Brush.Color := $00B9FAFF; вызывает утечку ресурсов,
>

Доказательства !


 
dima_shapkin ©   (2003-10-08 16:10) [2]

В каком смысле?


 
REA ©   (2003-10-08 16:14) [3]

Вообще-то полный код привести проблематично - там есть и регионы и клиппование и SetViewPortOrg и Canvas этот от TBitmap, но сам факт?
Придется что ли программу упрощать до ошибки в чистом виде.
Причем самой этой кистью потом ничего не рисуется (закомментировал).


 
Skier ©   (2003-10-08 16:17) [4]

>REA © (08.10.03 16:14) [3]
Ошибка точно не там где ты её ищешь...


 
REA ©   (2003-10-08 16:23) [5]

Сейчас попробую эту конструкцию наверх поднять, чтобы устранить побочные эффекты, но то что это та конструкция я почти уверен, хотя сама причина конечно может быть и в другом.


 
REA ©   (2003-10-08 17:26) [6]

Проблема оказалась совсем в другом месте уже после смены цвета в коде:
DC := SaveDC(Handle);
Try
SelectClipRgn(Handle, 0); // Do not clip
SetViewportOrgEx(Handle, 0, 0, Nil); // Draw in window space
Pen.Style := psSolid;
Pen.Width := 1;
Pen.Color := clNavy;
Brush.Color := $00F0A088;
Brush.Style := bsSolid;
Font.Color := clNavy;
Font.Name := "Arial";
Font.Size := 8;
Font.Style := [fsBold];
SetTextAlign(Handle, TA_CENTER Or TA_TOP);
For i := 0 To 9 Do
If Not IsNAN(FBookmarks[i]) Then
Begin
VPos := Field.PrjVertValueToMM(FBookmarks[i]);
pt := TScreenDevice(Device).AbsPrj(0, VPos);
Ellipse(pt.X-17, pt.Y, pt.X, pt.Y+17);
SetBkMode(Handle, TRANSPARENT);
TextOut(pt.X-8, pt.Y+2, IntToStr(i));
End;
Finally
RestoreDC(Handle, DC);
End;

Каким образом оно повлияло на этот код непонятно.


 
REA ©   (2003-10-08 17:39) [7]

Вынес всю работу с Brush, Pen и Font из пары SaveDC - RestoreDC - вроде полегчало. Видимо менеджер ресурсов болезненно реагирует на подобные трюки (Handle кисти до сохранения и после какой-нибудь разный).


 
DVM ©   (2003-10-08 17:45) [8]

Когда кисти присваивается новое значение, старое значение надо уничтожать DeleteObject;
Т.е. правильнее так:
1) Создаем новую кисть.
2) Делаем SelectObject на старой кисти на новую, старую запоминаем.
3) Рисуем если надо.
4) Удаляем обе кисти и новую и старую, если возможно. Или делаем SelectObject обратно на старую.


 
REA ©   (2003-10-08 18:34) [9]

Это я все в курсе (Еще с W3.11), но зачем тогда менеджер кистей? Оно ведь ресурсы экономит. Опять же когда нужно изменит регионы, шрифт, кисти и Pen, то лучше уж DC сохранить.



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

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

Наверх




Память: 0.48 MB
Время: 0.014 c
1-65521
Tornado
2003-10-08 11:39
2003.10.20
Посоветуйте компонент


1-65417
Эдуард
2003-10-06 21:29
2003.10.20
Как из Dll ки определить место, где он лежит?


14-65595
michael
2003-10-01 14:21
2003.10.20
Как читать книги по программированию?


14-65618
Sword-Fish
2003-09-28 23:58
2003.10.20
Игровой клуб


3-65370
Dark Elf
2003-09-25 16:10
2003.10.20
Пароль и логин в TADOConnection