Eigenes Programm in den Vordergrund holen [erledigt]

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Eigenes Programm in den Vordergrund holen [erledigt]

Beitrag von satmax »

Hallo,

ich schaffe es nicht, mein eigenes Programm in den Vordergrund zu holen. :banghead:

Hintergrund: ich erhalte eine Windows Nachricht, regagiere darauf, führe eine kleine Aktion aus und soll mein Programm dann in den Vordergrund schalten.

Das einzige was ich schaffe ist, das mein Icon in der Task-Leiste zu blinken beginnt.

Versucht habe ich unter anderem (gekürzt):

Code: Alles auswählen

AllowSetForegroundWindow(ASFW_ANY) 
aWnd:= WildFindWindow( public_cTitle )
IF LEN(aWnd) >0
  debugprint("Window found!", aWnd[1][1])
  hWND:= aWnd[1][1]
  ShowWindow(hWND,SW_RESTORE)
  BringWindowToTop(hWND)
   SetForegroundWindow(hWND)
  debugPrint("tdBringtotop",tdBringToTop(public_cTitle,"RESTORE"))

  ShowWindow(public_App:getHWnd(),SW_RESTORE)
  BringWindowToTop(public_App:getHWnd()) 
  	
  AllowSetForegroundWindow(ASFW_ANY) 
   SetForegroundWindow(public_App:getHWnd())

  	
   SetForegroundWindow(hWND)
   ShowWindowAsync(hWnd,1)
   SetAppWindow():AlwaysOnTop := .T.	

  public_App:AlwaysOnTop := .T.	
  public_App:show()
  CenterControl(public_App)

endif
Alles doppelt und dreifach, halt beim testen....

Das CenterControl() greift, aber meine App kommt nicht in den Vordergrund, lediglich das Symbol in der Iconleiste beginnt zu blinken.

Woran kann das liegen?
Zuletzt geändert von satmax am Do, 25. Feb 2016 17:28, insgesamt 1-mal geändert.
Gruß
Markus
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Eigenes Programm inden Vordergrund holen

Beitrag von Koverhage »

Eventuell ein maximize ?
Gruß
Klaus
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Eigenes Programm inden Vordergrund holen

Beitrag von satmax »

Koverhage hat geschrieben:Eventuell ein maximize ?
wird maximiert, kommt trotzdem nicht in den Vordergrund.
Gruß
Markus
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Eigenes Programm inden Vordergrund holen

Beitrag von satmax »

Das funktioniert, "blinkt" aber einmal unschön:

Code: Alles auswählen

SetAppWindow():AlwaysOnTop := .T.	
SetAppWindow():configure()
SetAppWindow():AlwaysOnTop := .f.	
SetAppWindow():configure()
Gruß
Markus
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Eigenes Programm inden Vordergrund holen

Beitrag von AUGE_OHR »

satmax hat geschrieben:Das einzige was ich schaffe ist, das mein Icon in der Task-Leiste zu blinken beginnt.
...
Woran kann das liegen?
wenn ich ein Programm unter XP gestartet habe erscheint es nicht gleich in der Task-Leiste sondern erst wenn ich es minimiere.

wenn unter Win7 ein Icon in der Task-Leiste blinkt bedeutet es das es gerne vom User den Focus haben möchte -> aktives "sichtbares" Fenster.

wenn ich unter XP eine solche Aktion machen wollte müsste zunächst das Icon, durch "Minimize", in die Task-Leiste gebracht werden. ein Klick auf das Icon würde es "restoren".

ich würde also nun versuchen deine Applikation, auch wenn du die "siehst", zu "restoren" ( oder maximize )

Code: Alles auswählen

#define WM_SYSCOMMAND      0x0112
#define SC_MINIMIZE        0xF020
#define SC_MAXIMIZE        0xF030
#define SC_RESTORE         0xF120

* -------------------------------- *
FUNCTION MaximizeWindow( hWnd )
   DllCall( "User32.DLL", DLL_STDCALL, "SendMessageA", ;
            hWnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0, 0 )
