// 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;



 

Zugriffe seit 6.9.2001 auf Delphi-Ecke