Seite 1 von 1

Umlaute [erledigt]

Verfasst: So, 07. Mär 2010 21:58
von Werner_Bayern
Servus,

ist sicherlich nur eine Kleinigkeit. Habe heute meine Clipper5-Fibu auf Xbase++ umgestellt (Target Type GUI-Application), läuft soweit alles ganz gut. Hab mir auch schon eine DLL erstellt mit GUI-Funktionen. Das Ganze mit VX, aktuelle Version. Einstellung Editor "Use ANSI". Die PRGs sind aber noch OEM, trotzdem passt es, hab in der main ein "set charset to oem", damit auch die dbfs korrekt dargestellt werden.

Aber: Die GUI-Funktionen in meiner DLL werden falsch dargestellt, sind ja alle neu geschrieben im VX, also mit ANSI-Zeichensatz, jetzt werden im kompilierten Programm in diesen Funktionen keine Umlaute angezeigt. Alles was zeichenmäßig ist, wird korrekt dargestellt.

Hab eigentlich schon alles probiert: OEM-Prgs auf ANSI konvertiert, dann falsche Darstellung in der EXE, compiler Character conversion bringt nicht wirklich was, set charset to ansi ==> falsche dbf-Darstellung, etc.

Was ist zu tun?

Danke.

Re: Umlaute

Verfasst: So, 07. Mär 2010 22:19
von brandelh
Hallo,

mit VX mache ich eigentlich nichts, aber ich habe die Erfahrung gemacht, dass ANSI Quellcode und
set charset to ansi die besten Ergebnisse bringt. Eine DBFNTX Datei wird immer in OEM bleiben, aber bei
mir hat das noch nie Probleme bereitet, da dies automatisch umgesetzt wird.
Ich kenne nur das spezielle (c) Zeichen, das falsch konvertiert wird, aber das braucht man ja nicht ;-)

Dies gilt aber nur für richtige GUI Anwendungen (XbpDialog, XbParts etc.) eine @ SAY GET XbpCRT() Hybrid Anwendung braucht OEM ...
ich meine mich zu entsinnen, dass im VX der verwendete Zeichensatz eingestellt werden kann und dort auf ANSI lauten muss.
Den alten OEM Quellcode keinesfalls über Compilerschalter behandeln, das gibt nix, sondern tatsächlich umsetzen, einige Editoren können das, notfalls...

