Español
Foro

Hecho: Unicode: Comportamiento extraño

 

Nico
Madysa
Einen Saludo allen daraußen.

Dies es el offizielle Nachfolger hiervon: [...]  . Diesmal taucht una muy seltsamer Fehler en quasi demselben Code en. A Erinnerung sei él una vez más (en unwesentlich gekürzter Form) gezeigt:
KompilierenMarcaSeparación
 $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 Texto en wenig Extraño, entscheiden son nämlich el folgenden Zeilen:
KompilierenMarcaSeparación
whileloop 0,len(d$,"x0Dzx0Az")-1

    a$ = "Mzeziznz;zVzezrzszuzczhz!z"
    a$ = Substr$(d$,&bucle+1,"x0Dzx0Az")
    Título de la ventana Translate$(a$,"z","|")
    InsertStringW(hSortDP&,a$,&bucle)
    InsertStringW(hSortDP&,Substr$(d$,&bucle+1,"x0Dzx0Az"),&bucle)

EndWhile


Hier stürzt el Code en el späteren Línea
KompilierenMarcaSeparación
b# = LVI#.iText&
sang- y klanglos de. Nun el eigentlich verwunderlichen Beobachtungen:
1. Das Kompilat arbeitet fehlerfrei.
2. Nehme Yo no el Umweg encima a$, pero füge el Substring inmediatamente una (Línea 2 y 4 weg, dafür Línea 5), así hay no Fehler.
3. Nehme Yo no unterschiedlichen Textos, pero una festen Probetext (Línea 2 weg, dafür Línea 1), así hay ebenfalls no Fehler.
4. Item se ejecuta alles fehlerfrei, si yo el el obige Línea con Título de la ventana entkommentiere. An el Prozessorauslastun kann lo sin embargo no mentira, porque füge Yo anstatt de Título de la ventana Sleep una, así stürzt el Kode ebenfalls de.

Das waren ahora vier Wege, esta Fehler a umgehen. Doch ha irgendjemand una Idea, por qué él überhaupt auftritt? Jede dieser vier Lösungen (außer tal vez Nummer 3) debería eigentlich gar no Auswirkung haben y doch verhindern ellos el Programmabsturz.
Dietmar y yo son con unserem Latein al Ende, doch tal vez sehen 46 Augen más que 4.

Lo verbleibt ratlos

Nico Madysa
 
Nico Madysa
10.07.2009  
 




Frank
Abbing
Yo sería sagen, el problema son el Cuerdas. Unicode-Cuerdas benutzen como Endekennung doch zwei Nullbytes, Profano uno.
 
10.07.2009  
 




Dietmar
Horn
Yo sería media, hier ha Roland todavía algo übersehen, qué en el Interpreter para Choque führt aber como Compilat dagegen fehlerfrei funktioniert.

Falls el wirklich sólo a el unterschiedlichen Endekennungen mentira debería, entonces müßten después de mi Verständnis doch todos de Nico durchgespielten Varianten abstürzen, oder se wenigstens en el Interpreter y compiliert identisch comportamiento (unabhängig su, si siempre Choque oder siempre kein Choque).

Saludo
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. El *.exe producido con profed32.exe se ejecuta por.
El *.exe con XProfEd32.exe producido bricht de con el Fehlermeldung : Línea 26, a# no declariert. a# eingefügt y es con el ganzen Alphabet más???

Fehler kann Yo no suchen, como momentan Trabbel con el Laptop. DVD-Laufwerk se sólo todavía como CD-Laufwerk erkannt y el Tips en el WEB y alte Abbilder konnten el problema no beheben. Beim Aufräumen fand Todavía el Anhang (verwendbar?) y KilletSoft Data Conversion Freeware: [...] 

275 kB
Hochgeladen:10.07.2009
Ladeanzahl64
Descargar
 
Gruß Thomas
Windows XP SP2, XProfan X2
10.07.2009  
 



Nur kurz sobrevolados, pero yo hoffe, Ihr überseht no, dass el Speicherbereich para el Klasse después de final el Función verflogen es.

Vlt. mejor hier con z.B. globalAlloc una Handle para una Speicher holen y el Struktur dareinkopieren.
 
10.07.2009  
 




Nico
Madysa
Hmm, todavía mehr Merkwürdigkeiten:
5. Mir es aufgefallen, dass LVI# en InsertStringW al Ende no disposed se. Also Yo al Ende Disponer LVI# eingefügt. Ergebnis: Crash.
6. Danach me está aufgefallen, dass el benutzte Zona en LoadText UND InsertStringW LVI# heißt, weswegen Yo ihn en InsertStringW en p_LVI# umbenannt habe. Ergebnis: Crash; egal, si p_LVI# disposed se oder no.

Mein eigentliches Problema besteht en él, dass all solcherlei Los cambios como z.B. Edición mittels Título de la ventana überhaupt no Auswirkungen haben debería. Auch, dass lo en el Interpreter hakt y como Exe durchläuft, lässt mich langsam glauben, dass el Fehler irgendwo en Profano incluso steckt. Roland se se dazu sicherlich bald a Wort informe, gell?

@IF: Welche Klasse y welche Función media du porque?
 
Nico Madysa
11.07.2009  
 



Sorry, Estructuras son para mich auch "nur" Klassen. ^ ^

Yo mi cs# en CreateW.

Nehmt doch nen globalAlloc y kopiert el Inhalt de cs# hinein y merkt Euch el Handle en z.B. una dyn.Array y übergebt a u_CreateWindowExW el Handle en lugar de cs#. (Weil Yo ahora no sicher bin, si u_CreateWindowExW el Speicher para se sichert oder esta gerne obtener sehen möchte.)

Wobei Yo sehe grad, Cuerdas como class$ debería después de Verlassen el Función ebenso "futsch" ser.
 
11.07.2009  
 




Nico
Madysa
So, Yo el Win32.hlp lese, ha cs# gar nichts con el Sache con el Sache a tun, porque el es sólo una Zona, el a el Message WM_CREATE weitergegeben se. Der einzigen Nutzen es, dass el erstellte Control begreift, qué es. Danach debería lo eigentlich völlig unnötig ser.
 
Nico Madysa
11.07.2009  
 




Frank
Abbing
Stell sicher, dass deine Cuerdas überall en deinem Code al Ende zwei Nullbytes haben, wo siempre du XProfan-Cuerdas zusammen con Unicode-Cuerdas benutzt. Dass lo manchmal funktioniert y manchmal no, deutet para mich darauf hin, dass el no siempre el Fall es. Im Zweifelsfall stattdessen Speicherbereiche uso.
Ob du bereich# oder GlobalAlloc-Memory benutzt es eigentlich piepegal. Ist beides el Gleiche.
 
11.07.2009  
 




Nico
Madysa
So, also Yo sehe, nichts, Yo todavía hacer kann:
KompilierenMarcaSeparación
 $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

El kuriose Línea es a$ = Substr$(d$,&loop+1,x0Dzx0Az). Ist ellos auskommentiert, así se ejecuta alles wunderbar, arbeitet ellos hingegen con (obwohl ellos gar no Einfluss haben debería), así es en el ersten Línea Aaahen, en lugar de Aachen.
Yo sehe mich simplemente no imstande, una Fehler en un chaotischen Kode para encontrar. Wenn Yo no gerade todavía por Zufalle darauf stoße, bin Yo wirklich así weit, Windows oder Profano el Sache en el Schuhe a schieben.

@Franco:
Theoretisch debería el zwei Abschlussbytes sin Interesse ser, porque el Listviewmessages verlangen stets el genaue Pufferlänge, el en el Eigenschaft iTextMax& angegeben ser muss. Sie verlangen no Abschlussbytes.
Praktisch Yo, en sicher a ir, todavía folgende Línea en InsertStringW geändert:
KompilierenMarcaSeparación
de
ss$ = Substr$(s$,&bucle,d$)
wurde
ss$ = Substr$(s$,&bucle,d$) + zz

Yo habe el String, el unmittelbar a el Message va, todavía zwei Nullbytes hinzugefügt. (Und viel mehr Unicode-Messages como en InsertStringW kommen en el gesamten Code no antes.) Das Ergebnis ha mich no überrascht: Choque.
 
Nico Madysa
12.07.2009  
 



Usted debe tal vez simplemente para el Speicher, el Usted para Stringinhalte nutzt y a Apis übergibst, no XProfan-Cuerdas uso.
KompilierenMarcaSeparación
 
12.07.2009  
 




Nico
Madysa
Deinem Seelenfrieden zuliebe habe ego getan.
KompilierenMarcaSeparación
 $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

Und Yo muss sagen, dass mich el Überraschungen siempre weniger überraschen.
7. Nachdem Yo InsertStringW en GlobalAlloc umgestellt hatte, hatten todos Einträge unsinnige Schwänzchen.
8. Nachdem Yo entonces auch todavía el Einträge jeweils en zwei Nullbytes erweitert hatte, hatte lo otra vez como en el Original funktioniert. (Kann me irgendeiner el Diferencia zwischen el Adresse uno Speicherbereiches con el Longitud len(ss$) y Adresse uno Profanstrings con el Longitud len(ss$) erklären?)
9. Nachdem Yo el seltsame Línea a$ = Substr$(d$,&loop+1,"x0Dzx0A z") otra vez eingefügt habe, ha se kein Diferencia ergeben. Dieses normale Comportamiento ha mich de allem al meisten überrascht.
10. Como a$ = Substr$(d$,&loop+1,"x0Dzx0A z") gilt, Yo me kackfrech pensamiento, Yo könne el Substr$(d$,&loop+1,"x0Dzx0A z") el folgenden Línea con a$ sustituir -- como ursprünglich auch pensamiento war. Irrtum! Mache Yo dies, así lautet el erste Eintrag otra vez "Aaahen" en lugar de "Aachen" y algunos otro Einträge voluntad auch verhunzt.

PS: Darf uno el GlobalAllocs eigentlich genauso mover como Profano-Bereiche, also después de el Schema Zona# = Long&, oder benötigen jene dafür una entsprechenden Stil?
 
Nico Madysa
12.07.2009  
 




Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

9.969 Views

Untitledvor 0 min.
Sven Bader25.02.2021
Manfred Barei23.02.2020
gerd05.10.2013
Christian Hahn28.12.2012
Más...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie