Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

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, 4091 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
Basic
gelöst AutoIt - Array auslesen und den Inhalt der Dateien in Worddatei einfügen (4)

Frage von hipfzwirgel zum Thema Basic ...

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

Frage von drnatur zum Thema Entwicklung ...

JavaScript
LocalStorage für folgende Funktion (7)

Frage von xsto123 zum Thema JavaScript ...

Batch & Shell
Problem mit Funktion und Combobox (7)

Frage von Druide83 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Windows Update

Novemberpatches und Nadeldrucker bereiten Kopfschmerzen

(14)

Tipp von MettGurke zum Thema Windows Update ...

Windows 10

Abhilfe für Abstürze von CDPUsersvc auf Win10 1607 und 2016 1607

(7)

Tipp von DerWoWusste zum Thema Windows 10 ...

RedHat, CentOS, Fedora

Fedora 27 ist verfügbar

Information von Frank zum Thema RedHat, CentOS, Fedora ...

Heiß diskutierte Inhalte
Windows Server
Kennwort vergessen bei Hyper vserver 2012r (12)

Frage von jensgebken zum Thema Windows Server ...

Linux Desktop
Bildschirmauflösung unter Linux festlegen (12)

Frage von itebob zum Thema Linux Desktop ...

Windows Userverwaltung
gelöst Administrator hat alle Rechte verloren (10)

Frage von mrdead zum Thema Windows Userverwaltung ...