Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Componente ausblenden OnExit oder Timer? Beides nicht OK!
JRegier - Sa 25.06.05 18:32
Titel: Componente ausblenden OnExit oder Timer? Beides nicht OK!
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 - 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 [
http://www.delphi-forum.de/viewtopic.php?p=151441#151441] an einem Beispiel mit TAnimate. Dürfte gleichermaßen funktionieren für alle TWinControl Abkömmlinge.
Gruß,
raziel
JRegier - Sa 25.06.05 20:02
raziel hat folgendes geschrieben: |
Standardmäßig hat keine Komponente diese Ereignisse, das ist richtig, aber man kanns ihnen beibringen. Wie das geht siehst du hier [http://www.delphi-forum.de/viewtopic.php?p=151441#151441] 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 - Sa 25.06.05 20:07
JRegier 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.
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 >= 0) and (X <= Memo1.Width) and (Y >= 0) and (Y <= Memo1.Height) then begin Memo2.Visible := False; end else begin Mouse.Capture := 0; Memo2.Visible := True; end;
end; |
JRegier - Sa 25.06.05 20:39
Sprint 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!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!