memowrit(cPRG,ConvToAnsiCP(memoread(cPRG))

Re: Umlaute

Verfasst: So, 07. Mär 2010 23:48
von Werner_Bayern
Servus Hubert,

das hatte ich bereits testweise gemacht: Prg auf ANSI konvertiert und set charset to ansi. Dann werden aber die Umlaute aus der dbf (Clipper-Format, sollte aber doch egal sein, da doch immer OEM) bei @ say, tbrowse(), etc. nicht mehr richtig dargestellt.

Re: Umlaute

Verfasst: Mo, 08. Mär 2010 8:15
von brandelh
Hallo Werner,

das sag ich doch, wenn du XbpCrt() nutzt, also @ say und tbrowse etc. dann hast du KEIN GUI Programm, sondern
ein Hybridprogramm (Schalter GUI=YES, sonst ein Consolenfenster), das auf jeden Fall einen OEM Charset benötigt. In diesem Fall muss man dem VX Editor (soweit ich mich erinnern kann) beibringen OEM zu verwenden.

Ich persönlich nutze MED, nicht VX und weiß es nicht genauer.

PS: ANSI ist eine Datei, wenn Notepad die Umlaute richtig anzeigt.
Bei anderen Editoren kann man sich nicht sicher sein ohne die Einstellungen zu prüfen.

Re: Umlaute

Verfasst: Mo, 08. Mär 2010 22:45
von AUGE_OHR
Werner_Bayern hat geschrieben:Prg auf ANSI konvertiert und set charset to ansi.
Dann werden aber die Umlaute aus der dbf (Clipper-Format, sollte aber doch egal sein, da doch immer OEM) bei @ say, tbrowse(), etc. nicht mehr richtig dargestellt.
welchen FONT verwendest du ?
siehe dir mal C:\ALASKA\XPPW32\SOURCE\samples\basics\FONT\fontdb.prg an.

Re: Umlaute

Verfasst: Mo, 08. Mär 2010 23:23
von Werner_Bayern
Servus Jimmy,
ich mache nichts mit Font, hab das Prog einfach im Hypridmodus laufen. Da sollte es doch keine Probleme mit der Darstellung geben. Tut es auch nicht, nur die Xbparts, die ich aufrufe, machen die Darstellungsprobleme: Confirmbox z. B.

Ich denke nicht, dass der Tipp von Hubert nützt, die Einstellung von VX auf OEM zu ändern. Die GUI-Elemente liegen ja bereits in meiner DLL, fertig kompiliert unter reinem GUI im ANSI-Quelltext. Sie sollen ja aus beiden Welten aufgerufen werden, aus der Hypridwelt und aus der GUI-Welt.

Muss ich 2 Versionen pflegen? Eine GUIDLL und eine HYBRIDDLL mit identischem Quellcode, jedoch jedesmal vor der Erzeugung der jew. DLL die Quellen auf ansi - oem konvertieren?

Danke an Euch beide.

Re: Umlaute

Verfasst: Di, 09. Mär 2010 0:02
von AUGE_OHR
Ich denke du "würfelst" einige Begriffe durcheinander :

Eine Cl*pper kompatible DBF mit DBFNTX ist OEM
Der Crt Text-Mode ist OEM und als Font gibt es "Alaska CRT"

Eine GUI Anzeige ist ANSI.
"Ergebnisse" von Windows basierenden GUI XbParts liefen ANSI zurück

Durch SET CHARSET wird lediglich bestimmt ob die Daten im Hauptspeicher in OEM oder ANSI vorliegen !

mit SET COLLATION wird nun die Länderspezifische Sortierung eingestellt

der Compiler Schalter /ga : Literale Zeichen von ANSI nach OEM konvertieren
der Compiler Schalter /go : Literale Zeichen von OEM nach ANSI konvertieren.

zeig uns mal deine Project.XPJ

Re: Umlaute

Verfasst: Mi, 10. Mär 2010 0:42
von Werner_Bayern
Servus Jimmy,

hier meine project.xpj:

Code: Alles auswählen

[PROJECT]
    DEBUG         = no
    VERSION       = 2.0
    OPENFILES     = UTILL.PRG;FTEXTE.PRG;FKONTEN.PRG;FINIT.PRG;FHELP.PRG;FFIBU.PRG;calc.prg;BUCH.PRG
    PROJECT.XPJ

[PROJECT.XPJ]
    BUCHWIN.exe

[BUCHWIN.exe]
    COMPILE       = xpp
    COMPILE_FLAGS = /wi /wl /wu /m /q /rMEINEDLL /w /dnetz 
    DEBUG_SAVE    = no
    GUI           = yes
    LINKER        = alink
    LINK_FLAGS    = 
    RC_COMPILE    = arc
    RC_FLAGS      = /v
// $START-AUTODEPEND
    STD.CH
    SET.CH
    NATMSG.CH
    GET.CH
    PROMPT.CH
    MEMVAR.CH
    COLLAT.CH
    BUCH.CH
    \PRG\VERW\PRG\WW.CH
    BOX.CH
    BUCH.obj
    calc.obj
    FABRECH.obj
    FABRECH2.obj
    FARBEN.obj
    FDEL.obj
    FERTRAG.obj
    FESC.obj
    FFIBU.obj
    FHELP.obj
    FINIT.obj
    FJOURNAL.obj
    FKONTEN.obj
    FKONTK.obj
    FKONTL.obj
    FSALDEN.obj
    FSTEUER.obj
    FSTEUERL.obj
    FSYSTEM.obj
    FTEXTE.obj
    FUMSATZ.obj
    FUTILL.obj
    FVERZ.obj
    FVERZL.obj
    LIZENZ.obj
    TASTEN.obj
    UNSTIMM.obj
    UTILL.obj
// $STOP-AUTODEPEND
    BUCH.PRG
    calc.prg
    FABRECH.PRG
    FABRECH2.PRG
    FARBEN.PRG
    FDEL.PRG
    FERTRAG.PRG
    FESC.PRG
    FFIBU.PRG
    FHELP.PRG
    FINIT.PRG
    FJOURNAL.PRG
    FKONTEN.PRG
    FKONTK.PRG
    FKONTL.PRG
    FSALDEN.PRG
    FSTEUER.PRG
    FSTEUERL.PRG
    FSYSTEM.PRG
    FTEXTE.PRG
    FUMSATZ.PRG
    FUTILL.PRG
    FVERZ.PRG
    FVERZL.PRG
    LIZENZ.PRG
    TASTEN.PRG
    UNSTIMM.PRG
    UTILL.PRG


Re: Umlaute

Verfasst: Mi, 10. Mär 2010 3:12
von AUGE_OHR
Werner_Bayern hat geschrieben:

Code: Alles auswählen

[PROJECT]
    COMPILE_FLAGS = /wi /wl /wu /m /q /rMEINEDLL /w /dnetz 
der Schalter /rMEINEDLL "erzeugt" keine DLL !

Re: Umlaute

Verfasst: Mi, 10. Mär 2010 6:30
von Jan
AUGE_OHR hat geschrieben:
Werner_Bayern hat geschrieben:

Code: Alles auswählen

[PROJECT]
    COMPILE_FLAGS = /wi /wl /wu /m /q /rMEINEDLL /w /dnetz 
der Schalter /rMEINEDLL "erzeugt" keine DLL !
... und dürfte ohnehin eine Fehlermeldung auswerfen, denn mit dem Compilerschalter /r kann man eine lib hinzufügen in den Compilerlauf, keine dll.

Jan

Re: Umlaute

Verfasst: Mi, 10. Mär 2010 9:13
von Rolf Ramacher
warum sind denn obj-Dateien mit in der prg beim link. ??

Re: Umlaute

Verfasst: Mi, 10. Mär 2010 9:36
von brandelh
Hi,

wenn du das meinst, ...
// $START-AUTODEPEND
STD.CH
SET.CH
NATMSG.CH
GET.CH
PROMPT.CH
MEMVAR.CH
COLLAT.CH
BUCH.CH
\PRG\VERW\PRG\WW.CH
BOX.CH
BUCH.obj
calc.obj
FABRECH.obj
FABRECH2.obj
FARBEN.obj
FDEL.obj
FERTRAG.obj
FESC.obj
FFIBU.obj
FHELP.obj
FINIT.obj
FJOURNAL.obj
FKONTEN.obj
FKONTK.obj
FKONTL.obj
FSALDEN.obj
FSTEUER.obj
FSTEUERL.obj
FSYSTEM.obj
FTEXTE.obj
FUMSATZ.obj
FUTILL.obj
FVERZ.obj
FVERZL.obj
LIZENZ.obj
TASTEN.obj
UNSTIMM.obj
UTILL.obj
// $STOP-AUTODEPEND
das ist normal für eine Projekt Datei, damit werden die internen Abhängigkeiten dargestellt.

Re: Umlaute

Verfasst: Mi, 10. Mär 2010 12:03
von Rolf Ramacher
Hi Hubert,

ich habe nur deshalb angemerkt, da ich keine obj-Datei mit compiliere

Re: Umlaute

Verfasst: Mi, 10. Mär 2010 12:14
von brandelh
Hi,

das macht er auch nicht, denn der compiler erstellt ja OBJ.
Der ALINK linked diese dann ein ;-)

