Italia
Foro

Erledigt: Polnische Schriftzeichen - Unicode ListView

 
- Page 1 -



Dietmar
Horn
Ciao,

kennt jemand eine Möglichkeit, auf einem PC mit deutschem Windows ein Programm zu schreiben, welches sowohl deutschen Text als auch polnischen Text anzeigt? Im Polnischen gibt es wohl 8 Buchstaben, die nicht auf der deutschen Tastatur zu finden sind.

Beispiel: Ein Listview, in dem in der ersten Spalte ein deutscher Begriff steht und in der zweiten Spalte jeweils der übersetzte deutsche Begriff dazu.

Wenn ich z.B. von google.pl einen polnischen Text in ein Word-Dokument kopiere, dann werden die polnischen Buchstaben korrekt angezeigt. Wo nimmt da das deutsche Windows den polnischen Zeichensatz her (im Word-Dokument wird dabei als Font Times New Roman angezeiht)? In einer normalen Textdatei mit ASCII-Zeichensatz klappt das jedoch nicht.

Saluto
Dietmar
 
Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V.  [...] 

Windows 95 bis Windows 7
Profan² 6.6 bis XProfan X2 mit XPSE

Das große XProfan-Lehrbuch:  [...] 
19.05.2009  
 



 
- Page 3 -


Auch wenn vlt. hier noch nicht relevant, so ist das UTF-Problem wohl von dannen wenn wir endlich aufhören, normale Windows-Controls zu verwenden sondern (wie es sich gehört) unsere Dialoge per HTML erzeugen.

Da ich mich leider nicht zerreissen kann, werden wir darauf wohl aber noch etwas warten müssen - oder jemand anderes nimmt sich der Sache an.
 
29.05.2009  
 




Frank
Abbing
Die Lösung ist sehr simpel und necessario ganz bestimmt keine HTML-Controls (tz).

Controls, die via CreateWindow() / CreateWindowEx() erzeugt wurden, benutzen Ansi-Zeichensätze. Die Controls, die durch CreateWindowW() / CreateWindowExW() erzeugt wurden, benutzen Unicode-Zeichensätze...

Ich kann per die Listview.dll auf Dauer auch gerne ein Zusatzflag einbauen, um beide Controlarten erzeugen zu können, nur befürchte ich, dass bei allen Messages auch die Wide-Variante necessario wird.
 
29.05.2009  
 




Nico
Madysa
Korrektur: Zu ansikompatiblen Controls führen die APIs CreateWindowA und CreateWindowExA.

Doch ansonsten hast du recht. Ob die Messagenummern sich zwischen Ansi- und Unicode-Controls unterscheiden, habe ich noch nicht überprüft, mag es aber nicht so recht glauben. Auf alle Fälle muss man jedoch alle gesandten Texte umwandeln (Gut, schlimmstenfalls überlässt man das dem Nutzer) und die Notizie müssen (oder vielleicht gar können?) mit der API SendMessageW verschickt werden. Es muss halt alles umgestellt werden, was sicherlich nicht zur Bekanntheit des Unicodesatzes beigetragen hat.
 
Nico Madysa
29.05.2009  
 




Frank
Abbing

Korrektur: Zu ansikompatiblen Controls führen die APIs CreateWindowA und CreateWindowExA.


Gegenkorrektur: z.B. CreateWindowA und CreateWindow sind immer identisch. Die normale Variante ist eben immer die Ansi-Variante, beweise das Gegenteil...


Doch ansonsten hast du recht. Ob die Messagenummern sich zwischen Ansi- und Unicode-Controls unterscheiden, habe ich noch nicht überprüft, mag es aber nicht so recht glauben.


Glaube es ruhig. Besser noch, schau dir einfach ein paar Headerfiles an.
 
01.06.2009  
 




Nico
Madysa
Asche auf mein Haupt, wir sehen uns in nem halben Jahr wieder, bin unterwegs nach Canossa.

Ich habe mal per API und Messages probiert, ein halbwegs funktionierendes Unicode-Listview zu erzeugen, doch kann ich bisher noch nur in die erste Spalte Daten eintragen und es ist recht kompliziert. Eine ListViewW.dll wäre also überaus praktisch.
 
Nico Madysa
02.06.2009  
 




Frank
Abbing

...doch kann ich bisher noch nur in die erste Spalte Daten eintragen und es ist recht kompliziert. Eine ListViewW.dll wäre also überaus praktisch.


Genau diese Kompliziertheit hatte mich ja dazu bewogen, den ganzen Mist mal in simpleren Funktionen zu bündeln.

Ich glaube, eine Unicode-Variante der Listview.dll lohnt aber nicht. Die Anwendungsfälle sind zu selten. Wenn ich das richtig sehe, können polnische Computerbenutzer ja durchaus ihren Zeichensatz per Ansi benutzen, wenn der Computer in polnisch konfiguriert wurde. Vielleicht sollte Dietmar das auch einfach machen...
Ne, nur Spass...
 
02.06.2009  
 



iF, Beitrag=52553, Zeitpunkt=29.05.2009
Auch wenn vlt. hier noch nicht relevant, so ist das UTF-Problem wohl von dannen wenn wir endlich aufhören, normale Windows-Controls zu verwenden sondern (wie es sich gehört) unsere Dialoge per HTML erzeugen.

Da ich mich leider nicht zerreissen kann, werden wir darauf wohl aber noch etwas warten müssen - oder jemand anderes nimmt sich der Sache an.
Frabbing, Beitrag=52554, Zeitpunkt=29.05.2009
Die Lösung ist sehr simpel und necessario ganz bestimmt keine HTML-Controls (tz).



Zumindest gibt es keine simplere Lösung, bedenke das mein Plan alle Controls umfasst und nicht etwa nur ListViews.

Ich lasse mich aber gerne vom Gegenteil überzeugen und vielleicht kannst Du derzeit eine simple Lösung in der ListView.Dll anwenden.
 
02.06.2009  
 




Frank
Abbing

Ich lasse mich aber gerne vom Gegenteil überzeugen und vielleicht kannst Du derzeit eine simple Lösung in der ListView.Dll anwenden.


Ich sagte bereits:


Ich glaube, eine Unicode-Variante der Listview.dll lohnt aber nicht. Die Anwendungsfälle sind zu selten.


So ein Listview ist aber schnell erzeugt:
KompilierenMarkierenSeparieren
Def CreateWindowExW(12) !user32,CreateWindowExW
Declare lv&,class#
Dim class#,512
Cls
StringW class#,0=SysListView32
lv&=CreateWindowExW($200,class#,0,$50000041,100,100,200,200,%hwnd,1,%hinstance,0)
WaitInp
 
03.06.2009  
 




Nico
Madysa
Mag durchaus sein, doch dann kommt der wahre Divertimento: Spaltendefinition (erträglich) und Hinzufügen der Zeilen (woran ich, wie bereits erwähnt, scheitere), sowie eventuelle Suchfunktionen, etc.
 
Nico Madysa
03.06.2009  
 



Dein Beispiel ist keine Lösung Frank, ein CLS ist auch keine Lösung per einen Medienplayer.

Du legst ja lediglich ein Control an, Dietmar braucht aber 2 Spalten...

Ich sehe Deine simple Lösung (noch) nicht.
 
03.06.2009  
 




Frank
Abbing

Dein Beispiel ist keine Lösung Frank, ein CLS ist auch keine Lösung per einen Medienplayer


Habe auch nicht vor, einen Medienplayer zu schreiben. Das Beispiel ist das was es sein soll: Ein Beispiel.


...doch dann kommt der wahre Divertimento: Spaltendefinition (erträglich) und Hinzufügen der Zeilen


Wie gesagt, aus diesem Grund hab ich die Listview.dll damals geschrieben, um die Sachen einfacher zu gestalten.
Mein Quellcode ist bereits fertig in Assembler, einen zweiten in XProfan werde ich nicht mehr schreiben. Sonst hätte ich dir hier was kopiert.
Nico, bequeme doch mal die Cerca. Es gibt einige Quellcodes per Listviews. Die mußt du doch nur noch anpassen an die Wide-Strings. Dafür bietet OLE32 einige Funktionen.
 
03.06.2009  
 




Nico
Madysa
Tada!
KompilierenMarkierenSeparieren
Struct CREATESTRUCT = lpCreateParams&, hInstance&, hMenu&, hwndParent&, cy%, cx%, y%, x%, style&, lpszName&, lpszClass&, dwExStyle&
Struct LVCOLUMN = Mask&, FMT&, CX&, Text&, cchTextMaxLen&, Subitem&
Struct LVITEM = IMASK&, ITEM&, ISUBITEM&, State&, StateMask&, ITEXT&, ITEXTMAX&, IIMAGE&, ILPARAM&

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&,id%,hInst&,exstyle&

    else

        parameters Class$,Name$,style&,x%,y%,dx%,dy%,pWnd&,id%,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#)

    ifnot handle&

        Class$ = WinError$(%WinError)
        MessageBox(Es trat folgender Fehler auf:
        + Class$,F E H L E R !!!,4096)

    endif

    Dispose cs#
    return handle&

endproc

 $10 = von A-Z
 $20 = von Z-A
 $04 = keine Mehrfachauswahl

subproc Create.GridBoxW

    parameters pWnd&,def$,stl%,x%,y%,dx%,dy%
    declare s$
    var hList& = CreateW(SysListView32,,$50000209 + stl%,x%,y%,dx%,dy%,pWnd&,1000,%hInstance,$200)
    u_SendMessageW(hList&,$1036,0,$00000023)
    var LVC# = New(LVCOLUMN)

    With LVC#

        .Subitem& = 0
        .MASK& = $7

        whileloop 0,(len(def$,;)  3) - 1

            s$ = SubStr$(def$,3*&loop + 1,;)
            .TEXT& = Addr(s$)
            .FMT&  = val(SubStr$(def$,3*&loop + 2,;))
            .CX&   = val(SubStr$(def$,3*&loop + 3,;))
            .cchTextMaxLen& = len(s$)
            u_SendMessageW(hList&,$1061,&loop,LVC#)

        EndWhile

    EndWith

    Dispose LVC#
    return hList&

endproc

proc InsertStringW

    parameters hList&,s$,index%
    declare ss$
    var LVI# = New(LVITEM)
    var d$ = UTF(Get(ListDel))

    With LVI#

        .IMASK&=$1
        .ITEM& = index%

        whileloop len(s$,d$)

            ss$ = SubStr$(s$,&loop,d$)
            .iText& = Addr(ss$)
            .ITEXTMAX& = len(ss$)
            .ISUBITEM& = &loop - 1

            ifnot &loop - 1

                u_SendMessageW(hList&,$104D,index%,LVI#)

            else

                u_SendMessageW(hList&,$102E,index%,LVI#)
                u_SendMessageW(hList&,$104C,index%,LVI#)

            endif

        EndWhile

    EndWith

endproc

declare hUser&,hGDI&,hKrnl&,hList&,clip$
cls
var font& = Create(Font,Times New Roman,16,0,0,0,0)
hUser& = ImportDLL(USER32,u_)
hList& = Create(GridBoxW,%hWnd,UTF(Welch)+;0;100;+UTF(eine)+;2;200;+UTF(Liste!)+;1;100,$00,100,5,410,200)
InsertStringW(hList&,UTF(Ich|bin|toll!),0)
InsertStringW(hList&,UTF(Ich|etwa|nicht?),1)
InsertStringW(hList&,UTF(Doch,|du|auch.),2)
SetFont hList&,font&

whilenot IsKey(27)

    waitinput

wend

FreeDLL hUser&
FreeDLL hGDI&
FreeDLL hKrnl&
4 href='./../../funktionsreferenzen/xprofan/deleteobject/'>DeleteObject font&
end

Create(GridBoxW) und InsertStringW() sollten wie ihre Ansi-Pendants funktionieren. Strings werden im Unicodeformat erwartet. Die Spaltendefinition in Create(GridBoxW) erwartet die Spaltentitel in Unicode, den Rest in Ansi. (so wars per mich einfacher. )
Den kurzen bisherigen Tests hat der Code grandios standgehalten.
 
Nico Madysa
05.06.2009  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

29.507 Views

Untitledvor 0 min.
E.T.14.01.2024
Member 052215418.03.2020
Manfred Barei23.02.2020
Walter16.02.2020
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie