Seite 1 von 1

XbpDialog im Vordergrund behalten

Verfasst: Fr, 17. Nov 2017 9:22
von vorti
Hallo,
wenn ein 2tes Dialogfenster aufgerufen wird (z.B. ja/nein Abfrage), welches vor einem anderen Dialogfenster liegt, wird es nicht mehr angezeigt/verliert den Focus, wenn ich auf eine andere Anwendung zugreife (z.B. Inet Browser).
Kann man irgendwo einstellen, das es solang im Vordergrund bleibt, bis die Eingabe auch erfolgt ist?

Re: XbpDialog im Vordergrund behalten

Verfasst: Fr, 17. Nov 2017 9:46
von brandelh
Eigentlich JA, wenn der richtige Owner eingestellt ist, aber die normale msgbox() nimmt immer das Fenster aus SetAppWindow().

Unterschiedliche Vorgehensweisen, je nach Fenstertyp:

Eigene Fenster abgeleitet von XbpDialog():
- siehe XbpDialog:showModal()
- siehe XbpWindow:setModalState() (2.00 ? )
- siehe XbpDialog:alwaysOnTop - kann aber unschön werden, da alles überdeckt wird.
- eigene Fenster die andere nach Vorne holen wenn Sie Fokus bekommen - nicht ganz einfach

MsgBox() und andere einfache Systemmeldungen
- entweder immer SetAppWindow() richtig setzen, oder
- auf ConfirmBox() eigene Meldungen aufbauen:

Code: Alles auswählen

*-------------------------------------------------------------
Function MyMsgBox(uText,cTitel,oOwner,nStyle)
   local cText,x,xMax
   DEFAULT nStyle TO XBPMB_WARNING + XBPMB_MOVEABLE
   // XBPMB_QUESTION       Fragezeichen
   // XBPMB_WARNING        Warnung        -> Standard MSGBOX()
   // XBPMB_INFORMATION    Information
   // XBPMB_CRITICAL       Kritische Situation

   // XBPMB_APPMODAL  Confirmbox ist modal in Bezug auf die Xbase++ Anwendung
   // XBPMB_SYSMODAL  Confirmbox ist systemweit modal
   // XBPMB_MOVEABLE  Confirmbox kann verschoben werden

   do case
      case valtype(uText) = "A"                     // reiner Text oder nur debugging
           cText := Var2Char(uText[1])
           xMax  := len(uText)
           for x := 2 to xMax
               cText += chr(13) + Var2Char(uText[x])
           next
      case valtype(uText) = "C"
           cText := uText
      case valtype(uText) = "N"
           cText := ntrim(uText)
      case valtype(uText) = "D"
           cText := ctod(uText)
      otherwise
           cText := "Parameterfehler bei MyMsgBox: "+valtype(uText)+;
                    " statt C, N, D oder A"+chr(13)+;
                    "Bitte diesen Fehler melden."
   endcase
   ConfirmBox(oOwner,cText,cTitel,XBPMB_OK,nStyle)
return NIL
*-------------------------------------------------------------
Function ErrBox(uText,cTitel,oOwner)
   DEFAULT cTitel TO "Fehlermeldung"
   // XBPMB_QUESTION       Fragezeichen
   // XBPMB_WARNING        Warnung
   // XBPMB_INFORMATION    Information
   // XBPMB_CRITICAL       Kritische Situation

   // XBPMB_APPMODAL  Confirmbox ist modal in Bezug auf die Xbase++ Anwendung
   // XBPMB_SYSMODAL  Confirmbox ist systemweit modal
   // XBPMB_MOVEABLE  Confirmbox kann verschoben werden
   MyMsgBox(uText,cTitel,oOwner, XBPMB_CRITICAL + XBPMB_MOVEABLE )
return NIL
*-------------------------------------------------------------
Function InfoBox(uText,cTitel,oOwner)
   DEFAULT cTitel TO "Hinweis"
   MyMsgBox(uText,cTitel,oOwner,XBPMB_INFORMATION + XBPMB_MOVEABLE )
return NIL