Ganz einfach, du fragst den Rückgabewert ab (das Handle, des zu öffnenden Fensters, bei TimeOut ist das 0):
[autoit]
If Not WinWait("Fenster_X", "", $timeout) Then
;... das ging daneben
Else
;... jetzt gehts weiter
EndIf
Ganz einfach, du fragst den Rückgabewert ab (das Handle, des zu öffnenden Fensters, bei TimeOut ist das 0):
[autoit]
If Not WinWait("Fenster_X", "", $timeout) Then
;... das ging daneben
Else
;... jetzt gehts weiter
EndIf
1. Meine ListView zu sortieren indem ich auf die Spaltenüberschrift klicke und
Exakt dazu ist ein Beispiel in der Hilfe. Bitte LESEN!
2. Die Spalten nach rechts oder links verschieben kann.
Einfach Spaltenrand anklicken und ziehen? Oder was meinst du? - Inhalte tauschen? Inhalt_1 lesen und zwischspeichern, Inhalt_2 an Inhalt_1 schreiben, aus Zwischenspeicher an Inhalt_2 schreiben. Die nötigen Funktionen findest du ausführlich dokumentiert in der Hilfe (Listview-UDF).
@Nice_2012
Ich vermute, dir fehlt noch etwas an Grundlagen. Jedes Ausführen eines Befehls in AutoIt setzt parallel das Makro @error. Bei erfolgreicher Ausführung ist @error=0. Treten Fehler auf kannst du die Fehlerwerte in der Hilfe zum entsprechenden Befehl nachlesen. Erweiterte Fehlerinformationen werden auch häufig im Makro @extended hinterlegt.
Wenn du also die Befehle so ausführen läßt:
ConsoleWrite( Funktion($param1, $param2) & @CRLF & 'error: ' & @error & @CRLF)
[/autoit]bekommst du die relevanten Infos in die Konsole.
Noch besser geht es, wenn du in SciTE einfach den Cursor auf den Funktionsnamen setzt und "Alt+D" drückst.
Dann wird eine Debugzeile mit dem Aufruf unterhalb des Befehlsaufrufs eingefügt. Den originalen Aufruf kommentierst du dann vorübergehend aus.
Einfach bei den "Set"-Funktionen in der Hilfe auf "Related" schauen, da findet man meist das Gegenstück. ![]()
GUICtrlGetState
bedeutet das, ich kann $chkName nachträglich nicht mehr beeinflussen?
Den Namen kannst du immer ändern mit GuiCtrlSetData ![]()
Wie kann ich $chkname farblich ändern, wenn die Funktion aufgerufen wird
Den Checkbox-Text kannst du (da dein System vermutlich mind. XP ist bzw. diesen Style nutzt) nicht färben.
ZitatCheckbox, Radio, Group or Progress controls cannot be painted if the "Windows XP/Vista style" is used.
Einfach ein Label neben die Checkbox setzen, statt des Textes in der Checkbox, dann kannst du munter mit GUICtrlSetColor einfärben. Checkboxereignis abfragen und je nach Zustand färben:
;...
Case $iMsg = $CheckBox
If BitAnd(GuiCtrlRead($CheckBox), $GUI_CHECKED) Then
GUICtrlSetColor($CheckBoxLabel, $Color_Checked)
Else
GUICtrlSetColor($CheckBoxLabel, $Color_UnChecked)
EndIf
;...
Einfach nur freigeben, wenn 'Firma2' gewählt wurde:
#include <GUIConstants.au3>
$Form1 = GUICreate("Auswahl", 625, 443, 556, 260)
$Label1 = GUICtrlCreateLabel("Firma", 192, 72, 36, 17)
$Combo1 = GUICtrlCreateCombo("", 232, 72, 265, 25)
GUICtrlSetData($Combo1, 'Firma1|Firma2')
$Label2 = GUICtrlCreateLabel("e-mail", 192, 104, 36, 17)
$Input1 = GUICtrlCreateInput("ausgrauen wenn Firma1 oder nichts ausgewählt", 232, 104, 273, 21)
GUICtrlSetState(-1, $GUI_DISABLE)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Combo1
If GUICtrlRead($Combo1) <> 'Firma2' Then
GUICtrlSetState($Input1, $GUI_DISABLE)
Else
GUICtrlSetState($Input1, $GUI_ENABLE)
EndIf
EndSwitch
WEnd
@D2thunder: Das kann ich dir in Bezug auf AutoIt nicht sagen, da ich nur sicher weiss, dass in LUA Skripte durch Globale Variablen verlangsamt werden. AutoIt mit seinem seltsamen Variablen-Scope geht eh eigene Wege. Da AutoIt aber sowieso mindestens Faktor 10 langsamer ist als LUA spielt das sicher eher eine untergeordnete Rolle. Geh doch einfach immer so vor: Kannst du Globale Variablen vermeiden - dann vermeide sie. Ist natürlich unbefriedigend, dass man für den Bereich eines Skriptes (also Lokal innerhalb des Skriptes) Globale Variablen verwenden muss um sie allen Teilen des Skriptes zugänglich machen zu können.
Aber du kannst eigentlich unbesorgt sein. Im Allgemeinen wirst du kaum Probleme dadurch haben.
Kleiner Tipp zum Schlauchaufziehen:
- Talkum solltest du dabei haben (Schlauch damit einreiben und Mantel von Innenseite, vermindert Reibung und Erhitzung)
- Wenn du den Schlauch eingezogen hast und die Decke auch wieder in der Felge ist: Schlauch anpumpen, sodass du noch locker mit dem Daumen eindrücken kannst und dann "Durchstauchen". Dazu das Rad etwa 30 cm anheben (senkrecht halten) und dann auf den Boden stauchen lassen. Rad ein Stück drehen und den nächsten Bereich stauchen, solange bis du eine volle Umdrehung hast. Vorteil: Evtl. Falten werden dabei rausgedrückt.
Zum Lösen des Mantels von der Felge (und umgekehrt auch zum Aufziehen) sollte man keinesfalls Werkzeug verwenden. Das sind alles Tiefbettfelgen, die es erlauben das per Hand zu erledigen. Lässt sich allerdings schlecht in Worte fassen. Aber in meiner Jugend habe ich damit viele Wetten gewonnen, dass ich ausser zum Radmutter lösen beim Schlauch-/Reifenwechsel kein Werkzeug brauche. ![]()
Auf ein bereits erstelltes Tab im Nachhinein Ctrl zu erstellen macht dir nur Ärger. Um die Zugehörigkeit zum Tab-Item zu gewährleisten müssen alle Ctrl vor Beenden der Tab-Erstellung ( GUICtrlCreateTabItem("") ; == close Tab creation ) generiert werden.
Um die GUI oder einzelne Bereiche (Ctrl) zu aktualisieren kannst du _WinAPI_RedrawWindow verwenden.
Ich finde es ungünstig, dass es nur die zwei Gültigkeitsbereiche gibt, da man manchmal Variablen nur zeitweise braucht, z.B. nur innerhalb einer Schleife, und dass man auch innerhalb von Funktionen oder neue globale Variablen erzeugen kann.
Das sehe ich genauso. Ich denke es wäre sicher kein allzu grosser Aufwand, "Do-End" in AutoIt zu integrieren. Innerhalb einer solchen Struktur erstellte Variablen wären auch nur dort gültig und würden anschließend sofort verworfen. Auch sollten Zählervariablen von Schleifen am Ende der Schleife automatisch aus dem Speicher entfernt werden - leider bleiben sie in AutoIt erhalten.
Ich arbeite recht viel mit LUA, da ist das perfekt umgesetzt und es gilt der eiserene Grundsatz: Vermeide Globale Variablen, denn damit wird das Skript langsam.
Leider kann man in AutoIt den Globalen Variablen kaum aus dem Weg gehen, aber man kann durch Auslagern in Funktionen und Übergabe von Variablen, den Bedarf an Globalen Variablen minimieren.
hier n bsp aus dem netz
Du hast nur die Hälfte des Skripts kopiert. Es fehlt die registrierte Funktion WM_Notify_Events, und in der findet die Bearbeitung statt.
This is an crosspost!
In this case please link the crossed posts.
z.B. so:
Global $aBtn[30][30]
$hGui = GUICreate('Test', 300, 300)
For $i = 0 To 29
For $j = 0 To 29
$aBtn[$i][$j] = GUICtrlCreateButton('', $i*10, $j*10, 10, 10)
Next
Next
GUISetState(@SW_SHOW, $hGui)
Do
$iMsg = GUIGetMsg()
For $i = 0 To 29
For $j = 0 To 29
If $iMsg = $aBtn[$i][$j] Then
ConsoleWrite('Zeile: ' & $i+1 & ', Spalte: ' & $j+1 & @CRLF)
ExitLoop
EndIf
Next
Next
Until $iMsg = -3
@D2thunder: Ich verstehe nicht, was du meinst. Was von Holgers ModernMenu siehst du als "Anregung oder so" ? ![]()
zu 1. Du kannst nur OnEvent ODER GuiGetMsg verwenden. Gemeinsam geht nicht (Ist ja auch nicht notwendig. Man kann beide Modi, bis auf wenige Ausnahmen, identisch nutzen).
zu 2. Bei einem Tab hängst du die Variable des Tab-Ctrl in die GuiGetMsg-Schleife (Case $TabCtrl) und liest dann im Case mit GuiCtrlRead($TabCtrl) den Index des aktuellen TabItem aus. Noch differenzierter geht es mit Verwendung der GuiTab.au3. Schau dir in der Hilfe mal die Befehle dieser UDF an.
_mk_
Das ist auch bekannt und im Wesentlichen bereits in UDF umgesetzt. ![]()
Es geht darum, grundsätzlich .NET-Klassen nutzen zu können.
Zumindest ist das mein bisheriger Wissensstand. Ich hab allerdings auch noch nicht mit existierenden Klassen probiert.
autobert, ich habe die anderen Beiträge gelöscht vondaher kann ich hier nach hilfe fragen
Wenn du das nochmals tust, trete ich dir (wenn auch nur symbolisch) in den Allerwertesten! Dir steht der Edit-Mode zur Verfügung, somit kannst du jederzeit deine Posts ergänzen. Löschen ist höchst unhöflich, da somit die anderen Post sinnfrei in der Luft hängen.