Hey,
ich habe folgendes Skript (vereinfacht):
Spoiler anzeigen
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <WinAPI.au3>
#include <ButtonConstants.au3>
#include <Misc.au3>
global $titel = "Notnagel"
if _Singleton($titel,1) = 0 then exit
Opt("GUICoordMode", 1)
Global $HA = @DesktopHeight -200
Global $VA = @DesktopWidth -800
Global $Farbe = 0x00BFFF
Global $Fokusfarbe = 0x4169E1
#Region HauptGUI
Global $binfo = "Shutdown|Reboot|Standby|Exit" ;Buttonbeschriftung für jeden Button mit | getrennt eingeben -> Anzahl der Beschriftungen bestimmt gleichzeitig die Anzahl der Buttons
Global $abfinfo = StringSplit($binfo, '|')
Global $banzahl = $abfinfo[0]
Global $babstandleft = 50 ;Abstand links und rechts zur HauptGUI
Global $babstandtop = 10 ;Abstand zwischen den Buttons
Global $bwidth = $VA - 2* $babstandleft ;Button Left ausrechnen
Global $bheight = $HA / $banzahl - $babstandtop* ($banzahl +1) / $banzahl ;Button Höhe in Abhängigkeit zur Auflösung ausrechnen
Global $HauptGUI = GUICreate("", $VA, $HA, -1, -1, BitOR($WS_POPUP,$WS_BORDER,$WS_CLIPSIBLINGS))
;Buttons erstellen und Button TOP ausrechnen
For $i = 1 to $banzahl
Global $Button = GUICtrlCreateButton($abfinfo[$i], $babstandleft, $i*$babstandtop+ ($i -1)* $bheight, $bwidth, $bheight,$BS_BITMAP )
GUICtrlSetFont(-1, 20)
GUICtrlSetBkColor(-1, $Farbe)
next
#EndRegion HauptGUI
GUISetState(@SW_SHOW, $HauptGUI)
[/autoit] [autoit][/autoit] [autoit]Global $last_focus = GUICtrlGetHandle(-1)
GUIRegisterMsg($WM_USER, "MY_WM_USER")
While 1
[/autoit] [autoit][/autoit] [autoit]$msg = GUIGetMsg()
switch $msg
case $GUI_EVENT_Close
Exit
case 3
If MsgBox(32 + 4, "Shutdown", "PC wirklich herunterfahren?") = 6 Then Shutdown(1)
case 4
If MsgBox(32 + 4, "Reboot", "PC wirklich neu starten?") = 6 Then Shutdown(2)
case 5
If MsgBox(32 + 4, "Standby", "PC wirklich in den Standby schicken?") = 6 Then Shutdown(32)
case 6
Exit
EndSwitch
WEnd
Func MY_WM_USER($hWnd, $msg, $wParam, $lParam)
Local $Control = WinGetHandle(_WinAPI_GetFocus())
GUICtrlSetBkColor(_WinAPI_GetDlgCtrlID($last_focus), $Farbe)
GUICtrlSetBkColor(_WinAPI_GetDlgCtrlID($Control), $Fokusfarbe)
$last_focus = $Control
EndFunc ;==>_HauptReset
Die Buttons sollen also in Abhängigkeit der Auflösung und ihrer Anzahl erstellt werden. (Hintergrund: Das Skript wird auf verschiedenen HTPC's mit völlig unterschiedlicher Auflösung eingesetzt und ich möchte nicht bei jeder Einrichtung im Skript die Controls zurechtrücken).
Das blöde ist nur, dass die Anzahl der Buttons auch dynamisch ist ... somit muss ich bei jeder Veränderung (z.B. zwischen Button 5 und 6 soll ein weiterer eingefügt werden) die ganze While .. Wend Schleife umschreiben.
Daher die Frage: Ist es möglich die Buttons irgendwie anders ansprechen? Oder hat jemand ein ganz anderes Konzept?
Gruß nuts