Что нового

Динамическое назначение процедур на кнопки

eus_deus

Новичок
Сообщения
118
Репутация
0
Привет!
На форме в цикле создаются кнопки. Количество заранее не определено, зависит от количества пар в файле. Выглядит так:
Код:
For $b=1 to $Troll[0][0]
$Label_tr[$b]= GUICtrlCreateLabel($Tr_p[$b], 268, $b*32+88, 130, 25)
GUICtrlSetFont($Label_tr[$b], 10, 600, 0, "MS Sans Serif")
$Button_tr[$b] = GUICtrlCreateButton("", 415, $b*32+88, 25, 25, $BS_ICON)
GUICtrlSetImage(-1,@ScriptFullPath,201,0)
$Input_tr[$b] = GUICtrlCreateInput("", 445, $b*32+88, 50, 25)
GUICtrlSetState(-1,$gui_disable)
Next

Интересует, как назначить процедуры на кнопки динамически, по количеству созданных кнопок. Ранее, при фиксированом количестве это выглядело так:
Код:
Case $Button_tr[1]
_tr(1)
Case $Button_tr[2]
_tr(2)
Case $Button_tr[3]
_tr(3)
Case $Button_tr[4]
_tr(4)
Case $Button_tr[5]
_tr(5)
Case $Button_tr[6]
_tr(6)
Case $Button_tr[7]
_tr(7)
Case $Button_tr[8]
_tr(8)
Case $Button_tr[9]
_tr(9)
Case $Button_tr[10]
_tr(10)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
eus_deus,
Что делает функция _tr($i)? И какое минимальное - максимальное количество кнопок?
 
Автор
E

eus_deus

Новичок
Сообщения
118
Репутация
0
madmasles, отвечаю на поставленные вопросы.
Функция _tr($i) имеет вид:
Код:
Func __tr($N)
$Tr_date=IniRead($stat, "Date", "Tr", "")
   If $Tr_date = _NowCalcDate() then
     MsgBox(4096,"Ошибка","Операция невозможна!")
   else 
     GUICtrlSetData($Input_tr[$N],GUICtrlRead($Input_tr[$N])+1)
     GUICtrlSetBkColor($Input_tr[$N],0xFFFFFF)
     GUICtrlSetBkColor($Input_tr[$N+1],0xFF0000)
     Iniwrite($stat,"Tr",$Tr[$N][0],GUICtrlRead($Input_tr[$N]))  
     Iniwrite($stat,"Date","Tr", _NowCalcDate())
   EndIf
EndFunc


Переменные в другом файле объявлены так (может и неправильно, но ошибки не выдают):
Код:
Global $Tr=IniReadSection($stat ,"Tr")
Global $Label_tr[$Tr[0][0]+1]=[$Tr[0][0]]
Global $Button_tr[$Tr[0][0]+1]=[$Tr[0][0]]
Global $Input_tr[$Tr[0][0]+1]=[$Tr[0][0]]

По второму вопросу - всех элементов может быть не более 10 - 10 меток, кнопок и полей. Ну и минимум не менее 4
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Код:
$iMsg = GuiGetMsg()
For $Idx = 1 To UBound( $Button_tr ) - 1 Step 1
    If $Button_tr[$Idx] And $iMsg = $Button_tr[$Idx] Then
        _tr($Idx)
        ExitLoop
    EndIf
Next
 
Автор
E

eus_deus

Новичок
Сообщения
118
Репутация
0
firex, сейчас попробуем приспособить. Цикл пробовал, но я его вставлял под Switch, а у вас по другому...


Добавлено:
Сообщение автоматически объединено:

Считаю тему решенной. Буду знать еще немножко.Всем спасибо!
 
Верх