RETURN nil
* -------------------------------- *
FUNCTION MinimizeWindow( hWnd )
   DllCall( "User32.DLL", DLL_STDCALL, "SendMessageA", ;
            hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0, 0 )
RETURN nil
* -------------------------------- *
FUNCTION RestoreWindow( hWnd )
   DllCall( "User32.DLL", DLL_STDCALL, "SendMessageA", ;
            hWnd, WM_SYSCOMMAND, SC_RESTORE, 0, 0 )
RETURN nil
gruss by OHR
Jimmy
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Eigenes Programm inden Vordergrund holen

Beitrag von satmax »

Jimmy, das geht so auch nicht.

Hilfreich ist RestoreWindow(hWnd) nur, um im Falle eines minimierten Fensters das Fenster wieder herzustellen:

So funktioniert das schon ganz brauchbar:

Code: Alles auswählen

....
elseif nMsg == WM_USER_SHOWDISPO   
	debugprint("WM_USER_SHOWDISPO")
	aWnd:= WildFindWindow( public_cTitle )
	
	IF LEN(aWnd) >0
		RestoreWindow(aWnd[1][1])      // Falls App minimiert
		lOnTop:=SetAppWindow():AlwaysOnTop
		SetAppWindow():AlwaysOnTop := .T.	  // Trick um App in den Vordergrund zu bringen
		SetAppWindow():configure()
		SetAppWindow():AlwaysOnTop := lOnTop  // Ur Status wiederherstellen
		SetAppWindow():configure()
	else	
		debugprint("Handle nicht gefunden")
	endif
endif
return DllExecuteCall( _tfpDefWindowProc_ , hWnd , nMsg , wp , lp )
Gruß
Markus
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Eigenes Programm inden Vordergrund holen

Beitrag von Herbert »

AlwaysOnTop wäre dann wohl auch nicht unbedingt das Beste, es liesse sich neben anderen Anwendungen nicht mehr hinter jene anderen Fenster verstecken.
Nehme aber an, dass du unbedingt alles versuchst, das Ding sichtbar zu bekommen.

WildFindWindow kenne ich nicht. Bringt das Zeichen zurück? Andernfalls müsstest du bloss auf >0 testen. Scheinst aber doch in die Schlaufe zu kommen.
Blöde Frage: Ist dein Mainwindow visible definiert?

Ich teste übrigens so, hwndlg ist übrigens nur dann <> 0, wenn das Programm bei erneutem Aufruf bereits lief. Daher meine blöde Frage oben...

Code: Alles auswählen

// Beginn Startrutine
DLLFUNCTION BringWindowToTop( nHwnd )            USING STDCALL FROM USER32.DLL
DLLFUNCTION SetForegroundWindow( nHwnd )         USING STDCALL FROM USER32.DLL

// Appsys...
    hWndDlg := DllCall("User32.dll",DLL_STDCALL,"FindWindowA",0,"ZUSCALC Meetingpoint")
    IF !(hWndDlg == 0)    // das Programm wurde bereits füher aufgerufen - hervorholen
      DllCall("User32.dll",DLL_STDCALL,"SetForegroundWindow",hWndDlg)
      DllCall("User32.dll",DLL_STDCALL,"BringWindowToTop",hWndDlg)
      DllCall("User32.dll",DLL_STDCALL,"ShowWindow",hWndDlg,1)
      DllCall("User32.dll",DLL_STDCALL,"UpdateWindow",hWndDlg)
    ENDIF
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Eigenes Programm inden Vordergrund holen

Beitrag von satmax »

WildFindWindow(cTitile) liefert mit ein Array mit all den Fenstern auf die der Titel passt, in diesem Fall eines.
Jedes Element enthalt {hWin,cTitleKomplett,num,ProzessID, cNameExe}

Das Handele stimmt, denn ich kann das Fenster verschieben, zentrieren, maximieren, alles halt im Hintergrund.

