Français
Forum

Erledigt: Unicode: Le comportement étrange

 

Nico
Madysa
Einen Salut allen daraußen.

ca ist qui offizielle successeur hiervon: [...]  . Diesmal taucht un très seltsamer faute dans quasi demselben Code sur. Zur Erinnerung sei il encore la fois (dans unwesentlich gekürzter forme) gezeigt:
KompilierenMarqueSéparation
 $H Messages.ph
var id% = 1
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 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

    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:
        " + Class$,"F E H L E R !!!",4096)

    endif

    Dispose cs#
    return handle&

endproc

subproc Create.GridBoxW

    parameters pWnd&,def$,stl%,x%,y%,dx%,dy%
    declare s$
    var hList& = CreateW("SzyzszLzizsztzVzizezwz3z2zzz","",$50000009 + stl%,x%,y%,dx%,dy%,pWnd&,0,%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 pList&,s$,index%
    declare ss$
    var LVI# = New(LVITEM)
    var d$ = Get("ListDel") + "z"

    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(pList&,$104D,index%,LVI#)

            else

                u_SendMessageW(pList&,$104C,index%,LVI#)

            endif

        EndWhile

    EndWith

    Dispose LVI#

endproc

proc LoadText

    parameters d$
    declare a$
    case d$ = "" : return
    Die CSV-Datei wird eingelesen
    declare b#,t$,tt$
    Dim b#,FileSize(d$)
    BlockRead(d$,b#,0,SizeOf(b#))
    d$ = Char$(b#,2,SizeOf(b#)-2)
    Dispose b#
    Die Zeilen werden im Sortier-Listview alphabetisch geordnet

    whileloop 0,len(d$,"x0Dzx0Az")-1

        a$ = "Mzeziznz;zVzezrzszuzczhz!z"
        a$ = SubStr$(d$,&loop+1,"x0Dzx0Az")
        WindowTitle Translate$(a$,"z","|")
        InsertStringW(hSortDP&,a$,&loop)
        InsertStringW(hSortDP&,SubStr$(d$,&loop+1,"x0Dzx0Az"),&loop)

    EndWhile

    Die Substrings jeder Zeile sind mit einem Semikolon getrennt
    Set("ListDel",";")
    Das Sortier-Listview wird ins Anzeigelistview übertragen
    Aus einer Spalte werden zwei
    var LVI# = New(LVITEM)
    LVI#.IMASK&= $1
    LVI#.ITEXT&= LVI#+36
    LVI#.ITEXTMAX& = 200
    LVI#.ISUBITEM& = 0

    whileloop 0, Getcount(hSortDP&) -1

        LVI#.ITEM& = &loop
        u_SendMessageW(hSortDP&,$1073,&loop,LVI#)Text auslesen
        Dim b#,200
        b# = LVI#.iText&
        d$ = Char$(b#,0,SizeOf(b#))In Stringvariable schreiben
        InsertStringW(hList&,d$,&loop)übertragen
        Dispose b#

    EndWhile

    Dispose LVI#

endproc

declare hUser&,hGDI&,hKrnl&
declare hSortDP&,hList&
cls
var font& = Create("Font","Times New Roman",16,0,0,0,0)
hUser& = ImportDLL("USER32","u_")
hSortDP& = Create("GridBoxW",%hWnd,";0;100",$10,0,0,0,0)
ShowWindow(hSortDP&,0)
hList& = Create("GridBoxW",%hWnd,";0;300;;0;300",$00,0,0,width(%hWnd),height(%hWnd))
SetFont hList&,font&
WindowTitle "Bitte warten, Wortliste wird geladen ..."
Format
LoadText LoadFile$("Testdatei laden","Test.txt")
WindowTitle "Je 100 deutsche und polnische Wörter"

whilenot IsKey(27)

    waitinput

wend

FreeDLL hUser&
FreeDLL hGDI&
FreeDLL hKrnl&
DeleteObject font&
end

Viel Text um wenig Seltsames, entscheiden sommes nämlich qui folgenden Zeilen:
KompilierenMarqueSéparation
whileloop 0,len(d$,"x0Dzx0Az")-1

    a$ = "Mzeziznz;zVzezrzszuzczhz!z"
    a$ = $ Substr(d$,&loop+1,"x0Dzx0Az")
    Titre de la fenêtre Translate$(a$,"z","|")
    InsertStringW(hSortDP&,a$,&loop)
    InsertStringW(hSortDP&,$ Substr(d$,&loop+1,"x0Dzx0Az"),&loop)

Endwhile


ici stürzt qui Code dans qui späteren la ligne
KompilierenMarqueSéparation
b# = LVI#.iText&
sang- et klanglos ab. eh bien qui eigentlich verwunderlichen Beobachtungen:
1. cela Kompilat arbeitet correct.
2. Nehme je pas den le détour sur a$, mais füge den Substring tout de suite un (la ligne 2 et 4 weg, pour la ligne 5), so gibt es keinen faute.
3. Nehme je aucun unterschiedlichen Textes, mais une festen Probetext (la ligne 2 weg, pour la ligne 1), so gibt es également keinen faute.
4. Item fonctionne alles correct, si je qui qui obige la ligne avec Titre de la fenêtre entkommentiere. à qui Prozessorauslastun peux es cependant pas liegen, car füge je anstatt de Titre de la fenêtre Sleep un, so stürzt qui Kode également ab.

cela étions maintenant quatre Wege, cette faute trop tourner autour de. Doch hat irgendjemand une Ahnung, pourquoi il überhaupt auftritt? chacun cette quatre Lösungen (sauf peut-être numéro 3) sollte eigentlich gar aucun Auswirkung avons et doch verhindern vous den Programmabsturz.
Dietmar et je sommes avec unserem latin am Ende, doch peut-être voyons 46 Augen plus que 4.

Es verbleibt perplexe

Nico Madysa
 
Nico Madysa
10.07.2009  
 




Frank
Abbing
je serait dire, cela Problem sommes qui Cordes. Unicode-Cordes benutzen comme Endekennung doch deux Nullbytes, Profan eines.
 
10.07.2009  
 




Dietmar
Horn
je serait meinen, ici hat Roland encore irgendwas übersehen, quoi im Interpreter zum Absturz führt mais comme Compilat dagegen correct funktioniert.

si cela wirklich seulement à den unterschiedlichen Endekennungen liegen sollte, ensuite müßten pour meinem Verständnis doch alle de Nico durchgespielten Varianten abstürzen, ou bien sich wenigstens im Interpreter et compilé identique verhalten (indépendant en, si toujours Absturz ou bien toujours ne...aucune Absturz).

Salut
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:  [...] 
10.07.2009  
 




Thomas
Freier
Alles merkwürdig. qui *.exe erzeugt avec profed32.exe fonctionne par.
qui *.exe avec XProfEd32.exe erzeugt bricht ab avec qui Fehlermeldung : la ligne 26, a# pas declariert. a# eingefügt et ca va avec dem ganzen Alphabet plus???

faute peux je pas chercher, là momentan Trabbel avec dem Laptop. DVD-Laufwerk wird seulement encore comme CD-Laufwerk erkannt et qui Tips im WEB et vieille Abbilder konnten cela Problem pas beheben. Beim Aufräumen fand je encore den Anhang (verwendbar?) et KilletSoft Data Conversion Freeware: [...] 

275 kB
Hochgeladen:10.07.2009
Downloadcounter64
Download
 
Gruß Thomas
Windows XP SP2, XProfan X2
10.07.2009  
 



seulement kurz survolés, mais je hoffe, son überseht pas, dass qui Speicherbereich pour qui super pour finissons qui Funktion verflogen ist.

Vlt. besser ici avec z.B. globalAlloc un Handle pour une grenier holen et qui Struktur dareinkopieren.
 
10.07.2009  
 




Nico
Madysa
Hmm, encore plus Merkwürdigkeiten:
5. Mir ist aufgefallen, dass LVI# dans InsertStringW am Ende pas disposed wird. alors habe je am Ende Dispose LVI# eingefügt. Ergebnis: Crash.
6. après c'est moi aufgefallen, dass qui benutzte Bereich dans LoadText UND InsertStringW LVI# est, weswegen je ihn dans InsertStringW dans p_LVI# umbenannt habe. Ergebnis: Crash; égal, si p_LVI# disposed wird ou bien pas.

mon eigentliches Problem besteht y, dass espace solcherlei Changements comment z.B. Ausgabe mittels Titre de la fenêtre überhaupt aucun Auswirkungen avons devrait. aussi, dass es im Interpreter hakt et comme Exe durchläuft, peut mich lente croyons, dass qui faute irgendwo dans Profan selbst steckt. Roland wird sich en supplément sicherlich bientôt trop mot annoncer, gell?

@iF: quelle super et quelle Funktion meinst du car?
 
Nico Madysa
11.07.2009  
 



Sorry, Strukturen sommes pour mich aussi "nur" Klassen. ^ ^

je mon cs# dans CreateW.

prenez doch nen globalAlloc et kopiert den le contenu de cs# hinein et merkt Euch cela Handle dans z.B. einem dyn.Array et übergebt à u_CreateWindowExW cela Handle statt cs#. (Weil je mir maintenant pas sûrement suis, si u_CreateWindowExW den grenier pour sich sichert ou bien cette volontiers conservé voyons voudrais.)

Wobei je vois grad, Cordes comment class$ devrait pour sortir de qui Funktion ebenso "futsch" son.
 
11.07.2009  
 




Nico
Madysa
So, comment je qui Win32.hlp lese, hat cs# gar rien avec qui l'affaire avec qui l'affaire trop 1faire, car c'est seulement un Bereich, qui à qui Message WM_CREATE weitergegeben wird. qui einzigen Nutzen ist, dass cela erstellte Contrôle begreift, quoi c'est. après sollte es eigentlich völlig unnötig son.
 
Nico Madysa
11.07.2009  
 




Frank
Abbing
Stell sûrement, dass deine Cordes überall dans deinem Code am Ende deux Nullbytes avons, wohin toujours du XProfan-Cordes zusammen avec Unicode-Cordes benutzt. Dass es quelquefois funktioniert et quelquefois pas, deutet pour mich puis hin, dass cela pas toujours qui le cas ist. Im Zweifelsfall stattdessen Speicherbereiche verwenden.
si du bereich# ou bien GlobalAlloc-Memory benutzt ist eigentlich piepegal. Ist beides cela Gleiche.
 
11.07.2009  
 




Nico
Madysa
So, alors je vois, rien, quoi je encore faire peux:
KompilierenMarqueSéparation
 $H Messages.ph
var id% = 1
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&,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:
        + Class$,F E H L E R !!!,4096)

    endif

    Dispose cs#
    return handle&

endproc

subproc Create.GridBoxW

    parameters pWnd&,def$,stl%,x%,y%,dx%,dy%
    declare s$
    var hList& = CreateW(SysListView32,,$50000009 + stl%,x%,y%,dx%,dy%,pWnd&,0,%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 pList&,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(pList&,$104D,index%,LVI#)

            else

                u_SendMessageW(pList&,$104C,index%,LVI#)

            endif

        EndWhile

    EndWith

endproc

proc LoadText

    parameters d$
    declare a$
    case d$ =  : return
    Die CSV-Datei wird eingelesen
    declare b#,t$,tt$
    Dim b#,FileSize(d$)
    BlockRead(d$,b#,0,SizeOf(b#))
    d$ = Char$(b#,2,SizeOf(b#)-2)
    Dispose b#
    Die Zeilen werden im Sortier-Listview alphabetisch geordnet

    whileloop 0,len(d$,x0Dzx0Az)-1

        a$ = SubStr$(d$,&loop+1,x0Dzx0Az) DIES IST DIE BETROFFENE ZEILE
        InsertStringW(hSort&,SubStr$(d$,&loop+1,x0Dzx0Az),&loop)

    EndWhile

    Die Substrings jeder Zeile sind mit einem Semikolon getrennt
    Set(ListDel,;)
    Das Sortier-Listview wird ins Anzeigelistview übertragen
    Aus einer Spalte werden zwei
    var LVI# = New(LVITEM)
    LVI#.IMASK&= $1
    LVI#.ITEXT&= LVI#+36
    LVI#.ITEXTMAX& = 200
    LVI#.ISUBITEM& = 0

    whileloop 0, Getcount(hSort&) -1

        LVI#.ITEM& = &loop
        u_SendMessageW(hSort&,$1073,&loop,LVI#)Text auslesen
        Dim b#,200
        b# = LVI#.iText&
        d$ = Char$(b#,0,SizeOf(b#))In Stringvariable schreiben
        InsertStringW(hList&,d$,&loop)übertragen
        Dispose b#

    EndWhile

    Dispose LVI#

endproc

declare hUser&,hGDI&,hKrnl&
declare hSort&,hList&
cls
var font& = Create(Font,Times New Roman,16,0,0,0,0)
hUser& = ImportDLL(USER32,u_)
hSort& = Create(GridBoxW,%hWnd,UTF(Sortieren)+;0;100,$10,0,0,0,0)
ShowWindow(hSort&,0)
hList& = Create(GridBoxW,%hWnd,UTF(Deutsch)+;0;300;+UTF(Polnisch)+;2;300,$00,0,0,width(%hWnd),height(%hWnd))
SetFont hList&,font&
WindowTitle Bitte warten, Wortliste wird geladen ...
Format
Wort1;Wort2
Wort3;Wort4;...
LoadText LoadFile$(Quelldatei laden ...,deupol.txt)
WindowTitle Je 100 deutsche und polnische Wörter (ESC um zu sichern)

whilenot IsKey(27)

    waitinput

wend

FreeDLL hUser&
FreeDLL hGDI&
FreeDLL hKrnl&
DeleteObject font&
end

qui kuriose la ligne ist a$ = Substr$(d$,&loop+1,x0Dzx0Az). Ist vous auskommentiert, so fonctionne alles wunderbar, arbeitet vous hingegen avec (quoique vous gar keinen Einfluss avons sollte), so steht dans qui ersten la ligne Aaahen, statt Aachen.
je vois mich simple pas imstande, une faute dans einem chaotischen Kode pour trouver. si je pas justement encore par Zufalle puis stoße, suis je wirklich so large, Windows ou bien Profan qui l'affaire dans qui Schuhe trop schieben.

@Frank:
Theoretisch devrait qui deux Abschlussbytes sans intérêt son, car qui Listviewmessages verlangen stets qui genaue Pufferlänge, qui dans qui qualité iTextMax& angegeben son muss. vous verlangen aucun Abschlussbytes.
pratique habe je, um sûrement pour aller, toutefois folgende la ligne dans InsertStringW geändert:
KompilierenMarqueSéparation
aus
ss$ = $ Substr(s$,&loop,d$)
wurde
ss$ = $ Substr(s$,&loop,d$) + zz

j'ai dem String, qui unmittelbar à qui Message allez, encore deux Nullbytes hinzugefügt. (et viel plus Unicode-Messages comme dans InsertStringW venons im gesamten Code pas avant.) cela Ergebnis hat mich pas überrascht: Absturz.
 
Nico Madysa
12.07.2009  
 



Du devrait peut-être simple pour qui grenier, qui Du pour Stringinhalte utilise et à Apis übergibst, pas XProfan-Cordes verwenden.
KompilierenMarqueSéparation
 
12.07.2009  
 




Nico
Madysa
Deinem Seelenfrieden zuliebe habe ego getan.
KompilierenMarqueSéparation
 $H Messages.ph
var id% = 1
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&
Def GlobalAlloc(2) !"KERNEL32","GlobalAlloc"
Def GlobalFree(1) !"KERNEL32","GlobalFree"

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:
        " + Class$,"F E H L E R !!!",4096)

    endif

    Dispose cs#
    return handle&

endproc

subproc Create.GridBoxW

    parameters pWnd&,def$,stl%,x%,y%,dx%,dy%
    declare s$
    var hList& = CreateW("SysListView32","",$50000009 + stl%,x%,y%,dx%,dy%,pWnd&,0,%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 pList&,s$,index%
    declare ss$,palloc&
    var LVI# = New(LVITEM)
    var d$ = UTF(Get("ListDel"))

    With LVI#

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

        whileloop len(s$,d$)

            ss$ = SubStr$(s$,&loop,d$) + "zz"
            palloc& = GlobalAlloc($40,len(ss$))
            Char palloc&,0 = ss$
            .iText& = palloc&
            .ITEXTMAX& = len(ss$)
            .ISUBITEM& = &loop - 1

            ifnot &loop - 1

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

            else

                u_SendMessageW(pList&,$104C,index%,LVI#)

            endif

            GlobalFree(palloc&)

        EndWhile

    EndWith

endproc

proc LoadText

    parameters d$
    declare a$
    case d$ = "" : return
    Die CSV-Datei wird eingelesen
    declare b#,t$,tt$ , alloc&
    Dim b#,FileSize(d$)
    BlockRead(d$,b#,0,SizeOf(b#))
    d$ = Char$(b#,2,SizeOf(b#)-2)
    Dispose b#
    Die Zeilen werden im Sortier-Listview alphabetisch geordnet

    whileloop 0,len(d$,"x0Dzx0Az")-1

        a$ = SubStr$(d$,&loop+1,"x0Dzx0Az") DIES IST DIE BETROFFENE ZEILE
        InsertStringW(hSort&,a$,&loop)

    EndWhile

    Die Substrings jeder Zeile sind mit einem Semikolon getrennt
    Set("ListDel",";")
    Das Sortier-Listview wird ins Anzeigelistview übertragen
    Aus einer Spalte werden zwei
    var LVI# = New(LVITEM)
    LVI#.IMASK&= $1
    LVI#.ITEXT&= LVI#+36
    LVI#.ITEXTMAX& = 200
    LVI#.ISUBITEM& = 0

    whileloop 0, Getcount(hSort&) -1

        LVI#.ITEM& = &loop
        u_SendMessageW(hSort&,$1073,&loop,LVI#)Text auslesen
        Dim b#,200
        b# = LVI#.iText&
        d$ = Char$(b#,0,SizeOf(b#))In Stringvariable schreiben
        InsertStringW(hList&,d$,&loop)übertragen
        Dispose b#

    EndWhile

    Dispose LVI#

endproc

declare hUser&,hGDI&,hKrnl&
declare hSort&,hList&
cls
var font& = Create("Font","Times New Roman",16,0,0,0,0)
hUser& = ImportDLL("USER32","u_")
hSort& = Create("GridBoxW",%hWnd,UTF("Sortieren")+";0;100",$10,0,0,0,0)
ShowWindow(hSort&,0)
hList& = Create("GridBoxW",%hWnd,UTF("Deutsch")+";0;300;"+UTF("Polnisch")+";2;300",$00,0,0,width(%hWnd),height(%hWnd))
SetFont hList&,font&
WindowTitle "Bitte warten, Wortliste wird geladen ..."
Format
"Wort1;Wort2
Wort3;Wort4;..."
LoadText LoadFile$("Quelldatei laden ...","deupol.txt")
WindowTitle "Je 100 deutsche und polnische Wörter (ESC um zu sichern)"

whilenot IsKey(27)

    waitinput

wend

FreeDLL hUser&
FreeDLL hGDI&
FreeDLL hKrnl&
DeleteObject font&
end

et je muss dire, dass mich qui Überraschungen toujours moins überraschen.
7. après que je InsertStringW sur GlobalAlloc umgestellt hatte, hatten alle Einträge unsinnige Schwänzchen.
8. après que je ensuite aussi encore qui Einträge jeweils um deux Nullbytes erweitert hatte, hatte es wieder so comment im Original funktioniert. (peux mir irgendeiner den Unterschied entre qui Adresse eines Speicherbereiches avec qui Longueur len(ss$) et qui Adresse eines Profanstrings avec qui Longueur len(ss$) expliquer?)
9. après que je qui seltsame la ligne a$ = Substr$(d$,&loop+1,"x0Dzx0A z") wieder eingefügt habe, hat sich ne...aucune Unterschied ergeben. cet normale Verhalten hat mich de allem am meisten überrascht.
10. là a$ = Substr$(d$,&loop+1,"x0Dzx0A z") gilt, habe je mir kackfrech gedacht, je könne cela Substr$(d$,&loop+1,"x0Dzx0A z") qui folgenden la ligne avec a$ ersetzen -- comme ursprünglich aussi gedacht était. Irrtum! fais je ca, so lautet qui erste Eintrag wieder "Aaahen" statt "Aachen" et quelques autre Einträge volonté aussi verhunzt.

PS: Darf on qui GlobalAllocs eigentlich genauso Déplacer comment Profan-Bereiche, alors pour dem Schema Bereich# = Long&, ou bien besoin celui-là pour une entsprechenden Stil?
 
Nico Madysa
12.07.2009  
 




répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

9.895 Views

Untitledvor 0 min.
Sven Bader25.02.2021
Manfred Barei23.02.2020
gerd05.10.2013
Christian Hahn28.12.2012
plus...

Themeninformationen



Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie