Ich habe mir mal gedacht ich schreibe mal ein paar Funktionen, die es ermöglichen bei GUIOnEvent und GUICtrlOnEvent Parameter mitzugeben.
Die Funktionen "GUICtrlSetOnEventEx" und "GUISetOnEventEx" welche fast genauso wie die Funktionen GUICtrlSetOnEvent und GUISetOnEvent funktionieren nur, dass sie einen weiteren Parameter haben in den ein Array mit Parametern für die aufzurufende Funktion reinkommt.
Das Array muss so aufgebaut sein:
Array[0] = Erster Parameter
Array[1] = Zweiter Parameter
Array[2] = Dritter Parameter
usw...
Die Funktionen werden so aufgerufen:
[autoit]
GUISetOnEventEx(ID,"Funktion",$aParameter)
oder
GUICtrlSetOnEventEx(ID,"Funktion",$aParameter)
Bei der Funktion GUISetOnEventEx fehlt noch das Winhandle, aber dass kommt später, denn ich werde eine ganze weile kein Internet mehr haben und dachte mir ich stelle die Funktion noch rein bevor ich morgen wegfahre, meistens brauch man eh nur ein Fenster und wie oft muss man bei Systembuttons Parameter mitgeben.
Bevor ich es vergesse, hier noch die Funktionen:
Spoiler anzeigen
Global $oOnEventDict = ObjCreate("Scripting.Dictionary")
; #FUNCTION# ====================================================================================================================
; Name...........: GUICtrlSetOnEventEx
; Description ...: Ruft eine benutzerdefinierte Funktion mit Parametern auf, wenn das GUI-Control angeklickt wurde.
; Syntax.........: GUICtrlSetOnEventEx($controlID,[$Function,[$aParameter]])
; Parameters ....: $controlID - ID des Controls
; $Function - Der Name der Funktion als String
; $aParameter - Die Parameter als eindimensionales Array
; Author ........: Zeitriss
; ===============================================================================================================================
Func GUICtrlSetOnEventEx($controlID,$Function = Default,$aParameter = Default)
If $Function <> Default Then
Local $Data[2]
If $aParameter = Default Then
$Data[1] = ""
Else
ReDim $aParameter[Ubound($aParameter)+1]
For $i = Ubound($aParameter)-2 to 0 step -1
$aParameter[$i+1] = $aParameter[$i]
Next
$aParameter[0] = "CallArgArray"
$Data[1] = $aParameter
EndIf
$Data[0] = $Function
If $oOnEventDict.Contains (String($controlID)) Then $oOnEventDict.remove (String($controlID))
$oOnEventDict.add (String($controlID),$Data)
GUICtrlSetOnEvent($controlID,"GUICtrlSetOnEventBuffer")
Else
If $oOnEventDict.Contains (String($controlID)) Then $oOnEventDict.remove (String($controlID))
EndIf
EndFunc
; #FUNCTION# ====================================================================================================================
; Name...........: GUICtrlSetOnEventEx
; Description ...: Ruft eine benutzerdefinierte Funktion mit Parametern auf, wenn ein Systembutton geklickt wurde.
; Syntax.........: GUICtrlSetOnEventEx($controlID,[$Function,[$aParameter]])
; Parameters ....: $controlID - ID des Systembuttons
; $Function - Der Name der Funktion als String
; $aParameter - Die Parameter als eindimensionales Array
; Author ........: Zeitriss
; ===============================================================================================================================
Func GUISetOnEventEx($controlID,$Function = Default,$aParameter = Default)
If $Function <> Default Then
Local $Data[2]
If $aParameter = Default Then
$Data[1] = ""
Else
ReDim $aParameter[Ubound($aParameter)+1]
For $i = Ubound($aParameter)-2 to 0 step -1
$aParameter[$i+1] = $aParameter[$i]
Next
$aParameter[0] = "CallArgArray"
$Data[1] = $aParameter
EndIf
$Data[0] = $Function
If $oOnEventDict.Exists (String($controlID)) Then $oOnEventDict.remove (String($controlID))
$oOnEventDict.add (String($controlID),$Data)
GUISetOnEvent($controlID,"GUICtrlSetOnEventBuffer")
Else
If $oOnEventDict.Exists (String($controlID)) Then $oOnEventDict.remove (String($controlID))
EndIf
EndFunc
Func GUICtrlSetOnEventBuffer()
If Not $oOnEventDict.Exists(String(@GUI_CtrlId)) Then Return
Local $Data = $oOnEventDict(String(@GUI_CtrlId))
Call($Data[0],$Data[1])
EndFunc
[Edit:] Und das Beispiel welches ich ganz vergessen hatte gestern
Beispiel
#include<GUICtrlSetOnEvent.au3>
Opt("GUIOnEventMode", 1)
$hGUI = GUICreate("GUI",500,500,-1,-1)
For $i = 1 to 3
Local $Parameter[1] = [$i]
GUICtrlSetOnEventEx(GUICtrlCreateButton("Button "&$i,10+100*$i,100,50,22),"ButtonKlick",$Parameter)
Next
Local $Parameter[2]
$Parameter[0] = 16
$Parameter[1] = "Fenster wurde geschlossen!"
GUISetOnEventEx(-3,"Fenster_Schliessen",$Parameter)
GUISetState(1,$hGUI)
While 1
sleep(2000)
WEnd
Func ButtonKlick($ButtonId)
msgbox(0,"","Button "&$ButtonId&" wurde gedrückt")
EndFunc
Func Fenster_Schliessen($flag,$sString)
msgbox($flag,"",$sString)
exit
EndFunc
Sinn macht es aber eigentlich nur bei vielen Buttons, welche ähnliche Funktionen haben, dann brauch man nicht für jeden eine eigene Funktion.
Ich hoffe die Funktionen gibt es noch nicht irgendwo in einer UDF versteckt.
mfg Zeitriss