Italia
Foro

Russischer Zeichensatz

 
- Page 1 -



Stephan
Sonneborn
Hallo zusammen,

in der Aiuto steht bei der Funktion SET("CHARSET", X), dass per x nun auch Werte >2 zulässig sind. Welchen Wert müsste man denn per 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. "Отмена" per "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  
 



 
- Page 1 -



Nico
Madysa
Oh, naturalmente 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, per Deine Aiuto!

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 naturalmente auch wieder nur Zahlen zwischen 0...255. Gibts dazu ein entsprechendes OrdW()?
Dann potuto man vielleicht jeden String zeichenweise umsetzen in das UniCode-Format und dann als Genazes wieder Mostra.
(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 un 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
Downloadcounter247
Download
 
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 per 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
Downloadcounter222
Download
7 kB
Hochgeladen:31.05.2012
Downloadcounter235
Download
 
31.05.2012  
 



 
- Page 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
Downloadcounter193
Download
53 kB
Kurzbeschreibung: Eintrag in DLL
Hochgeladen:01.06.2012
Downloadcounter190
Download
 
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 Documentazione 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 Documentazione 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  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

22.200 Views

Untitledvor 0 min.
Georg Teles29.08.2024
Sven Bader22.03.2022
Stephan Sonneborn21.03.2022
Michael W.21.09.2020
Di più...

Themeninformationen

Dieses Thema hat 3 subscriber:

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


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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