Seite 1 von 1

Wie kann ich sicherstellen, dass das System seine schriftart verwendet

Verfasst: Sa, 23. Mai 2020 6:55
von Eugeny Lutsenko
Wie kann ich sicherstellen, dass das System seine schriftart verwendet? Damit die Benutzeroberfläche auf jedem Computer mit einer beliebigen Windows-Version korrekt angezeigt wird?

Re: Wie kann ich sicherstellen, dass das System seine schriftart verwendet

Verfasst: Sa, 23. Mai 2020 9:57
von brandelh
Eine benutzen die alle Windowsversionen kennen, Arial z.B.

Re: Wie kann ich sicherstellen, dass das System seine schriftart verwendet

Verfasst: Sa, 23. Mai 2020 10:50
von Herbert
Meines Wissens ist Tahoma die Standard-Schriftart.
Die Dialog-Klassen haben die Schriftart als Parameter dabei. Etwas schwierig wird das Ganze bei z.B. Combo-Bxen, da mehrere Elemente die Schrift mittragen (Titel, Eingabefeld, Liste, gewählte Liste). Aber man kann das programmtechnisch lösen. Du gibst eine vor und musst schauen, dass immer dieselbe verwendet wird.

Re: Wie kann ich sicherstellen, dass das System seine schriftart verwendet

Verfasst: Sa, 23. Mai 2020 11:18
von georg
Guten Morgen, Eugeny -


wenn Du einen XbpDialog() erstellst und KEIN XbpFont()-Objekt zuweist, verwendet der XbpDialog() und alle Childen die Standard-Schriftart des System. Dadurch ist sichergestellt, dass alle Xbase++-Programme der Systemdefinition folgen (look alike).

Wenn Du über :setFont() einen eigenen Font zuweist, wird dieser verwendet. Ausnahme: XbpMenu() und XbpMenuBar() lassen sich in Bezug auf die Schriftart nicht verändern.

Andernfalls formulieren Deine Frage bitte neu, vielleicht habe ich sie auch missverstanden.

Re: Wie kann ich sicherstellen, dass das System seine schriftart verwendet

Verfasst: Sa, 23. Mai 2020 19:42
von AUGE_OHR
hi,

Eugeny meint einen Font unter verschiedenen Landes-Sprachen z.b. Kyrillisch oder Chinesisch.

das Problem : OEM <-> ANSI Konvertierung
Lösung : alles in ANSI

Problem No. 2 : DBF welche OEM sind und eine Codepage haben
Lösung : keine unter Xbase++

allgemein : weder OEM noch ANSI sind für eine Multi-Language App optimal. UNICODE ist die Lösung

Re: Wie kann ich sicherstellen, dass das System seine schriftart verwendet

Verfasst: Sa, 23. Mai 2020 19:53
von Eugeny Lutsenko
Das ist die Frage. Das Eidos-System wird nicht nur in Russland verwendet: http://aidos.byethost5.com/map5.php. um das Leben der Benutzer zu erleichtern, habe ich Mehrsprachige Unterstützung, indem Sie die Unterstützung für die Schnittstelle nicht nur Russisch, sondern auch 50. Manchmal funktioniert das jedoch unbefriedigend. Vor kurzem bat mich ein Benutzer aus Mazedonien, mit der intelligenten Bildverarbeitung aus dem Brustkorb von gesunden Menschen zu helfen und mit dem Virus infiziert 19. Es stellte sich heraus, dass es am bequemsten wäre, wenn die Schnittstelle auf Russisch funktionierte. Aber auf seinem Computer ist es nicht so einfach. Ich habe ihm mit Teamviewer geholfen.

Re: Wie kann ich sicherstellen, dass das System seine schriftart verwendet

Verfasst: Sa, 23. Mai 2020 20:15
von brandelh
Herbert hat geschrieben: Sa, 23. Mai 2020 10:50 Meines Wissens ist Tahoma die Standard-Schriftart.
aber nur in neueren Windows Versionen, die Frage war aber welche Schriftart ist auf jedem Windows vorhanden und das ist Arial.
Aber wie Jimmy schrieb ist das nur die halbe Miete. Russisch hat ja auch noch eine andere Art der Schrift,
selbst ähnliche Sprachen brauchen andere Buchstaben und die Länge des Strings wird dadurch immer sehr unterschiedlich sein.
Das macht die Sache nicht einfacher, hinzu kommen ja noch verschiedene Bild Zoom Einstellungen 100, 125, 150 etc. % wenn man das wirklich sauber unterstützen will,
muss man die Schriftlänge und Höhe berechnen und das Formular neu formatieren. Eine echte Herausforderung.

Bei der DBF würde ich beim Speichern das Format UTF-8 nutzen, dazu muss man die Feldlänge so vergrößern dass die Strings auf jeden Fall hinein passen,
oder FOXDBF Binärstrings verwenden. In der Programmoberfläche muss man sich dann nur noch um die lokale ANSI Anzeige kümmern, die UTF-8 Texte sind eindeutig (soweit ich das beurteilen kann)

Eine einfachere Lösung bietet sich dann an, wenn englisch als gemeinsame Oberfläche akzeptiert wird, das kommt mit 7 bit aus und sieht daher immer gleich aus.

Re: Wie kann ich sicherstellen, dass das System seine schriftart verwendet

Verfasst: Mo, 25. Mai 2020 8:31
von Herbert
Hubert, Arial ist nur eine der Schriften.
https://www.autoitscript.com/autoit3/do ... /fonts.htm
Gemäss DesignGuide ist Segoe UI die empfohlene Schrift.
https://docs.microsoft.com/en-us/window ... typography

Re: Wie kann ich sicherstellen, dass das System seine schriftart verwendet

Verfasst: Mo, 25. Mai 2020 9:02
von Rolf Ramacher
es kommt auch darauf an, was du darstellen willst, sind es listen oder Tabellen? damit die Informationen unabhängig der Zeichenlänge gleich aussehen, wirst du mit Arial das nicht erreichen. Da nimmt du am besten courier New. da sehen alle Buchstaben gleich lang aus. denn ein W ist kleiner als ein I

Re: Wie kann ich sicherstellen, dass das System seine schriftart verwendet

Verfasst: Mo, 25. Mai 2020 9:36
von AUGE_OHR
hi,

ich "teste" den Header der DBF
bei OEM DBF steht bei Bit 29 ( oder 30) evtl. die Codepage

Code: Alles auswählen

   cTest := SUBSTR( cTxt, 30, 1 )                                     // 0-29 / 1-30
   // look for Codepage
   DO CASE
      CASE cTest = CHR( 0x01 )
         _CodePage := "DOS 437"
      CASE cTest = CHR( 0x02 )
         _CodePage := "DOS 850"
      CASE cTest = CHR( 0x03 )
         _CodePage := "WIN 1251"
      CASE cTest = CHR( 0xC8 )
         _CodePage := "WIN 1250"
      CASE cTest = CHR( 0x64 )
         _CodePage := "DOS 852"
      CASE cTest = CHR( 0x65 )
         _CodePage := "DOS 865"
      CASE cTest = CHR( 0x66 )
         _CodePage := "DOS 866"
      OTHERWISE
         _CodePage := STR( ASC( cTest ) )
         // ??? mehr
   ENDCASE
was unter Xbase++ fehlt ist die folgenden Möglichkeit

Code: Alles auswählen

STATIC PROCEDURE SelecLang( cPath, cDBF, cWorkArea, cBrowse )
LOCAL cCodepage
LOCAL cExt      := SP_cInxExt()
LOCAL cVia

   IF cExt = "NTX"
      cVia := "DBFNTX"
   ELSE
      cVia := "DBFCDX"
   ENDIF

   cCodepage := WinCodePage()
   IF !EMPTY( cCodepage )
      CLOSE( cDBF )
      USE (cPath+cDBF) VIA (cVia) EXCLUSIVE CODEPAGE (cCodepage)
      Domethod( cBrowse, "BrowserView", "Refresh" )
   ENDIF
RETURN

Code: Alles auswählen

STATIC FUNCTION WinCodePage()
LOCAL cRet      := ""
LOCAL aLangName := { "Basque", ;
                        "Czech 852", ;
                        "Czech ISO-8859-2", ;
                        "Czech KAM", ;
                        "Catalan", ;
                        "English", ;
                        "French", ;
                        "Galician", ;
                        "German Ansi", ;
                        "German OEM", ;
                        "Hebrew 862", ;
                        "Hebrew 1255", ;
                        "Hungarian 852", ;
                        "Hungarian CWI-2", ;
                        "Hungarian WINDOWS-1", ;
                        "Italian", ;
                        "Polish 852", ;
                        "Polish ISO-8859-1", ;
                        "Polish Mozowia", ;
                        "Portuguese", ;
                        "Romanian", ;
                        "Russian WINDOWS-1", ;
                        "Serbian ISO-8859-2", ;
                        "Serbian 852", ;
                        "Spanish" }

LOCAL aLangID := { "EU", ;
                      "CS852", ;
                      "CSISO", ;
                      "CSKAM", ;
                      "CA", ;
                      "EN", ;
                      "FR", ;
                      "GL", ;
                      "DEWIN", ;
                      "DE850", ;
                      "HE862", ;
                      "HEWIN", ;
                      "HU852", ;
                      "HUCWI", ;
                      "HUWIN", ;
                      "IT", ;
                      "PL852", ;
                      "PLISO", ;
                      "PLMAZ", ;
                      "PT", ;
                      "RO", ;
                      "RUWIN", ;
                      "SRISO", ;
                      "SR852", ;
                      "ES" }
ich kann damit in einer Listbox die Codepage auswählen und bekomme damit die Nation Einstellungen für den Font.
hb_Codepage.JPG
hb_Codepage.JPG (248.61 KiB) 6860 mal betrachtet
es fehlt Xbase++ die Option

Code: Alles auswählen

CODEPAGE (cCodepage)
womit ich ausprobieren kann welche Einstellungen ich benötige für eine unbekannte DBF.