Anfängerfrage: ProgressBarGadget(...)

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Anfängerfrage: ProgressBarGadget(...)

Beitrag 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)
Benutzeravatar
PBZecke
Beiträge: 399
Registriert: 02.09.2004 17:34

Beitrag von PBZecke »

Beispiel 10 Dateien: Progressbar Max = 10 und nach jeder kopierten Datei
den Progressbarstatus um eins erhöhen
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... :lol:
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

ok kappiert
Aber dass ist aufwendig ,
kann der computer die Dateien zusammenzählen und selbst festlegen welches % kommt?
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag 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. :wink:
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
PBZecke
Beiträge: 399
Registriert: 02.09.2004 17:34

Beitrag von PBZecke »

>> Aber dass ist aufwendig

Was ist denn daran aufwändig? Banaler gehts ja kaum noch... :roll:
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... :lol:
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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 :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Beitrag 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)
Bild
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag 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 :mrgreen: ) aus!
Benutzeravatar
PBZecke
Beiträge: 399
Registriert: 02.09.2004 17:34

Beitrag von PBZecke »

Also, Du findest mein erstes Beispiel zu aufwändig.
Warum willst Du das ganze dann noch komplizierter haben? :freak:
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... :lol:
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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: :lol:
Bild
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten