Deutsch
Forum

Erledigt: Polnische Schriftzeichen - Unicode ListView

 
- Seite 1 -



Dietmar
Horn
Hallo,

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.

Gruß
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  
 



 
- Seite 3 -



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 benötigt 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)
WaitInput
 
03.06.2009  
 




Nico
Madysa
Mag durchaus sein, doch dann kommt der wahre Spaß: 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 für 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 für 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 Spaß: 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 Suche. Es gibt einige Quellcodes für 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&
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 für mich einfacher. )
Den kurzen bisherigen Tests hat der Code grandios standgehalten.
 
Nico Madysa
05.06.2009  
 



 
- Seite 4 -


 
05.06.2009  
 




Frank
Abbing
Geht doch anständig.
Und jede Wette, du hast was dazu gelernt.

Die Control-ID sollte sich noch bei jedem Listview ändern.
 
05.06.2009  
 




Nico
Madysa
Bäh, das sollen die anderen machen, ich will jetzt ins Bett.

[offtopic]
Morgen will ich nämlich fit sein, wenn alles klappt, steht mir dann die Konfiguration eines eigenen Heim-DSL-Anschlusses bevor. [/offtopic]
 
Nico Madysa
05.06.2009  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

29.494 Betrachtungen

Unbenanntvor 0 min.
E.T.14.01.2024
Member 052215418.03.2020
Manfred Barei23.02.2020
Walter16.02.2020
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


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