| |
|
|
DeHarrow | allô à Alle! trop meinem Problem: Habe différent Fichiers, qui je avec Blockread/write kopieren voudrais - doch pas avec: @BlockRead(Dossier$, Ber#, 0, FileSize(Dossier$)), mais meinetwegen avec 1024 Byte(weise).
Sinn soll son: Habe une Progressbar, qui den Status des Kopierens Montrer soll. Wäre blöd, si ensuite Ruckzuck 100% angezeigt volonté anstatt meinetwegen 10%, 15% kopiert etc.
si je qui Filegröße par 1024 teile, ensuite bekomme je Nachkommastellen, qui pas beachtet volonté - qui Dossier wird unvollständig kopiert. Aufrunden sur ganze numéro sans Kommastelle brachte aussi rien.
sais quelqu'un comment je es am besten anstellen/umrechnen pourrait. chez kleinen Fichiers klappt es oui avec dem Wert 1024, mais chez grand Fichiers ab MB plan pas. Hoffe vous savez quoi je mon.
Salut Jürgen |
|
|
| Angefangen hat alles mit Profan 5.0 ...noch auf Diskette | 02.09.2009 ▲ |
|
|
|
|
| requin, zunächst pourrait BlockWrite so viele Byte écrivons, comment qui Funktion BlockRead comme gelesene Bytes zurückliefert. qui Puffergrösse hängt vom Zielmedium ab de/sur dem qui Dossier geladen/geschrieben wird - 1024Byte erscheint mir chez normalen Festplatten et heutigen OSsses comme deutlich trop gering. je serait vlt. avec einer Puffergrösse de 256KB herantesten - pouvoir oui keinen Sinn qui CPU plus trop tracasser comme notwendig weil Platte+Cache+OS cela "eh" nochmals managen. |
|
|
| |
|
|
|
DeHarrow | allô IF - merci erstmal pour deine Antwort. cela Problem: je dois une Wert sans Komma rausbekommen.
Habe z.B. une Dossier de 1079214 Bytes ou bien 1.02 MB. si je cette Wert komplett dans den grenier lese et schreibe, ensuite ist qui Fortschrittsbalken plan juste chez 100%. Ok Statusbalken anpassen wäre ne...aucune Thema ou bien so... ...voudrais arrêt seulement kleinere Schritte im Statusbalken Montrer laisser (meinetwegen 10%, 20%, 30% kopiert etc.) Dividiere je ensuite par quelque chose z.B. FileSize(Dossier$) / 1024 (ou bien plan größer) um une autre Bytezahl trop bekommen, ensuite habe je Nachkommastellen et es klappt ensuite plan pas avec Blockwrite.
je devrait sozusagen pour différent Dateigrößen im Bereich Bytes, KB, MB etc. une verlässlichen Wert avons.
Salut Jürgen |
|
|
| Angefangen hat alles mit Profan 5.0 ...noch auf Diskette | 02.09.2009 ▲ |
|
|
|
|
Nico Madysa | prenons la fois à, du habest une Dossier de 2049 Kilobytes, seulement comme Beispiel. Du könntest doch ganzzahlig par 1024 partager et ca kopieren. qui Prozentanzeige bekommst du ensuite pour 100 * GeleseneBytes% / FileSize(fichier$). Pour qui Boucle, qui cela fait, ermittelst du avec Modulo simple qui verbleibenden Bytes et kopierst cet aussi. qui Prozente doit après pas plus ausgerechnet volonté, es ergeben sich oui 100%. KompilierenMarqueSéparation |
|
|
| |
|
|
|
| Vlt. meint il quelque chose comme: [...]
(encore la fois korrigiert) KompilierenMarqueSéparationCLS
MYFCOPY("csa.debug","map33.bmp")
WAITINPUT
proc MYFCOPY
PARAMETERS _FROM$,_TO$
IFNOT FILEEXISTS(_FROM$)
RETURN 0
ENDIF
IF FILEEXISTS(_TO$)
ERASE _TO$
IF FILEEXISTS(_TO$)
RETURN 0
ENDIF
ENDIF
var SZ!=FILESIZE(_FROM$)
IF SZ!<20
COPY _FROM$,_TO$
RETURN 1
ENDIF
var FHFROM%=ASSIGN(_FROM$)
var FHTO%=ASSIGN(_TO$)
IFNOT FHFROM% AND FHTO%
case FHFROM% : ASSIGN FHFROM%,""
case FHTO% : ASSIGN FHTO%,""
RETURN 0
ENDIF
OPENRW FHFROM%
OPENRW FHTO%
var LSZ&=INT(RANGE(SZ!*0.05,20,2048))
var RD&=0
var ACC&=0
DECLARE MYBUFF#
DIM MYBUFF#,LSZ&
WHILENOT EOF(FHFROM%)
RD&=BLOCKREAD(FHFROM%,MYBUFF#,0,LSZ&)
IFNOT RD&
BREAK
ENDIF
INC ACC&,RD&
BLOCKWRITE FHTO%,MYBUFF#,0,RD&
RECTANGLE 0,0 - (ACC&/SZ!*100),10
ENDWHILE
DISPOSE MYBUFF#
ASSIGN FHFROM%,""
ASSIGN FHTO%,""
RETURN FILEEXISTS(_TO$)
ss=s4 href='./../../funktionsreferenzen/XProfan/endproc/'>endproc
(attention code seulement hingeschmiert, absolument sur faute checken) |
|
|
| |
|
|
|
DeHarrow | allô!
merci pour qui répondre! Sieht sur den ersten perspective spitze aus - werde es la fois ausprobieren - besten Dank!
Salut Jürgen |
|
|
| Angefangen hat alles mit Profan 5.0 ...noch auf Diskette | 02.09.2009 ▲ |
|
|
|
|
| |
|
| |
|
|
|
Andreas Miethe
| trop dem Thema est peut-être aussi qui System-Dialog, qui une Fortschritt beim Kopieren ou bien irgendwelchen Berechnungen anzeigt. Hierbei wird un Fortschrittsbalken et une Restdauer( qui Windwos automatisch berechnet) angezeigt. KompilierenMarqueSéparation $H Windows.ph
Var ole& = ImportDll("ole32.dll","")
Var oleaut& = ImportDll("oleaut32.dll","")
Declare bString1$
Proc Ansi2Uni
Parameters s$
Var Unicode$ = Space$((Len(S$)*2)+1)
~MultiByteToWideChar(0,0,Addr(S$),-1,Addr(Unicode$),Len(Unicode$))
SysFreeString(bString1$)
SysFreeString(bString1$)
bString1$ = SysAllocString(addr(Unicode$))
Return bString1$
EndProc
DEF &CLSCTX_INPROC_SERVER 1
DEF &PROGDLG_NORMAL 0
DEF &PROGDLG_AUTOTIME 2
DEF &PROGDLG_MODAL 1
DEF &PDTIMER_RESET 1
DEF &IDA_COPY_ANIMATION 160
Interface IProgressDialog
DEF &QueryInterface 0
DEF &AddRef 4
DEF &Release 8
DEF &StartProgressDialog 12
DEF &StopProgressDialog 16
DEF &SetTitle 20
DEF &SetAnimation 24
DEF &HasUserCancelled 28
DEF &SetProgress 32
DEF &SetProgress64 36
DEF &SetLine 40
DEF &SetCancelMsg 44
DEF &Timer 48
Var ProgressLimit& = 5000
Declare CLSID_ProgressDialog#,IID_IProgressDialog#
Dim CLSID_ProgressDialog#,16
Dim IID_IProgressDialog#,16
LONG CLSID_ProgressDialog#,0 = $f8383852
WORD CLSID_ProgressDialog#,4 = $fcd3, $11d1
BYTE CLSID_ProgressDialog#,8 = $a6, $b9, 0, $60, $97, $df, $5b, $d4
LONG IID_IProgressDialog#,0 = $ebbc7c04
WORD IID_IProgressDialog#,4 = $315e, $11d2
BYTE IID_IProgressDialog#,8 = $b6, $2f, 0, $60, $97, $df, $5b, $d4
Var X& = 0
Var dwCompleted& = 0
Var ppv& = 0
cls
CoInitialize(0)
Var hr& = CoCreateInstance(CLSID_ProgressDialog#, 0, &CLSCTX_INPROC_SERVER, IID_IProgressDialog#,Addr(ppv&))
If hr& = ~S_OK
Var Command& = LONG(ppv&,0)
Call(Long(Command&,&SetTitle),ppv&,Ansi2Uni("System Fotschritt-Dialogbox"))
Var hShell& = UseDll("shell32.dll")
If hShell&
Call(Long(Command&,&SetAnimation),ppv&,hShell&,&IDA_COPY_ANIMATION)
EndIf
Call(Long(Command&,&Timer),ppv&,&PDTIMER_RESET,0)
Call(Long(Command&,&SetCancelMsg),ppv&,Ansi2Uni("Cancel"), 0)
Call(Long(Command&,&SetLine),ppv&,1, Ansi2Uni("System Fortschritt-Dialog Test mit XProfan"), 1,0)
Call(Long(Command&,&StartProgressDialog),ppv&,%hwnd, 0, &PROGDLG_NORMAL | &PROGDLG_AUTOTIME | &PROGDLG_MODAL, 0)
Repeat
If Call(Long(Command&,&HasUserCancelled),ppv&)
Call(Long(Command&,&StopProgressDialog),ppv&)
MessageBox("Fortschritt abgebrochen","Meldung",0)
Break
Else
Call(Long(Command&,&SetProgress),ppv&, dwCompleted&, ProgressLimit&)
If dwCompleted& >= ProgressLimit&
Call(Long(Command&,&StopProgressDialog),ppv&)
MessageBox("Fortschritt komplett","Meldung",0)
Break
Else
Call(Long(Command&,&SetLine),ppv&,2, Ansi2Uni("Wir sind jetzt hier : "+Str$(dwCompleted&)+" von "+str$(ProgressLimit&)), 1, 0)
an dieser Stelle könnte man eine Kopierfunktion
oder irgenwelche Berechnungen einbauen, statt nur einen Zähler laufen zu lassen.
Inc dwCompleted&
EndIf
EndIf
Sleep 10 je kleiner die Pause, umso schneller der Fortschritt
Until X& =1
Call(Long(Command&,&Release),ppv&)
Dispose CLSID_ProgressDialog#,IID_IProgressDialog#
SysFreeString(bString1$)
EndIf
CoUninitialize()
FreeDll Ole&
Freedll oleaut&
waitinput
end
|
|
|
| Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 05.09.2009 ▲ |
|
|
|
|
| |
|
| |
|
|