Programm in den Vordergrund bringen [ERLEDIGT]

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2825
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 96 Mal
Danksagung erhalten: 13 Mal

Programm in den Vordergrund bringen [ERLEDIGT]

Beitrag von georg »

Guten Abend -


mein Programm lauert im Hintergrund auf ein Drag-and-Drop vom Browser. Nach dem Drag-and-Drop versuche ich, das Fenster in den Vordergrund zu bringen:

Code: Alles auswählen

SetAppWindow(RootWindow())
SetAppFocus(oXbp)
Nützt nur leider nichts, was mache ich gedanklich falsch?


Georg
Zuletzt geändert von georg am Sa, 14. Aug 2010 17:44, insgesamt 1-mal geändert.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12907
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Programm in den Vordergrund bringen

Beitrag von AUGE_OHR »

georg hat geschrieben:mein Programm lauert im Hintergrund auf ein Drag-and-Drop vom Browser. Nach dem Drag-and-Drop versuche ich, das Fenster in den Vordergrund zu bringen:

Code: Alles auswählen

SetAppWindow(RootWindow())
SetAppFocus(oXbp)
Nützt nur leider nichts, was mache ich gedanklich falsch?
Dein Programm und der Browser sind 2 Applicationen.

Frage : wie "schaltest" du von einer Application zu anderen ?

per Keyboard macht man das ja mit ALT-TAB ... und auf was "wirkt" es dann ?
Es ist die Tasklist, also musst du da ansetzen.

such mal im Forum nach GetTaskList(). Wenn du dann den Namen deiner Application vorgibst und das Handle hast kannst du mit

Code: Alles auswählen

    nHwnd := VAL( LEFT( aTasklist[ i ], 8 ) )
    ShowWindow( nHwnd, SW_RESTORE )
    BringWindowToTop( nHwnd )
    SetForegroundWindow( nHwnd )
deine Application in den Vordergrund bringen.
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Programm in den Vordergrund bringen

Beitrag von brandelh »

Hi,

das Problem wird sein, dass er erstmal in die Ereignisverwaltung der Xbase++ Anwendung kommt.
Ich vermute dass DRAG im Internetexplorer erzeugt wird und aus diesem ein DROP in das Xbase++ Programmfenster erfolgt.

Hierzu muss dieses das DROP Ereignis verarbeiten, wobei dieses "direkt" geschieht.
Hierzu bitte in der Hilfe zu XbpWindow ansehen:
:dropZone
:dragDrop ... Event ... xbeP_DragDrop == Objekt wurde in ein Drop Zone-Objekt fallengelassen.
in diesem codeblock müsste dann ein RootWindow():show() bzw. :toFront() oder setappfocus(...)
aber diese Verarbeitung muss schnell gehen !!!!
Gruß
Hubert
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2825
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 96 Mal
Danksagung erhalten: 13 Mal

Re: Programm in den Vordergrund bringen

Beitrag von georg »

Hallo,


normalerweise ziehe ich den Link auf das Icon in der Taskleiste.

GetTastList() habe ich zwar gefunden, allerdings bekomme ich:

unresolved external GETWINDOW

sowie eine nicht deklarierte Variable GW_HWNDNEXT.

Ausserdem fehlt mir die Definition von

ShowWindow()
BringWindowToTop()
SetForegroundWindow()


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Re: Programm in den Vordergrund bringen

Beitrag von Günter Beyes »

Hallo Georg,

versuche es mal mit ::setframestate(XBPDLG_FRAMESTAT_NORMALIZED) im DragDrop-Handler. (Es geht um Windows 7, nicht wahr?)

Gruß,
Günter
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2825
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 96 Mal
Danksagung erhalten: 13 Mal

Re: Programm in den Vordergrund bringen

Beitrag von georg »

Hallo, Günther -


korrekt, es geht um Windows 7, 64bit. Browser ist FireFox.

Ich habe Deinen Vorschlag versucht, aber das Programm bleibt immer noch im Hintergrund.


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Re: Programm in den Vordergrund bringen

Beitrag von Günter Beyes »

Hallo Georg,

ich nehme an, es funktioniert, wenn du andere, nicht mit Xpp erstellte Anwendungen als Drop-Ziel nimmst. Wird denn der DragDrop-Handler deiner Anwendung ausgeführt, wenn du ein Element auf das Taskbar-Icon fallen lässt?

Gruß,
Günter
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Programm in den Vordergrund bringen

Beitrag von Rolf Ramacher »

Hi Georg,

