Seite 1 von 1

Umlaute in Listbox korrekt anzeigen lassen [Erledigt]

Verfasst: Di, 17. Jul 2018 12:50
von Timn97
Hallo zusammmen ,
Ich habe ein kleines Problem .. und zwar lasse ich beim Aufrufen meines Programmes Personen aus einer Datenbank in eine Listbox schreiben, manche Personen haben natürlcih ein ä,ö oder ü im Vor oder Nachnamen. In der Listbox werden aber irgendwelche Zeichen übergeben . Wie schaffe ich es bzw was muss ich schreiben um den richtigen Zeichensatz in xbase benutzen zu können ?:)

Mfg Tim

Re: Umlaute in Listbox korrekt anzeigen lassen

Verfasst: Di, 17. Jul 2018 14:01
von brandelh
Hi,

du solltest in der Hilfe das Kapitel mit ANSI / OEM Wandlung lesen: :arrow: SET CHARSET (in der 2.0)
Grundsätzlich macht Xbase++ das automatisch richtig, nur API Aufrufe sind mit den conv...() Funktionen umzusetzen.

EXE - kann ANSI oder OEM sein => SET CHARSET TO
DBFCDE / DBFNTX sind immer OEM und werden wenn nötig beim Lesen und schreiben von der EXE richtig umgesetzt.
FOXDBE / FOXCDX richten sich bei der Erstellung nach der Codepage der EXE, danach wieder voll transparent eigentlich immer richtig.
XbpControls() sind zwar intern die ANSI Controls, aber die EXE setzt das zur Laufzeit um !

Es gibt noch einen Compiler Schalter /GA /GO, der sich auf den Zeichensatz des Quellcodes auswirkt, aber nicht beim Laden der Daten aus der DBF.

Zeig doch mal, was am Anfang der MAIN Funktion zu SET CHARSET steht.
Und dann den Code der die Listbox füllt.

Re: Umlaute in Listbox korrekt anzeigen lassen

Verfasst: Di, 17. Jul 2018 14:06
von Jan
Noch eine kleine Ergänzung zu Huberts Anmerkungen zur FOXCDX: Das ist immer das, was bei der Erstellung der dbf durch das Programm als SET CHARSET gewählt war. Also entweder der Standard (wenn es die Zeile nirgends gibt), oder eben das, was in der Zeile steht.

Wenn das nicht mit dem Zeichensatz im Programm übereinstimmt, mußt Du den Inhalt der dbf vor dem Hinzufügen zur Listbox konvertieren, also ConvToAnsiCP(alias->feldname) bzw. ConvToOEMCP(alias->feldname).

Jan

Re: Umlaute in Listbox korrekt anzeigen lassen

Verfasst: Di, 17. Jul 2018 15:28
von Tom
Wenn das nicht mit dem Zeichensatz im Programm übereinstimmt, mußt Du den Inhalt der dbf vor dem Hinzufügen zur Listbox konvertieren
Nee, musst Du eigentlich nicht. Wie Hubert schrieb: Das macht Xbase++ automatisch. Mit ConvTo... hantieren muss man genau genommen nur bei externen Datenquellen, also Krempel, der an den DBEs vorbeigeht, über DLLs importiert wird oder irgendwie direkt von der Platte stammt.

Re: Umlaute in Listbox korrekt anzeigen lassen

Verfasst: Di, 17. Jul 2018 16:13
von Jan
Tom,

Du hast natürlich Recht. Bei unterschiedlichen oder abweichenden Zeichensätzen in den dbf konvertiert Xbase++ das automatisch. Das manuelle Konvertieren muß bei externen Strings passieren.

Wobei ich massivste Probleme hatte bei ANSI dbf, ANSI Quellcode, SET CHARSET TO ANSI, und Textoberfläche. Da hat nichts geholfen, ich mußte das CHARSET wieder raus nehmen. Unter GUI (und davon reden wir ja hier vermutlich) ist das natürlich kein Problem.

Jan

Re: Umlaute in Listbox korrekt anzeigen lassen

Verfasst: Di, 17. Jul 2018 23:05
von brandelh
Zur FOXCDX ... bei diesem Format wird ja der Zeichensatz im Header gespeichert, daher kann Xbase++ das erkennen und darauf reagieren.
Es gab schon DBF Dateien, z.B. von AmiPro, welche grundsätzlich ANSI gespeichert hatten. Bei diesen war es im Header nicht erkennbar oder clipper hat es nur nicht interresiert.
Damit hatte man schon Ärger.

Wäre die Umsetzung 1:1 in beide Richtungen machbar, wäre es ja kein Problem, aber dem ist nicht immer so. § z.B. oder (c) bzw. (r) - weiß jetzt nicht mehr welches.
Aus diesen Beispielen wird klar, am Besten man vermeidet, dass eine Konvertierung nötig wird.

Re: Umlaute in Listbox korrekt anzeigen lassen

Verfasst: Do, 19. Jul 2018 8:23
von Timn97
Vielen Dank für die vielen Antworten :) bei mir passt jz alles habe was am Schalter verändert (/ga) das hat dann schon gereicht :D

Re: Umlaute in Listbox korrekt anzeigen lassen

Verfasst: Do, 19. Jul 2018 9:42
von Tom
Dann kommen die Daten in der Listbox aber nicht aus Tabellen, sondern sind hardcodiert, richtig? Sowas beispielsweise:

Code: Alles auswählen

LOCAL aGeschlechter := {'Männlein','Weiblein'}