Foro | | | | - Page 1 - |
| Julian Schmidt | Ciao, ich würde gerne ein Unicode-Zeichen (U+2192) in einem Static ausgeben. Gibt es da irgendwelche Möglichkeiten?
LG
Julian57 |
| | | | |
| | « Dieser Beitrag wurde als Lösung gekennzeichnet. » | | Julian Schmidt | Ok, so funzt alles. Danke IF. Du warst mir eine grande Aiuto.
$H Messages.ph
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
SetText static&,chr$($2192)
External("USER32","SetWindowTextW",static&,utf("Test ")+chr$($92)+chr$($21)+utf(" Test"))
Waitinput
End
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
If %pCount > 10
Parameters Class$,Name$,style&,x%,y%,dx%,dy%,pWnd&,pid%,hInst&,exstyle&
Else
Parameters Class$,Name$,style&,x%,y%,dx%,dy%,pWnd&,pid%,hInst&
Var exstyle& = 0
EndIf
Class$ = UTF(Class$)
Name$ = UTF(Name$)
Var cs# = New(CREATESTRUCT)
With cs#
.lpCreateParams& = SizeOf(cs#)
.hInstance& = hInst&
.hMenu& = If(External("USER32","IsMenu",id%),id%,0)
.hwndParent& = pWnd&
.cy% = dy%
.cx% = dx%
.y% = y%
.x% = x%
.style& = style&
.lpszName& = Addr(Name$)
.lpszClass& = Addr(Class$)
.dwExStyle& = exstyle&
EndWith
Var handle& = External("USER32","CreateWindowExW",exstyle&,Addr(Class$),Addr(Name$),style&,x%,y%,dx%,dy%,pWnd&,id%,hInst&,cs#)
inc id%
IfNot handle&
Class$ = WinError$(%WinError)
MessageBox("Es trat folgender Fehler auf:\n\n" + Class$,"F E H L E R !!!",4096)
EndIf
Dispose cs#
Return handle&
EndProc
|
| | | | | |
| | | Einfach ein Unicode-Static z.B. mit createWindowW anlegen.
Wenns nur um die Ausgabe geht dann hilft Dir vlt. auch DrawTextW oder ein HTMLWin.
Schau mal hier gibts eine CreateW-Proc von Nico: [...] |
| | | | |
| | Julian Schmidt | Es geht nicht nur um die Ausgabe, sondern ich möchte schon ein Static verwenden. Das erstellen des Statics ist soweit ja einfach. Nur wie tue ich dann Unicode-Zeichen einfügen?
CLS
Var class$="Static"
Var title$="Das ist ein Static. \nHier sollen Unicode-Zeichen rein."
Var static&=External("USER32","CreateWindowExA",0,addr(class$),addr(title$),$50000000,10,10,width(%hwnd)-20,35,%hwnd,0,%hinstance,10000)
'Var static&=External("USER32","CreateWindowExW",0,addr(class$),addr(title$),$50000000,10,10,width(%hwnd)-20,35,%hwnd,0,%hinstance,10000)
Waitinput
|
| | | | |
| | | Statt ein Ansi-Byte halt ein Word pro Zeichen und da XProfan-Strings binärsicher sind kannst Du einfach per chr$($08)+chr$($90) kombinieren.
Übrigens: UTF-8-Symbole-Kompilation: [...] |
| | | | |
| | Julian Schmidt | Wie meinst du das? Beispiel? |
| | | | |
| | | Du schreibst U+2192 -
also probiere mal setText notAuniqueButCoolhandleOfAUnicodeStaticControlHandle&,chr$(2192) -
ich weiß jetzt nicht ob XProfan das dann schon von selbst korrekt abarbeitet und 2 Byte einfügt. |
| | | | |
| | Julian Schmidt | Anscheinend nicht...
CLS
Var class$="Static"
Var title$="Das ist ein Static. \nHier soll nachfolgend ein Unicode-Zeichen rein."
Var static&=External("USER32","CreateWindowExA",0,addr(class$),addr(title$),$50000000,10,10,width(%hwnd)-20,35,%hwnd,0,%hinstance,10000)
'Var static&=External("USER32","CreateWindowExW",0,addr(class$),addr(title$),$50000000,10,10,width(%hwnd)-20,35,%hwnd,0,%hinstance,10000)
Waitinput
SetText static&,chr$(2192)
Waitinput
|
| | | | |
| | | Jo, gibt leider 1 statt 2 aus:
Dann kannst ja z.B. per: Dein Zeichen ansetzen aber irgendwie fehlt mir in Deinem Beispiel eine unicode-WndProc wie sie Nico vormacht. |
| | | | |
| | Julian Schmidt | Hi IF, ich habs nun versucht mit Nico's CreateW umzusetzen. Er scheint mir nun auch tatsächlich Unicode-Zeichen auszugeben, allerdings leider nicht das Zeichen das ich eigentlich haben wollte. Ich habe mir mein Zeichen in der Windows eigenen Zeichentabelle ausgesucht. Ich dachte links unten sei der Unicode-Wert zu finden. Wenn ich diesen Wert in meinen Prog. einsetzte kommt aber ein anderes Zeichen heraus. Habe Io l' nicht den korrekten Unicode-Wert meines Zeichens, oder arbeitet mein Code nicht korrekt?
$H Messages.ph
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
SetText static&,chr$($2192)
Waitinput
End
Proc HiByte
Parameters word%
Return word% >> 8
EndProc
Proc LoByte
Parameters word%
Return word% & $FF
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
If %pCount > 10
Parameters Class$,Name$,style&,x%,y%,dx%,dy%,pWnd&,pid%,hInst&,exstyle&
Else
Parameters Class$,Name$,style&,x%,y%,dx%,dy%,pWnd&,pid%,hInst&
Var exstyle& = 0
EndIf
Class$ = UTF(Class$)
Name$ = UTF(Name$)
Var cs# = New(CREATESTRUCT)
With cs#
.lpCreateParams& = SizeOf(cs#)
.hInstance& = hInst&
.hMenu& = If(External("USER32","IsMenu",id%),id%,0)
.hwndParent& = pWnd&
.cy% = dy%
.cx% = dx%
.y% = y%
.x% = x%
.style& = style&
.lpszName& = Addr(Name$)
.lpszClass& = Addr(Class$)
.dwExStyle& = exstyle&
EndWith
Var handle& = External("USER32","CreateWindowExW",exstyle&,Addr(Class$),Addr(Name$),style&,x%,y%,dx%,dy%,pWnd&,id%,hInst&,cs#)
inc id%
IfNot handle&
Class$ = WinError$(%WinError)
MessageBox("Es trat folgender Fehler auf:\n\n" + Class$,"F E H L E R !!!",4096)
EndIf
Dispose cs#
Return handle&
EndProc
|
| | | | |
| | | Hier schau so gehts:
$H Messages.ph
CLS
Struct CREATESTRUCT = lpCreateParams&, hInstance&, hMenu&, hwndParent&, cy%, cx%, y%, x%, style&, lpszName&, lpszClass&, dwExStyle&
Var hUser& = ImportDLL("USER32","u_")
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
declare s$
s$=chr$($92)+chr$($21)+"\z\z"
u_SetWindowTextW(static&,addr(s$))
Waitinput
FreeDLL hUser&
End
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
If %pCount > 10
Parameters Class$,Name$,style&,x%,y%,dx%,dy%,pWnd&,pid%,hInst&,exstyle&
Else
Parameters Class$,Name$,style&,x%,y%,dx%,dy%,pWnd&,pid%,hInst&
Var exstyle& = 0
EndIf
Class$ = UTF(Class$)
Name$ = UTF(Name$)
Var cs# = New(CREATESTRUCT)
With cs#
.lpCreateParams& = SizeOf(cs#)
.hInstance& = hInst&
.hMenu& = if(u_IsMenu(id%),id%,0)
.hwndParent& = pWnd&
.cy% = dy%
.cx% = dx%
.y% = y%
.x% = x%
.style& = style&
.lpszName& = Addr(Name$)
.lpszClass& = Addr(Class$)
.dwExStyle& = exstyle&
EndWith
Var handle& = u_CreateWindowExW(exstyle&,Addr(Class$),Addr(Name$),style&,x%,y%,dx%,dy%,pWnd&,id%,hInst&,cs#)
inc id%
IfNot handle&
Class$ = WinError$(%WinError)
MessageBox("Es trat folgender Fehler auf:\n\n" + Class$,"F E H L E R !!!",4096)
EndIf
Dispose cs#
Return handle&
EndProc
|
| | | | |
| | Julian Schmidt | Und wie ist es, wenn ich das Zeichen mit anderen Strings kombinieren möchte?
$H Messages.ph
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
SetText static&,chr$($2192)
External("USER32","SetWindowTextW",static&,"Test/z/z"+chr$($92)+chr$($21))+" \z\zTest"
Waitinput
End
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
If %pCount > 10
Parameters Class$,Name$,style&,x%,y%,dx%,dy%,pWnd&,pid%,hInst&,exstyle&
Else
Parameters Class$,Name$,style&,x%,y%,dx%,dy%,pWnd&,pid%,hInst&
Var exstyle& = 0
EndIf
Class$ = UTF(Class$)
Name$ = UTF(Name$)
Var cs# = New(CREATESTRUCT)
With cs#
.lpCreateParams& = SizeOf(cs#)
.hInstance& = hInst&
.hMenu& = If(External("USER32","IsMenu",id%),id%,0)
.hwndParent& = pWnd&
.cy% = dy%
.cx% = dx%
.y% = y%
.x% = x%
.style& = style&
.lpszName& = Addr(Name$)
.lpszClass& = Addr(Class$)
.dwExStyle& = exstyle&
EndWith
Var handle& = External("USER32","CreateWindowExW",exstyle&,Addr(Class$),Addr(Name$),style&,x%,y%,dx%,dy%,pWnd&,id%,hInst&,cs#)
inc id%
IfNot handle&
Class$ = WinError$(%WinError)
MessageBox("Es trat folgender Fehler auf:\n\n" + Class$,"F E H L E R !!!",4096)
EndIf
Dispose cs#
Return handle&
EndProc
|
| | | | |
| | | Like that?
External("USER32","SetWindowTextW",static&,"T\ze\zs\zt\z\z\z")
bzw.
Zeichen hat halt 2 statt 1 Byte und String möchte statt nur mit \z (chr(0)) mit \z\z DoppelNull "nullterminiert" werden. |
| | | | |
|
AnswerTopic-Options | 17.540 Views |
ThemeninformationenDieses Thema hat 4 subscriber: |