// Es wird ein
unsichtbares Panel erstellt, dass trotzdem auf
// Mausereignisse reagiert. Wenn man es über andere Komponenten legt,
// sind diese
dadurch mit der Maus nicht mehr zu erreichen. Das
// Erstellen erfolgt dynamisch, da
sich dieser Code nicht als
// Komponente für die VCL eignet.
// Getestet mit D4 unter XP
type
TNullPanel = class(TCustomPanel)
private
procedure WMEraseBkgnd(var M: TWmEraseBkgnd); message WM_ERASEBKGND;
protected
procedure Paint; override;
constructor Create(AOwner: TComponent); override;
procedure CreateParams(var Params: TCreateParams); override;
end;
constructor TNullPanel.Create(AOwner: TComponent);
begin
inherited Create(Owner);
ControlStyle := ControlStyle - [csOpaque];
end;
procedure TNullPanel.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := Params.ExStyle or WS_EX_TRANSPARENT;
end;
procedure TNullPanel.Paint;
begin
BorderStyle := bsNone;
end;
procedure TNullPanel.WMEraseBkgnd(var M: TWmEraseBkgnd);
begin
M.Result := 1;
end;
//--------------------------------------------------------
var
mNullPanel: TNullPanel;
procedure TForm1.FormCreate(Sender: TObject);
begin
mNullPanel := TNullPanel.create(self);
with mNullPanel do begin
mNullPanel.parent := self;
// -------- je nach Bedarf -------
onMouseDown := FormMouseDown;
left := 40;
top := 90;
// ------------------------------
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
mNullPanel.free;
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (button = mbleft) then begin
if sender is TNullPanel then begin
showmessage('drin'); // z.B.
end;
end;
end;
|