Foro | | | | Stephan Sonneborn | ¡Hola Personas, Yo stehe siempre todavía antes el Problema, russische Textos en Dialogelemente a bringen. El Textos mentira mittlerweile en uno DLL en russischer Lingua antes.
Yo schaffe lo pero no, esta Textos darzustellen. Lo voluntad siempre sólo Fragezeichen adecuado.
Como muss Yo el Textos en el ANSI- Zona > 1024 ansprechen? Yo komme con el WIDECHARS y WIDESTRINGS no está claro...?!?! Zunächst muss Yo el Textos de el DLL lesen y zwar así, dass el Information, dass lo kyrilische Signo son con übertragen se. En posición hier ya siempre sólo Fragezeichen en el eingelesenen String.
Sombrero alguien una Concepto? |
| | | XProfan X4Schöne Grüße aus Wittgenstein von Stephan Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz | 06.07.2021 ▲ |
| |
| | Georg Teles | ¡Hola Stephan,
Wenn el Windows Lingua al alemán es, es normal, dass el Textos mittels imprimir como ??? herauskommen, como imprimir y SetText así no umgehen puede - más Problema es, dass esta Textos ya en el Russichen vorliegen, sodass du esta como Ressource herauslesen y luego umwandeln debería, porque ExtString$ no con WideStrings umgehen kann.
Der Grund meiner PCU [...] war genau dieser, dass uno el Cuerdas como lateinische en el Programa oder DLL einfügt y luego con el Función umwandelt - l2cPCU.l2l de lateinischen Cuerdas a WideStrings y l2cPCU.l2c de los lateinischen Cuerdas a kyrillischen WideStrings
Grüße |
| | | | |
| | Stephan Sonneborn | ¡Hola Georg,
vielen Dank para Su Antwort! So Yo lo encima Umwege auch gemacht: Ein Kollege ha con uno Inglés / russischen Tastatur el russischen Textos "blind" eingegeben y yo tener el Kauderwelsch de lateinischen Buchstaben entonces verwendet, en ihn con el CYRILLIC - Font darzustellen. Pero muy unschön, porque uno siempre el Font mitliefern muss. Jetzt ha una otro Kollege direkt russische Textos eingegeben. Und una otro alles otra vez "richtig" en russisch traducido.
Puedo morgen veces una abgespeckte DLL einstellen... |
| | | Schöne Grüße aus Wittgenstein von Stephan
Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz | 07.07.2021 ▲ |
| |
| | Georg Teles | El Textos kann Yo dir en efecto en mi Form traducir, para el PCU si du magst
Usted puede el Texto direkt en el Programa oder en el DLL mitliefern. Como russiche Textos generell problematisch en una deutschsprachigen PC son, es meiner Meinung sinnvoller el Textos igual en lateinischen Buchstaben abzuspeichern (ansi) porque el meisten Textfunktionen sowieso sólo Ansi qué anfangen puede ... esta entonces en WideStrings umwandeln ind ausgeben, entonces hast du el Sicherheit, dass en cada PC el Gleiche adecuado se. |
| | | | |
| | Stephan Sonneborn | Yo hier veces una Testprogramm y una Mini-DLL con drei Texten drin:
DECLARE DLL$, DLL&, FONT&, HText&[3], HTextW&[3]
DECLARE Texto$[3], TextW$[3]
DECLARE Buffer#, count&, Adresse%,i%
DECLARE id%
DEF LoadStringW(4) !"USER32", "LoadStringW"
DEF IsMEnu(1) !"USER32", "IsMenu"
DEF CreateWindowExW(12) !"USER32", "CreateWindowExW"
DEF SetWindowTextW(2) !"USER32", "SetWindowTextW"
DIM Buffer#,4097
STRUCT CREATESTRUCT = lpCreateParams&, hInstance&, hMenu&, hwndParent&, cy%, cx%, y%, x%, style&, lpszName&, lpszClass&, dwExStyle&
'*****************************************************************************************************************'
'* ORDW, CHRW, UTF, CREATEW
'*****************************************************************************************************************'
proc ordw
parámetros s$
declarar m#
dim m#,2
char m#,0=left$(s$+"\z\z",2)
var wc&=word(m#,0)
disponer m#
volver wc&
ENDPROC
'*****************************************************************************************************************'
proc chrw
parámetros wc&
declarar m#
dim m#,2
word m#,0=wc&
var s$=char$(m#,0,2)
disponer m#
volver s$
ENDPROC
'*****************************************************************************************************************'
Proc UTF
parámetros texto$
declarar b#
Dim b#,2*len(texto$)+2
StringW b#,0 = texto$
texto$ = Char$(b#,0,SizeOf(b#)-2)
volver texto$
ENDPROC
'*****************************************************************************************************************'
Proc CreateW
parámetros Class$,Name$,style&,x%,y%,dx%,dy%,pWnd&,pid%,hInst&,exstyle&
caso %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%
Caso negativo handle&
MessageBox("Es trat folgender Fehler en:\n\n" + Class$,"F E H L E R !!!",4096)
EndIf
Disponer cs#
Volver handle&
ENDPROC
'*****************************************************************************************************************'
'*****************************************************************************************************************'
'* Hauptprogramm'
'*****************************************************************************************************************'
DLL$ ="DLL_RU_Test.DLL"
DLL&=USEDLL(DLL$)
id% = 1
CLS
SET("CHARSET", 1251)
Font&=Crear("FONT", "calibri",0,0,0,0,0)
HText&[1] = create("Static",%HWND,"1", 10,10,200,20)
HText&[2] = create("Static",%HWND,"2", 10,40,200,20)
HText&[3] = create("Static",%HWND,"3", 10,70,200,20)
HTextW&[1] = createW("static","W1", $50000000,250,10,200,20,%HWND,0,%HINSTANCE)
HTextW&[2] = createW("static","W2", $50000000,250,40,200,20,%HWND,0,%HINSTANCE)
HTextW&[3] = createW("static","W3", $50000000,250,70,200,20,%HWND,0,%HINSTANCE)
SETFONT HText&[1], Font&
SETFONT HText&[2], Font&
SETFONT HText&[3], Font&
SETFONT HTextW&[1], Font&
SETFONT HTextW&[2], Font&
SETFONT HTextW&[3], Font&
WAITINPUT
Adresse% = 99
WHILELOOP 1,3,1
CLEAR Buffer#
count& = LoadStringW(DLL&, Adresse%+&LOOP, Buffer#, 4097)
Texto$[&LOOP] = EXTSTRING$ (DLL&, Adresse%+&LOOP)
TextW$[&LOOP] = WIDECHAR(Buffer#,0,count&*2)
SETTEXT HText&[&LOOP], Texto$[&LOOP]
SETTEXT HTextW&[&LOOP], TextW$[&LOOP]
WEND
WAITINPUT
DISPOSE Buffer#
DELETEOBJECT Font&
FREEDLL DLL&
FIN
|
| | | XProfan X4Schöne Grüße aus Wittgenstein von Stephan Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz | 08.07.2021 ▲ |
| |
| | Georg Teles | Hi Stephan, habe deinen Ver código fuente adaptado, así dürfte lo ir
DECLARE DLL$, DLL&, FONT&, HText&[3], HTextW&[3]
DECLARE Texto$[3], TextW$[3]
DECLARE Buffer#, count&, Adresse%,i%
DECLARE id%
DEF LoadStringW(4) !"USER32", "LoadStringW"
DEF IsMEnu(1) !"USER32", "IsMenu"
DEF CreateWindowExW(12) !"USER32", "CreateWindowExW"
DEF SetWindowTextW(2) !"USER32", "SetWindowTextW"
DIM Buffer#,4097
STRUCT CREATESTRUCT = lpCreateParams&, hInstance&, hMenu&, hwndParent&, cy%, cx%, y%, x%, style&, lpszName&, lpszClass&, dwExStyle&
'*****************************************************************************************************************'
'* ORDW, CHRW, UTF, CREATEW
'*****************************************************************************************************************'
proc ordw
parámetros s$
declarar m#
dim m#,2
char m#,0=left$(s$+"\z\z",2)
var wc&=word(m#,0)
disponer m#
volver wc&
ENDPROC
'*****************************************************************************************************************'
proc chrw
parámetros wc&
declarar m#
dim m#,2
word m#,0=wc&
var s$=char$(m#,0,2)
disponer m#
volver s$
ENDPROC
'*****************************************************************************************************************'
Proc UTF
parámetros texto$
declarar b#
Dim b#,2*len(texto$)+2
StringW b#,0 = texto$
texto$ = Char$(b#,0,SizeOf(b#)-2)
volver texto$
ENDPROC
'*****************************************************************************************************************'
Proc CreateW
parámetros Class$,Name$,style&,x%,y%,dx%,dy%,pWnd&,pid%,hInst&,exstyle&
caso %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%
Caso negativo handle&
MessageBox("Es trat folgender Fehler en:\n\n" + Class$,"F E H L E R !!!",4096)
EndIf
Disponer cs#
Volver handle&
ENDPROC
'*****************************************************************************************************************'
'*****************************************************************************************************************'
'* Hauptprogramm'
'*****************************************************************************************************************'
DLL$ ="DLL_RU_Test.DLL"
DLL&=USEDLL(DLL$)
id% = 1
CLS
SET("CHARSET", 1251)
Font&=Crear("FONT", "calibri",0,0,0,0,0)
HText&[1] = create("Static",%HWND,"1", 10,10,200,20)
HText&[2] = create("Static",%HWND,"2", 10,40,200,20)
HText&[3] = create("Static",%HWND,"3", 10,70,200,20)
HTextW&[1] = createW("static","W1", $50000000,250,10,200,20,%HWND,0,%HINSTANCE)
HTextW&[2] = createW("static","W2", $50000000,250,40,200,20,%HWND,0,%HINSTANCE)
HTextW&[3] = createW("static","W3", $50000000,250,70,200,20,%HWND,0,%HINSTANCE)
SETFONT HText&[1], Font&
SETFONT HText&[2], Font&
SETFONT HText&[3], Font&
SETFONT HTextW&[1], Font&
SETFONT HTextW&[2], Font&
SETFONT HTextW&[3], Font&
WAITINPUT
Adresse% = 99
WHILELOOP 1,3,1
CLEAR Buffer#
count& = LoadStringW(DLL&, Adresse%+&LOOP, Buffer#, 4097)
TextW$[&LOOP] = c2w(Buffer#,count&*2)'Byte para Byte auslesen !!!
SetWindowTextW(HText&[&LOOP], Addr(TextW$[&LOOP]))'Conjunto...W
SetWindowTextW(HTextW&[&LOOP], Addr(TextW$[&LOOP]))'Conjunto...W
'Texto$[&LOOP] = EXTSTRING$ (DLL&, Adresse%+&LOOP)
'TextW$[&LOOP] = WIDECHAR(Buffer#,0,count&*2)
'SETTEXT HText&[&LOOP], Texto$[&LOOP]
'SETTEXT HTextW&[&LOOP], TextW$[&LOOP]
WEND
WAITINPUT
DISPOSE Buffer#
DELETEOBJECT Font&
FREEDLL DLL&
FIN
WEND
Proc c2w'Byte para Byte auslesen
Parámetros buf#, siz&
Declarar wide$
Claro wide$
WhileLoop 0,(siz&-1)
wide$ = wide$+Chr$(Byte(buf#,&bucle))'+Chr$(4) CHR(4) entfällt, como Buffer# ya como Wide geladen wurde !!! en normalem String debería uno hier el CHR(4) todavía anhängen
EndWhile
Volver wide$
ENDPROC
Grüße Georg |
| | | | |
| | Stephan Sonneborn | ¡Hola Georg,
super! Das klappt prima!
Der Knackpunkt war also el byte-weise Einlesen el Textos y el Setzen encima SETWINDOWTEXTW() con Ansprechen el Textadresse.
Vielen, vielen Dank! |
| | | XProfan X4Schöne Grüße aus Wittgenstein von Stephan Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz | 13.07.2021 ▲ |
| |
|
RespuestaThemeninformationenDieses Thema ha 2 subscriber: |