Foro | | | | Nico Madysa | ¡Hola Gemeinde!
Lo dreht son folgenden Kode: KompilierenMarcaSeparación {$iq}
{MkStr$
nproc MkStr$
parameters s$,n&
var ns$=""
whileLoop n&
ns$=ns$+s$
wend
return ns$
endproc
{TToUTF
nproc TToUTF
parameters text$
var utf$ = MkStr$(" ",2 * len(text$))
MultiByteToWideChar(0,1,text$,-1,utf$,len(text$))
return utf$
endproc
{ControlW
nproc ControlW
parameters Class$,Name$,style&,x&,y&,dx&,dy&,pWnd&,pid&,hInst&,exstyle&
var cs& = Dim(40)
Long cs&, 0 = 40
Long cs&, 4 = hInst&
Long cs&, 8 = pid&
Long cs&,12 = pWnd&
Long cs&,16 = dx& * 65536 + dy&
Long cs&,20 = x& * 65536 + y&
Long cs&,24 = style&
Long cs&,28 = Addr(Name$)
Long cs&,32 = Addr(Class$)
Long cs&,36 = exstyle&
var handle& = CreateWindowExW(exstyle&,Class$,Name$,style&,x&,y&,dx&,dy&,pWnd&,pid&,hInst&,cs&)
Dispose(cs&)
return handle&
endproc
cls
Shell "CHARMAP"
var Font& = Create("Font","Times New Roman",32,0,0,0,0)
var a& = Control( "EDIT" ,"TzTz",1342242944,200, 5,200,35,%hWnd,1,%hInstance,$200)
var a& = Create("Edit",%hWnd,"ABCDEFGHI",200,5,200,35)
print WinError$(%WinError)
SetFont a&,Font&
var w& = ControlW(TToUTF("EDIT"),"ABCDEFGHI",1342242944,200,40,200,35,%hWnd,1,%hInstance,$200)
print WinError$(%WinError)
SetFont w&,Font&
whilenot IsKey(27)
waitinput
wend
DeleteObject Font&
class=s4 href='./../../funktionsreferenzen/XProfan/end/'>end
(benötigt XPSE!)
Vereinfacht dijo macht el kleine nichts como una Editar una vez por Crear y una vez con CreateWindowExW a redactar. Erwartungsgemäß debería el obere Editar por lo tanto sólo Ansizeichen drucken puede y el untere así bastante alles Vorstellbare.
Der erste Schein son me Recht -- "ABCDEFGHI" se oben normal ausgegeben, unten voluntad hingegen je zwei Byte a una Signo zusammengefasst -- Unikode sólo.
Der Clou es: Beide Edits puede jede Art de Signo darstellen; z.B. auch el Integralzeichen, el typografischen Anführungszeichen, el lächelnde Gesicht, el zwei Achtelnoten, greichische Buchstaben, qué el Herz begehrt.
Das Roland heimlich en Unikodecontrols umgestiegen es, kann Yo nich así bastante vorstellen. Liegt lo por lo tanto a eventuell seltsamen Windowseinstellungen? Was kommt en euch fuera?
Das Programa debería igual todavía el Zeichentabelle abierto. Kopiert simplemente unos pocos exotische Signo (Russisch, Hebräisch, qué De todos modos) y guckt, si beide Editfelder ellos annehmen.
Yo wäre para Tests muy dankbar.
Saludo,
Nico |
| | | | |
| | | | | | | |
| | Dieter Zornow | Sollte uno una Code no sólo veces incluso en Lauffähigkeit testen, bevor uno ihn hier reinstellt ? |
| | | Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 22.12.2009 ▲ |
| |
| | Nico Madysa | Alle Zeilen, el m$ enthalten, puede auskommentiert voluntad, como lo en esta Variable sí nada va.
Habs oben korrigiert. Yo tippe mi Kodes grundsätzlich sólo en el Editor Comunidad y verändere ellos hay auch öfters todavía rápidamente. |
| | | | |
| | | Funktioniert!
Das el/el Ctrl(s) intern Wide trabajo, wundert mich no - legen sí el Messages el Meiste breits fest o. welcher Stringtyp a verarbeiten es. |
| | | | |
| | Nico Madysa | Hehe, Å es kein Unikodezeichen.
Aber Yo sehe ya, dass no mein Fehler es. Was me problematisch es: Rolands Cuerdas son meines Wissens normale Einbyteprozeichen-Stirngs. Was sería entonces passieren, si yo en un con Crear() erzeugten Editar, sagen wir, el Integralzeichen escribir y el Sache entonces con GetText$() auslese? Yo denke, Yo voluntad viel Spaß al Experimentieren haben, sowie Yo para Programmieren komme. |
| | | | |
| | Dieter Zornow | En me funktioniert lo ebenfalls y beide Edits puede auch exotische Signo darstellen. |
| | | Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 23.12.2009 ▲ |
| |
| | | Nico Madysa, Beitrag=55555, Zeitpunkt=23.12.2009
Rolands Cuerdas son meines Wissens normale Einbyteprozeichen-Stirngs.
Rolands (Delphi) Cuerdas son el Ergebnis de z.B. GlobalAlloc(gPTR,8+charCount+1+x)+8, Usted hast a Punto -8 una Referenzzähler y a Punto -4 el número el Byte. +1 para x00 y +x para aufrunden en 4 teilbaren Speicher en 32-Bit-Apps o. 8 en 64 o. je después de Registerbreite. Exactamente así Yo el nativen Cuerdas auch programmiert y bin como frei en el Gestaltung.
Nico Madysa, Beitrag=55555, Zeitpunkt=23.12.2009
Was sería entonces passieren, si yo en un con Crear() erzeugten Editar, sagen wir, el Integralzeichen escribir y el Sache entonces con GetText$() auslese?
Su "String" es sólo una Zona fester grösse, entweder se abgeschnitten oder erzeugst una Bereichsüberschreitung. Wenn uno Unicode sicher de Ansi unterscheiden kann, entonces podría uno determinado auch ne Automatik einbauen - para esta automatischen Características dieser String entonces pero no mehr binärsicher wäre. ^ ^ |
| | | | |
| | Nico Madysa | KompilierenMarcaSeparación {$iq}
{MkStr$
nproc MkStr$
parameters s$,n&
var ns$=""
whileLoop n&
ns$=ns$+s$
wend
return ns$
endproc
{TToUTF
nproc TToUTF
parameters text$
var utf$ = MkStr$(" ",2 * len(text$))
MultiByteToWideChar(0,1,text$,-1,utf$,len(text$))
return utf$
endproc
{UTFToT
nproc UTFToT
parameters utf$
var text$ = MkStr$(" ",len(utf$))
WideCharToMultiByte(0,0,utf$,-1,text$,len(utf$) / 2,0,0)
return text$
endproc
{SetTextW
nproc SetTextW
parameters h&,text$
return SendMessageW(h&,WM_SETTEXT,0,text$)
endproc
{GetTextW
nproc GetTextW
parameters h&
var text$ = MkStr$(" ",255)
SendMessageW(h&,WM_GETTEXT,255,text$)
return text$
endproc
{ControlW
nproc ControlW
parameters Class$,Name$,style&,x&,y&,dx&,dy&,pWnd&,pid&,hInst&,exstyle&
var cs& = Dim(40)
Long cs&, 0 = 40
Long cs&, 4 = hInst&
Long cs&, 8 = pid&
Long cs&,12 = pWnd&
Long cs&,16 = dx& << 16 + dy&
Long cs&,20 = x& << 16 + y&
Long cs&,24 = style&
Long cs&,28 = Addr(Name$)
Long cs&,32 = Addr(Class$)
Long cs&,36 = exstyle&
var handle& = CreateWindowExW(exstyle&,Class$,Name$,style&,x&,y&,dx&,dy&,pWnd&,pid&,hInst&,cs&)
Dispose(cs&)
return handle&
endproc
cls
Shell "CHARMAP"
var Font& = Create("Font","Times New Roman",32,0,0,0,0)
var a& = Create("Edit",%hWnd,"ABCDEFGHI",180,5,220,35)
print WinError$(%WinError)
SetFont a&,Font&
var b& = Create("Edit",%hWnd,"",180,40,220,35)
print WinError$(%WinError)
SetFont b&,Font&
var v& = ControlW(TToUTF("EDIT"),"ABCDEFGHI",1342242944,400,5,200,35,%hWnd,1,%hInstance,$200)
print WinError$(%WinError)
SetFont v&,Font&
var w& = ControlW(TToUTF("EDIT"),"ABCDEFGHI",1342242944,400,40,200,35,%hWnd,1,%hInstance,$200)
print WinError$(%WinError)
SetFont w&,Font&
whilenot IsKey(27)
waitinput
SetText b&,GetText$(a&)
SetText w&,GetText$(v&)
SetTextW(b&,GetTextW(a&))
SetTextW(w&,GetTextW(v&))
wend
Dele ct Font&
end
Potztausend, el Edits reagieren wirklich aufs Haar igual. Der einzige Diferencia liegt en él, Yo el Texto auslese. Benutze Yo el API SendMessageA (also el herkömmliche xprofane Settext/GetText$), Luego se el Unikode gehäckselt. Nehme Yo dagegen SendMessageW, Luego se en beiden Edits alles correcto übertragen.
|
| | | | |
|
RespuestaThemeninformationenDieses Thema ha 3 subscriber: |