Deutsch
Forum

Russischer Zeichensatz

 
- Seite 1 -



Stephan
Sonneborn
Hallo zusammen,

in der Hilfe steht bei der Funktion SET("CHARSET", X), dass für x nun auch Werte >2 zulässig sind. Welchen Wert müsste man denn für einen russischen Zeichensatz einstellen? Ich habs mit $0419 probiert. Hat aber nicht so hingehauen...

Eigentlich möchte ich folgendes Problem lösen:
Texte, die in russisch vorliegen, mit Profan z.B. als Buttontexte oder Statictexte ausgeben.
Also z.B. "Отмена" für "Abbrechen" auf eine Schaltfläche legen...
 
Schöne Grüße aus Wittgenstein
von Stephan

Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz
22.05.2012  
 



 
- Seite 1 -



Nico
Madysa
Oh, natürlich zeigt er dir nichts an. SetWindowTextW ist eine API-Funktion und kann mit XProfan-Strings nichts anfangen; man muss ihm die Adresse auf die Strings überweisen:
Var static&=CreateW("STATIC","Das ist ein Static. \nHier sollen Unicode-Zeichen rein.",$50000000,10,10,width(%hwnd)-20,35,%hwnd,0,%hinstance)
Waitinput
var a$ = utf("Test ") + chrw($401) + utf(" Test")
SetWindowTextW(static&,Addr(a$))

So geht's.
 
29.05.2012  
 



Hoch, ich hahm an das Stephan den Präkompi im Einsatz hat ^^
 
30.05.2012  
 




Stephan
Sonneborn
Nico Madysa (29.05.12)
So geht's.


Ja, so geht's. *sichandenkopfschlägt*
Danke Nico, für Deine Hilfe!

Aber nun die Ausbaustufe:
Ich habe Texte (z.B. aus Excel), die liegen so vor: "Отмена"
Wie bekomme ich das nun als Text in einem Unicode-Control angezeigt?
Man müsste doch zuerst einmal herausbekommen, welches Zeichen ist das denn nun, was da angezeigt wird. Ein ORD() liefert natürlich auch wieder nur Zahlen zwischen 0...255. Gibts dazu ein entsprechendes OrdW()?
Dann könnte man vielleicht jeden String zeichenweise umsetzen in das UniCode-Format und dann als Genazes wieder anzeigen.
(Falls im Posting nur ?????? angezeigt werden: In meinem ersten Beitrag steht der russische Begriff)
 
Schöne Grüße aus Wittgenstein
von Stephan

Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz
30.05.2012  
 



Ordw wie gepostet:  [...] 
nproc ordw(string s){

    long m=dim(2)
    char m&,0=left$(s$+"\z\z",2)
    long wc=word(m,0)
    dispose(m)
    return wc

}


