XbpDialog im Vordergrund behalten

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
vorti
UDF-Programmierer
UDF-Programmierer
Beiträge: 56
Registriert: Mo, 25. Sep 2017 12:21

XbpDialog im Vordergrund behalten

Beitrag von vorti » Fr, 17. Nov 2017 9:22

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?

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14590
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: XbpDialog im Vordergrund behalten

Beitrag von brandelh » Fr, 17. Nov 2017 9:46

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
Gruß
Hubert

Antworten