was passiert denn bei SetAppFocus(oDlg) ?
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9361
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Programm in den Vordergrund bringen

Beitrag von Tom »

SetAppFocus() bezieht sich nur auf die App selbst, also den Focus innerhalb der App, daher auch diese drei Buchstaben im Namen der Funktion. :wink: ToFront() legt die Z-Order von Objekten (nachträglich) fest und bezieht sich auch nur auf die App bzw. sogar nur auf einzelne Dialoge. Der einzige Ansatz, der bei Interaktion von mehreren Programmen funktioniert, ist der von Jimmy (API) - es sei denn, Firefox verhindert das an dieser Stelle aktiv.
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9361
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Programm in den Vordergrund bringen

Beitrag von Tom »

Ergänzung: Man kann auch mit oDlg:AlwaysOnTop := .T./.F. herumspielen, vorausgesetzt, es handelt sich nicht um Kinderfenster innerhalb einer MDI-Applikation. Aber das ist mit Vorsicht zu genießen, weil bei AlwaysOnTop := .T. wirklich nichts mehr in den Vordergrund gelangen kann.
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9361
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Programm in den Vordergrund bringen

Beitrag von Tom »

Code: Alles auswählen

FUNCTION DlgToFront(oDlg)
LOCAL nDlgHandle:=oDlg:GetHwnd()
BringWindowToTop( nDlgHandle )
SetForegroundWindow( nDlgHandle )
RETURN NIL

Code: Alles auswählen

DLLFUNCTION BringWindowToTop( nHwnd )           USING STDCALL FROM USER32.DLL
DLLFUNCTION SetForegroundWindow( nHwnd )        USING STDCALL FROM USER32.DLL
Herzlich,
Tom
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Re: Programm in den Vordergrund bringen

Beitrag von Günter Beyes »

Hallo Tom.

wirkt das, wenn die Anwendung zum Taskleisten-Icon minimiert ist?

Gruß,
Günter
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9361
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Programm in den Vordergrund bringen

Beitrag von Tom »

Womit?
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12907
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Programm in den Vordergrund bringen

Beitrag von AUGE_OHR »

Günter Beyes hat geschrieben:wirkt das, wenn die Anwendung zum Taskleisten-Icon minimiert ist?
zumindest unter XP und Win7 32bit.
georg hat geschrieben:unresolved external GETWINDOW
hm ... ich habe die Function doch mehrfach im Forum gepostet ...auch die anderen Functionen ...
georg hat geschrieben:sowie eine nicht deklarierte Variable GW_HWNDNEXT.
hm ... ok die finde ich auch nicht beim "suchen" im Forum, sorry.

Code: Alles auswählen

#define GW_HWNDFIRST        0
#define GW_HWNDLAST         1
#define GW_HWNDNEXT         2
#define GW_HWNDPREV         3
#define GW_OWNER            4
#define GW_CHILD            5
#define GW_MAX              5
p.s. mit dern Functionen kannst du auch :
a.) verhindern das deine Application 2x gestartet wird
b.) eine Application "abschiessen" ( WM_CLOSE , WM_QUIT )

... und wenn du das Handle einer "anderen" Application hast kommst du sogar, mit FindWindow(), an die einzelnen Child´s des "Fenster".
Damit kannst du z.b. den Wert des "Rechner" (Calc) "auslesen" und in dein SLE übernehmen (ohne DragDrop)
http://www.xbaseforum.de/viewtopic.php?f=27&t=4422
gruss by OHR
Jimmy
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2825
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 96 Mal
Danksagung erhalten: 13 Mal

Re: Programm in den Vordergrund bringen

Beitrag von georg »

Hallo,


danke für die verschiedenen Hinweise, werde denen gleich mal nachgehen.

Zum Ablauf: mein Programm (ein Unterstützungsprogramm für Moderatoren) läuft als Fenster auf dem Desktop, aber im Hintergrund. Ich ziehe den entsprechenden Link auf das Icon in der Taskleiste, warte einen Moment, bis Windows 7 das Fenster in den Vordergrund pusht, ziehe den Link etwas nach oben (meine Taskleiste ist unten) und lasse ihn auf dem Programmfenster fallen. Jetzt geht Firefox wieder in den Vordergrund, mein Programm lädt Informationen aus dem Board und soll dann in den Vordergrund kommen, damit ich schneller weitermachen kann.

@Tom: mit Deinem Beispiel habe ich es hinbekommen, vielen Dank, auch an alle anderen, die mitgeholfen haben,


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Antworten