Aber in der Projektdatei wird dieser Teil zwischen den beiden Anweisungen ...
// $START-AUTODEPEND
... Abhängigkeiten
// $STOP-AUTODEPEND
von Xbase++ intern benutzt, um die Abhängigkeiten der weiteren Dateien CH, OBJ etc. zu den PRG und EXE
für Xbase++ selbst zu dokumentieren. Sonst könnte PBUILD nicht bedingt compilieren sondern müsste alles immer neu
compilieren. LINKEN muss man immer alles, da eine EXE auf einmal erzeugt werden muss.

Arbeitest du nicht mit Projektdateien ?

VX: eventuell werden diese Teile in der VX-IDE gar nicht angezeigt, aber die XPJ Datei sieht so aus.

Re: Umlaute

Verfasst: Mi, 10. Mär 2010 12:16
von Jan
Doch, in VX sieht man das natürlich auch.

Jan

Re: Umlaute

Verfasst: Mi, 10. Mär 2010 23:48
von Werner_Bayern
AUGE_OHR hat geschrieben: COMPILE_FLAGS = /wi /wl /wu /m /q /rMEINEDLL /w /dnetz
der Schalter /rMEINEDLL "erzeugt" keine DLL !
Nein, soll er auch nicht, ist von mir geändert worden, nur ein Hinweis, dass hier die Standard-DLL von mir mit eingebunden wird. Selbstverständlich steht hier nur der Name der DLL ohne Erweiterung, also wird die LIB mit den Symbolnamen eingebunden, damit dann in der EXE die DLL korrekt angesprochen wird.

Re: Umlaute

Verfasst: Do, 11. Mär 2010 0:57
von AUGE_OHR
hi,

wenn man seine Anwendung in DLL nach GUI und Hybrid "zerlegen" will kann man folgendes Project.XPJ benutzen

Code: Alles auswählen

[PROJECT]
    COMPILE       = xpp
    DEBUG         = yes
    GUI           = yes
    LINKER        = alink
    LINK_FLAGS    = /ST:8196
    RC_COMPILE    = arc
    RC_FLAGS      = /v
    OBJ_DIR       = .\OBJ
    PROJECT.XPJ

[PROJECT.XPJ]
    EXEGUI.DLL
    EXECRT.DLL
    XPPEXE.EXE

[EXEGUI.DLL]
    COMPILE_FLAGS = /dll /n /q /w /o\OBJ\ /DGUIFULL
// $START-AUTODEPEND
    EXEGUI.RES
    EXEGUI.DEF
    *.OBJ
// $STOP-AUTODEPEND
    EXEGUI.ARC
// damit er auch deren Functionen erkennt
    EXECRT.LIB
    *.PRG

[EXECRT.DLL]
    COMPILE_FLAGS = /dll /n /q /w /o\OBJ\
// $START-AUTODEPEND
    EXECRT.RES
    EXEGUI.DEF
    *.OBJ
// $STOP-AUTODEPEND
    EXECRT.ARC
// damit er auch deren Functionen erkennt
    EXEGUI.LIB
    *.PRG

[XPPEXE.EXE]
// $START-AUTODEPEND
    XPPEXE.RES
    *.OBJ
// $STOP-AUTODEPEND
    XPPEXE.ARC
// für die *.DLL
    EXEGUI.LIB
    EXECRT.LIB
    *.PRG
mittels des Schalter /DGUIFULL habe ich dann im Sourcecode

Code: Alles auswählen

#IFDEF GUIFULL
  // verwende GUI Code
#ELSE
  // verwende Cl*pper Hybrid-Code
#ENDIF

Re: Umlaute

Verfasst: Fr, 12. Mär 2010 7:37
von Werner_Bayern
Morgen Jimmy,

danke für Deine Ausführungen.
Wo definierst Du dann die GUIFULL? In der *.arc?

Re: Umlaute

Verfasst: Fr, 12. Mär 2010 7:41
von Martin Altmann
Hallo Werner,
das ist ein COMPILE_FLAGS-Eintrag!
In seinem Beispiel im Abschnitt [EXEGUI.DLL] siehst Du den letzten Schalter /D gefolgt von dem zu Definierendem Schalter GUIFULL

Viele Grüße,
Martin

Re: Umlaute

Verfasst: Fr, 12. Mär 2010 22:26
von Werner_Bayern
Oh Danke Martin. Werde es testen.