Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   PseudoEvent MouseEnter bzw. MouseLeave (https://www.delphipraxis.net/173903-pseudoevent-mouseenter-bzw-mouseleave.html)

Bjoerk 23. Mär 2013 13:42

PseudoEvent MouseEnter bzw. MouseLeave
 
Ich habe ein Paintbox.Canvas mit Linien, Kreise, Schriften, Rechtecken. Jedes dieser nennen wir sie Symbole belegt eine gewisse Region auf dem Canvas. Das Programm hat auch eine Liste dieser Regionen. Nun wollte ich jedem Symbol ein PseudoEvent MouseEnter bzw. MouseLeave spendieren. Eine Prüfung ob bei MouseMove der Cursor sich innerhalb einer dieser Regionen befindet kann ich durchführen, aber es fällt mir nichts Gescheites für die beiden anderen Ereignisse ein. Wie könnte man das machen?

Furtbichler 23. Mär 2013 13:51

AW: PseudoEvent MouseEnter bzw. MouseLeave
 
Jedes Symbol muss einfach wissen, ob sich die Maus gerade über ihm befindet oder nicht ("MouseOnMe: Boolean"). Und wenn sich dieser Status ändert, feuerst Du. So vielleicht?
Delphi-Quellcode:
For Symbol in Symbols do
  if Symbol.ContainsMouse(Mouse) xor Symbol.MouseOnMe then begin
    if Symbol.MouseOnMe then
      Symbol.DoOnMouseLeave()
    else
      Symbol.DoOnMouseEnter();
    Symbol.MouseOnMe := Not Symbol.MouseOnMe;
  end;

stahli 23. Mär 2013 14:06

AW: PseudoEvent MouseEnter bzw. MouseLeave
 
Furtbichler hat Dich wohl besser verstanden, aber mal trotzdem noch mein Text dazu:

So könntest Du Deinem übergeordneten Control (TMyDesigner) ein Event hin zu fügen, in dem Du Dein Control und die Region (TMyRegion) verarbeiten kannst.
Statt TMyRegion könntest Du natürlich auch TMySymbol behandeln.

Delphi-Quellcode:
  TMouseEnterRegion = procedure(Sender: TMyDesigner; aRegion: TMyRegion) of object;

  TMyDesigner = class(TPanel)
  protected
    fOnMouseEnterRegion: TMouseEnterRegion;
    procedure MouseMove(Shift: TShiftState; X, Y: Single); override;
  poblished
    property OnMouseEnterRegion: TMouseEnterRegion read fOnMouseEnterRegion write fOnMouseEnterRegion;
  end;

...

procedure TMyDesigner.MouseMove(Shift: TShiftState; X, Y: Single);
begin
  inherited;
  if (*SelectANewRegion*) and (Assigned(OnMouseEnterRegion)) then
  begin
    OnMouseEnterRegion(Self, *NewRegion*);
  end;
end;

Bjoerk 23. Mär 2013 14:59

AW: PseudoEvent MouseEnter bzw. MouseLeave
 
Wow Furtbichler, das sieht gut aus, sehr gut sogar. Eine Boolean hatte ich auch aber auf die Idee mir dem XOR bin ich nicht gekommen. Ist genial. Thanx!

Stahli, auch nicht schlecht. Ich habe hier allerdings kein übergeordnetes visuelles Control. Die Symbole sind auch nicht (mehr) von TGraphicContol abgeleitet (wie letztens, das betraf ein andres Programm von mir). Hier gibt nur eine ObjectList, mir deren Infos auf ein Metafile(Canvas) gezeichnet wird und die PaintBox macht nur ein StrechDraw davon.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:11 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