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

Вниз

Как уничтожать назначенный Brush?   Найти похожие ветки 

 
Vemer ©   (2007-02-16 17:38) [0]

Делаем:
Brush1 := CreateSolidBrush($2022);
SelectObject(MainDC,Brush1);


В справке написано, что назначенный Brush через
DeleteObject не удалить.

Вопрос: Как "отцепить" Brush от MainDC или что нужно сделать,
чтобы осуществить DeleteObject(Brush1);


 
Игорь Шевченко ©   (2007-02-16 17:44) [1]

OldBrush := SelectObject (MainDC, Brush1);


> Вопрос: Как "отцепить" Brush от MainDC


SelectObject (MainDC, OldBrush);

DeleteObject (Brush1);


 
Ricks ©   (2007-02-16 22:02) [2]

А можно сделать еще проще?

OldBrush := SelectObject (MainDC, Brush1);
DeleteObject (SelectObject (MainDC, OldBrush));

Вроде бы тоже самое. Я у себя пользовался таким приемом!


 
Vemer ©   (2007-02-17 15:28) [3]

Спасибо.
В итоге сделал так (все равно все убить надо):

FreeDC(Handle,MainDc);
DeleteObject(Brush1);


Нет DC, нет проблемы :).
Нет в таком решении никаких подвоных камней?


 
homm ©   (2007-02-17 18:26) [4]

тебе же в 2 сказали как правльно. вин98 с канвой работает плохо, потому лучше делать как првильно


 
undr   (2007-02-18 00:20) [5]


> Нет DC, нет проблемы :).
> Нет в таком решении никаких подвоных камней?

Ты не сможешь удалить контекст устройства, пока не восстановишь исходный Brush [SelectObject (MainDC, OldBrush)]. Так что делай, как написали в [1]/[2]


 
Vemer ©   (2007-02-19 17:05) [6]

Опять я.
Посмотрите окончательный вариант убийства объектов пожалуйста.

var //Глобальный VAR, не весь )
Handle: HWND; //локальный хендл
Lb_Close:HWND;//"Контрол"

Pen: Array [0..PenCount] of HPen;
Brush: Array [0..BrushCount] of HBrush;
MainDC: HDC; //DC формы
LbcDC: HDC; // DC "Контрола"
I:Byte;

procedure ShutDown; //процедура выхода из программы
Var
D:Byte;
DelBrush:HBrush;
DelPen:HPen;
Begin
ReleaseMutex(hMutex);
KillTimer(Handle,1);

DelBrush := SelectObject (MainDC, Brush[0]);
DeleteObject(SelectObject (MainDC, DelBrush));

DelPen := SelectObject(MainDC, Pen[0]);
DeleteObject(SelectObject (MainDC, DelPen));

DelBrush := SelectObject (LbcDC, Brush[0]);
DeleteObject(SelectObject (LbcDC, DelBrush));

DelPen := SelectObject(LbcDC, Pen[0]);
DeleteObject(SelectObject (LbcDC, DelPen));

For D := 0 To PenCount do
 DeleteObject(Pen[I]); //удаляем набор Pen..

For D := 0 To BrushCount do
 DeleteObject(Brush[I]); //удаляем набор Brush..

ReleaseDC (Lb_Close, LbcDC); // освобождение ссыпки
DeleteDC (LbcDC); // удаление ссылки, освобождение памяти

ReleaseDC (Handle, MainDC); // освобождение ссыпки
DeleteDC (MainDc); // удаление ссылки, освобождение памяти


 
Игорь Шевченко ©   (2007-02-19 22:14) [7]


> Посмотрите окончательный вариант убийства объектов пожалуйста.


Существует хорошая практика для программиста на API возвращать исходный объект в контекст устройства после работы с ним, например

OldObj := SelectObject (DC, WorkObj);
....что-то делаем с использованием WorkObj
SelectObject (DC, OldObj)

В этом случае при завершении работы достаточно просто выполнить DeleteObject на все созданные объекты.


 
Vemer ©   (2007-02-20 14:22) [8]

Извините, но я до сих пор не совсем врубаюсь, как это рабтает.

Насколько я понял, какой-то Brush изначально назначен DC.
Надо в начале сохранить этот Brush (OldBrush) , а в конце его назначить, так?

Хорошо, как тогда получить OldBrush в самом начале?


 
Vemer ©   (2007-02-20 14:48) [9]

Все, немного разобрался.

OldBrush := Select(MainDC,NewBrush);

Дает нам старый. Просто я смысл этой строки сначала понять не мог.



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

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

Наверх




Память: 0.49 MB
Время: 0.027 c
15-1184252469
ocean
2007-07-12 19:01
2007.08.05
Page Maker


4-1171311941
Dmitry_177
2007-02-12 23:25
2007.08.05
как определить контекст указателя(курсора)?


1-1180359392
d_oleg
2007-05-28 17:36
2007.08.05
Вызов функции по имени в run-time


2-1183452102
Ivolg
2007-07-03 12:41
2007.08.05
Подсветка параметров функции


2-1184137180
greg123
2007-07-11 10:59
2007.08.05
Получение информации из blob-поля