Seite 1 von 1

kein Fokus auf XbpDialog

Verfasst: Fr, 15. Apr 2016 13:54
von Wonderer
Hallo,

ich hab da mal wieder ne Frage und ein Problem.

Ich habe hier einen XbpDialog (PARENT ist AppDesktop - OWNER ist XbpCrt ) welches den Fokus nicht annimmt.

Code: Alles auswählen

oDlg := XbpDialog():new( SetAppWindow():setParent(), SetAppWindow(), {Mpos_x, Mpos_y}, {600,275}, , .F.)

oDlg:taskList := .T.
oDlg:minButton:= .T.
oDlg:maxButton:= .F.
oDlg:border   := XBPDLG_RAISEDBORDERTHIN_FIXED
oDlg:close           :={|| nEvent := xbeP_Close }
oDlg:setName( 111857 )
oDlg:create()
// snip...
// Browser anzeigen und Focus geben
oDlg:show()
oBrs:show()
SetAppWindow( oDlg )
// Fokus auf Fenster vorher?
SetAppFocus( oDlg )

//FENSTER verschwindet im Hintergrund
//WHY?!?
//Workaround?
if (SetAppWindow():setName() != 111857) .or. (SetAppFocus():setName() != 111857)
	MsgBox( "Fehler beim setzen des aktiven Fensters!" )
	SetAppWindow( oDlg )
	SetAppFocus( oDlg )
endif

SetAppFocus( oBrs )

nEvent := xbe_None

do while ...
  nEvent := AppEvent(...)
  //snip...
  oPart:handleEvent(...)
Die MessageBox wird nicht angezeigt - das heißt die Rückgabe-Variable enthält das Fenster das auch den Focus haben soll.
Aber der XbpDialog verschwindet hinter dem XbpCrt. Eigentlich kann das doch dann nur an dem Inhalt der Event-Schleife liegen?!?

mal schauen ob ich den Urheber demnächst dazu befragen kann, er meinte der ursprüngliche Code is schon mehrere Jahre alt....

EDIT: Sorry, falsches Forum - bitte verschieben nach GUI...

Re: kein Fokus auf XbpDialog

Verfasst: Fr, 15. Apr 2016 13:58
von Martin Altmann
Wie gewünscht verschoben.

Re: kein Fokus auf XbpDialog

Verfasst: Fr, 15. Apr 2016 14:45
von georg
Hallo,


meine Erfahrung bei solch seltsamen Verhalten war meist, dass der Fehler vor dem Bildschirm sitzt. Versuche erst einmal, den Code drastisch zu verringern (z.B. den Browse weglassen) und prüfe, ob das Verhalten immer noch so seltsam ist. Meine Erfahrung war dann oft, dass ein einfacheres Programm sich korrekt verhält, und der Fehler in einem ganz anderen Element steckte.

Dann fällt mir auf, dass Du unterschiedliche Objekte als Parent und Owner hast - gibt es dafür einen bestimmten Grund?

Re: kein Fokus auf XbpDialog

Verfasst: Fr, 15. Apr 2016 15:14
von Wonderer
georg hat geschrieben:Versuche erst einmal, den Code drastisch zu verringern (z.B. den Browse weglassen) und prüfe, ob das Verhalten immer noch so seltsam ist.
Danke für den Tipp. So mache ich das auch ab und zu..
Meine Erfahrung war dann oft, dass ein einfacheres Programm sich korrekt verhält, und der Fehler in einem ganz anderen Element steckte.
und dann läuft es plötzlich.. :)
Dann fällt mir auf, dass Du unterschiedliche Objekte als Parent und Owner hast - gibt es dafür einen bestimmten Grund?
Hmm.. Parent habe ich auf setParent vom XbpCRT gesetzt, weil sonst der XbpDialog nur innerhalb dieses Hauptfensters verschiebbar ist.
Gut möglich dass hier der Fehler liegt.

Habe mir gerade nochmal das Beispiel in den Alaska-Samples angeschaut (MDIDEMO) und den Projektleiter angefragt ob eine Umstellung
von Hybrid auf GUI bzgl.des Zeitbedarfes Ok ist. Den Beispiel-Code kann man sich wirklich gut als Vorbild nehmen :)

Re: kein Fokus auf XbpDialog

Verfasst: Fr, 15. Apr 2016 19:26
von georg
Hallo,


das mit Parent/Owner ist OK, wenn es so gewollt ist, sollte aber nicht zu so einem Verhalten führen.

Re: kein Fokus auf XbpDialog

Verfasst: Sa, 16. Apr 2016 0:43
von AUGE_OHR
Wonderer hat geschrieben:Hmm.. Parent habe ich auf setParent vom XbpCRT gesetzt, weil sonst der XbpDialog nur innerhalb dieses Hauptfensters verschiebbar ist.
Gut möglich dass hier der Fehler liegt.
ein XbpCrt() als "Main" ist IMHO keine gute Wahl.
vielmehr sollte man ein Top-Window, also XbpDialog(), als Main verwenden und XbpCrt() als Child.

ein "freies" Fenster benötigt AppDeskTop() als Parent und für solche brauchst du evtl. den Owner wenn z.b. nur eine Eventloop
Wonderer hat geschrieben:Habe mir gerade nochmal das Beispiel in den Alaska-Samples angeschaut (MDIDEMO) und den Projektleiter angefragt ob eine Umstellung von Hybrid auf GUI bzgl.des Zeitbedarfes Ok ist. Den Beispiel-Code kann man sich wirklich gut als Vorbild nehmen :)
ich habe keine Ahnung was dich das vermuten lässt bei den Problemen die du bislang hattest 8)