Seite 1 von 1

MsgBox in englisch

Verfasst: Mo, 12. Dez 2016 13:59
von peternmb
Hallo,
ich möchte in einer MsgBox das Ja/Nein auf englisch umstellen (1.90.355) .
Müsste doch irgenwie mit SetLocale zu machen sein, ich finde allerdings nicht wie/wo.

Re: MsgBox in englisch

Verfasst: Mo, 12. Dez 2016 14:15
von brandelh
nur ein EINER MSGBOX, oder alle Systemmeldungen ?

Re: MsgBox in englisch

Verfasst: Mo, 12. Dez 2016 14:27
von peternmb
brandelh hat geschrieben:nur ein EINER MSGBOX, oder alle Systemmeldungen ?
eigentlich alle Systemmeldungen, speziell aber die Msgbox (was sonst noch?).

Re: MsgBox in englisch

Verfasst: Mo, 12. Dez 2016 15:08
von brandelh
Ich bin mir nicht sicher, aber standardmäßig werden für Systemmeldungen (MsgBox Text etc.) die PC Einstellungen verwendet.
Wenn es für alle gelten soll, müsste man dort vorgaukeln, dass es ein englisches Programm ist.
Ich habe die deutsche Version installiert, wie verhält sich die internationale Version ?

Ich fürchte "nutze Sprache des PC" ist Standard, und ich meine zwei Sprachen geht nur bei teureren Versionen, kann mich aber täuschen.

Wenn man aber nur ein Fenster ändern will, dann geht das nicht über Systemeinstellungen sondern man muss das eine Fenster selbst machen, daher die Frage.

Re: MsgBox in englisch

Verfasst: Mo, 12. Dez 2016 15:11
von Tom
Die MsgBox() ist ein Windows-API-Element. Sie reagiert auf die Spracheinstellungen des Betriebssystems; wenn das OS auf Englisch umgestellt wird, sagt die MsgBox "Yes" und "No". Der einfachste Weg, um also englischsprachige MsgBoxen zu erreichen, wäre die Windows-Sprachumstellung. Eine ähnlich einfache besteht darin, MsgBoxen selbst zu programmieren, was zusätzlich erlauben würde, sie funktionell aufzuwerten, etwa um eigene Icons ergänzt, mit differenzierteren Antworten, Speichermöglichkeiten, Animationen oder ähnlicher Grafik. Wenn man aber wirklich die native MsgBox will, die unter einem deutschen OS mit englischen Antworten hantiert, müsste man m.E. API-Funktionen wie SetWindowsHookEx und anderen arbeiten, um die Nachrichten an die Box abzufangen und zu übersetzen. In irgendeinem VB-Archiv habe ich ein Beispiel gefunden, aber mir ist leider der Link abhandengekommen.

Re: MsgBox in englisch

Verfasst: Mo, 12. Dez 2016 15:27
von peternmb
Gut, das genügt mir dann eigentlich.

Ich muss dann bei der wahlweisen Umstellungen meines Programme auf Englisch dafür nichts tun da anzunehmen ist, dass wenn jemand die Sprache im Programm auf Englisch umstellt, er dies auch im Betriebssystem getan hat...

Re: MsgBox in englisch

Verfasst: Di, 13. Dez 2016 7:39
von AUGE_OHR
peternmb hat geschrieben:ich möchte in einer MsgBox das Ja/Nein auf englisch umstellen (1.90.355) .
wieso redet ihr alle über die Xbase++ (?) MsgBox() ... die hat keine Ja/Nein Buttons [-X

eine ConfirmBox() ist wohl gemeint und die XBPMB_* Konstanten welche den Text für die Button vorgeben.
peternmb hat geschrieben:Müsste doch irgenwie mit SetLocale zu machen sein, ich finde allerdings nicht wie/wo.
hm ... mit

Code: Alles auswählen

   cCode := SetLocale(NLS_ICOUNTRY)
kannst du die Einstellung abfragen aber nicht setzten
Allgemeine landesspezifische Einstellungen (Read only)
klar die wären ja System weit ...
wenn ich System-weit auf "CN" umstelle wäre auch das Ja/Nein auf chinesisch ;-)

p.s. der User kann, für jedes Fenster, eine andere Keyboard Einstellung (DE,CN,EN) haben !

Re: MsgBox in englisch

Verfasst: Di, 13. Dez 2016 8:38
von brandelh
Jimmy hat Recht ...
Die Funktion MsgBox() dient der Anzeige eines Textes in einem einfachen, grafischen Dialogfenster.
Unter dem Text wird ein Pushbutton "Ok" angezeigt, mit dem das Fenster wieder geschlossen wird.
Ja/Nein wird bei einer ConfirmBox() angezeigt, wenn man ...

XBPMB_YESNO Ja Nein

als nButton angibt. Wenn dein Quellcode MsgBox() so aufruft und du Ja/Nein siehst, wird wohl irgendwo eine Übersetzung definiert sein von MsgBox() auf ConfirmBox().
Eine Funktion im eigenen code ersetzt eine gleichnamige in einer DLL (oder natürlich #command | #translate etc.) :

Code: Alles auswählen

#include "Xbp.ch"
FUNCTION msgbox(cMessage, cTitle, oOwner )
   DEFAULT cTitle TO "MyMsgBox"
   confirmbox(oOwner,cMessage,cTitle,XBPMB_YESNO,,XBPMB_DEFBUTTON2)
RETURN NIL
wenn das z.B. im Quellcode eingebunden wird, wird immer die ConfirmBox gestartet, eine Möglichkeit um das zugehörige Fenster zu definieren.

Mehr Sinn macht es mit Abfrage des Rückgabewertes, hier meine einfache JaNeinBox()

Code: Alles auswählen

*-------------------------------------------------------
function JaNeinBox(cFrage, cTitel)        // Einfache Frage
   DEFAULT cFrage TO "Bitte wählen"
   DEFAULT cTitel TO "JaNeinBox()"
   if XBPMB_RET_YES = ConfirmBox( SetAppWindow(), cFrage, cTitel, XBPMB_YESNO, XBPMB_QUESTION+XBPMB_APPMODAL+XBPMB_MOVEABLE )
      Return .t.
   endif
Return .f.

Re: MsgBox/ConfirmBox in englisch

Verfasst: Di, 13. Dez 2016 11:02
von peternmb
Die Funktion MsgBox() dient der Anzeige eines Textes in einem einfachen, grafischen Dialogfenster.
Unter dem Text wird ein Pushbutton "Ok" angezeigt, mit dem das Fenster wieder geschlossen wird.
Ja, es geht natürlich nicht um die MsgBox sondern um die ConfirmBox. Bei der MsgBox reicht mir das eher sprachunabhängige "OK".

Code: Alles auswählen

nConfirm:= ;
ConfirmBox(,"Soll die Datei wirklich gelöscht werden?", ;
            "bitte bestätigen",;;               
XBPMB_YESNO , XBPMB_QUESTION+XBPMB_APPMODAL+XBPMB_MOVEABLE,XBPMB_DEFBUTTON1 )
IF nConfirm == XBPMB_RET_NO
   return 
ENDIF

Re: MsgBox in englisch

Verfasst: Di, 13. Dez 2016 11:50
von Herbert
Am Geschicktesten macht ihr das wie Tom anregt: Baut eine eigene Funktion für die Darstellung von Informationen/Fehlern usw. So habt ihr alle Sprachprobleme weg und die Texte (Titel, Textlinien) werden als Argument mitgeliefert. Die Antwort ist dann einfach aus dem Funktionsaufruf entsprechend dem Klick des Users.