Position/Größe eines Group-Controls abhängig vom Resizing berechnen

  • moin,
    ich habe folgendes Problem:
    Ich habe eine Gui, in der regelmäßig ein Group-Control gelöscht und an anderer Stelle erstellt wird, wenn ich aber die Fenstergröße ändere, wird das Control wieder an der ürspünglichen, jetzt aber falschen Position erstellt.
    Ich bin deshalb auf der Suche nach einer Möglichkeit, die Größen/Positionsänderung zu berechnen oder für einzelne Controls eine Fenstergrößenänderung zu simulieren, um so das Resizing auszulösen.

    Ich hoffe ihr habt mein problem verstanden und könnt mir helfen, nachdem google und die Forumssuche versagt haben.

    Mfg inventor

    PS:
    wenn nötig kann ich auch den code noch posten, aber den anblick würde ich euch gerne ersparen ;)

    MFG inventor

    wenn's weitere Fragen gibt -> PN
    wenn da keine Antwort kommt, überdenk deine Frage noch mal

    Einmal editiert, zuletzt von inventor (28. April 2012 um 19:21)

  • Das is mein code:
    (für Herzatacken u.ä. wird keine Haftung übernommen :D )

    Spoiler anzeigen
    [autoit]

    #cs Informationen --------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.6.1
    Author: Stefan Thomas

    [/autoit] [autoit][/autoit] [autoit]

    Script Function:
    Skript, zur anzeige und scpeicherung eines 14/1 Billiardspiels, sowie der Zeitkontrolle
    #ce Informationen --------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    #region Includes (möglich gebraucht)

    [/autoit] [autoit][/autoit] [autoit]

    #include <Constants.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #endregion Includes
    #region Optionen

    [/autoit] [autoit][/autoit] [autoit]

    Opt("MustDeclareVars", 1)
    Opt("TrayAutoPause", 0)
    Opt("GUIOnEventMode", 1)
    Opt("TrayOnEventMode", 1)
    Opt("TrayIconDebug", 0)
    Opt("GUICloseOnESC", 0)

    [/autoit] [autoit][/autoit] [autoit]

    #endregion Optionen

    [/autoit] [autoit][/autoit] [autoit]

    #region Variablen

    [/autoit] [autoit][/autoit] [autoit]

    Dim $GUI ;ID des Hauptfensters

    [/autoit] [autoit][/autoit] [autoit]

    Dim $sound1
    If FileExists(@ScriptDir & "\Ton1.wav") Then
    $sound1 = @ScriptDir & "\Ton1.wav"
    ElseIf FileExists(@ScriptDir & "\Ton1.mp3") Then
    $sound1 = @ScriptDir & "\Ton1.mp3"
    ElseIf FileExists(@WindowsDir & "\Media\ding.wav") Then
    $sound1 = @WindowsDir & "\Media\ding.wav"
    EndIf
    Dim $sound2
    If FileExists(@ScriptDir & "\Ton2.wav") Then
    $sound2 = @ScriptDir & "\Ton2.wav"
    ElseIf FileExists(@ScriptDir & "\Ton2.mp3") Then
    $sound2 = @ScriptDir & "\Ton2.mp3"
    ElseIf FileExists(@WindowsDir & "\Media\Windows XP-kritischer Fehler.wav") Then
    $sound2 = @WindowsDir & "\Media\Windows XP-kritischer Fehler.wav"
    ElseIf FileExists(@WindowsDir & "\Media\chord.wav") Then
    $sound2 = @WindowsDir & "\Media\chord.wav"
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Dim $mendat
    Dim $menend
    Dim $menopt
    Dim $meneinst
    Dim $menhelp
    Dim $menuber
    Dim $prog
    Dim $s1lab[4]
    Dim $s2lab[4]
    Dim $ulab[3]
    Dim $picid[3]
    Dim $name1 = "Spielername 1"
    Dim $name2 = "Spielername 2"
    Dim $zmode = False
    Dim $fok = 2
    Dim $fokid
    Dim $keystate = False
    Dim $_zmode
    Dim $childstart

    [/autoit] [autoit][/autoit] [autoit]

    Dim $pic1
    If FileExists(@ScriptDir & "\bild1.jpg") Then
    $pic1 = @ScriptDir & "\bild1.jpg"
    ElseIf FileExists(@ScriptDir & "\bild1.bmp") Then
    $pic1 = @ScriptDir & "\bild1.bmp"
    ElseIf FileExists(@ScriptDir & "\bild1.gif") Then
    $pic1 = @ScriptDir & "\bild1.gif"
    EndIf
    Dim $pic2
    If FileExists(@ScriptDir & "\bild2.jpg") Then
    $pic2 = @ScriptDir & "\bild2.jpg"
    ElseIf FileExists(@ScriptDir & "\bild2.bmp") Then
    $pic2 = @ScriptDir & "\bild2.bmp"
    ElseIf FileExists(@ScriptDir & "\bild2.gif") Then
    $pic2 = @ScriptDir & "\bild2.gif"
    EndIf
    Dim $punkte1 = 0
    Dim $punkte2 = 0

    [/autoit] [autoit][/autoit] [autoit]

    Dim $zeit = 35

    [/autoit] [autoit][/autoit] [autoit]

    Dim $ogui
    Dim $olab[11]
    Dim $oin[11]
    Dim $obutt[2]

    [/autoit] [autoit][/autoit] [autoit]

    Dim $hgui
    #endregion Variablen
    #region Erstellen der GUI

    [/autoit] [autoit][/autoit] [autoit]

    $GUI = GUICreate("Billiard Spielverwalter 14/1", 900, 600, -1, -1, $WS_MAXIMIZEBOX + $WS_MINIMIZEBOX)
    GUISetOnEvent($GUI_EVENT_CLOSE, "pclose")
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "minimize")
    GUISetOnEvent($GUI_EVENT_RESTORE, "restore")
    GUISetBkColor(0x002000, $GUI)
    GUICtrlSetDefColor(0xFFFFFF, $GUI)
    GUISetFont(50)

    [/autoit] [autoit][/autoit] [autoit]

    ;Menüleiste
    $mendat = GUICtrlCreateMenu("Datei")
    $menend = GUICtrlCreateMenuItem("Beenden [ALT+F4]", $mendat)
    GUICtrlSetOnEvent($menend, "pclose")
    $menopt = GUICtrlCreateMenu("Optionen")
    $meneinst = GUICtrlCreateMenuItem("Einstellungen [Alt+O]", $menopt)
    GUICtrlSetOnEvent($meneinst, "optionen")
    $menhelp = GUICtrlCreateMenu("Hilfe")
    $menuber = GUICtrlCreateMenuItem("Hilfe [F1]", $menhelp)
    GUICtrlSetOnEvent($menuber, "help")

    [/autoit] [autoit][/autoit] [autoit]

    ;Spieler 1
    $s1lab[1] = GUICtrlCreateLabel("Spieler 1", 87, 30, 126, 40)
    GUICtrlSetFont($s1lab[1], 25)
    $picid[1] = GUICtrlCreatePic($pic1, 50, 100, 200, 250)
    $s1lab[2] = GUICtrlCreateLabel($name1, 15, 390, 270, 50, $SS_CENTER)
    GUICtrlSetFont($s1lab[2], 25)
    $s1lab[3] = GUICtrlCreateInput($punkte1, 75, 460, 170, 65, $SS_CENTER)
    GUICtrlSetColor($s1lab[3], 0x000000)
    ;Label ( $punkte1, 75, 460, 150, 65, $SS_CENTER)
    ;Uhr
    $ulab[1] = GUICtrlCreateLabel($zeit, 300 + 50, 120, 200, 160)
    GUICtrlSetFont($ulab[1], 125)
    $prog = GUICtrlCreateProgress(300 - 20, 325, 340, 45)
    GUICtrlSetData($prog, $zeit * (5 / 3))

    [/autoit] [autoit][/autoit] [autoit]

    ;Spieler 2
    $s2lab[1] = GUICtrlCreateLabel("Spieler 2", 600 + 87, 30, 126, 40)
    GUICtrlSetFont($s2lab[1], 25)
    $picid[2] = GUICtrlCreatePic($pic2, 600 + 50, 100, 200, 250)
    $s2lab[2] = GUICtrlCreateLabel($name2, 600 + 15, 390, 270, 50, $SS_CENTER)
    GUICtrlSetFont($s2lab[2], 25)
    $s2lab[3] = GUICtrlCreateInput($punkte1, 600 + 75, 460, 170, 65, $SS_CENTER)
    GUICtrlSetColor($s2lab[3], 0x000000)

    [/autoit] [autoit][/autoit] [autoit]

    #endregion Erstellen der GUI
    #endregion

    [/autoit] [autoit][/autoit] [autoit]

    #region Hauptfunktion

    [/autoit] [autoit][/autoit] [autoit]

    keystate()

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    change()

    [/autoit] [autoit][/autoit] [autoit]

    ;optionen ()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(999)
    If $zmode = True Then
    If $zeit > 0 Then
    zeitdekr()
    EndIf
    EndIf
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    #endregion Hauptfunktion
    #endregion

    [/autoit] [autoit][/autoit] [autoit]

    #region Funktionen

    [/autoit] [autoit][/autoit] [autoit]

    Func pclose()
    GUIDelete($GUI)
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func minimize()
    GUISetState(@SW_MINIMIZE)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func restore()
    GUISetState(@SW_RESTORE)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func keystate()
    If $keystate = False Then
    HotKeySet("{Enter}", "startstop")
    HotKeySet("{+}", "_add")
    HotKeySet("{NUMPADADD}", "_add")
    HotKeySet("{TAB}", "change")
    HotKeySet("{space}", "reset")
    HotKeySet("^o", "optionen")
    HotKeySet("{F1}", "help")
    HotKeySet("^h", "help")
    ;$keystate = True
    ElseIf $keystate = True Then
    HotKeySet("{Enter}")
    HotKeySet("{+}")
    HotKeySet("{NUMPADADD}")
    HotKeySet("{TAB}")
    HotKeySet("{space}")
    HotKeySet("^o")
    HotKeySet("{F1}")
    HotKeySet("^h")
    ;$keystate = False
    EndIf
    If $keystate = True Then
    $keystate = False
    ElseIf $keystate = False Then
    $keystate = True
    EndIf

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func zeitdekr()
    ;If $zeit>0 Then
    $zeit = $zeit - 1
    GUICtrlSetData($prog, $zeit * (5 / 3))
    GUICtrlSetData($ulab[1], $zeit)
    ;EndIf
    If $zeit = 10 Then
    SoundPlay($sound1, 0)
    ElseIf $zeit <= 5 And $zeit > 0 Then
    SoundPlay($sound1, 0)
    ElseIf $zeit = 0 Then
    SoundPlay($sound2, 0)
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func childtime($childstart)
    $_zmode = $zmode
    If $childstart = True Then
    $zmode = False
    ElseIf $childstart = False Then
    $zmode = $_zmode
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func reset()
    $zeit = 36
    GUICtrlSetData($ulab[1], 35)
    GUICtrlSetData($prog, 35 * (5 / 3))
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _add()
    $zeit = $zeit + 25
    GUICtrlSetData($ulab[1], $zeit)
    GUICtrlSetData($prog, $zeit * (5 / 3))
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func startstop()
    If $zmode = True Then
    $zmode = False
    ElseIf $zmode = False Then
    $zmode = True
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func change()
    If $fok = 2 Then
    GUICtrlDelete($fokid)
    $fokid = GUICtrlCreateGroup("", 25, -20, 250, 560)
    GUICtrlSetState($s1lab[3], $GUI_FOCUS)
    $fok = 1
    ElseIf $fok = 1 Then
    GUICtrlDelete($fokid)
    $fokid = GUICtrlCreateGroup("", 600 + 25, -20, 250, 560)
    GUICtrlSetState($s2lab[3], $GUI_FOCUS)
    $fok = 2
    EndIf
    reset()
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    #region Optionen

    [/autoit] [autoit][/autoit] [autoit]

    Func Optionen()
    keystate()
    childtime(True)
    $ogui = GUICreate("Billiard Spielverwalter 14/1 - Optionen", 600, 260, -1, -1, $WS_CHILD + $WS_MINIMIZEBOX + $WS_CAPTION + $WS_POPUP + $WS_SYSMENU, -1, $GUI)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Oclose")

    ;Dim $

    GUICtrlCreateGroup("Spieler1", 20, 20, 560, 95)
    GUICtrlCreateLabel("Spielername:", 30, 47, 60, 20)
    $oin[1] = GUICtrlCreateInput($name1, 95, 45, 200, 20)
    GUICtrlCreateLabel("Bild:", 30, 77, 30, 20)
    $oin[2] = GUICtrlCreateInput($pic1, 95, 75, 365, 20)
    $obutt[0] = GUICtrlCreateButton("Durchsuchen", 470, 75, 100, 20)
    GUICtrlSetOnEvent($obutt[0], "Obutt1")
    GUICtrlCreateGroup("Spieler2", 20, 120 + 20, 560, 95)
    GUICtrlCreateLabel("Spielername:", 30, 120 + 47, 60, 20)
    $oin[3] = GUICtrlCreateInput($name2, 95, 120 + 45, 200, 20)
    GUICtrlCreateLabel("Bild:", 30, 120 + 77, 30, 20)
    $oin[4] = GUICtrlCreateInput($pic2, 95, 120 + 75, 365, 20)
    $obutt[1] = GUICtrlCreateButton("Durchsuchen", 470, 120 + 75, 100, 20)
    GUICtrlSetOnEvent($obutt[1], "Obutt2")
    GUISetState(@SW_SHOW)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Obutt1()
    $pic1 = FileOpenDialog("Billiard Spieleverwalter 14/1 - Spieler 1 Foto", "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}", "Bilder (*.bmp;*.jpg;*.gif)", 1, "bild1.jpg")
    GUICtrlSetData($oin[2], $pic1)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Obutt2()
    $pic2 = FileOpenDialog("Billiard Spieleverwalter 14/1 - Spieler 2 Foto", "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}", "Bilder (*.bmp;*.jpg;*.gif)", 1, "bild2.jpg")
    GUICtrlSetData($oin[4], $pic2)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Oclose()
    $name1 = GUICtrlRead($oin[1])
    GUICtrlSetData($s1lab[2], $name1)
    $pic1 = GUICtrlRead($oin[2])
    GUICtrlSetImage($picid[1], $pic1)
    $name2 = GUICtrlRead($oin[3])
    GUICtrlSetData($s2lab[2], $name2)
    $pic2 = GUICtrlRead($oin[4])
    GUICtrlSetImage($picid[2], $pic2)
    keystate()
    childtime(False)
    GUIDelete($ogui)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    #endregion Optionen

    [/autoit] [autoit][/autoit] [autoit]

    #region Hilfe

    [/autoit] [autoit][/autoit] [autoit]

    Func help()
    keystate()
    childtime(True)
    $hgui = GUICreate("Billiard Spielverwalter 14/1 - Hilfe", 400, 450, -1, -1, $WS_CHILD + $WS_MINIMIZEBOX + $WS_CAPTION + $WS_POPUP + $WS_SYSMENU, -1, $GUI)
    GUISetOnEvent($GUI_EVENT_CLOSE, "hclose")
    GUICtrlCreateTab(20, 20, 360, 410)
    GUICtrlCreateTabItem("Generell")
    GUICtrlCreateLabel("Billiard Spielverwalter 14/1 ist eine kostenlose Anwendung zum Anzeigen des Punktestandes in einem 14/1 Spiel mit zwei Personen, sowie dem Anzeigen des Timeouts für einen Stoß.", 35, 50, 330, 40)
    GUICtrlCreateTabItem("Über")
    GUICtrlCreateLabel("Version : 1.0", 35, 50, -1, 20)
    GUICtrlCreateLabel("Autor : Stefan Thomas", 35, 70, 175, 20)
    GUICtrlCreateLabel("E-mail : stefan.thomas@famthomas.net", 35, 90, 200, 20)
    GUICtrlCreateTabItem("Spielerdaten")
    GUICtrlCreateLabel("1: Spielernamen", 35, 50, 135, 20)
    GUICtrlCreateLabel("Unter 'Optionen' können zwei Spielernamen angegeben werden, diese werden bei Verlassen des 'Optionen'-Dialoges automatisch übernommen.", 35, 70, 330, 50)
    GUICtrlCreateLabel("2: Spieler-Bilder:", 35, 125, 330, 20)
    GUICtrlCreateLabel("Im 'Optionen'-Dialog können zwei Bilder angegeben werden, diese müssen als *.bmp, *.jpg oder als nichtanimierts *.gif abgespeichert sein." & @CRLF & "Alternativ können die Bilder mit den Name 'bild1' und 'bild2' in den oben genannten Dateiarten im Verzeichnis in dem dieses Programm läuft abgespeichert werden. Dies muss jedoch vor dem Start des Programms geschehen.", 35, 145, 330, 95)
    GUICtrlCreateTabItem("Signaltöne")
    GUICtrlCreateLabel("1: Noch 10, bzw weniger als 5 Sekunden für den aktuellen Stoß:", 35, 50, 330, 20)
    GUICtrlCreateLabel("Wenn nur noch 10 Sekunden für den aktuellen stoß übrig sind, sowie wenn weniger als 5 sekunden für den aktuellen Stoß übrig sind , wird ein Signalton abgespielt. Dies ist Standartmäßig ein Systemton, kann jedoch durch das Speichern der gewünschten Tondatei im Verzeichnis, in dem dieses Programm läuft, geändert werden." & @CRLF & " Der Ton muss als .wav oder .mp3 mit den Namen 'Ton1' (Bei 10 bzw. 5 oder weniger Sekunden)vor Programmstart gespeichert werden.", 35, 70, 330, 95)
    GUICtrlCreateLabel("2: Zeit vorbei:", 35, 175, 330, 20)
    GUICtrlCreateLabel("Wenn die Zeit vorbei ist, wird ein anderer Ton abgespielt, ebenfalls normalerweise ein Systemton. Wenn eine '.wav' oder '.mp3' Datei des Namens 'ton2' in dem Verzeichnis, in dem dieses Programm läuft, existiert, wird diese verwendet.", 35, 195, 330, 55)
    GUICtrlCreateTabItem("Tastaturkürzel")
    GUICtrlCreateLabel("Optionen : 'STRG'+'O'", 35, 60, 330, 20)
    GUICtrlCreateLabel("Hilfe : 'F1' oder 'STRG'+'H'", 35, 80, 330, 20)
    GUICtrlCreateLabel("Zeit zurücksetzen : 'Leertaste'", 35, 100, 330, 20)
    GUICtrlCreateLabel("25s addieren : '+'", 35, 120, 330, 20)
    GUICtrlCreateLabel("Spielerwechsel : 'Tab'", 35, 140, 330, 20)
    GUICtrlCreateLabel(" Uhr starten/stoppen : 'Enter'", 35, 160, 330, 20)

    GUISetState(@SW_SHOW)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func hclose()
    childtime(False)
    keystate()
    GUIDelete($hgui)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    #endregion Hilfe

    [/autoit] [autoit][/autoit] [autoit]

    #endregion Funktionen

    [/autoit]

    MFG inventor

    wenn's weitere Fragen gibt -> PN
    wenn da keine Antwort kommt, überdenk deine Frage noch mal

  • Kannst du das Control nicht per GUICtrlSetState verstecken und später wieder anzeigen? Da ist kein löschen nötig.