bzw.:
proc ordw

    parameters s$
    declare m#
    dim m#,2
    char m#,0=left$(s$+"\z\z",2)
    var wc&=word(m#,0)
    dispose m#
    return wc&

endproc


[OFFTOPIC]
Stephan Sonneborn (30.05.12)
(Falls im Posting nur ?????? angezeigt werden: In meinem ersten Beitrag steht der russische Begriff)


Scheinbar ein Bug meiner Beitragsvorschau -

schaue ich mir bei Gelegenheit an. [/OFFTOPIC]
 
30.05.2012  
 




Nico
Madysa
Auf dieser Seite  [...]  findest du so ziemlich alle Kodierungsumwandlungen, die dein Herz begehren kann, als NProcs; auch Widechar-Varianten von Chr$() und Ord() sind dabei.

Ich hoffe, es bereitet dir keine Schwierigkeiten, sie in eine XPSE-freie Syntax zu übersetzen.

Aber ich sehe gerade nicht, warum du OrdW brauchen solltest.
Dem Widechar-Control, das mit CreateW erstellt worden ist, müsstest du nur den Text per SetWindowTextW zuweisen.
Wenn der Text, den du zuweisen willst, bereits widecharkodiert ist (also 2 Bytes pro Zeichen), dann gibt es dabei gar keine Hindernisse.

Oder mit anderen Worten: Ich sehe gerade nicht, wo dein Problem liegt.
 
30.05.2012  
 




Stephan
Sonneborn
Nico Madysa (30.05.12)
Oder mit anderen Worten: Ich sehe gerade nicht, wo dein Problem liegt.


Mein Problem liegt hierin:
Füg mal diese beiden Zeilen in Deinen Quellcode ein:
var b$ = "укепщьаь вввапа"
SetWindowTextW(static&,addr(b$))

Bei mir werden dann chinesische (oder was auch immer) Zeichen angezeigt...

41 kB
Hochgeladen:31.05.2012
Ladeanzahl248
Herunterladen
 
Schöne Grüße aus Wittgenstein
von Stephan

Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz
31.05.2012  
 



Ich habe Dir hier mal was "hingeschmiert" was den Inhalt einer mit Widechar-Chars-
gefüllten Zwischenablage als CHR$(...-Sequenz in die Zwischenablage ablegt.

So kannst Du z.B.: укепщьаь

in die Zwischenablage nehmen und dann das Programm starten und dann kommt da:
chr$(67)+chr$(4)+chr$(58)+chr$(4)+chr$(53)+chr$(4)+chr$(63)+chr$(4)+chr$(73)+chr$(4)+chr$(76)+chr$(4)+chr$(48)+chr$(4)+chr$(76)+chr$(4)
bei raus.

Das wiederum als Wert für b$ zeigt das Gewünschte.

Download
externer Download

 {$cleq}
 {$compiler c:\xprofan12}
 {$runtime c:\xprofan12}
decimals 0
cls
casenot OpenClipboard(null) : end
long mem=GetClipboardData(cf_unicodeText)
casenot mem : end
long c,b
string s

do{

    b=byte(mem,c)
    casenot b : casenot byte(mem,c+1) : break
    s=s+"chr$("+str$(b)+")+"
    c++

}

closeClipboard()
case s=="" : end
clearclip
putclip mid$(s,1,len(s)-1)
end


1.247 kB
Hochgeladen:31.05.2012
Ladeanzahl223
Herunterladen
7 kB
Hochgeladen:31.05.2012
Ladeanzahl236
Herunterladen
 
31.05.2012  
 



 
- Seite 2 -



Nico
Madysa
Stephan Sonneborn (31.05.12)
Bei mir werden dann chinesische (oder was auch immer) Zeichen angezeigt...


Ach so, klar. Das muss schiefgehen. XProfan ist ja sicherlich nicht dafür ausgelegt, dass der Quelltext Unicode-Zeichen enthält. Wenn du deinen Unicodetext aber woandersher nimmst (Zwischenablage oder eine UTF-kodierte Textdatei), dann sollte es keine Probleme geben.
 
31.05.2012  
 




Stephan
Sonneborn
Nico Madysa (31.05.12)
Wenn du deinen Unicodetext aber woandersher nimmst (Zwischenablage oder eine UTF-kodierte Textdatei), dann sollte es keine Probleme geben.


Ich hab die Texte in einer DLL.
Das Auslesen mit EXSTRING$() scheidet daher aus.

Ich dachte, dass LoadStringW() weiterhilft:
DEF LoadStringW(4)      !"USER32", "LoadStringW"

und dann
'************************************************************************************************
' Texte aus DLL lesen                                                                           *
'************************************************************************************************

PROC Read_Texts

    DECLARE i%, o%, k%, Adresse%
    DECLARE Buffer#
    DIM Buffer#,4097
    '+----------------------------------------------------------------------------------------------+
    '  Logindialog: (Adresse 100)
    '+----------------------------------------------------------------------------------------------+
    Adresse%  = 100
    LogTitle$ = EXTSTRING$(SMEDLL&, Adresse%)
    i% = 1

    WHILELOOP 1,3,1

        'LogButton$[i%] = EXTSTRING$(SMEDLL&, Adresse%+&LOOP)
        CLEAR Buffer#
        LoadStringW(SMEDLL&, Adresse%+&LOOP, Buffer#, 4097)
        LogButton$[i%] = STRINGW$(Buffer#,0)
        INC i%

    WEND

    DISPOSE Buffer#

ENDPROC


Leider liefert das Ergebnis im anhängenden Bild.

33 kB
Kurzbeschreibung: Eingabedialog
Hochgeladen:01.06.2012
Ladeanzahl193
Herunterladen
53 kB
Kurzbeschreibung: Eintrag in DLL
Hochgeladen:01.06.2012
Ladeanzahl192
Herunterladen
 
Schöne Grüße aus Wittgenstein
von Stephan

Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz
01.06.2012  
 



Wieviel gibt LoadStringW zurück?

Imho statt:
LogButton$[i%] = STRINGW$(Buffer#,0)

eher:
count&=LoadStringW(...
LogButton$[i%] = char$(Buffer#,0,count&)

Nicht sicher bin ich ob es vlt. sogar LogButton$[i%] = char$(Buffer#,0,count&*2) heissen

müsste da imho die Dokumentation dazu nicht eindeutig ist.
 
01.06.2012  
 




Stephan
Sonneborn
iF (01.06.12)
Wieviel gibt LoadStringW zurück?


Bei diesem Text "OK ываысаи" bringt es 10 zurück. Es sind auch 10 Zeichen.

iF (01.06.12)
Imho statt:

LogButton$ = STRINGW$(Buffer#,0)

eher:

count&=LoadStringW(...

LogButton$ = char$(Buffer#,0,count&)

Nicht sicher bin ich ob es vlt. sogar LogButton$ = char$(Buffer#,0,count&*2) heissen müsste da imho die Dokumentation dazu nicht eindeutig ist.


Hat leider beides nichts gebracht...
 
Schöne Grüße aus Wittgenstein
von Stephan

Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz
11.07.2012  
 



Ich habe jetzt etwas den Faden verloren.

Wenn LoadStringW die korrekte Zeichenanzahl liefert dann einfach:

Sorry, Korrektur - müsste dann wohl zeichenAnzahl*2 heissen -

verwirrt mich!
 
11.07.2012  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

22.272 Betrachtungen

Unbenanntvor 0 min.
Georg Teles29.08.2024
Sven Bader22.03.2022
Stephan Sonneborn21.03.2022
Michael W.21.09.2020
Mehr...

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

Stephan Sonneborn (7x)
iF (7x)
Nico Madysa (3x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie