Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как кнопку Button, BitBtn перекрасить?


Автор: Sarge big father 17.5.2003, 14:19
У меня есть кнопка Button1 или BitBtn1, можно ли помянить её цвет например на синий во время выполнения программы? дело в том что присвоить кнопке BitBtn рисунок можно только перед запуском, и baaa.gif не удобно менять цвет из файла!

Автор: Song 17.5.2003, 14:36
>>что присвоить кнопке BitBtn рисунок можно только перед запуском
Сам придумал?

Автор: Sarge 17.5.2003, 15:55
Вернее я могу!

Автор: <Spawn> 17.5.2003, 16:01
Класс TButton не имеет возможности смены цвета. Ето можно сделать только самому. Тобишь тебе нада создать производный класс от TButton и реализовать смену цвета ))

Автор: Sarge 17.5.2003, 19:28
А как?

Автор: &-ray 17.5.2003, 20:00
Можно сделать другое:
вместо button использовать image и при клике менять картинку, чтобы был эффект нажатия. Там уж можно нарисовать что угодно

Автор: Sarge 17.5.2003, 20:24
Srawn, напиши пожалуйста, а КАК создать производный класс от TButton и реализовать смену цвета.

Автор: <Spawn> 17.5.2003, 22:27
Я компонентов практически еще не делал, но могу показать на небольшом примерчике. Например, можно обрабатывать самому WM_PAINT (Хотя возможно существуют внутренние события компонента о которых я не знаю). Я не стал возиться, но у меня ни как не получилось заставить работать, если создать Канвас на стадии Create или CreateWnd - вылетала Access Vialetion, так что я только ради примера привожу в таком виде:

Код
type
 TMyButton=class(TButton)
  private
   FCanvas:TCanvas;
   FColor:TColor;
   procedure DrawButton(Offset:integer);
   procedure OnPaint(var Msg:TMessage);message WM_PAINT;
   procedure OnLDown(var Msg:TMessage);message WM_LBUTTONDOWN;
   procedure OnLUp(var Msg:TMessage);message WM_LBUTTONUP;
   procedure Double(var Msg:TMessage);message WM_LBUTTONDBLCLK;
  published
   property Color:TColor read FColor write FColor default clBlue;
  end;

procedure TMyButton.DrawButton(Offset:integer);
var
Rect:TRect;
begin
with Rect do begin
Left:=0;
Top:=0;
Bottom:=Self.Height;
Right:=Self.Width;
end;
InflateRect(Rect,Offset,Offset);
FColor:=clBlue;
//Поидее этот подход не правильный, поскольку рациональнее было бы создавать Канвас на стадии создания компонента, чего как я уже сказал у меня не получилось

with TCanvas.Create do begin
try
Brush.Color:=FColor;
Handle:=GetDc(Self.Handle);
FillRect(Rect);
TextOut((Self.Width div 2)-(TextWidth(Self.Caption)div 2 )+Offset,
        (Self.Height div 2)-(TextHeight(Self.Caption) div 2)+Offset,Self.Caption);
finally
ReleaseDC(Self.Handle,Handle);
Free;
end;
end;
end;

procedure TMyButton.OnPaint(var Msg:TMessage);
begin
inherited;
DrawButton(-2);
end;

procedure TMyButton.OnLDown(var Msg:TMessage);
begin
inherited;
DrawButton(-1);
end;

procedure TMyButton.OnLUp(var Msg:TMessage);
begin
inherited;
DrawButton(-2);
end;

procedure TMyButton.Double(var Msg:TMessage);
begin
inherited;
DrawButton(-1);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
btn:TMyButton;
begin
with TMyButton.Create(Form1) do begin
Parent:=Form1;
Left:=10;
Top:=10;
Caption:='MyButton';
end;
end;


Надеюсь это тебе как то поможет smile.gif

Автор: <Spawn> 18.5.2003, 08:54
Если хочется, чтоб кнопка отображала фокус то можно добавить это:
Код
if Self.Focused then
begin
 InflateRect(Rect,-1,-1);
 DrawFocusRect(Rect);//Метод TCanvas для отрисовки фокуса
end;

Автор: Song 18.5.2003, 14:21
Sarge, чтобы это сделать, тут весьма объёмный исходник будет. Стоит ли оно того?

Автор: 78125 19.5.2003, 08:32
Цитата
Можно сделать другое:
вместо button использовать image и при клике менять картинку, чтобы был эффект нажатия. Там уж можно нарисовать что угодно

Вот я тоже так думаю - хоть цветочки нарисуй! biggrin.gif

Автор: Unregistered 19.5.2003, 10:55
А почему экземпляр TCanvas создать не получилось? я специяльно попробовал, вроде нормально...

Автор: <Spawn> 19.5.2003, 13:41
Цитата(Unregistered @ 19.5.2003, 02:55)
А почему экземпляр TCanvas создать не получилось? я специяльно попробовал, вроде нормально...

не знаю, но у меня вылетала ошибка (пробовал на Create и на CreateWnd)

Автор: Unregistered 19.5.2003, 14:51
Можешь даже свою BitBTn панелькой заменить у неё цвет меняеться

Автор: Guest_df_3 19.5.2003, 14:52
Можешь даже свою BitBTn панелькой заменить у неё цвет меняеться

Автор: Sarge 24.5.2003, 23:26
Спасибо!

Автор: Sarge 24.5.2003, 23:48
Извини, Spawn за вопрос, а как сделать обработчик события ONCLICK?

Автор: <Spawn> 25.5.2003, 05:09
Цитата(Sarge @ 24.5.2003, 15:48)
Извини, Spawn за вопрос, а как сделать обработчик события ONCLICK?

Напиши прототип обработчика OnClick и присвой его обработчику етой кнопки. А можно новые компоненты устанавливать - Component>InstallComponent. Тогда он будет добавлен к компонентам и ты сможешь использовать его обработчики стандартным образом.

Для прототипа обработчика делаешь, например так:

Код
procedure TForm1.OnMyButtonClick(Sender:TObject);
begin
ShowMessage('lalala');
end;
//Не забуть добавить  в private или public формы
//procedure OnMyButtonClick(Sender:TObject);

//Присваиваешь обработчик
MyButton.OnClick:=OnMyButtonClick;


но если ты будешь пользоваться моим примером, то там надо еще добавить обработку перерисовки компонента на паре событий, а именно CM_MOUSEENTER(или как то по другому) и CM_MOUSELEAVE.

Автор: Medved 27.5.2003, 07:35
Вот, взято из Кулибы:

Цветная кнопка

В книгах Калверта, Свана и других авторов можно найти похожий текст. Смысл текста – "Изменить цвет кнопок Button, BitBtn нельзя, т.к. их рисует WINDOWS". Если нельзя, но ОЧЕНЬ НУЖНО, то можно.

Небольшой компонент ColorBtn, дает возможность использовать в кнопках цвет. Кроме того, представлено новое свойство - Frame3D, позволяющее получить более реалистичный вид нажатой кнопки. В отличие от API, при изменении значения свойства Frame3D, не требуется переоткрытие компонента.

Код
   
unit colorbtn;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons;

type

TColorBtn = class(TButton)
private
FCanvas: TCanvas;
IsFocused: Boolean;
F3DFrame: boolean;
FButtonColor: TColor;
procedure Set3DFrame(Value: boolean);
procedure SetButtonColor(Value: TColor);
procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM;
procedure WMLButtonDblClk(var Message: TWMLButtonDblClk); message WM_LBUTTONDBLCLK;
procedure DrawButtonText(const Caption: string; TRC: TRect; State: TButtonState; BiDiFlags: Longint);
procedure CalcuateTextPosition(const Caption: string; var TRC: TRect; BiDiFlags: Longint);
protected
procedure CreateParams(var Params: TCreateParams); override;
procedure SetButtonStyle(ADefault: Boolean); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property ButtonColor: TColor read FButtonColor write SetButtonColor default clBtnFace;
property Frame3D: boolean read F3DFrame write Set3DFrame default False;
end;


procedure Register;

implementation

{ TColorBtn }

constructor TColorBtn.Create(AOwner: TComponent);
begin
Inherited Create(AOwner);
Height:= 21;
FCanvas:= TCanvas.Create;
FButtonColor:= clBtnFace;
F3DFrame:= False;
end;


destructor TColorBtn.Destroy;
begin
FCanvas.Free;
Inherited Destroy;
end;


