Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 3932 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 - Auf Eingabeaufforderung reagieren (6)

Frage von sklaim zum Thema Entwicklung ...

Entwicklung
gelöst Array in HTML-Tabelle umwandeln mittels AutoIT (5)

Frage von drnatur zum Thema Entwicklung ...

Python
gelöst Python GUI Button funktionen? (7)

Frage von Scuzzy zum Thema Python ...

Batch & Shell
Problem mit Funktion und Combobox (7)

Frage von Druide83 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Windows Server

Umstellung SHA 1 auf SHA 2 - Migration der CA von CSP auf KSP

Tipp von Badger zum Thema Windows Server ...

Windows 10

Quato DTP94 unter Windows 10 x64 installieren und verwenden

Anleitung von anteNope zum Thema Windows 10 ...

Windows 10

Win10 1703 und Nutzerkennwörter bei Ersteinrichtung - erstaunliche Erkenntnis

(15)

Erfahrungsbericht von DerWoWusste zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Festplatten, SSD, Raid
gelöst Raid-Controller (Areca) Datenverlust trotz R5 (16)

Frage von sebastian2608 zum Thema Festplatten, SSD, Raid ...

Server-Hardware
HP ProLiant DL380 G7, POST Error: 1785-Drive Array not Configured (10)

Frage von Paderman zum Thema Server-Hardware ...

Server-Hardware
Starker PC zum Virtualisieren (10)

Frage von canlot zum Thema Server-Hardware ...

Microsoft Office
gelöst Office 365 Pro Domäne einrichten OHNE Webseite (9)

Frage von thklemm zum Thema Microsoft Office ...