Streaming und Progressbar
Streaming und Progressbar
wenn ich mittels File streaming eine Datei in ein Editorgadget einlese, möcht ich den Ladefortschritt mit einer Progressbaranzeige angezeigt bekommen.
Wie erhalte ich die aktuelle Anzahl der transferierten Bytes, um dies dem Progressbargadget mitzuteilen.
Ich habe schon in diversen Foren nach einer Lösung gesucht, bisher aber noch nichts passendes gefunden.
Für eure Hilfe vielen Dank im voraus.
Wie erhalte ich die aktuelle Anzahl der transferierten Bytes, um dies dem Progressbargadget mitzuteilen.
Ich habe schon in diversen Foren nach einer Lösung gesucht, bisher aber noch nichts passendes gefunden.
Für eure Hilfe vielen Dank im voraus.
Code: Alles auswählen
EditStreamCallback(dwCookie,pbBuff,cb,*pcb)
vielen Dank für die schnelle Antwort.
Wollte die Anweisung einbauen, weiß aber nicht wie und wo.
Zum Laden Einer Datei benutze ich folgende Procedure:
Wo baue ich die Anweisung da ein ??
Wollte die Anweisung einbauen, weiß aber nicht wie und wo.
Zum Laden Einer Datei benutze ich folgende Procedure:
Code: Alles auswählen
Procedure Load(FileName.s, EditorID.l)
Protected *hFile.LONG
Protected Stream.EDITSTREAM
EditStreamCallback(dwCookie,pbBuff,cb,*pcb)
*hFile = ReadFile(#PB_Any, FileName)
If *hFile
Stream\dwCookie = *hFile\l
Stream\pfnCallback = @StreamIN()
SendMessage_(GadgetID(EditorID),#EM_STREAMIN ,#SF_TEXT, @Stream)
SendMessage_(GadgetID(EditorID),#EM_LIMITTEXT,-1,0)
CloseFile(*hFile)
EndIf
EndProcedure
ich habe die Procedure 'StreamIN' gefunden, weiß aber immer noch nicht, wie ich die Variable cb nutzen soll, um damit den aktuellen Wert des Progressbar zu aktualisieren.
Die StremIn-procedure sieht bei mir so aus:
wo baue ich die Progressbar-Anweisung ein ?
Die StremIn-procedure sieht bei mir so aus:
Code: Alles auswählen
Procedure StreamIN(dwCookie.l,pbBuff.l,cb.l,*pcb.l)
ReadFile_(dwCookie, pbBuff, cb, *pcb, 0)
!XOR Eax,1
ProcedureReturn
EndProcedure
Vorsicht ! Ich weiss nicht wo das Maximum einer Progressbar liegt.
Habe vorsichtshalber mal das ganze durch 1000 geteilt.
Eventuell noch ein WindowEvent() vor ReadFile_ setzen.
Habe vorsichtshalber mal das ganze durch 1000 geteilt.
Eventuell noch ein WindowEvent() vor ReadFile_ setzen.
Code: Alles auswählen
Enumeration
#GAD_EDIT
#GAD_PROG; <----
#IDM_LOAD
EndEnumeration
Procedure StreamIN(dwCookie.l,pbBuff.l,cb.l,*pcb.l)
Protected pro.l = GetGadgetState(#GAD_PROG) ; <----
SetGadgetState(#GAD_PROG,pro+cb/1000) ; <----
;WindowEvent() ; <----
ReadFile_(dwCookie, pbBuff, cb, *pcb, 0)
!XOR Eax,1
ProcedureReturn
EndProcedure
Procedure Load()
Protected File.s
Protected *hFile.LONG
Protected Stream.EDITSTREAM
File = OpenFileRequester("Öffnen", "", "", 0)
If File
*hFile = ReadFile(#PB_Any, File)
If *hFile
Stream\dwCookie = *hFile\l
Stream\pfnCallback = @StreamIN()
SetGadgetAttribute(#GAD_PROG, #PB_ProgressBar_Maximum, FileSize(File)/1000) ; <----
SendMessage_(GadgetID(#GAD_EDIT), #EM_STREAMIN, #SF_TEXT, @Stream)
SetGadgetAttribute(#GAD_PROG, #PB_ProgressBar_Maximum,0); <----
CloseFile(*hFile)
EndIf
EndIf
EndProcedure
*win.LONG = OpenWindow(#PB_Any, 0, 0, 500, 500, "PureBasic Window")
If *win
CreateGadgetList(*win\l)
EditorGadget(#GAD_EDIT,0,0,500,460)
ProgressBarGadget(#GAD_PROG, 0, 461, 500, 20,0, 0,#PB_ProgressBar_Smooth) ; <----
If CreateMenu(0,*win\l)
MenuTitle("File")
MenuItem( #IDM_LOAD, "&Load...")
EndIf
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_CloseWindow : Break
Case #PB_Event_Menu
Select EventMenu()
Case #IDM_LOAD
Load()
EndSelect
EndSelect
ForEver
EndIf
End



jetzt hab ich so einigermaßen den Durchblick.
vielen Dank an hallodri
vielleicht noch eine kurze Frage.
wozu ist eigentlich diese Anweisung da:
Code: Alles auswählen
!XOR Eax,1