Autor Beitrag
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Di 03.06.03 20:16 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 133


D3 Prof, D7 PE
BeitragVerfasst: Mi 04.06.03 00:12 
Mit folgenden ereignissen von TApplication kannst Du feststellen, ob Deine Anwendung den Focus hat.
ausblenden 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 user profile iconTino: Delphi-Tags hinzugefügt.
CenBells Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 230



BeitragVerfasst: 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.
ausblenden 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

_________________
mfg
Tana´Ri
CenBells Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: 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