Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

AutoIT Progress Bar während Funktion

Frage Entwicklung

Mitglied: pytrelooc

pytrelooc (Level 1) - Jetzt verbinden

23.01.2014, aktualisiert 27.01.2014, 4164 Aufrufe, 6 Kommentare

Hallo Leute,

ich würde gerne eine Progress Bar solange laufen lassen wie eine Funktion dauert in welcher ich eine Datei auslese.
Meine Funktion sieht so aus:

01.
Func ComputeStatusFileRead() 
02.
 
03.
	Local $File_Pointer, $File_Line 
04.
	Local $Count_Line 
05.
 
06.
	GUICtrlSetData($Edit_UserList, "") 
07.
 
08.
	If FileExists("c:\temp\" & $sCServerUser) Then 
09.
		$File_Pointer= FileOpen("c:\temp\" & $sCServerUser,0) 
10.
		IF $File_Pointer <> -1 Then 
11.
			$Count_Line=1 
12.
			While 1 
13.
				$File_Line=FileReadLine($File_Pointer, $Count_Line) 
14.
				If @error = -1 Then ExitLoop 
15.
				$Count_Line = $Count_Line+1 
16.
				; ConsoleWrite( $Count_Line & ' ' & $File_Line & @CRLF) 
17.
				; User Liste ausgeben 
18.
				GUICtrlSetData($Edit_UserList, $File_Line & @CRLF, 1) 
19.
			WEnd 
20.
			FileClose($File_Pointer) 
21.
		EndIf 
22.
	Else 
23.
		MsgBox(0,"Error","File " & $sCServerUser & " could not be opened") 
24.
	EndIf 
25.
 EndFunc
Da diese Funktion aber etwas dauert wollte ich eine Progress Bar für diese Zeit laufen lassen.

Diese habe ich so geschrieben:

01.
Func LoadingScreen() 
02.
 
03.
local $progress = 0 
04.
 
05.
 
06.
 
07.
while $progress <> 110 
08.
$progress+=1 
09.
guictrlsetdata($Progress1,$progress) 
10.
sleep(70) 
11.
WEnd 
12.
 
13.
GUIDelete($Form5) 
14.
GUISetState(@SW_SHOW, $Form1) 
15.
 
16.
EndFunc 
17.
 
18.
 
gibt es eine Möglichkeit eine Progressbar gleichzeitig mit der Funktion laufen zu lassen ?
Multithreading ist ja nicht möglich in AutoIT aber evtl. gibt es ja einen Trick wie man das lösen könnte ?

Viellicht könnt ihr mir ja helfen

Gruß

Pytrelooc
Mitglied: colinardo
LÖSUNG 23.01.2014, aktualisiert 27.01.2014
Hallo Pytrelooc,
warum machst du das Update der Progress-Bar nicht direkt aus der eigentlichen Funktion die die Arbeit erledigt, dort könntest du dann auch berechnen (anhand deines Counters) wie lange es noch dauert und die Progress-Bar entsprechend prozentual updaten.

Beispiel:
01.
#NoTrayIcon 
02.
#include <ButtonConstants.au3> 
03.
#include <GUIConstantsEx.au3> 
04.
#include <ProgressConstants.au3> 
05.
#include <WindowsConstants.au3> 
06.
Opt("GUIOnEventMode", 1) 
07.
$Form1 = GUICreate("Form1", 296, 117, 192, 124) 
08.
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close") 
09.
$Progress1 = GUICtrlCreateProgress(16, 16, 257, 25) 
10.
$btnStart = GUICtrlCreateButton("Start", 104, 64, 75, 25, $WS_GROUP) 
11.
GUICtrlSetOnEvent(-1, "btnStartClick") 
12.
GUISetState(@SW_SHOW) 
13.
 
14.
While 1 
15.
	Sleep(100) 
16.
WEnd 
17.
 
18.
Func btnStartClick() 
19.
	GUICtrlSetState($btnStart,$GUI_DISABLE) 
20.
	meineFunktion() 
21.
	GUICtrlSetState($btnStart,$GUI_ENABLE) 
22.
EndFunc 
23.
 
24.
Func Form1Close() 
25.
	exit 
26.
EndFunc 
27.
 
28.
 
29.
Func meineFunktion() 
30.
	$zeilen = 530 
31.
	for $i = 1 to $zeilen 
32.
		$percent = Round(($i / $zeilen) * 100,0) 
33.
		GUICtrlSetData($Progress1,$percent) 
34.
		Sleep(10) 
35.
	next 
36.
EndFunc
Grüße Uwe
Bitte warten ..
Mitglied: pytrelooc
24.01.2014 um 10:03 Uhr
Hallo Uwe,

ich verstehe leider nicht wo ich nun meinen Code platzieren muss damit die Progressbar parallel zur Ausführung abläuft.

Gruß Pytrelooc
Bitte warten ..
Mitglied: colinardo
LÖSUNG 24.01.2014, aktualisiert 27.01.2014
Zitat von pytrelooc:
ich verstehe leider nicht wo ich nun meinen Code platzieren muss damit die Progressbar parallel zur Ausführung abläuft.
ich weiß zwar nicht wie deine Form aufgebaut ist, aber im Prinzip sähe deine Function dann so aus:
01.
#include <File.au3> 
02.
 
03.
Func ComputeStatusFileRead() 
04.
 
05.
	Local $File_Pointer, $File_Line 
06.
	Local $Count_Line 
07.
 
08.
	GUICtrlSetData($Edit_UserList, "") 
09.
 
10.
	If FileExists("c:\temp\" & $sCServerUser) Then 
11.
		$File_Pointer= FileOpen("c:\temp\" & $sCServerUser,0) 
12.
		 
13.
		;Gesamtanzahl Zeilen in der Datei in Variable speichern 
14.
		$anzahlZeilen = _FileCountLines("c:\temp\" & $sCServerUser) 
15.
 
16.
		IF $File_Pointer <> -1 Then 
17.
			$Count_Line=1 
18.
			While 1 
19.
				$File_Line=FileReadLine($File_Pointer, $Count_Line) 
20.
				If @error = -1 Then ExitLoop 
21.
				$Count_Line = $Count_Line+1 
22.
				; ConsoleWrite( $Count_Line & ' ' & $File_Line & @CRLF) 
23.
				; User Liste ausgeben 
24.
				GUICtrlSetData($Edit_UserList, $File_Line & @CRLF, 1) 
25.
				 
26.
				;ProgressBar Wert setzen 
27.
				$percent = Round(($Count_Line / $anzahlZeilen) * 100,0)  
28.
				GUICtrlSetData($Progress1,$percent)  
29.
			WEnd 
30.
			FileClose($File_Pointer) 
31.
		EndIf 
32.
	Else 
33.
		MsgBox(0,"Error","File " & $sCServerUser & " could not be opened") 
34.
	EndIf 
35.
 EndFunc
Grüße Uwe
Bitte warten ..
Mitglied: pytrelooc
27.01.2014 um 10:14 Uhr
Okey so funktioniert es

Vielen Dank !

ist es auch möglich während einem RUNWAIT den Ladebalken laufen zu lassen ?
Da dies nur eine Zeile ist wüsste ich jetzt nicht wie man das machen könnte.
Es muss auch gar nicht genau nach Fortschritt laufen, die Hauptsache wäre wenn es zur gleichen Zeit fertig ist wie das RUNWAIT.

Gruß

pytrelooc
Bitte warten ..
Mitglied: colinardo
LÖSUNG 27.01.2014, aktualisiert um 10:38 Uhr
Das wäre nur mit MultiThreading möglich: http://www.autoitscript.com/forum/topic/29326-another-multi-process-hel ...

oder du baust dir ein zusätzliches AutoIt Script mit einer Form welche nur aus einer ProgressBar besteht, welche du aus deinem jetzigen Script aufrufst, und die dann nach dem Durchlauf deines Jobs durch dein Haupt-Script geschlossen wird.

Grüße Uwe
Bitte warten ..
Mitglied: pytrelooc
27.01.2014 um 10:38 Uhr
Das habe ich mir schon gedacht.
Vielen Dank für deine Hilfe !

Gruß pytrelooc
Bitte warten ..
Ähnliche Inhalte
Entwicklung
AutoIT Dauerschleife
gelöst Frage von mrcljnffEntwicklung5 Kommentare

Moin, ich benötige einen befehl der mir mein AutoIt script, in eine Dauerschleife verwandelt. Selber habe ich den dafür ...

Installation
AutoIT oder InstallRite
Frage von winlinInstallation1 Kommentar

Hallo Leute, ich bin benötige einige Infos von euch. Es geht um Snapshot Programme die eine Installation aufzeichnen. Zur ...

Windows 10
Lautstärke mit AutoIt ändern
Frage von HelloWorldWindows 103 Kommentare

Hey erstmal frohes neues Jahr euch Ich weiß ich schreibe spät Ich habe versucht mit AutoIT die Lautstärke meines ...

Installation
AutoIT - Wie kann ich einen Buchstaben auslesen
gelöst Frage von TIM589Installation12 Kommentare

Ich habe folgenden Plan. Folgender Dienstplan soll jeden Monat automatisch in den Google Kalender eingetragen werden: Die unterste Spalte ...

Neue Wissensbeiträge
Mac OS X

MacOS wo ist die Tilde ?

Tipp von Alchimedes vor 8 StundenMac OS X1 Kommentar

Hallo, ich hab eine MacOS qwertz Keyboard auf US Layout umgestellt da die Sonderzeichen besser erreichbar sind. Leider fehlt ...

Datenschutz

Weitere Informationen zum Sicherheitsproblem BeA

Information von Penny.Cilin vor 15 StundenDatenschutz

Im folgenden ein weiterer Bericht über die Sicherheitsprobleme von Bea. Fataler Konstruktionsfehler im besonderen elektronischen Anwaltspostfach Gruss Penny

Windows 10

Systemdienste behalten nach Win10 inplace-Upgrade nicht die ggf. modifizierte Startart bei

Tipp von DerWoWusste vor 17 StundenWindows 103 Kommentare

Stellt Euch vor, Ihr habt ein Win10 System und modifiziert dort die Startart von Systemdiensten. Zum Beispiel wollt Ihr ...

Microsoft Office

Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei

Anleitung von SarekHL vor 20 StundenMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

Batch & Shell
AD-Abfrage in Batchdatei und Ergebnis als Variable verarbeiten
gelöst Frage von Winfried-HHBatch & Shell19 Kommentare

Hallo in die Runde! Ich habe eine Ergänzungsfrage zu einem alten Thread von mir. Ausgangslage ist die Batchdatei, die ...

Windows 10
Netbook erkennt Soundkarte nicht - keinerlei Info zum Hersteller und Modell vom Netbook und Hardware bekannt
Frage von fyrb38Windows 1018 Kommentare

Guten Tag, meine Schwester reist in einigen Wochen für ein paar Monate ins Ausland und hat sich dafür ein ...

Microsoft Office
Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei
Anleitung von SarekHLMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...