Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.009 c
7-65657
AnDeM
2003-08-05 14:18
2003.10.20
Переключение раскладки клавы


1-65406
TUser
2003-10-09 10:13
2003.10.20
CHM&HLP


8-65559
Arkan
2003-06-18 23:20
2003.10.20
GIF>BMP


3-65317
Vick
2003-09-30 13:21
2003.10.20
Программа в процессе работы пожирает всю память!!!!


6-65566
oduvan
2003-08-24 17:34
2003.10.20
Как проверить, что все данные получитны сокетом?




   Наверх