Dynamisches Gui

  • Hallo,
    Ich habe versucht ein Dynymisches Gui zu realisieren.
    Vieleicht hilft das ja jemanden.
    Da ich auf mein Post keine Reaktion bekommen habe versuche ich es hier dann noch einmal :party4:


    Gesteuert wird das Gui über eine INI Datei.
    Unter STARTPUNKT wird Festgelegt wo die Y,X Startkooridinaten sind.
    Dann kann man noch mit Breite und die Höhe das Aussehen des GUI Festers einstellen. Das muß man einfach mal ausprobieren. Wichtig ist auch noch der Abstand der beim hinzufügen einer Zeile berücksichtigt wird.
    TITEL stellt natürlich den Titel des Fensters ein.

    Dieses Beispiel ist für eine Schleife die meherer IP Adressen nacheinander anpingt und den Status mittels einer grünen oder roten Kugel anzeigt.
    Ich überprüfe damit welche VPN Clients gerade angemeldet sind. Man könnte aber auch verschiedene Rechner im Netzwerk abfragen, z.B. Router, Netzwerkdrucker, NAS usw.


    Hier die INI Datei "dynamisches_Gui.ini"

    Spoiler anzeigen

    [Startpunkt]
    X=0
    Y=0
    with=110
    height=20
    abstand=24
    titel=VPNSTATUS

    [Entrys]
    Edit_ip1="127.0.0.1"
    Edit_name1="localhost"
    Edit_IP2="10.3.0.2"
    Edit_name2="PC1"
    Edit_ip3="10.3.0.6"
    Edit_name3="PC2"
    Edit_IP4="10.3.0.10"


    Hier nun das eigendliche Script.
    Der Hotkey zum beenden ist ESC.


    Spoiler anzeigen


    #include <array.au3>
    #include <GuiConstants.au3>
    dim $with, $height, $var, $x, $y, $y2, $abstand, $Edit_IP, $titel, $yNR, $nr, $bubble1, $edit, $zaehler, $EditNR, $bubble
    Opt("TrayIconDebug", 1) ; zeigt am trayicon welchen Befehl das Script gerade Ausführt
    ;$PINGDELAY = 1000
    HotKeySet("{Esc}", "captureEsc")

    $inifile = "dynamisches_Gui.ini"

    $var = IniReadSection($inifile, "Entrys")


    Gui_berechnen()
    gui_erstellen()
    abfrage()


    While 1
    GuiSetState()
    ;~ tooltip("Breite:" & $with+30 & " Höhe:" & $var[0][0]*$height+25)
    WEnd


    func Gui_berechnen()
    $X = IniRead($inifile,"Startpunkt","x","")
    $Y = IniRead($inifile,"Startpunkt","y","")
    $with = IniRead($inifile,"Startpunkt","with","")
    $height = IniRead($inifile,"Startpunkt","height","")
    $abstand = IniRead($inifile,"Startpunkt","abstand","")
    $titel= IniRead($inifile,"Startpunkt","titel","")

    $zaehler=0
    EndFunc


    func gui_erstellen()

    $nr = $var[0][0]/2 ;Anzahl der Felder
    dim $edit[$nr+1]
    $edit[0]=$nr
    Dim $edit_ip[$nr+1]
    $edit_ip[0]=$nr
    dim $edit_name[$nr+1]
    $edit_name[0]=$nr
    dim $bubble[$nr+1]
    $bubble[0]=$nr

    GuiCreate($titel, $with+30, ($nr+4)*$height+25, 400,346,BitOR($WS_Border, $WS_CLIPSIBLINGS)); Hauptgui


    For $i = 1 To $nr
    $Edit_IP[$i] = IniRead($inifile, "Entrys","Edit_IP" & $i,"")
    $Edit_name[$i] = IniRead($inifile, "Entrys","Edit_name" & $i,"")
    ;~ _ArrayDisplay($edit_ip,$i & " von " & $nr )


    if $i = 1 Then
    $x = $x ; erstes Element ohne Abstand
    Else
    $y2 = $y+$abstand*($i-1); bei jedem Element den Abstand hinzufügen
    EndIf

    $edit[$i] = GUICtrlCreateLabel($Edit_IP[$i] & " - " & $edit_name[$i],$x,$y2,$with,$height)
    GUICtrlSetBkColor($Edit[$i],0xd3d3d3) ; Gray
    $bubble[$i] = GUICtrlCreatePic ("red_bubble.bmp", 116, $y2, 14, 14)
    Next

    $yNR = $y2+$abstand
    $EditNR = GUICtrlCreateLabel("Anzahl", 0, $yNR, 140, 20)

    GUISetState()
    EndFunc


    Func abfrage()
    while 1
    For $i = 1 To $nr
    ;Pingschleife()

    GuiSetState()
    ;Statusabfrage Server
    GUICtrlSetBkColor($Edit[$i],0x00ff00) ; Green
    Ping($Edit_IP[$i],1000)
    if @error = 0 Then
    GUICtrlSetImage ($bubble[$i],"green_bubble.bmp")
    Sleep(900);für die Optik
    Else
    GUICtrlSetImage ($bubble[$i],"red_bubble.bmp")
    EndIf
    GUICtrlSetBkColor($Edit[$i],0xd3d3d3) ; Gray

    $zaehler=$zaehler+1
    GUICtrlSetData($editNR,"Durchläufe=>> " & $zaehler)
    GuiSetState()
    sleep (1000)
    Next
    WEnd


    EndFunc


    Func captureEsc()
    if WinActive($titel) Then
    Exit
    EndIf
    endfunc


    Gruß
    Wolke