Ich habe hier ein Datenbankprojekt, bei dem das Importieren von Daten aus verschiedenen Quellen einige Zeit in Anspruch nimmt. Zum Importieren nutze ich hintereinander verschiedene Basic-Prozeduren. Zum Schluss erscheint eine Messagebox, dass der Import fertig ist.
Schöner wäre es natürlich, wenn während der Imports ein Fortschritt angezeigt würde. Ich habe mich da an einem Dialog mit Fortschrittsbalken versucht, nur erscheint der Dialog leider erst, wenn alle Prozeduren abgearbeitet wurden.
Hier einmal ein möglichst einfaches Beispiel:
GLOBAL oDialog1 AS OBJECT
DIM arProcedures()
SUB Dialog1Start
DialogLibraries.LoadLibrary("Standard")
oDialog1 = createUnoDialog(DialogLibraries.Standard.D_Import)
oDialog1.setVisible(true)
FOR i = 1 TO uBound(arProcedures)+1
arProcedures(i-1)
stLabel = "Vorgang " & i & " von " & uBound(arProcedures)+1
Progress(i*100/(uBound(arProcedures)+1), stLabel)
Wait(1000)
NEXT
oDialog1.dispose()
END SUB
SUB Progress(doVal AS DOUBLE, stLabel AS STRING)
oDialog1.getControl("ProgressBar").setValue(doVal)
oDialog1.getControl("lblProgressBar").Text = stLabel
END SUB
SUB StartImport
arProcedures = array(Pro1,Pro2)
Dialog1Start
END SUB
SUB Pro1
Wait 2000
END SUB
SUB Pro2
Wait 2000
END SUB
Das Ganze braucht einen Dialog D_Import, der ein Beschriftungsfeld lblProgressBar und einen Fortschrittsbalken ProgressBar hat.
Starte ich mit StartImport, dann verläuft zuerst die Zeit für die beiden Prozeduren und danach wird dann der Dialog sichtbar - obwohl der doch vorher auf setVisible gestellt wurde. Die Wartezeit in der Schleife des Dialogs ist nur eingebaut um zu sehen, ob der Fortschrittsbalken funktioniert. Das liegt wohl daran, dass ich die Prozeduren in ein Array geschrieben habe. Schreibe ich die Prozeduren direkt in die Schleife (mit SELECT CASE …), dann klappt das Ganze. Es hängt also eher daran: Wie nutze ich so einen Dialog mit Hilfe eines Arrays, das Prozeduren aufruft?