Форум: "Основная";
Текущий архив: 2003.10.20;
Скачать: [xml.tar.bz2];
ВнизЦвет 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c