xbpStatic ANSI/OEM Konvertierung verhindern?
Moderator: Moderatoren
xbpStatic ANSI/OEM Konvertierung verhindern?
Hallo Zusammen,
gibt es eine Möglichkeit die implizite OEM/ANSI Konvertierung bei xbpStatic:setCaption(xxx) zu umgehen?
Der Grund ist, dass wir eine Anwendung mit OEM-Zeichensatz (Set Charset To OEM) nutzen, ich möchte
jetzt aber in einem xbpStatic ein Sonderzeichen anzeigen, dass nicht im OEM-Zeichensatz enthalten ist.
Leider verhindert die implizite Konvertierung dies. (Es gibt halt kein passendes OEM-Zeichen dafür)
Die Anwendung auf ANSI umstellen ist keine Option. Eine Umstellung für diese Ausgabe geht leider nicht,
da die GUI immer den Zeichensatz des Hauptthreads nutzt.
Also kann man die implizite Konvertierung eventuell kurzfristig deaktivieren, oder gibt es eventuell ein
Möglichkeit den Inhalt direkt (via DLL-Call o.ä.) zu setzen?
Für eine Idee wäre ich dankbar. Gruß Matthias
gibt es eine Möglichkeit die implizite OEM/ANSI Konvertierung bei xbpStatic:setCaption(xxx) zu umgehen?
Der Grund ist, dass wir eine Anwendung mit OEM-Zeichensatz (Set Charset To OEM) nutzen, ich möchte
jetzt aber in einem xbpStatic ein Sonderzeichen anzeigen, dass nicht im OEM-Zeichensatz enthalten ist.
Leider verhindert die implizite Konvertierung dies. (Es gibt halt kein passendes OEM-Zeichen dafür)
Die Anwendung auf ANSI umstellen ist keine Option. Eine Umstellung für diese Ausgabe geht leider nicht,
da die GUI immer den Zeichensatz des Hauptthreads nutzt.
Also kann man die implizite Konvertierung eventuell kurzfristig deaktivieren, oder gibt es eventuell ein
Möglichkeit den Inhalt direkt (via DLL-Call o.ä.) zu setzen?
Für eine Idee wäre ich dankbar. Gruß Matthias
- AUGE_OHR
- Marvin
- Beiträge: 12912
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: xbpStatic ANSI/OEM Konvertierung verhindern?
hi,
du kannst bei jedem XbPart die Presentation Parameter setzten welches einen Font enthalten kann.p.s. alles was das Static als Parent nutzt hätte dann auch "den" Font !
du kannst bei jedem XbPart die Presentation Parameter setzten welches einen Font enthalten kann.
Code: Alles auswählen
LOCAL aPP := {}
AADD(aPP,{XBP_PP_COMPOUNDNAME,"12.ArialTTF"})
oStatic := XbpStatic():new( oParent,, aPos,aSize,aPP} )
gruss by OHR
Jimmy
Jimmy
Re: xbpStatic ANSI/OEM Konvertierung verhindern?
Hi,
danke für die schnelle Antwort. Der Font selber ist leider nicht das Problem (In meinem Problem geht es um "Windings"). Ich möchte das ANSI-Zeichen mit der Nummer 253 (CHR(253)) darstellen.
oxbp:setcaption(chr(253)) geht aber nicht, da die Konvertierung versucht das Zeichen von OEM in ANSI zu konvertieren. Das geht nicht, da es für dieses Sonderzeichen kein passendes OEM-Zeichen gibt.
Es gibt also kein Zeichen, dass auf CHR(253) konvertiert wird.
Gruß Matthias
danke für die schnelle Antwort. Der Font selber ist leider nicht das Problem (In meinem Problem geht es um "Windings"). Ich möchte das ANSI-Zeichen mit der Nummer 253 (CHR(253)) darstellen.
oxbp:setcaption(chr(253)) geht aber nicht, da die Konvertierung versucht das Zeichen von OEM in ANSI zu konvertieren. Das geht nicht, da es für dieses Sonderzeichen kein passendes OEM-Zeichen gibt.
Es gibt also kein Zeichen, dass auf CHR(253) konvertiert wird.
Gruß Matthias
- Jan
- Marvin
- Beiträge: 14660
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: xbpStatic ANSI/OEM Konvertierung verhindern?
Ginge denn ConvToAnsiCP(Chr(253))? Ich befürchte mal eher nicht ...
Jan
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Jan
- Marvin
- Beiträge: 14660
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: xbpStatic ANSI/OEM Konvertierung verhindern?
Ist nicht ASCII 236 = ANSI 253?
Jan
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Re: xbpStatic ANSI/OEM Konvertierung verhindern?
Leider nicht.
Chr(253) ist in Arial ein "ý". Im OEM-Zeichensatz gibt es kein passendes Zeichen. So einfach ist es leider nicht.
Gruß Matthias
Chr(253) ist in Arial ein "ý". Im OEM-Zeichensatz gibt es kein passendes Zeichen. So einfach ist es leider nicht.
Gruß Matthias
- AUGE_OHR
- Marvin
- Beiträge: 12912
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: xbpStatic ANSI/OEM Konvertierung verhindern?
ok dann versuche es mit XBP_PP_FONT und einem Font Object wo du die "richtige" Codepage auswählst.Kamaalan hat geschrieben:Der Font selber ist leider nicht das Problem (In meinem Problem geht es um "Windings"). Ich möchte das ANSI-Zeichen mit der Nummer 253 (CHR(253)) darstellen.
gruss by OHR
Jimmy
Jimmy
- Jan
- Marvin
- Beiträge: 14660
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: xbpStatic ANSI/OEM Konvertierung verhindern?
Matthias,Kamaalan hat geschrieben:Leider nicht.
Chr(253) ist in Arial ein "ý". Im OEM-Zeichensatz gibt es kein passendes Zeichen. So einfach ist es leider nicht.
Gruß Matthias
also in meiner ASCII-Tabelle sieht das exakt gleich aus. y mit Akzent nach rechts oben.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Re: xbpStatic ANSI/OEM Konvertierung verhindern?
irgendwie nicht ganz falsch.Jan hat geschrieben:Ist nicht ASCII 236 = ANSI 253?
Auf der beigefügten Hardcopy der Ausschnitt meiner Ascii-Tabelle von MultiEdit.
Da ist Dezimal 236 bei OEM das gesuchte ý und bei ANSI bei Dec 253.
- Dateianhänge
-
- HardCopy0001.JPG (42.12 KiB) 11872 mal betrachtet
Re: xbpStatic ANSI/OEM Konvertierung verhindern?
Hallo Zusammen,
leider haben Eure Lösungsversuche noch nicht geholfen. Ich schaffe es nicht in einem Static das Zeichen
Chr(253) im Zeichensatz Wingdings darzustellen. Fonts mit verschiedene Codepages ändern zwar das
Ergebnis, erreichen aber nicht das gewünschte.
Gruß Matthias
leider haben Eure Lösungsversuche noch nicht geholfen. Ich schaffe es nicht in einem Static das Zeichen
Chr(253) im Zeichensatz Wingdings darzustellen. Fonts mit verschiedene Codepages ändern zwar das
Ergebnis, erreichen aber nicht das gewünschte.
Gruß Matthias
- mikehoffmann
- Rekursionen-Architekt
- Beiträge: 135
- Registriert: Mo, 21. Sep 2015 16:22
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 19 Mal
Re: xbpStatic ANSI/OEM Konvertierung verhindern?
Mach doch einen DllCall nach SetWindowTextA und übergib den Text als ANSI-String.
Michael
Michael
Re: xbpStatic ANSI/OEM Konvertierung verhindern?
Hallo Zusammen,
ich benötige doch noch einmal Eure Hilfe. Ich habe versucht mit SetWindowTextA den Text eines XbpStatic() zu ersetzen. Leider ohne Erfolg. Den Titel eines Fenster konnte ich ohne Problem ändern. Was mache ich falsch? Über Hilfe/Tipps wäre ich sehr dankbar.
Code:
Gruß Matthias
ich benötige doch noch einmal Eure Hilfe. Ich habe versucht mit SetWindowTextA den Text eines XbpStatic() zu ersetzen. Leider ohne Erfolg. Den Titel eines Fenster konnte ich ohne Problem ändern. Was mache ich falsch? Über Hilfe/Tipps wäre ich sehr dankbar.
Code:
Code: Alles auswählen
EXTERN LONG SetWindowTextA( nHWND AS LONG, @cTxt AS STRING ) IN WIN32API
Function SetCaptionAnsi(oPart, cText)
Local h := oPart:getHWND()
SetWindowTextA(h,ctext+chr(0))
Return NIL
- AUGE_OHR
- Marvin
- Beiträge: 12912
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: xbpStatic ANSI/OEM Konvertierung verhindern?
wie der Name der API Function sagt ist es für ein "Windows" ( = Fenster) gedacht und nicht für ein Control.
zum setzte eines Text benötigst du WM_SETTEXT
Code: Alles auswählen
nHandle := oStatic:GethWnd()
DllCall(nDll,DLL_STDCALL,"SendMessageA",nHandle,WM_SETTEXT,LEN(cText),cText )
gruss by OHR
Jimmy
Jimmy
Re: xbpStatic ANSI/OEM Konvertierung verhindern?
Hi,
danke für Deine schnelle Antwort, leider nur das gleiche Ergebnis.
Hier mal das ganze Programm:
In cBuffer steht hinterher "NEU" drin, aber auf dem Bildschirm bleibt der alte Inhalt ("ALT").
Danke und Gruß Matthias
danke für Deine schnelle Antwort, leider nur das gleiche Ergebnis.
Hier mal das ganze Programm:
Code: Alles auswählen
#include "gra.ch"
#include "dll.ch"
#include "xbp.ch"
#include "Appevent.ch"
#define WM_SETTEXT 0x000C
EXTERN LONG SetWindowTextA( nHWND AS LONG, @cTxt AS STRING ) IN WIN32API
EXTERN LONG SetWindowTextW( nHWND AS LONG, @cTxt AS STRING ) IN WIN32API
EXTERN LONG SetWindowText( nHWND AS LONG, @cTxt AS STRING ) IN WIN32API
EXTERN LONG GetWindowText( nHWND AS LONG, @cBuf AS STRING, nLen AS LONG ) IN WIN32API
EXTERN LONG SendMessageA( nHWND AS LONG, nMsg AS LONG, nLen AS LONG, @ctxt AS STRING ) IN WIN32API
PROCEDURE Main
LOCAL nEvent, mp1, mp2, oXbp
LOCAL oDlg, oDraw, oStatic, cText
Local i,j,c,s
Set Charset to oem
oDlg := XbpDialog():new()
oDlg:title := "Test Ansi/OEM"
oDlg:create( ,, {50,50}, {500,500} )
oDraw := oDlg:drawingArea
oStatic := XbpStatic():new( oDraw,, {10, 10 } ,{480,400} )
oStatic:autoSize:=.f.
oStatic:type := XBPSTATIC_TYPE_TEXT
oStatic:caption := "ALT"
oStatic:create()
setCaptionAnsi(oStatic,"NEU"+Chr(0))
nEvent := 0
DO WHILE nEvent <> xbeP_Close
nEvent := AppEvent( @mp1, @mp2, @oXbp )
oXbp:handleEvent( nEvent, mp1, mp2 )
ENDDO
RETURN
Function APPSYS
Return NIL
Function SetCaptionAnsi(oPart, cText)
Local h := oPart:getHWND()
Local cBuffer := Space(200)
SendMessageA(h,12,len(cText),ctext)
GetWindowText(h,@cBuffer,20)
oPart:invalidaterect()
Return NIL
Danke und Gruß Matthias
- AUGE_OHR
- Marvin
- Beiträge: 12912
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: xbpStatic ANSI/OEM Konvertierung verhindern?
die kommst du auf WIN32API ?
habe bei den anderen nicht nachgesehen aber auch die sind wohl aus USER32.DLL oder KERNAL32.DLL
du scheinst die v2.x zu benutzen mit EXTERNAL ... das ist nicht Abwärtz kompatible d.h. ich kann es mit der v1.9x nicht testen
habe bei den anderen nicht nachgesehen aber auch die sind wohl aus USER32.DLL oder KERNAL32.DLL
Code: Alles auswählen
DLLFUNCTION SendMessageA( hWnd, nMsg, nWparam, nLparam ) USING STDCALL FROM user32.dll
gruss by OHR
Jimmy
Jimmy
- HaPe
- 1000 working lines a day
- Beiträge: 996
- Registriert: So, 15. Nov 2015 17:44
- Wohnort: 71665 Vaihingen-Enz
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 15 Mal
Re: xbpStatic ANSI/OEM Konvertierung verhindern?
Hallo Jimmy !
If the constant WIN32API from dll.ch is specified, the function is automatically searched for in the following Win32 API libraries: Kernel32.dll, Gdi32.dll, User32.dll, Mpr.dll and Advapi32.dll.
Weil das in der Doku von EXTERN steht:die kommst du auf WIN32API ?
If the constant WIN32API from dll.ch is specified, the function is automatically searched for in the following Win32 API libraries: Kernel32.dll, Gdi32.dll, User32.dll, Mpr.dll and Advapi32.dll.
--
Hans-Peter
Hans-Peter
Re: xbpStatic ANSI/OEM Konvertierung verhindern?
Die 1.9 Version verhält sich identisch.
Gruß Matthias
Gruß Matthias
Code: Alles auswählen
#include "gra.ch"
#include "dll.ch"
#include "xbp.ch"
#include "Appevent.ch"
#define WM_SETTEXT 0x000C
PROCEDURE Main
LOCAL nEvent, mp1, mp2, oXbp
LOCAL oDlg, oDraw, oStatic, cText
Local i,j,c,s
Set Charset to oem
oDlg := XbpDialog():new()
oDlg:title := "Test Ansi/OEM"
oDlg:create( ,, {50,50}, {500,500} )
oDraw := oDlg:drawingArea
oStatic := XbpStatic():new( oDraw,, {10, 10 } ,{480,400} )
oStatic:autoSize:=.f.
oStatic:type := XBPSTATIC_TYPE_TEXT
oStatic:caption := "ALT"
oStatic:create()
setCaptionAnsi(oStatic,"NEU"+Chr(0))
nEvent := 0
DO WHILE nEvent <> xbeP_Close
nEvent := AppEvent( @mp1, @mp2, @oXbp )
oXbp:handleEvent( nEvent, mp1, mp2 )
ENDDO
RETURN
Function APPSYS
Return NIL
Function SetCaptionAnsi(oPart, cText)
Local h := oPart:getHWND()
Local cBuffer := Space(200)
nDLL = DLLLoad("user32.dll")
DllCall(nDll,DLL_STDCALL,"SendMessageA",h,WM_SETTEXT,LEN(cText),cText )
DLLUnload(ndll)
Return NIL
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: xbpStatic ANSI/OEM Konvertierung verhindern?
Überprüfe doch mal ob dein installierter Zeichensatz das gewünschte Zeichen überhaupt enthält. Ich hatte in anderem zusammenhang auch schon Probleme weil ein Zeichensatz von Windows keine hohen Zeichen enthielt. Nach installation eines vollständigen Zeichensatz ging es dann.
Gruss Carlo
Gruss Carlo
Valar Morghulis
Gruss Carlo
Gruss Carlo
- AUGE_OHR
- Marvin
- Beiträge: 12912
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: xbpStatic ANSI/OEM Konvertierung verhindern?
hm ... irgendwie geht es mit der Static nicht
wenn du ein XbpSLE nimmst klappt es ... hm ...
gruss by OHR
Jimmy
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12912
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: xbpStatic ANSI/OEM Konvertierung verhindern?
das ist wieder Typisch Alaska die "Sache" so zu "verdrehen"HaPe hat geschrieben: ↑Di, 18. Jul 2017 14:54Weil das in der Doku von EXTERN steht:die kommst du auf WIN32API ?
If the constant WIN32API from dll.ch is specified, the function is automatically searched for in the following Win32 API libraries: Kernel32.dll, Gdi32.dll, User32.dll, Mpr.dll and Advapi32.dll.
es kann ja sein das es den Xbase++ Usern "einfacher" gemacht werden soll aber "so" weiss der User ja gar nicht was er macht. wenn man mit der Windows API arbeitet sollte man die "übliche" Syntax verwenden wie es auch ot4xb macht
Code: Alles auswählen
@User32:SendMessageA(h,WM_SETTEXT,len(cText),cText)
gruss by OHR
Jimmy
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12912
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: xbpStatic ANSI/OEM Konvertierung verhindern?
habe mir noch mal XbpStatic angesehen und festgestellt das es kein "echtes" Windows "Static" (WC_STATIC) ist
somit das Handle von o:GethWND() hier nichts für Windows API taugt
allerdings frage ich mich was du damit eigentlich erreichen willst ?
du wirst damit ja die Zeichen nicht anders darstellen denn das hängt vom Font/Codepage ab.
ich verwende Unicode (ArialUni.TTF) und kann damit auch chinesische Zeichen unter "DE" anzeigen.
dito kann ich damit deutsche Umlaute unter "CN" anzeigen.
ob Xbase++ mit Unicode schon so weit ist ?
somit das Handle von o:GethWND() hier nichts für Windows API taugt
allerdings frage ich mich was du damit eigentlich erreichen willst ?
du wirst damit ja die Zeichen nicht anders darstellen denn das hängt vom Font/Codepage ab.
ich verwende Unicode (ArialUni.TTF) und kann damit auch chinesische Zeichen unter "DE" anzeigen.
dito kann ich damit deutsche Umlaute unter "CN" anzeigen.
ob Xbase++ mit Unicode schon so weit ist ?
gruss by OHR
Jimmy
Jimmy
Re: xbpStatic ANSI/OEM Konvertierung verhindern?
Hi,
ich hoffe, die OEM/Ansi-Konvertierung umgehen zu können. Ich kann unsere Anwendung nicht auf Ansi umstellen! Und xBase konvertiert bei xbpStatic:setcaption() die Eingabe von OEM nach Ansi. Die gewünschten Zeichen (chr(253) im Zeichensatz Wingdings) haben kein passendes OEM Zeichen. Deswegen führt keine Eingabe zu dem gewünschtem Ergebnis. Deswegen auch die ursprüngliche Frage, ob man diese Konvertierung deaktivieren kann.
Gruß Matthias
ich hoffe, die OEM/Ansi-Konvertierung umgehen zu können. Ich kann unsere Anwendung nicht auf Ansi umstellen! Und xBase konvertiert bei xbpStatic:setcaption() die Eingabe von OEM nach Ansi. Die gewünschten Zeichen (chr(253) im Zeichensatz Wingdings) haben kein passendes OEM Zeichen. Deswegen führt keine Eingabe zu dem gewünschtem Ergebnis. Deswegen auch die ursprüngliche Frage, ob man diese Konvertierung deaktivieren kann.
Gruß Matthias
- AUGE_OHR
- Marvin
- Beiträge: 12912
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: xbpStatic ANSI/OEM Konvertierung verhindern?
ok ... aber es muss ja nicht eine XbpStatic sein zum anzeigen ... wie wäre es mit einem Bitmap von dem Sonderzeichen ?
eine andere Möglichkeit wäre ein XbpSLE was o:Disable ist wofür es extra Presentation Parameter gibt. (XBP_PP_DISABLED_FGCLR / XBP_PP_DISABLED_BGCLR )
eine andere Möglichkeit wäre ein XbpSLE was o:Disable ist wofür es extra Presentation Parameter gibt. (XBP_PP_DISABLED_FGCLR / XBP_PP_DISABLED_BGCLR )
gruss by OHR
Jimmy
Jimmy
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: xbpStatic ANSI/OEM Konvertierung verhindern?
Einen Weg gäbe es noch. Baue dir einen Zeichensatz zusammen der dir unter OEM deine gewünschten Zeichen darstellt.
Gruss Carlo
Gruss Carlo
Valar Morghulis
Gruss Carlo
Gruss Carlo