Главная страница
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.015 c
14-65587
esu
2003-10-02 11:55
2003.10.20
Собираю команду набраться


1-65482
webpauk
2003-10-08 17:41
2003.10.20
component property


1-65420
Geugenk
2003-10-07 20:34
2003.10.20
DataTimePicker


3-65343
kors
2003-09-28 11:34
2003.10.20
DSQL


1-65457
Sandman25
2003-10-07 13:32
2003.10.20
Уничтожение кнопки в OnClick