Spezielle Buchstaben mit TextOut ausgeben



  • Ich habe folgendes Problem.

    Ich möchte mit TextOut(); einen Text ausgeben, welcher spezielle Buchstaben wie z.B: čůŘěž etc. beinhaltet.

    Leider werden diese nicht gedruckt! An ihrer Stelle erscheint ein schwazer Balken! Wie kann ich diese Zeichen ausgeben mit TextOut??? (resp. als ButtonText setzen)???



  • Wenn Du die Unicode-Version verwendest, sollte es sofort gehen (wenn Du den passenden Font installiert hast; von dem ich ausgehen).
    Wenn Du die Ansi-Version verwendest, dann müssen diese Zeichen in der aktuellen Codepage vorhanden sein, sonst geht es nicht!

    Mein Tipp: Verwende Unicode.



  • Die Texte kommen aus einer Datenbank. In dieser werden sie auch richtig angezeigt! Wie kann ich denn die Ausgabe auf Unicode ändern?



  • Das *beste* ist Du änderst Dein Projekt auf Unicode (Project|Properties|C/C++|General|Character Set: Use Unicode Character Set).

    Die "unschöne" Lösung ist direkt TextOutW zu verwenden.

    Oder eben wie gesagt: Die Zeichen müssen in der aktuelle Codepage drin sein, dann geht es auch schon so.

    PS: Was bekommst Du denn von der Datenbank zurück? CString? Dann sollte es entweder schon gehen oder Du musst sowieso auf Unicode umstellen...



  • Ich arbeite noch in Visual Studio 6! Dort gibt es diese Einstellung und Projekt->Einstellungen->C++ noch nicht! Wo finde ich diese?


  • Mod

    addict schrieb:

    Die Texte kommen aus einer Datenbank. In dieser werden sie auch richtig angezeigt! Wie kann ich denn die Ausgabe auf Unicode ändern?

    Und was ist das für eine Datenbank?
    Woher weißt, das was "richtig" angezeigt wird?
    Welche Methode verwendest Du für den Zugriff? ODBC. Dann sieht es übel aus, denn ODBC funktioniert mit Unicode IMHO nicht zuverlässig.



  • Die Daten kommen aus einer Access Datenbank und werden mit einer dao Verbindung ausgelesen und anschliessend in einen CString gespeichert.


  • Mod

    Hast Du ein Unicode Projekt, sonst gehen die Sonderzeicen sowieso verloren!



  • Ich weiss es nicht.
    Wie gseagt ich arbeite noch mit VS 6 und dort finde ich unter den angegebenen Einstellungen keine Auswahl für den Unicode...


  • Mod

    Aber die Projekteinstellungen kannst Du doch finden oder?

    Project -> Settings -> C++ -> General

    Dort bei den Perprozessor Defines müsste UNICODE und _UNICODE drin stehen und nicht MBCS!

    Ich arbeite schon lange nicht mehr mit VC6, aber IMHO ging das damals nur über defines.

    PS: Stampf VC6 in die Tonne! 🙂



  • Bei mir steht MBCS drin!
    Ich kann jedoch dort nichts hineinschreiben!
    Wie oder wo muss ich dies ändern???

    Ich arbeite ansonsten auch mit VS.Net oder VS 2005 ich kann jedoch dieses Projekt nicht konfertieren, da ansonsten die exe nicht mehr funktioniert... (Datenbankanbindung funktioniert nicht mehr unter .net)



  • Ich habe nun das Projekt auf UNICODE geändert!
    Wenn ich es jetzt kompilieren will, gibt es über 300 Fehler!
    Kann mir jemand sagen, wieso es plötzlich so viele Fehler gibt nur weil ich den Zeichensatz geändert habe?


  • Mod

    BTW: Du musst auch _UNICODE definieren!

    Und die Fehler kommen wahrscheinlich daher das Du nur char und nicht TCHAR verwendet hast...
    CString ist eben in einem Unicode Projekt ein wchar_t Container und in einem nicht Unicode Projekt ein char Container.

    In Deinem Projekt wurde die T-Notation nichtkorrekt verwendet!



  • Ok
    Habe nun beide drin!

    z.B Diese Zeile:

    ShellExecute(0,"open", strPath+"\\transfer.exe", NULL, NULL, SW_SHOW);
    

    Gibt den Fehler:

    error C2664: 'ShellExecuteW' : Konvertierung des Parameters 2 von 'char [5]' in 'const unsigned short *' nicht moeglich
            Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    

    Vorher funktionierte dies einwandfrei!
    short ist doch eine Zahl oder irre ich mich da?


  • Mod

    Oder ein wchar_t!

    Beschäftige Dich jetzt erstmal damit was UNICODE bedeutet!

    ShellExecute(0,"open", strPath+_T("\\transfer.exe"), NULL, NULL, SW_SHOW);
    


  • der 3. Teil funktioniert nur das "open" funktioniert nicht! (2. Argument und nicht das 3.)
    Ich habe mich damit befasst, was UNICODE bedeutet!


  • Mod

    addict schrieb:

    der 3. Teil funktioniert nur das "open" funktioniert nicht! (2. Argument und nicht das 3.)
    Ich habe mich damit befasst, was UNICODE bedeutet!

    Hast Du nicht 🕶 sonst hättest Du gleich meine Flüchtigkeitsfehler gesehen: Beim ersten Parameter habe ich in der Korrektur _T nicht verwendet.

    ShellExecute(0,_T("open"), strPath+_T("\\transfer.exe"), NULL, NULL, SW_SHOW);
    


  • Ich meinte nur, dass der Compiler zur Zeit beim 3. Argument noch keinen Fehler ausgibt! 😉
    Aber danke für den Tipp! Werde dies alles mal versuchen zu ändern!


Anmelden zum Antworten