AlwaysOnTop aktiviere ich nur ganz kurz, wird ja 2 Zeilen später wieder aufgehoben. Das ist eben der Trick, aber so funktioniert es. Auch bei Deiner Variante blinkt nur das Icon in der Taskleiste.
Gruß
Markus
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Eigenes Programm inden Vordergrund holen

Beitrag von AUGE_OHR »

satmax hat geschrieben:Das Handele stimmt, denn ich kann das Fenster verschieben, zentrieren, maximieren, alles halt im Hintergrund.
em ... äh ... und was läuft im Vordergrund ?
gruss by OHR
Jimmy
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Eigenes Programm inden Vordergrund holen

Beitrag von Herbert »

Ah so, das Fenster ist da, kommt aber nicht im Vordergrund...
Dann ist wohl dasjenige Fenster (diejenige App), welche dein Programm verdeckt Schuld an der Sache und nicht dein Programm.
Oder sind alle anderen Fenster (Explorer usw.) auch stets davor?
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Eigenes Programm inden Vordergrund holen

Beitrag von brandelh »

Ist da irgendwo ein Systemdialog aktiv (Messagebox etc. ) ?
Gruß
Hubert
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Eigenes Programm inden Vordergrund holen

Beitrag von satmax »

AUGE_OHR hat geschrieben:
satmax hat geschrieben:Das Handele stimmt, denn ich kann das Fenster verschieben, zentrieren, maximieren, alles halt im Hintergrund.
em ... äh ... und was läuft im Vordergrund ?
1,2,3 verschiedene andere Programme, meines ist halb halb verdeckt, von allen Programmen. Habe 3440x1440 Monitorauflösung. Auch beim halbverdeckten Programm erkennt man ganz gut wenn es zentriert, verschoben oder maximiert wird.

@Herbert: auch der Explorer verdeckt es halb.

@Hubert: nein keine Messagebox aktiv

@AUGE_OHR: egal, jedes Programm verdeckt einen Teil davon.

Ich zeig euch ein Foto.
Dateianhänge
15-02-_2016_13-02-15.png
15-02-_2016_13-02-15.png (311.98 KiB) 12806 mal betrachtet
Gruß
Markus
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Eigenes Programm inden Vordergrund holen

Beitrag von brandelh »

Was passiert, wenn du es direkt anklickst ? Eventuell sind die anderen auch auf "always on top" eingestellt.
Gruß
Hubert
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Eigenes Programm inden Vordergrund holen

Beitrag von satmax »

Nein, das geht alles problemlos. Keines der anderen Programme sind onTop. Alle Programme sind von uns (Explorer ausgenommen. :) )
Gruß
Markus
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Eigenes Programm inden Vordergrund holen

Beitrag von AUGE_OHR »

satmax hat geschrieben:

Code: Alles auswählen

   SetAppWindow():AlwaysOnTop := .T.	
   CenterControl(public_App)
Das CenterControl() greift, aber meine App kommt nicht in den Vordergrund, lediglich das Symbol in der Iconleiste beginnt zu blinken.
versuch mal

Code: Alles auswählen

SetAppWindow(public_App)
SetAppFocus(public_App)
gruss by OHR
Jimmy
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Eigenes Programm inden Vordergrund holen

Beitrag von Wolfgang Ciriack »

Also ich benutze diese Aufrufe

Code: Alles auswählen

   DllCall( "User32.dll", DLL_STDCALL, "SetForegroundWindow", hWndDlg )
   DllCall( "User32.dll", DLL_STDCALL, "BringWindowToTop", hWndDlg )
   DllCall( "User32.dll", DLL_STDCALL, "ShowWindow", hWndDlg, 1 )
   DllCall( "User32.dll", DLL_STDCALL, "UpdateWindow", hWndDlg )
Viele Grüße
Wolfgang
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Eigenes Programm inden Vordergrund holen

Beitrag von Herbert »

Hast du das Phänomen auch auf einem anderen Rechner?
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Eigenes Programm inden Vordergrund holen

Beitrag von AUGE_OHR »

werden die Fenster automatisch aktive wenn die Maus "drüber fährt" ?
Win10Maus.jpg
Win10Maus.jpg (83.98 KiB) 12762 mal betrachtet
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Eigenes Programm inden Vordergrund holen

Beitrag von brandelh »

:alwaysontop wird nur bei create() oder configure() ausgewertet, aber hast du die Funktionen des Fensters schon versucht ?

:toBack()
:toFront()
Gruß
Hubert
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Eigenes Programm inden Vordergrund holen

Beitrag von satmax »

@Jimmy: same problem

@Wolfgang: hatten wir schon :)

@herbert: ja, zumindest auf Win 8.1 win 10 und Terminalserver 2012

Wie gesagt, ich muss mich ja selbst in den Vordergrund holen. Das xBase++ ist in etwa so aufgebaut:

Code: Alles auswählen


// The receiver window will run in it's own thread
function InitTheReceiver()
local oThread
oThread := Thread():New()
oThread:Start({||ReceiverThread()})
return NIL
...
ReceiverThread()  // ist praktisch ein Hidden Fenster
...
oCls:lpszClassName := WND_CLASSNAME_DISPO //  autogenerated with UUIDGen.exe
..
hWndReceiver := DllExecuteCall( _tfpCreateWindowEx_ ,;
                                 0 ,; // No exStyle
                                 hReceiverClass,;// Window Class handle
                                 0,; // No Title 0
                                 0xC40000,; // dwStyle WS_OVERLAPED
                                 0,0,0,0,; // x,y,cx,cy
                                 0,; // hWndParent 
                                 0,; // hMenu
                                 AppInstance(),;
                                 0) // empty LPParam
..

// Hier bekomme ich die Nachrichten von den anderen Programmen
function ReceiverWndProc( hWnd , nMsg , wp , lp )
...
elseif nMsg == WM_CLOSE
   // Destroy the receiver window
   DllExecuteCall( _tfpPostMessage_ , hWnd, WM_DESTROY , 0, 0)
   DllExecuteCall( _tfpPostMessage_ , hWnd, WM_NCDESTROY, 0, 0)
   return 1
elseif nMsg == WM_NCDESTROY
...
elseif nMsg == WM_USER_CALC_ROUTE_4_AUFTRAG_DONE
// re-read data from sql
....
elseif nMsg == WM_USER_SHOWDISPO 
  debugprint("WM_USER_SHOWDISPO")
// Hier hole ich mein eigenes Programm in den Vordergrund was im Moment nur so geht:
  debugprint("WM_USER_SHOWDISPO")
  aWnd:= WildFindWindow( public_cTitle )
		
  IF LEN(aWnd) >0
    RestoreWindow(aWnd[1][1])
    lOnTop:=SetAppWindow():AlwaysOnTop
    SetAppWindow():AlwaysOnTop := .T.	     // Trick aber funktioniert.
    SetAppWindow():configure()
    SetAppWindow():AlwaysOnTop := lOnTop
    SetAppWindow():configure()
  else	
    debugprint("Handle nicht gefunden")
  endif
ENDIF

...
// DefWindowProc() will process the rest of the cases
return DllExecuteCall( _tfpDefWindowProc_ , hWnd , nMsg , wp , lp )

Gruß
Markus
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Eigenes Programm inden Vordergrund holen

Beitrag von satmax »

@Hubert

SetAppWindow():toFront() bringt auch nichts.
Gruß
Markus
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Eigenes Programm inden Vordergrund holen

Beitrag von AUGE_OHR »

satmax hat geschrieben:

Code: Alles auswählen

// The receiver window will run in it's own thread
function InitTheReceiver()
local oThread
oThread := Thread():New()
oThread:Start({||ReceiverThread()})
return NIL

...

function ReceiverWndProc( hWnd , nMsg , wp , lp )
...
elseif nMsg == WM_CLOSE
elseif nMsg == WM_NCDESTROY
elseif nMsg == WM_USER_CALC_ROUTE_4_AUFTRAG_DONE
elseif nMsg == WM_USER_SHOWDISPO 
ENDIF

...
// DefWindowProc() will process the rest of the cases
return DllExecuteCall( _tfpDefWindowProc_ , hWnd , nMsg , wp , lp )
interessant ... und nicht mit ot4xb ... :-k
ich "denke" es hat was mit den Xbase++ "internen" Threads zu tun. Pablo macht das mit

Code: Alles auswählen

   ot4xb_subclasswindow( ::hDlg , Self ,NIL , "ReceiverWndProc" )
...
INLINE METHOD ReceiverWndProc(hWnd,nMsg,wp,lp,ctx)
das ganze läuft dann im Xbase++ "GUI-Thread". Man hat aber damit noch keine "Kommunikation" zur Xbase++ Eventloop.

sag mir ob das der Fall sein könnte was das komische Verhalten erklären würde.

:idea: Idee : du öffnest eine (Dummy) DBF in ReceiverThread() EXCLUSIVE
nun lässt du im Main Xbase++ einen Thread laufen der ebenfalls die (Dummy) DBF öffnen möchte ... geht nicht solange dein externer Thread läuft.
wenn du die nun, im Xbase++ Thread, die (Dummy) DBF öffnen kannst dann schickst du ein PostAppEvent() an deine Main() :)
gruss by OHR
Jimmy
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Eigenes Programm inden Vordergrund holen

Beitrag von satmax »

Ist von Pablo:
Callback Compiler for Xbase++ Ver 1.0.17
(c) Pablo Botella Navarro. (2008)
http://www.xbwin.com
---------------------------------------------------------------------------

What's xppcbk.exe?
------------------
xppcbk.exe generate a OBJ from a simple syntax script
allowing your Xbase++ functions act as true callbacks
in any API that require a callback pointer.
....

Es geht nicht darum das ein anderes Programm das xBase++ Programm in den Vordergrund holt. Es geht darum, das sich das xBase++ selbst in den Vordergrund bringt.

Ich erhalte viele verschiedene Windows Nachrichten von 2 anderen Programmen und muss eben darauf reagieren. Das klappt auch alles.

Was nicht geht, ist das sich mein xBase++ Programm selbst in den Vordergrund schaltet, ausser eben mit diesem Trick ganz kurz auf AlwaysOnTop:=.t. zu schalten um es dann sofort wieder abzuschalten.

Die callback Function arbeitet völlig korrekt. Man schickt einfach eine Windowsnachricht an das unsichtbare Fenster mit der UUID. Mein Thread verarbeitet dann die Nachricht und/oder gibt sie weiter. Das passt alles und macht keine Probleme.
Gruß
Markus
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Eigenes Programm inden Vordergrund holen

Beitrag von AUGE_OHR »

satmax hat geschrieben:Ist von Pablo:
Callback Compiler for Xbase++ Ver 1.0.17
(c) Pablo Botella Navarro. (2008)
http://www.xbwin.com
aha ... Ja ... damit geht es natürlich auch.
satmax hat geschrieben:Es geht nicht darum das ein anderes Programm das xBase++ Programm in den Vordergrund holt. Es geht darum, das sich das xBase++ selbst in den Vordergrund bringt.
schon verstanden aber es darum "wo" du dich befindest wenn du das versuchst.

du arbeitest ja mit einem (Xbase++) Thread wo du die Daten empfängst. es ist aber nicht der (Xbase++) "Main Thread" ...
ich würde aus dem Thread an den "Main" Thread eine Nachricht schicken ( oder mittels DBF ) damit in der Main Loop die App in den Vordergrund geholt wird.
gruss by OHR
Jimmy
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Eigenes Programm inden Vordergrund holen

Beitrag von satmax »

Hallo Jimmy,

ich habe nun versucht mein Programm im Haupt Event Loop (also im Main Tread) in den Vordergrund zu holen, geht auch nicht, gleicher Effekt.
Gruß
Markus
Antworten