Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - wie finde ich raus, ob meine anwendung aktiv ist? Vorne??
CenBells - Di 03.06.03 20:16
Titel: wie finde ich raus, ob meine anwendung aktiv ist? Vorne??
Hallo Leute,
ich habe in meiner anwendung ein stringgrid, über dem ich programm gesteuert einen hint anzeige. Das event passiert auf onmousemove. Liegt die anwendung nun hinter bsp einem icq-Fenster und fahre ich dann mit der maus drüber, so wird meine anwendung mit anzeigen des hints nach vorne geholt.
Kann mir wer helfen, wie ich das phänomen im Stringgrid beheben kann? bzw welches event wird ausgelöst, wenn eine anwendung nicht mehr vorne ist???
gruß
Ken
Michael Stenzel - Mi 04.06.03 00:12
Mit folgenden ereignissen von TApplication kannst Du feststellen, ob Deine Anwendung den Focus hat.
Delphi-Quelltext
1: 2:
| Application.OnDeactivate := Deine Procedur; Application.OnActivate := Deine Procedur; |
Du legst eine Globale Variabel an z.B. IsAktiv : Boolean;
In den TApplication-ereignissen setzt Du IsAktiv auf True oder False.
In deiner Mauseventabfrage brauchst Du dann nur noch IsAktiv abzufragen.
mfg
Michael
Moderiert von
Tino: Delphi-Tags hinzugefügt.
CenBells - Mi 04.06.03 13:22
danke für die antwort, doch löst das mein problem nicht.
mein problem besteht darin, daß ich in meiner komponente, ein strniggrid mitbekommen möchte, ob die anwendung vorne ist. und ich wollte eigentlich nicht das application object, und damit die unit forms, in die komponente integrieren.
es muss doch irgendeine message geben, auf die ich reagieren kann, oder nicht?
Gruß
Ken
Tana´Ri - Mi 04.06.03 15:14
also beim mousemove über dein stringgrid sollte eigentlich insofern es den FOCUS auch hat etwas ausgelöst werden (setzen des hint).
vielleicht ist´s ja so trivial
onMouseMove Event -> if self.focus then do what ya wanna do
oder über boolean, indem du regiestrierst ob deine Anwendung den eingabe focus hat bzw. die mouse auch über im ist
das wäre dann
WM_KILLFOCUS (verliert eingabe focus (keyboard))
WM_MOUSELEAVE (außerhalb win.rect)
WM_MOUSEHOVER (über win.rect)
WM_MOUSEACTIVATE (inaktiv win und mouse drüber ...)
vielleicht hilft dir das noch weiter,
hatte ich geschrieben um ein Close_Application_Because_Inactivity zu realisieren.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| {
In TForm1.Create -> Application.OnMessage:=AppWndProc;
In TForm1.Destroy -> Application.OnMessage:=NIL;
}
procedure TForm1.AppWndProc(var Msg: TMsg; var Handled: Boolean); begin { solange er auf oder im form macht wird der timer durch setzten von enabled =false so zu sagen auf 0 zurückgesetzt } case Msg.Message of WM_SETFOCUS, WM_KEYFIRST..WM_KEYLAST, WM_MOUSEFIRST..WM_MOUSELAST : timer.Enabled:=false; else timer.Enabled:=true; end; end;
onTimer -> Close |
CenBells - Mi 04.06.03 17:10
Hallo,
kann ich dann auch das wndProc meines Stringgrids überschreiben?
Denn ich wollte nicht von aussen an dem Stringgrid irgendetwas machen, sondern direkt stringgrid intern. Und der Vorschlag von Tana´Ri hilft leider nicht so richtig.
Das Stringgrid, daß ich verwende ist von dem Normalen TStringgrid abgeleitet bietet aber mehr funktionalitäten, zb das Event onCellHint, Das wird ausgelöst, wenn der mauszeiger sich mehr als eine gewisse spanne über einer zelle befunden hat. und da ist dann das problem.
Wenn ich zb in einem ICQ-fenster (welches über dem fenster mit dem Stringgrid liegt) was schreibe und dann mal mit der Maus über das andere Stringgridfenster drüber fahre, wird das hintfenster angezeigt und mein icq fenster verschwindet. und das ist sehr nervig...
Kann vielleicht noch wer helfen?
Gruß
Ken
CenBells - Mi 04.06.03 17:14
update: also, irgendwie geht das doch mit dem self.focused :roll:
liegt das daran, das das fenster nicht focusiert ist und damit auch keine der enthaltenen komponenten fokussiert sein kann?
Gruß
Ken
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!