procedure TColorBtn.CreateParams(var Params: TCreateParams);
begin
Inherited CreateParams(Params);
with Params do Style:= Style or BS_OWNERDRAW;
end;


procedure TColorBtn.Set3DFrame(Value: boolean);
begin
if F3DFrame <> Value then F3DFrame:= Value;
end;


procedure TColorBtn.SetButtonColor(Value: TColor);
begin
if FButtonColor <> Value then begin
FButtonColor:= Value;
Invalidate;
end;
end;


procedure TColorBtn.WMLButtonDblClk(var Message: TWMLButtonDblClk);
begin
Perform(WM_LBUTTONDOWN, Message.Keys, Longint(Message.Pos));
end;


procedure TColorBtn.SetButtonStyle(ADefault: Boolean);
begin
if IsFocused <> ADefault then IsFocused:= ADefault;
end;


procedure TColorBtn.CNDrawItem(var Message: TWMDrawItem);
var
RC: TRect;
Flags: Longint;
State: TButtonState;
IsDown, IsDefault: Boolean;
DrawItemStruct: TDrawItemStruct;
begin
DrawItemStruct:= Message.DrawItemStruct^;
FCanvas.Handle:= DrawItemStruct.HDC;
RC:= ClientRect;
with DrawItemStruct do begin
IsDown:= ItemState and ODS_SELECTED <> 0;
IsDefault:= ItemState and ODS_FOCUS <> 0;
if not Enabled then State:= bsDisabled
else if IsDown then State:= bsDown
else State:= bsUp;
end;
Flags:= DFCS_BUTTONPUSH or DFCS_ADJUSTRECT;
if IsDown then Flags:= Flags or DFCS_PUSHED;
if DrawItemStruct.ItemState and ODS_DISABLED <> 0 then Flags:= Flags or DFCS_INACTIVE;
if IsFocused or IsDefault then begin
FCanvas.Pen.Color:= clWindowFrame;
FCanvas.Pen.Width:= 1;
FCanvas.Brush.Style:= bsClear;
FCanvas.Rectangle(RC.Left, RC.Top, RC.Right, RC.Bottom);
InflateRect(RC, -1, -1);
end;
if IsDown then begin
FCanvas.Pen.Color:= clBtnShadow;
FCanvas.Pen.Width:= 1;
FCanvas.Rectangle(RC.Left, RC.Top, RC.Right, RC.Bottom);
InflateRect(RC, -1, -1);
if F3DFrame then begin
FCanvas.Pen.Color:= FButtonColor;
FCanvas.Pen.Width:= 1;
DrawFrameControl(DrawItemStruct.HDC, RC, DFC_BUTTON, Flags);
end;
end else
DrawFrameControl(DrawItemStruct.HDC, RC, DFC_BUTTON, Flags);
FCanvas.Brush.Color:= FButtonColor;
FCanvas.FillRect(RC);
InflateRect(RC, 1, 1);
if IsFocused then begin
RC:= ClientRect;
InflateRect(RC, -1, -1);
end;
FCanvas.Font:= Self.Font;
if IsDown then OffsetRect(RC, 1, 1);
DrawButtonText(Caption, RC, State, 0);
if IsFocused and IsDefault then begin
RC:= ClientRect;
InflateRect(RC, -4, -4);
FCanvas.Pen.Color:= clWindowFrame;
Windows.DrawFocusRect(FCanvas.Handle, RC);
end;
FCanvas.Handle:= 0;
end;


procedure TColorBtn.CalcuateTextPosition(const Caption: string; var TRC: TRect; BiDiFlags: Integer);
var
TB: TRect;
TS, TP: TPoint;
begin
with FCanvas do begin
TB:= Rect(0, 0, TRC.Right + TRC.Left, TRC.Top + TRC.Bottom);
DrawText(Handle, PChar(Caption), Length(Caption), TB, DT_CALCRECT or BiDiFlags);
TS:= Point(TB.Right - TB.Left, TB.Bottom - TB.Top);
TP.X:= ((TRC.Right - TRC.Left) - TS.X + 1) div 2;
TP.Y:= ((TRC.Bottom - TRC.Top) - TS.Y + 1) div 2;
OffsetRect(TB, TP.X + TRC.Left, TP.Y + TRC.Top);
TRC:= TB;
end;
end;


