Autor Beitrag
JRegier
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Sa 25.06.05 18:32 
Ich möchte das bestimmte Componenten OnMouseOver eingeblendet werden und OnMouseOut wieder ausblenden!
Da, keine solche Events zumindest bei StandardComponenten gibt muß ich ja wohl OnMouseMove nehmen!

Zuerst hatte ich OnMouseMove eingeblendet und Timer gestartet um nach bestimmter zeit wenn Componente verlassen
wurde ausgeblendet, aber es ergab folgendes Problem:

Wenn ich einfach die Maus darüber stehen lies blinken die Componenten also werden ausgeblendet und hier
war der Hacken das ich den Panel auf dem die Componenten drauf waren auf AutoSize := True gesetzt
und beim ausblenden wieder wahrscheinlich ein OnMouseMove ausgelöst hat und wieder direkt eingeblendet!
Dadurch entstand das Blinken!

Ich hatte auch versucht in OnMouseMove auf X, Y prüfen ob die Componente verlassen wurde, aber das Problem
ist das es nur dann funktioniert hat wenn ich langsam herausgezogen habe, also es scheint dass die OnMouseMove
procedue nicht zu jeder Millisekunde aufgerufen wird. oder?

Also habe ich das Ausblenden in der OnExit Procedur gemacht aber wie willst du OnExit auslösen? Indem
man eine andere Componente SetFocus macht! Das schien alles so zu funktionieren wie ich mir gewünscht habe!
Aber das Problem ist, ich habe hier mit TEdit Componenten zu tun, die werden nicht ausgeblendet, aber wenn
ich jetzt die Maus aus der Edit Componente rausziehe dann verliert die auch den Focus , wenn der Benutzer
die Maus nicht über die TEdit Componente hält kann er auch nichts eingeben, und das ist ja auch keine
gute Lösung!

Welche Möglichkeit bietet sich noch an?
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Sa 25.06.05 19:31 
Standardmäßig hat keine Komponente diese Ereignisse, das ist richtig, aber man kanns ihnen beibringen. Wie das geht siehst du hier an einem Beispiel mit TAnimate. Dürfte gleichermaßen funktionieren für alle TWinControl Abkömmlinge.

Gruß,
raziel

_________________
JSXGraph
JRegier Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Sa 25.06.05 20:02 
user profile iconraziel hat folgendes geschrieben:
Standardmäßig hat keine Komponente diese Ereignisse, das ist richtig, aber man kanns ihnen beibringen. Wie das geht siehst du hier an einem Beispiel mit TAnimate. Dürfte gleichermaßen funktionieren für alle TWinControl Abkömmlinge.

Gruß,
raziel


OK ,also ich müßte nur prüfen ob der MausZeiger über der Componente ist OK! Aber welche funktion sagt mir
wo der Mauszeiger sich befindet? Oder wie gehe ich es an? :nixweiss:

Also OnExit tritt ja nur auf wenn der Focus zur anderen Componente verschoben ist und nicht wenn der Mauszeiger
die Componente verlassen hat!
Sprint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: Sa 25.06.05 20:07 
user profile iconJRegier hat folgendes geschrieben:
OK ,also ich müßte nur prüfen ob der MausZeiger über der Componente ist OK! Aber welche funktion sagt mir wo der Mauszeiger sich befindet? Oder wie gehe ich es an?

Windows bietet dir dafür die Funktionen SetCapture, GetCapture und ReleaseCapture an.
Nehmen wir mal an, du hasst Memo1 und Memo2. Solange die Maus auf Memo1 ist, wird Memo2 ausgeblendet.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.Memo1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin

  Mouse.Capture := Memo1.Handle;

  if (X >= 0and (X <= Memo1.Width) and (Y >= 0and (Y <= Memo1.Height) then
  begin
    Memo2.Visible := False;
  end else
  begin
    Mouse.Capture := 0;
    Memo2.Visible := True;
  end;

end;

_________________
Ciao, Sprint.
JRegier Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Sa 25.06.05 20:39 
user profile iconSprint hat folgendes geschrieben:

Windows bietet dir dafür die Funktionen SetCapture, GetCapture und ReleaseCapture an.


Ich weiß jetzt nicht was Capture bedeutet oder bringt!
Ich habe da DBCtrls und die haben 3 Controls also checkbox sortieren btn asc desc und btn suchen
und ich könnte einfach dann die Liste mit diesen Feldern in OnMouseMove durchlaufen und diese Controls
bei den anderen ausblenden! Ok, das wäre theoretisch und auch praktisch machbar! :?
schließlich habe ich eine TList wo ich die ganzen DBCtrls verwalte!