powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Утечка HBRUSH
4 сообщений из 4, страница 1 из 1
Утечка HBRUSH
    #40136285
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго дня,

ест форма отображающая progressbar написанный при царе горохе.
Этот код приводит к утечке HBRUSH, далее по стеку:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
//........................................... Свой код
procedure TMYProgressHandler.UpdateProgress (APrompt1, APrompt2: string;
  AValue: integer; AAbsolutePosition: boolean);
begin
  if AAbsolutePosition then
    Position := AValue  //<----- тут
    else
    if AValue < 0 then
   .................
//............................................................... Свой код
procedure TMYProgressHandler.SetInteger;
begin
  if FProgressbar <> nil then
    case Index of
      1 : FProgressbar.Step := Value;
      2 : FProgressbar.Min := Value;
      3 : FProgressbar.Max := Value;
      4 : begin
           FProgressbar.Position := Value;
           if FForm <> nil then FForm.Update; //<--- далее тут где FForm это TForm
           end;
      end;
//............................................................... vcl.controls
procedure TWinControl.Update;
begin
  if HandleAllocated then UpdateWindow(WindowHandle); // далее тут
end;
//..................................................
// далее разные переходы в vsl.*
//.................................................. vcl.gaphics
function TBrush.GetHandle: HBrush;
var
  LogBrush: TLogBrush;
........................
Handle := CreateBrushIndirect(LogBrush); // <--- и в конце тут



подозреваю что надо тут FForm.Update что то менять,
как с таким у формы можно бороться?

Спасибо
...
Рейтинг: 0 / 0
Утечка HBRUSH
    #40136287
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тут написано что надо вызвать deleteobject. Но поскольку всё происходит внутри VCL то возможно удалять надо до вызова FForm.Update.
Не совсем понятно как.
...
Рейтинг: 0 / 0
Утечка HBRUSH
    #40136321
527470
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hlopotun,

В VCL несколько кривая (закрытая и никак не модифицируемая) реализация кистей, но утечка явно не тут, а там где вы как-то меняете кисти у контролов.

TBrush.GetHandle возвращает хендлер, который освободится когда эта кисть никем не будет использоваться. VCL имеет список всех объектов кистей и TBrush лишь обёртка над этим объектом несколько TBrush могут держать одну и туже реальную кисть.
...
Рейтинг: 0 / 0
Утечка HBRUSH
    #40136344
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
527470,
+1

hlopotun,
а вы его случайно не из потока вызываете?
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Утечка HBRUSH
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (2): Анонимы (1), Bing Bot 1 мин.
Пользователи онлайн (22): Анонимы (20), Bing Bot 1 мин., Yandex Bot 3 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]