GUI - dynamische Button mit Daten aus DB erstellen
-
gmmg -
29. April 2024 um 10:37 -
Unerledigt
-
-
Ok, bin immer kein großer freund (außer bei GUI) von globalen Variablen und aus "geisterhand" wird eine solche geändert/verwendet.
-
Moombas im Script gibt es sicherlich einige Sachen die sich verbessern lassen.
Der nächste Step im Script ist, die Übergabe der Daten an den Chrome Webdriver für den automatischen Login. Logindaten kommen aus der DB.
Die entsprechenden WD_Elemente habe ich bereits in anderen Scripten die ja in diesem einen zusammengefasst werden sollen. Eventuell macht es Sinn die Elemente auch in der DB zu speichern und dann entsprechend auszulesen.
Aber jetzt ist erst mal Wochenende
Gruß Marcel
-
Hallo Zusammen,
benötige nochmal eure Hilfe. Ich habe der GUI noch ein Label "admin config" hinzugefügt.
Hier komme ich nun nicht weiter, wie ich den Aufruf starte, damit es klick bar ist. Bei einer Switch Endswitch würde ich das im Case zweig machen aber hier?
C
Alles anzeigen#include <Array.au3> #include <GUIConstantsEx.au3> ; zum leichteren Zugriff auf die Attribute im URL-Array Global Enum $eID, $eName, $eURL, $eGUI ; Das Eingabearray Global $aURLArray[][4] = [["ID", "Name", "URL", "GUI"], [1,"AutoIt","www.autoit.de", 0], [2,"Heise","www.heise.de", 1], [3,"Test1","www.test1.de", 0], [4,"Test2","www.test2.de", 0], [5,"Test3","www.test3.de", 0], [6,"Test4","www.test4.de", 0], [7,"Test5","www.test5.de", 1], [8,"Test6","www.test6.de", 0], [9,"Test7","www.test7.de", 0]] ; aus dem Array abgeleitete Parameter Global $nEntries = UBound($aURLArray, 1) - 1 ; Layout-Parameter (Größen und Abstände der Buttons) Global $iCols = 3, _ ; Anzahl der Spalten der Buttons $iRows = Ceiling($nEntries / $iCols), _ ; Anzahl der Zeilen der Buttons $iButtonWidth = 150, _ ; Breite eines Buttons $iButtonHeight = 25, _ ; Höhe eines Buttons $iButtonXStep = 15, _ ; horizontaler Abstand der Buttons $iButtonYStep = 15, _ ; vertikaler Abstand der Buttons $iMarginT = 30, _ ; Dicke des oberen Randes um die Button-Matrix $iMarginB = 20, _ ; Dicke des unteren Randes um die Button-Matrix $iMarginL = 20, _ ; Dicke des linken Randes um die Button-Matrix $iMarginR = 20, _ ; Dicke des rechten Randes um die Button-Matrix $iGUIWidth = $iMarginL + $iMarginR + $iCols * $iButtonWidth + ($iCols - 1) * $iButtonXStep, _ ; Breite des GUI $iGUIHeight = $iMarginT + $iMarginB + $iRows * $iButtonHeight + ($iRows - 1) * $iButtonYStep ; Höhe des GUI ; das GUI erstellen Opt("GUIOnEventMode", 1) $GUI = GUICreate("Website AutoLogin " & FileGetVersion(@ScriptName), $iGUIWidth, $iGUIHeight) GUISetOnEvent($GUI_EVENT_CLOSE, _raus) $label = GUICtrlCreateLabel("admin config",55,8,100,25) GUICtrlSetFont($label, 8, 300, 0, "Arial") ;IF @UserName <> "userxyz" Then GUICtrlSetState($label, $GUI_Hide) ; Das Array durchgehen und die Buttons erstellen Global $iPosX, $iPosY, $iButtonX, $iButtonY For $i = 1 To $nEntries ; die Koordinaten des Buttons in der Button-Matrix $iPosX = Mod($i - 1, $iCols) $iPosY = Ceiling($i / $iCols) - 1 ; die GUI-Koordinaten des Buttons $iButtonX = $iMarginL + $iPosX * ($iButtonWidth + $iButtonXStep) $iButtonY = $iMarginT + $iPosY * ($iButtonHeight + $iButtonYStep) ; Den Button selbst erstellen GUICtrlCreateButton($aURLArray[$i][$eName], $iButtonX, $iButtonY, $iButtonWidth, $iButtonHeight) ; Verknüpfe Button mit Funktion _search GUICtrlSetOnEvent(-1, _search) Next ; GUI anzeigen GUISetState(@SW_SHOW) ; Endlosschleife um GUI am Leben zu halten Do Sleep(100) Until 0 ; eigene Funktion, welche beim Klick auf einen Button ausgelöst wird Func _search() Local $sName = GUICtrlRead(@GUI_CtrlId) Local $iPos = _ArraySearch($aURLArray, $sName, 1, 0, 1, 0, 0, $eName) Local $sURL = $aURLArray[$iPos][$eURL] MsgBox(0,"Array Position", "Element: " & $sName & @CRLF & "Position: " & $iPos & @CRLF & "URL: " & $sURL) EndFunc ; Funktion zum Beenden des GUI Func _raus() Exit EndFunc
Danke
Gruß Marcel
-
OK, habe jetzt die folgende Func hinzugefügt und habe nach dem erstellen des Labels die Zeile GUICtrlSetOnEvent(-1, _admin_config) eingefügt.
Wäre das so korrekt oder lässt sich das auch anders lösen?
Func _admin_config()
MsgBox(0,"","test")
EndFuncAutoIt
Alles anzeigen#include <Array.au3> #include <GUIConstantsEx.au3> ; zum leichteren Zugriff auf die Attribute im URL-Array Global Enum $eID, $eName, $eURL, $eGUI ; Das Eingabearray Global $aURLArray[][4] = [["ID", "Name", "URL", "GUI"], [1,"AutoIt","www.autoit.de", 0], [2,"Heise","www.heise.de", 1], [3,"Test1","www.test1.de", 0], [4,"Test2","www.test2.de", 0], [5,"Test3","www.test3.de", 0], [6,"Test4","www.test4.de", 0], [7,"Test5","www.test5.de", 1], [8,"Test6","www.test6.de", 0], [9,"Test7","www.test7.de", 0]] ; aus dem Array abgeleitete Parameter Global $nEntries = UBound($aURLArray, 1) - 1 ; Layout-Parameter (Größen und Abstände der Buttons) Global $iCols = 3, _ ; Anzahl der Spalten der Buttons $iRows = Ceiling($nEntries / $iCols), _ ; Anzahl der Zeilen der Buttons $iButtonWidth = 150, _ ; Breite eines Buttons $iButtonHeight = 25, _ ; Höhe eines Buttons $iButtonXStep = 15, _ ; horizontaler Abstand der Buttons $iButtonYStep = 15, _ ; vertikaler Abstand der Buttons $iMarginT = 30, _ ; Dicke des oberen Randes um die Button-Matrix $iMarginB = 20, _ ; Dicke des unteren Randes um die Button-Matrix $iMarginL = 20, _ ; Dicke des linken Randes um die Button-Matrix $iMarginR = 20, _ ; Dicke des rechten Randes um die Button-Matrix $iGUIWidth = $iMarginL + $iMarginR + $iCols * $iButtonWidth + ($iCols - 1) * $iButtonXStep, _ ; Breite des GUI $iGUIHeight = $iMarginT + $iMarginB + $iRows * $iButtonHeight + ($iRows - 1) * $iButtonYStep ; Höhe des GUI ; das GUI erstellen Opt("GUIOnEventMode", 1) $GUI = GUICreate("Website AutoLogin " & FileGetVersion(@ScriptName), $iGUIWidth, $iGUIHeight) GUISetOnEvent($GUI_EVENT_CLOSE, _raus) $label = GUICtrlCreateLabel("admin config",55,8,100,25) GUICtrlSetFont($label, 8, 300, 0, "Arial") ;IF @UserName <> "userxyz" Then GUICtrlSetState($label, $GUI_Hide) GUICtrlSetOnEvent(-1, _admin_config) ; Das Array durchgehen und die Buttons erstellen Global $iPosX, $iPosY, $iButtonX, $iButtonY For $i = 1 To $nEntries ; die Koordinaten des Buttons in der Button-Matrix $iPosX = Mod($i - 1, $iCols) $iPosY = Ceiling($i / $iCols) - 1 ; die GUI-Koordinaten des Buttons $iButtonX = $iMarginL + $iPosX * ($iButtonWidth + $iButtonXStep) $iButtonY = $iMarginT + $iPosY * ($iButtonHeight + $iButtonYStep) ; Den Button selbst erstellen GUICtrlCreateButton($aURLArray[$i][$eName], $iButtonX, $iButtonY, $iButtonWidth, $iButtonHeight) ; Verknüpfe Button mit Funktion _search GUICtrlSetOnEvent(-1, _search) Next ; GUI anzeigen GUISetState(@SW_SHOW) ; Endlosschleife um GUI am Leben zu halten Do Sleep(100) Until 0 ; eigene Funktion, welche beim Klick auf einen Button ausgelöst wird Func _search() Local $sName = GUICtrlRead(@GUI_CtrlId) Local $iPos = _ArraySearch($aURLArray, $sName, 1, 0, 1, 0, 0, $eName) Local $sURL = $aURLArray[$iPos][$eURL] MsgBox(0,"Array Position", "Element: " & $sName & @CRLF & "Position: " & $iPos & @CRLF & "URL: " & $sURL) EndFunc ; Funktion zum Beenden des GUI Func _raus() Exit EndFunc ; Funktion für den Admin Config Bereich Func _admin_config() MsgBox(0,"","test") EndFunc
Gruß Marcel
-
Doch das passt so.
Zeile 29 & 32 solltest du noch als Global (bzw. ich bevorzuge hier Global const) definieren.
-
@Moombas Danke für deine Antwort.
-
Eine Anmerkung noch, was ich eben ignoriert habe:
Solltest du deine auskommentierte Zeile (Zeile 34) nutzen, funktioniert das "-1" ggf. nicht mehr.
Ich würde daher zur Sicherheit $label eintragen (Zeile 35, wie du es ja davor (Zeile 33) auch gemacht hast).
Aber ggf. bin ich einfach Paranoid -