procedure TColorBtn.DrawButtonText(const Caption: string; TRC: TRect; State: TButtonState; BiDiFlags: Integer);
begin
with FCanvas do begin
CalcuateTextPosition(Caption, TRC, BiDiFlags);
Brush.Style:= bsClear;
if State = bsDisabled then begin
OffsetRect(TRC, 1, 1);
Font.Color:= clBtnHighlight;
DrawText(Handle, PChar(Caption), Length(Caption), TRC,
DT_CENTER or DT_VCENTER or BiDiFlags);
OffsetRect(TRC, -1, -1);
Font.Color:= clBtnShadow;
DrawText(Handle, PChar(Caption), Length(Caption), TRC,
DT_CENTER or DT_VCENTER or BiDiFlags);
end else
DrawText(Handle, PChar(Caption), Length(Caption), TRC,
DT_CENTER or DT_VCENTER or BiDiFlags);
end;
end;


procedure Register;
begin
RegisterComponents('Controls', [TColorBtn]);
end;

end.  


Небольшое дополнение. Кнопку по прежнему рисует WINDOWS, а раскрашивает ее ColorBtn. Код компонента на 90% повторяет код BitBtn, ничего необычного здесь нет. Хочется повторить слова Калверта – "Пользуйтесь исходным кодом". Чаще заглядывайте в VCL - можно найти много интересного.

Автор: dm9 27.5.2003, 16:39
Здесь есть о цветной кнопке, а также ещё много интересго

http://www.symbol.ru/library/delphi_secrets/

Автор: Dapo 28.5.2003, 08:59
Чтобы перекрасить кнопку достаточно знать ее хендл. Код приведенный Pegas-ом, конечно полезен. Но чтобы был понятен смысл всего вышеизложенного можно вкратце написать, следующее:
Чтобы закрасить контрол другим цветом нужно через его хендл получить контекст устройства - HDC (f.e. ButtonDC:=GetWindowDC(Button.Handle)). Затем создать экземпляр класса TCanvas (f.e. ButtonCanvas:=TCanvas.Create) и назначить ему полученный контекст устройства (ButtonCanvas.Handle:=ButtonDC). Теперь используем этот "настроеный" канвас для отрисовки изображения на контроле. Можно использовать и сам HDC для отрисовки API-функциями. У меня была похожая задача, только рисовать надо было на TListBox.

Автор: Sarge 2.6.2003, 13:44
А я решил всё подругому, в лоб!
По ходу программы создаю TBitmap и присваиваю кнопке.
Причем кнопка получается как у SPAWN без его километрового кода, и не глючит...
Я очень долго мучался с краями, поэтому получился такой странный код.
Смотрите код, пропишите функцию:
Код

Function Fill(clr:Tcolor; brd:Integer; rec:TRect):TBitmap;
begin
if brd>0 then brd:=brd+1 else brd:=-1;
with result do begin
result:=TBitmap.Create;
Height:=rec.Bottom-2*brd;
Width:=rec.Right-2*brd;
canvas.Brush.Color:=clr;
Canvas.FillRect(Rect(0, 0,Width-1, Height-1));
end;
end;

И её вызов, например:
Код

BitBtn1.Glyph:=Fill(clred,2,bitbtn1.ClientRect);

параметр brd означает отступление от краёв кнопки, если поставить 0 то она просто закрасится сплошняком, я использую 2.
И заметьте, что ведь у меня (пока) самый простой и эффективный способ!!!

Автор: Unregistered 2.6.2003, 14:04
Sarge, я не понял как у тебя будут обрабатываться клики на кнопке (в предидущик примерах это есть).

Автор: Sarge 2.6.2003, 14:17
Это был код общего применения.
А этот заточен под кнопку TBitBtn:
Код
procedure KickBitBtn(frag:TBitBtn; clr:TColor; board:integer);overload;
var bmp:Tbitmap;
begin
if board>0 then board:=board+1 else board:=-1;
with bmp do begin
bmp:=TBitmap.Create;
Height:=frag.Height-2*board;
Width:=frag.Width-2*board;
canvas.Brush.Color:=clr;
Canvas.FillRect(Rect(0, 0,Width-1, Height-1));
frag.Glyph:=bmp;
end;
end;

И используется так:
Код
KickBitBtn(BitBtn1, clblue, 2);

