Seite 1 von 2
Anfängerfrage: ProgressBarGadget(...)
Verfasst: 14.06.2006 21:21
von Joel
Also wenn ich Dateien auf die Festblatte kopier(Also Installiere) wie bekomm ich das dann hin das der Fortschritt angezeigt wird. Also wie soll der befehl wissen wie viel schon Kopiert ist?
Ich will ja nicht jedes Prozent einzeln angeben.
(Alles was ich in der suche gefunden habe ist zu Kopliziert)
Verfasst: 14.06.2006 21:44
von PBZecke
Beispiel 10 Dateien: Progressbar Max = 10 und nach jeder kopierten Datei
den Progressbarstatus um eins erhöhen
Verfasst: 14.06.2006 21:49
von Joel
ok kappiert
Aber dass ist aufwendig ,
kann der computer die Dateien zusammenzählen und selbst festlegen welches % kommt?
Verfasst: 14.06.2006 23:06
von Laurin
Nein. Du musst immer daran denken, dass ein Computer von Haus aus dumm ist. Du musst ihm immer ausführlich jeden Schritt einzelnd erklären (=programmieren).
So doof das auch ist, so interessant macht es aber die Sache aus.

Verfasst: 14.06.2006 23:21
von PBZecke
>> Aber dass ist aufwendig
Was ist denn daran aufwändig? Banaler gehts ja kaum noch...

Verfasst: 14.06.2006 23:21
von ts-soft
Vielleicht mal in der Win32.hlp, bzw. MSDN oder PSDK nachlesen.
SHFileOperation_ mit gefüllter Structure vom Type SHFILEOPSTRUCT
aufrufen, dann kommt der windowstypische Dialog mit Fortschrittsanzeige, ohne weiteres zutun

Verfasst: 15.06.2006 09:43
von Jilocasin
geht das nicht per asynchronem thread? könnte man da nicht auch abfragen wieviel von 1 Datei schon kopiert ist. (kann windows ja auch)
Verfasst: 15.06.2006 10:53
von Joel
Ja die Größe muss ermittelt werden und dann alle Größen der Dateien zusammengezählt werden.
Nur wie kann man programmieren dass der zb. 1% von der größe aller Daten ermittet und wenn er diesen 1% kopiert hat das der das dan in der Fort. Anzeige Anzeigt?
Also so musste das gehen ich kenne mich nur nicht mit % programmierung (oder wie das heißt

) aus!
Verfasst: 15.06.2006 12:11
von PBZecke
Also, Du findest mein erstes Beispiel zu aufwändig.
Warum willst Du das ganze dann noch komplizierter haben?

Verfasst: 15.06.2006 13:42
von ts-soft
Hier mal eine Procedure zum Copieren mit Fortschritt!
Ein Fenster ist erforderlich
Eine Linkliste, die die Dateinamen enthält.
Den Rest bitte dem Example entnehmen. wobei es noch viel mehr
Möglichkeiten gibt dies zu nutzen!
Code: Alles auswählen
Procedure CopyWithProgress(ParendID.l, Sources.s(), Destination.s)
Protected File.SHFILEOPSTRUCT, *Mem.l, Length.l, Pos.l
*Mem = AllocateMemory(1)
With File
\hwnd = ParendID
\wFunc = #FO_COPY
ForEach Sources()
Length = Len(Sources()) + 1
ReAllocateMemory(*Mem, Pos + Length)
PokeS(*Mem + Pos, Sources(), Length)
Pos + Length
Next
\pFrom = *Mem
\pTo = @Destination
\fFlags = #FOF_FILESONLY
EndWith
If SHFileOperation_(File) = #S_OK
FreeMemory(*Mem)
ProcedureReturn #True
EndIf
FreeMemory(*Mem)
ProcedureReturn #False
EndProcedure
NewList MySources.s()
AddElement(MySources())
MySources() = #PB_Compiler_Home + "PureBasic.exe"
AddElement(MySources())
MySources() = #PB_Compiler_Home + "SmartUpdate.exe"
AddElement(MySources())
MySources() = #PB_Compiler_Home + "Visual Designer.exe"
AddElement(MySources())
MySources() = #PB_Compiler_Home + "Examples\Sources\Billboard.pb"
AddElement(MySources())
MySources() = #PB_Compiler_Home + "Examples\Sources\Camera.pb"
AddElement(MySources())
MySources() = #PB_Compiler_Home + "Examples\Sources\CDAudio.pb"
AddElement(MySources())
MySources() = #PB_Compiler_Home + "Examples\Sources\Cipher.pb"
; hier bitte anpassen, etwas grösseres, sonst sieht man nicht viel
AddElement(MySources())
MySources() = "G:\Installation\CD-Images\Betriebssysteme\Kanotix\KANOTIX-2005-04.iso"
; usw.
If OpenWindow(0, #PB_Ignore, 0, 100, 100, "CopyWithProgress")
While WindowEvent() : Wend
CopyWithProgress(WindowID(0), MySources(), GetTemporaryDirectory())
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Aussehen tut es dann in etwa so:
