Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi OnMouseLeave für die TPaintbox? (https://www.delphipraxis.net/89186-onmouseleave-fuer-die-tpaintbox.html)

xZise 27. Mär 2007 09:03


OnMouseLeave für die TPaintbox?
 
Ich habe in D2k6 eine TPaintbox benutzt, welche das Event "OnMouseLeave" hatte. Aber wenn ich mit (z.b) D6 pogrammiere, kennt er das Ereignis nicht. Gibt es irgendwie eine mögklihckeit das selber hinzubekommen?

bitsetter 27. Mär 2007 10:32

Re: OnMouseLeave für die TPaintbox?
 
Hallo,

so geht es bei mir:
Delphi-Quellcode:
  private
    OldPbWindowProc: TWndMethod;
    procedure PbSubClassWndProc(var Message: TMessage);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.PbSubClassWndProc(var Message: TMessage);
begin
  if Message.Msg= CM_MouseLeave then
  begin
    beep;//Demo

  end;
  OldPbWindowProc(Message);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  OldPbWindowProc:= PaintBox1.WindowProc;
  PaintBox1.WindowProc:= PbSubClassWndProc;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  PaintBox1.WindowProc:= OldPbWindowProc;
end;
Oder eine eigene PaintBox Komponente erstellen.

dr. love 27. Mär 2007 10:39

Re: OnMouseLeave für die TPaintbox?
 
is gar nicht soo schwer...

1. zum start des Programms:

aktuelle Mausposition ermitteln und daraus bestimmen, ob die maus in der paintbox liegt (über Mouse.Position.x, Mouse.Position.y, PaintBox1.Left, PaintBox1.Top, PaintBox1.Width, PaintBox1.Heigth kann man das bestimmen und dann in den Wahrheitswert INPAINTBOX1: boolean schreiben)

2. modifiziere das Ereignis ONMouseMove deines Formulars folgendermaßen:

mach das gleiche wie unter 1., schreibe das ergebnis (also ob die maus in der paintbox liegt) aber in eine andere variable, z.B. INPAINTBOX2: boolean;

3. Vergleiche INPAINTBOX1 und INPAINTBOX2

wenn INPAINTBOX1=true und INPAINTBOX2=false
dann ...(hier folgen deine anweisungen für das ereignis OnPaintBoxMouseLeave)

jetzt noch den Wert von PAINTBOX2 in PAINTBOX2 schreiben und fertig

4. fast vergessen: das ereignis ONMouseMove des Formulars musst du auch noch dem Ereignis OnMouseMove der PaintBox1 zuordnen.

wenn du einen expliziten Quelltext brauchst sag nochma bescheid... muss ich ein paar Formulierungen nachschaun


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz