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, 3597 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(4)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Microsoft Office
gelöst Excel: Text in Zellbereich prüfen mit Vergleichstext ggf. mit Exact-Funktion (5)

Frage von Michi1 zum Thema Microsoft Office ...

JavaScript
AngularJS Variable über Input in Funktion ausführen

Frage von badkilla zum Thema JavaScript ...

LAN, WAN, Wireless
Hat On Networks PL500PS WLAN-Funktion? (4)

Frage von Andy1987 zum Thema LAN, WAN, Wireless ...

iOS
IOS 10.2 bringt SOS-Funktion aufs iPhone

Link von sabines zum Thema iOS ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (17)

Frage von Unwichtig zum Thema Netzwerkmanagement ...