exclamation.gif Работает пока без caption, поставьте Caption:='' и получится голая кнопка, а иначе пока не хочет, буду думать...

Автор: Sarge 2.6.2003, 14:21
Unregistered, клики обрабатываются стандартным образом, потому что кнопка создаётся сатически.
Просто кидаешь на форму BitBtn Создаёшь обработчик события OnClick...
Понял?

Автор: Sarge 2.6.2003, 15:11
А хотя нет...
Моя кнопка работает только без Caption...
Может быть кто-нибудь знает как сделать Caption?
Просто я рачитывал, что текст можно поместить поверх рисунка, а насамом деле только слева, справа, сверху, или снизу...
Обломчик, хотя... может быть кому то нужна пустая кнопка...confused.gif

Автор: Song 2.6.2003, 17:04
А что за проблема текст вывести?

Автор: <Spawn> 2.6.2003, 17:07
Цитата(Sarge @ 2.6.2003, 07:11)
А хотя нет...
Моя кнопка работает только без Caption...
Может быть кто-нибудь знает как сделать Caption?
Просто я рачитывал, что текст можно поместить поверх рисунка, а насамом деле только слева, справа, сверху, или снизу...
Обломчик, хотя... может быть кому то нужна пустая кнопка...confused.gif

TextOut()?

Автор: Dapo 3.6.2003, 06:49
Sarge извини конечно, но твой код по моему не имеет смысла...т.е. он может и работает (не смотрел), но для чего так делать? Ставить на форму TBitButton только для для того чтобы получить его рект и наложить на него битмап? Тебе же сказали, если тебе нужен такой подход - целесообразней использовать TImage. И в зависимости от состояния подгружай в него картинки (например из TImageList), а еще лучше наследника от него (TImage) сделать и добавить св-ва на разные состояния. Хотя тут вариантов много.
PS Я хочу сказать, что твой код - не ответ на поставленный тобой вопрос.

Автор: Dapo 3.6.2003, 07:39
Да, а как на счет TButton?
Чтобы не быть голословным -
вот что-то приблизительное, то о чем я писал уже:

procedure ChgClr(Sender:TButtonControl;clr,capclr:TColor;Caption:string);
var DC:HDC;//контекст устройства
Cnvs:TCanvas;
begin
Cnvs:=TCanvas.Create;
DC:=GetWindowDC(Sender.Handle);
Cnvs.Handle:=DC;
Cnvs.Brush.Color:=clr;
Cnvs.Font.Color:=capclr;
Cnvs.FillRect(Sender.ClientRect);
Cnvs.TextRect(Sender.ClientRect,0,0,Caption);
ReleaseDC(Sender.Handle,dc);
Cnvs.Free;
end;

Автор: Unregistered 3.6.2003, 08:35
Dapo Совершенно справедливо! Но на практике наверное не очень удобно каждый раз на WM_PAINT создавать и убивать Cnvs... лучше сделать его пропертью.
Но не ужели нет варианта каким-нибудь образом попытаться заставить windows отрисовывать кнопку др. цветом? Возможно ли на время отрисовки TButton изменить значение BtnFaсe например?...
Мне кажется что вопрос был задан именно в этом направление.

Автор: Sarge 3.6.2003, 13:53
biggrin.gif Не...
Я не сдамся!!!
Отвечаю, кнопка как живая, потому что я отступаю от краёв, если не отступать, то получится просто не живой цветной прямоугольник, а тут именно кнопка, зацените.
Вот готовый код.
Caption работает!!! Всё готово!!!
Код
var capt:string;
procedure KickBitBtn(frag:TBitBtn; clr:TColor; board:integer);overload;
var bmp:Tbitmap;
begin
if (frag.Caption<>'') then capt:=frag.Caption;
frag.Caption:='';
if board>0 then board:=board+1 else board:=-1;
with bmp do begin
bmp:=TBitmap.Create;
Height:=frag.Height-2*board;
Width:=frag.Width-2*board;
with Canvas do begin
Brush.Color:=clr;
FillRect(Rect(0, 0,Width-1, Height-1));
TextOut((Width div 2)-(TextWidth(Capt)div 2 ),(Height div 2)-(TextHeight(Capt) div 2),Capt);
end;
frag.Glyph:=bmp;
end;
end;

Всё теперь всё работает, кнопка просто кидается на форму,
после Implementation прописываем этот код (сверху),
И теперь когда надо перекрасить просто вызываем эту процедеру:
Код
KickBitBtn(BitBtn1, clblue, 2);

и кнопка перекрашиваеися в указаный цвет.
Если надо создать уже "накрашенную" пихаем запуск процедуры в
OnCreate;
Просто сделайте как я говорю, и все будет чики-пуки!
rolleyes.gif

Автор: Dapo 4.6.2003, 06:30
>>frag.Glyph:=bmp;//используешь св-во Glyph

Так что на счет TButton?wink.gif

Автор: Dapo 4.6.2003, 06:34
Цитата(Unregistered @ 3.6.2003, 05:35)
Dapo ... лучше сделать его пропертью...

Конечно лучше! :-) Возвращаемся к коду Pegas-a (создание собственного компонента). Расширяем? wink.gif

Автор: Pasha 4.6.2003, 06:46
Button- никак не перекрасишь она использует цвета Windows, а другую BitBtn.Color если не ошибаюсь.

Автор: Unregistered 4.6.2003, 08:35
Dapo так я же говорю, что если во время WM_PAINT изменить системную константу BtnFace, кажеться так она называется, интересно что получиться... ща просто занят немного, освобожусь попробую...

Автор: Medved 4.6.2003, 10:32
Цитата(Pasha @ 4.6.2003, 09:46)
Button- никак не перекрасишь она использует цвета Windows, а другую BitBtn.Color если не ошибаюсь.

Прежде чем ввязываться в дисскуссию, читайте пожалуйста темы с самого начала,

Автор: Sarge 11.6.2003, 12:35
Странно, кажется идеи закончились, и каждый остался при своём мнении...

Автор: Чoо 6.8.2010, 18:06
Цитата(Sarge @ 3.6.2003,  13:53)
Вот готовый код.
Caption работает!!! Всё готово!!!
Код
var capt:string;
procedure KickBitBtn(frag:TBitBtn; clr:TColor; board:integer);overload;
var bmp:Tbitmap;
begin
if (frag.Caption<>'') then capt:=frag.Caption;
frag.Caption:='';
if board>0 then board:=board+1 else board:=-1;
with bmp do begin
bmp:=TBitmap.Create;
Height:=frag.Height-2*board;
Width:=frag.Width-2*board;
with Canvas do begin
Brush.Color:=clr;
FillRect(Rect(0, 0,Width-1, Height-1));
TextOut((Width div 2)-(TextWidth(Capt)div 2 ),(Height div 2)-(TextHeight(Capt) div 2),Capt);
end;
frag.Glyph:=bmp;
end;
end;

Закрасил так же кнопочку. Единственное, хотел бы обратить внимание на 
Код

bmp:=TBitmap.Create;

Лучше bmp объявить сразу после implementation

Код

implementation
var
  bmp:TBitMap;


Само создание сделать так:
Код

if not assigned(bmp) then bmp:=TBitmap.Create; 

так как необязательно его создавать каждый раз заново

ну и не забывать его освобождать, например по событию формы дестрой:
Код

procedure ChildFm1.FormDestroy(Sender: TObject);
begin
  FreeAndNil(bmp);  //если просто bmp.free, то указатель остается и при следующей закраске получим ошибку доступа к памяти
end;  


а то утечки будут. Если я заблуждаюсь, подправьте меня, пожалуйста.

Добавлено @ 18:07
пы сы: темка старая, но до сих пор актуальная smile

Автор: bems 7.8.2010, 11:14
Чoо, нет, за 7 лет ему ужн точно не надо. Не делай так больше.

Автор: Чoо 7.8.2010, 11:48
bems, я тему апнул не просто что бы апнуть или посоветовать что-то автору. Просто решил, что, поскольку я так же закрашиваю кнопки, кто-то и еще может воспользоваться примером, написанным выше. Поэтому написал пару замечаний на счет утечек. И у самого же возник вопрос: так ли опасны эти утечки, что стоит им уделять внимание, и освобождаются ли ресурсы, если уничтожается дочерняя форма, которая заняла эти ресурсы (создала bmp.create)?

вобщем тему поднял только из добрых побуждений.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)