Deutsch
Forum

Russischer Zeichensatz

 

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  
 



Ich bin nicht sicher aber ich glaube dass das nur mit Unicode bzw. WideChar-
Controls geht.

Vielleicht helfen Dir diese Themen:

Erzeugen: [...] 
Polnisch: [...] 
widechartomultibyte: [...] 
multibytetowidechar: [...] 
Erklär: [...] 
Funktions-Set: [...] 

Wenn es Dir rein um das Darstellen geht dann ist es wohl das Einfachste wenn
Du ein HTML-Control nutzt.
 
22.05.2012  
 




Stephan
Sonneborn
Hallo iF,

da hast Du schon recht, das geht nur mit Unicode. Aber wie genau???

Ich hab mir Dein Beispiel angesehen.
Die russischen Zeichen beginnen bei u+0400 und gehen bis u+04ff = 256 Zeichen.

Ich dachte, mit SET ("CHARSET",~lang_russian) würde man einen offset setzen und dann könnte man die Zeichen einfach mit zB. CHR$($0400) übernehmen. Geht aber nicht, da CHR$() nur Werte zwischen 0...255 kennt.

Es müsste die Funktion CHRW$() bzw. ORDW() her.

Weiß jemand, wie man die erstellt?

In VB ist scheinbar die CHRW()-Funktion von Haus aus dabei.

Man könnte sich ja vorstellen, die STATICS und EDITS nach Deiner Vorgabe zu erstellen (über CreateW() bzw. CreateWindowExW()), dann alle bisherigen Standardtexte umwandeln in WideChars und dann mit einem SetTextW die Texte in die Controls eintragen...

Aber wie???
 
Schöne Grüße aus Wittgenstein
von Stephan

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



Hallo Stephan,

Nico und ich haben soeben folgendes erarbeitet,

bitte probiere mal in wie weit das so klappt:
KompilierenMarkierenSeparieren
 {$cleq}
 {$compiler c:\xprofan12}
 {$runtime c:\xprofan12}
CLS
Struct CREATESTRUCT = lpCreateParams&, hInstance&, hMenu&, hwndParent&, cy%, cx%, y%, x%, style&, lpszName&, lpszClass&, dwExStyle&
var id% = 1
Var static&=CreateW("STATIC","Das ist ein Static. \nHier sollen Unicode-Zeichen rein.",$50000000,10,10,width(%hwnd)-20,35,%hwnd,0,%hinstance)
Waitinput
SetWindowTextW(static&,utf("Test ")+chrw(400)+utf(" Test"))
Waitinput
End

proc chrw

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

endproc

Proc UTF

    parameters text$
    declare b#
    Dim b#,2*len(text$)+2
    StringW b#,0 = text$
    text$ = Char$(b#,0,SizeOf(b#)-2)
    return text$

EndProc

Proc CreateW

    parameters Class$,Name$,style&,x%,y%,dx%,dy%,pWnd&,pid%,hInst&,exstyle&
    case %pCount <11 : exstyle& = 0
    Class$ = UTF(Class$)
    Name$ = UTF(Name$)
    Var cs# = New(CREATESTRUCT)

    With cs#

        .lpCreateParams& = SizeOf(cs#)
        .hInstance& = hInst&
        .hMenu& = (IsMenu(id%)<>0) * id%
        .hwndParent& = pWnd&
        .cy% = dy%
        .cx% = dx%
        .y% = y%
        .x% = x%
        .style& = style&
        .lpszName& = Addr(Name$)
        .lpszClass& = Addr(Class$)
        .dwExStyle& = exstyle&

    EndWith

    Var handle& = CreateWindowExW(exstyle&,Addr(Class$),Addr(Name$),style&,x%,y%,dx%,dy%,pWnd&,id%,hInst&,cs#)
    Class$ = WinError$(%WinError)
    inc id%

    IfNot handle&

        MessageBox("Es trat folgender Fehler auf:\n\n" + Class$,"F E H L E R !!!",4096)

    EndIf

    Dispose cs#
    Return handle&

EndProc

 
29.05.2012  
 




Stephan
Sonneborn
Hallo iF, hallo Nico,

danke für Eure Unterstützung. Leider zeigt mir der Code garnichts an...
KompilierenMarkierenSeparieren
'URL: https://xprofan.com/intl/de/forum/russischer-zeichensatz/
'{$cleq}
'{$compiler c:\xprofan12}
'{$runtime c:\xprofan12}
DEF IsMEnu(1)           !"USER32", "IsMenu"
DEF CreateWindowExW(12) !"USER32", "CreateWindowExW"
DEF SetWindowTextW(2)   !"USER32", "SetWindowTextW"
CLS
Struct CREATESTRUCT = lpCreateParams&, hInstance&, hMenu&, hwndParent&, cy%, cx%, y%, x%, style&, lpszName&, lpszClass&, dwExStyle&
var id% = 1
Var static&=CreateW("STATIC","Das ist ein Static. \nHier sollen Unicode-Zeichen rein.",$50000000,10,10,width(%hwnd)-20,35,%hwnd,0,%hinstance)
Waitinput
SetWindowTextW(static&,utf("Test ") + chrw($401) + utf(" Test"))
Waitinput
End

proc chrw

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

endproc

Proc UTF

    parameters text$
    declare b#
    Dim b#,2*len(text$)+2
    StringW b#,0 = text$
    text$ = Char$(b#,0,SizeOf(b#)-2)
    return text$

EndProc

Proc CreateW

    parameters Class$,Name$,style&,x%,y%,dx%,dy%,pWnd&,pid%,hInst&,exstyle&
    case %pCount <11 : exstyle& = 0
    Class$ = UTF(Class$)
    Name$ = UTF(Name$)
    Var cs# = New(CREATESTRUCT)

    With cs#

        .lpCreateParams& = SizeOf(cs#)
        .hInstance& = hInst&
        .hMenu& = (IsMenu(id%)<>0) * id%
        .hwndParent& = pWnd&
        .cy% = dy%
        .cx% = dx%
        .y% = y%
        .x% = x%
        .style& = style&
        .lpszName& = Addr(Name$)
        .lpszClass& = Addr(Class$)
        .dwExStyle& = exstyle&

    EndWith

    Var handle& = CreateWindowExW(exstyle&,Addr(Class$),Addr(Name$),style&,x%,y%,dx%,dy%,pWnd&,id%,hInst&,cs#)
    Class$ = WinError$(%WinError)
    inc id%

    IfNot handle&

        MessageBox("Es trat folgender Fehler auf:\n\n" + Class$,"F E H L E R !!!",4096)

    EndIf

    Dispose cs#
    Return handle&

EndProc


Nicht einmal das "Test" davor und dahinter...
 
Schöne Grüße aus Wittgenstein
von Stephan

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




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
Ladeanzahl247
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
Ladeanzahl222
Herunterladen
7 kB
Hochgeladen:31.05.2012
Ladeanzahl235
Herunterladen
 
31.05.2012  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

22.243 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