| |
|
|
DeHarrow | ¡Hola a Alle! Zu mi Problema: Posesiones diferente Archivos, el I, con Blockread/write kopieren möchte - doch no con: @BlockRead(Expediente$, Ber#, 0, FileSize(Expediente$)), pero meinetwegen con 1024 Byte(weise).
Sinn se ser: Posesiones una Progressbar, el el Status des Kopierens Mostrar se. Wäre blöd, si entonces Ruckzuck 100% adecuado voluntad anstatt meinetwegen 10%, 15% kopiert etc.
Wenn Yo el Filegröße por 1024 teile, entonces bekomme Yo Nachkommastellen, el no beachtet voluntad - el Expediente se unvollständig kopiert. Aufrunden en todo Zahl sin Kommastelle brachte auch nichts.
Weiß alguien Yo lo al besten anstellen/umrechnen podría. En pequeño Archivos klappt lo sí con el Valor 1024, pero en großen Archivos de MB eben no. Hoffe ihr wißt Yo mi.
Saludo Jürgen |
|
|
| Angefangen hat alles mit Profan 5.0 ...noch auf Diskette | 02.09.2009 ▲ |
|
|
|
|
| Hai, primero podría BlockWrite así viele Byte escribir, como Función BlockRead como gelesene Bytes zurückliefert. El Puffergrösse hängt vom Zielmedium de de/en el el Expediente geladen/geschrieben se - 1024Byte erscheint me en normalen Festplatten y heutigen OSsses como deutlich a gering. Yo sería vlt. con uno Puffergrösse de 256KB herantesten - macht sí no Sinn el CPU mehr a quälen como notwendig porque Platte+Cache+OS el "eh" nochmals managen. |
|
|
| |
|
|
|
DeHarrow | ¡Hola IF - Gracias primero para deine Antwort. Das Problema: Yo muß una Valor sin Komma rausbekommen.
Posesiones z.B. una Expediente de 1079214 Bytes oder 1.02 MB. Wenn Yo esta Valor komplett en el Speicher lese y escribir, entonces el Fortschrittsbalken eben igual en 100%. Ok Statusbalken adaptar wäre kein Thema más o menos... ...möchte sólo sólo kleinere Schritte en el Statusbalken Mostrar dejar (meinetwegen 10%, 20%, 30% kopiert etc.) Dividiere Yo entonces por algo z.B. FileSize(Expediente$) / 1024 (oder eben größer) una otro Bytezahl a bekommen, entonces Yo Nachkommastellen y lo klappt entonces eben no con Blockwrite.
Yo müßte sozusagen para diferente Dateigrößen en Bytes, KB, MB etc. una verlässlichen Valor haben.
Saludo Jürgen |
|
|
| Angefangen hat alles mit Profan 5.0 ...noch auf Diskette | 02.09.2009 ▲ |
|
|
|
|
Nico Madysa | Nehmen wir veces a, du habest una Expediente de 2049 Kilobytes, sólo como Ejemplo. Usted könntest doch ganzzahlig por 1024 teilen y dies kopieren. El Prozentanzeige bekommst du entonces después de 100 * GeleseneBytes% / FileSize(datei$). Nach el Bucle, el el macht, ermittelst du con Modulo simplemente el verbleibenden Bytes y kopierst esta auch. El Prozente necesario danach no mehr ausgerechnet voluntad, lo ergeben se sí 100%. KompilierenMarcaSeparación |
|
|
| |
|
|
|
| Vlt. meint él algo como: [...]
(una vez más korrigiert) KompilierenMarcaSeparaciónCLS
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
(achtung code sólo hingeschmiert, necesariamente en fehler checken) |
|
|
| |
|
|
|
DeHarrow | ¡Hola!
Gracias para el Respuesta! Sieht en el ersten Blick spitze de - voluntad lo veces ausprobieren - besten Dank!
Saludo Jürgen |
|
|
| Angefangen hat alles mit Profan 5.0 ...noch auf Diskette | 02.09.2009 ▲ |
|
|
|
|
| |
|
| |
|
|
|
Andreas Miethe
| Zu el Thema gehört tal vez auch el Sistema-Diálogo, el una Fortschritt beim Kopieren oder irgendwelchen Berechnungen anzeigt. Hierbei se una Fortschrittsbalken y una Restdauer( el Windwos automáticamente berechnet) adecuado. KompilierenMarcaSeparación $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 ▲ |
|
|
|
|
| |
|
| |
|
|