UNIT Unit1;
INTERFACE
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
RadioGroup: TRadioGroup;
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
OldRadioGroupWndProc: TWndMethod;
procedure MyRadioGroupWndProc(var Message: TMessage);
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
IMPLEMENTATION
{$R *.dfm}
type
TCustomGroupBoxCracker = class(TCustomGroupBox);
//------------------------------------------------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
begin
//подменяем оконную процедуру
OldRadioGroupWndProc:=RadioGroup.WindowProc;
RadioGroup.WindowProc:=MyRadioGroupWndProc;
end;
//------------------------------------------------------------------------------
procedure HideGroupBounds(AGroupCtrl: TCustomGroupBox);
var
R : TRect;
Ctrl : TCustomGroupBoxCracker;
begin
Ctrl:=TCustomGroupBoxCracker(AGroupCtrl);
R:=Rect(0,0,Ctrl.Width, Ctrl.Height);
//для демонстрации закрашиваем красной рамкой
//а так, надо бы Ctrl.Color
Ctrl.Canvas.Pen.Color:=clRed;
Ctrl.Canvas.Brush.Style:=bsClear;
Ctrl.Canvas.Rectangle(R);
end;
//------------------------------------------------------------------------------
procedure TForm1.MyRadioGroupWndProc(var Message: TMessage);
var
bIsWMPaint : boolean;
begin
bIsWMPaint:=(Message.Msg=WM_PAINT);
OldRadioGroupWndProc(Message);
//закрашиваем после того, как отработает "родной" обработчик WM_PAINT
if bIsWMPaint then HideGroupBounds(RadioGroup);
end;
END.
|