| |
|
|
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:
Wenn es Dir rein um das Darstellen geht dann ist es wohl das Einfachste wenn Du ein HTML-Control nutzt. |
|
|
| |
|
|
|
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
|
|
|
| |
|
|
|
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. |
|
|
| |
|
|
|
| Hoch, ich hahm an das Stephan den Präkompi im Einsatz hat ^^ |
|
|
| |
|
|
|
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: [...]
bzw.:
[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] |
|
|
| |
|
|
|
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. |
|
|
| |
|
|
|
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:
Bei mir werden dann chinesische (oder was auch immer) Zeichen angezeigt... |
|
|
| 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: bei raus.
Das wiederum als Wert für b$ zeigt das Gewünschte.
Download externer Download
|
|
|
| |
|
|