Code: Alles auswählen
EnableExplicit
Define Event, size, file$, Quit, ThreadID, Titel$, FTPProgress, TimerId, ProcTimerId
Procedure FTPProgressBarThread(size)
Protected FTPProgress
Shared Quit, ThreadID
Repeat
FTPProgress = FTPProgress(0)
SetGadgetState(3, Int(1000 / size * FTPProgress))
Delay(10)
Until FTPProgress = #PB_FTP_Finished Or FTPProgress = #PB_FTP_Error Or Quit
ThreadID = 0
If Not Quit
CloseFTP(0)
DisableGadget(0, 0)
DisableGadget(1, 0)
DisableGadget(2, 0)
EndIf
EndProcedure
Procedure TimerProc(hwnd, uMsg, idEvent, dwTime)
Protected FTPProgress
Shared size, ProcTimerId
Select idEvent
Case ProcTimerId
FTPProgress = FTPProgress(0)
SetGadgetState(3, Int(1000 / size * FTPProgress))
If FTPProgress = #PB_FTP_Finished Or FTPProgress = #PB_FTP_Error
If Not KillTimer_(WindowID(0), idEvent)
Debug "KillTimer_ Fehler"
EndIf
CloseFTP(0)
DisableGadget(0, 0)
DisableGadget(1, 0)
DisableGadget(2, 0)
EndIf
Default
Debug "TimerProc unbekannte id " + Str(idEvent)
EndSelect
EndProcedure
Titel$ = "FTP Progressbar..."
If InitNetwork()
If OpenWindow(0, 0, 0, 250, 90, Titel$, #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(0))
ButtonGadget(0, 10, 10, 70, 25, "Thread")
ButtonGadget(1, 85, 10, 70, 25, "Timer")
ButtonGadget(2, 160, 10, 80, 25, "TimerCallback")
ProgressBarGadget(3, 10, 50, 230, 20, 0, 1000, #PB_ProgressBar_Smooth)
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 0, 1, 2
file$ = OpenFileRequester(Titel$ + " Datei wählen", "", "", 0)
size = FileSize(file$)
If file$
If OpenFTP(0, "server", "upload", "upload")
;SetFTPDirectory(0, ZielPfad$)
If SendFTPFile(0, file$, GetFilePart(file$), 1)
DisableGadget(0, 1)
DisableGadget(1, 1)
DisableGadget(2, 1)
Select EventGadget()
Case 0
;Thread
ThreadID = CreateThread(@FTPProgressBarThread(), size)
If Not ThreadID
Debug "CreateThread Fehler"
EndIf
Case 1
;Timer
TimerId = 1
If Not SetTimer_(WindowID(0), TimerId, 10, 0)
Debug "SetTimer_ Fehler"
EndIf
Case 2
;Timer Callback
ProcTimerId = 2
If Not SetTimer_(WindowID(0), ProcTimerId, 10, @TimerProc())
Debug "SetTimer_Callback Fehler"
EndIf
EndSelect
Else
Debug "SendFTPFile Fehler"
EndIf
Else
Debug "OpenFTP Fehler"
EndIf
Else
Debug "File Fehler"
EndIf
EndSelect
Case #PB_Event_CloseWindow
Quit = 1
Case #WM_TIMER
If EventwParam() = TimerId
FTPProgress = FTPProgress(0)
SetGadgetState(3, Int(1000 / size * FTPProgress))
If FTPProgress = #PB_FTP_Finished Or FTPProgress = #PB_FTP_Error
If Not KillTimer_(WindowID(0), TimerId)
Debug "KillTimer_ Fehler"
EndIf
CloseFTP(0)
DisableGadget(0, 0)
DisableGadget(1, 0)
DisableGadget(2, 0)
EndIf
EndIf
EndSelect
Until Quit
Else
Debug "CreateGadgetList Fehler"
EndIf
Else
Debug "OpenWindow Fehler"
EndIf
If ThreadID
Debug "Thread läuft noch"
If Not WaitThread(ThreadID, 1000)
KillThread(ThreadID)
Debug "Thread killed"
Else
Debug "Thread beendet"
EndIf
EndIf
Else
Debug "InitNetwork Fehler"
EndIf
End