|  |  | 
|  | 
|  | 
|  | | Hier ein Beispiel wie man das Kopieren und das Mostra eines Fortschrittbalkens auch ohne Zuhilfenahme des Explorers selbst in die Hand nehmen kann. 
 XProfan8 mit XPSE:
 KompilierenMarkierenSeparieren
 XProfan8 ohne XPSE: {$cleq}
declare infle$,outfle$ ,c&,fz&,ptr#,has&,bsize&/* TempVars */
cls;rectangle 10,10 - 110,20;usebrush 1,0// WinInit
fz&:=0;c&:=0;has&:=0;bsize&:=1024;
dim ptr#,bsize&
infle$:="c:p00x.zip"~file
outfle$="c:output.zip"~file
case len(findfirst$(infle$)):fz&:=filesize(infle$)
if (fz&)
    case (bsize&>fz&):bsize&:=(fz&2)
    /* CopyProc */
    assign #1,infle$;assign #2,outfle$;openrw #1;openrw #2
    while (filepos(#1)<fz&) ;c&:=blockread(#1,ptr#,0,bsize&):case (c&):blockwrite #2,ptr#,0,c&;has&:=has&+c&;putPerc has&,fz&;wend/* { *//* } */
        /* eoCopyProc */
    endif
    end
    proc putPerc
        parameters is&,must&
        rectangle 10,10  - (10+(is&*100/must&)),20
    endproc
KompilierenMarkierenSeparieren
 Über BSIZE& kann man indirekt die Kopiergeschwindigkeit einstellen.DECLARE INFLE$,OUTFLE$,C&,FZ&,PTR#,HAS&,BSIZE&
CLS
RECTANGLE 10,10 - 110,20
USEBRUSH 1,0
FZ&=0
C&=0
HAS&=0
BSIZE&=1024
DIM PTR#,BSIZE&
INFLE$="c:\p00x.zip"
OUTFLE$="c:\output.zip"
IF LEN(FINDFIRST$(INFLE$))
    FZ&=FILESIZE(INFLE$)
ENDIF
IF (FZ&)
    IF (BSIZE&>FZ&)
        BSIZE&=(FZ&2)
    ENDIF
    ASSIGN #1,INFLE$
    ASSIGN #2,OUTFLE$
    OPENRW #1
    OPENRW #2
    WHILE (FILEPOS(#1)<FZ&)
        C&=BLOCKREAD(#1,PTR#,0,BSIZE&)
        IF (C&)
            BLOCKWRITE #2,PTR#,0,C&
        ENDIF
        HAS&=HAS&+C&
        PUTPERC HAS&,FZ&
    WEND
ENDIF
END
PROC PUTPERC
    PARAMETERS IS&,MUST&
    RECTANGLE 10,10 - (10+(IS&*100/MUST&)),20
ENDPROC
 Salve, iF
 | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 |