Что нового

Формирование меню из переменных

r35p3ct

Продвинутый
Сообщения
228
Репутация
60
Помогите корректно сформировать меню, что типа этого:
Код:
global $m=TrayCreateMenu("+")
$y1=TrayCreateItem("Подменю1",men('A'),$m)
$y2=TrayCreateItem("Подменю2",men('B'),$m)
$y3=TrayCreateItem("Подменю3",men('B'),$m)

func men($men)
	$men=TrayCreateMenu($men,$menu)
	Return $men
EndFunc

Создается 2 меню "B",а нужно чтобы было одно:
Код:
+ >A >Подменю1
+ >B >Подменю2 и Подменю3
Соотв. переменные "A" и "B" считываются из файла и заранее не известны.
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Я немного по-другому...
Но что-то получилось...
Код:
; НАЧАЛО

$m=TrayCreateMenu("+")
$x11=TrayCreateMenu("A",$m)
$x12=TrayCreateMenu("B",$m)
$x21=TrayCreateMenu("Подменю1",$x11)
$x22=TrayCreateItem("Подменю2",$x12)
$x=TrayCreateItem("Подменю3",$x21)

while true
sleep(100)
wend

; КОНЕЦ


А названия пунктов "Подменю1", "Подменю2", "Подменю3" тоже не известны?
 
Автор
R

r35p3ct

Продвинутый
Сообщения
228
Репутация
60
snoitaleR [?]
А названия пунктов "Подменю1", "Подменю2", "Подменю3" тоже не известны?
нет, из файла считывает порядка 30 строк формата:
Код:
Подменю1>А>Необязательный парметр
Подменю2>B>Необязательный парметр
Подменю3>B>Необязательный парметр
и т. д.
дальше регэкспом разбивается на переменные, пункты подменю вручную я могу сам рассортировать в "А" или "B", а хочется чтобы это происходило автоматом в зависимости от состава строки
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Вот приблизительно так :
Код:
Opt("TrayMenuMode",1) 
Global $a
$hMenu   = TrayCreateMenu("+")
$a=men('A')
$b=men('B')
$exititem       = TrayCreateItem("Exit")

TraySetState()

While 1
    $msg = TrayGetMsg()
   Select
		Case $msg = $a
            Msgbox(64,"","Нажато меню A")
        Case $msg = $b
            Msgbox(64,"","Нажато подменю B")
        Case $msg = $exititem
            ExitLoop
    EndSelect
WEnd

func men($men)
    If $a<>0 Then 
		$e=TrayCreateMenu($men,$hMenu)
		$d=TrayCreateItem($men,$e)
	Else
		$d=TrayCreateItem($men,$hMenu)
	EndIf
	Return $d
EndFunc
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Вот вариант считывания меню из INI-файла:
Код:
; НАЧАЛО

 $INIFILE="2.txt"

 $ANAME=IniReadSectionNames($INIFILE)

 For $CNAME=1 To UBound($ANAME)-1

  $AMENU=IniReadSection($INIFILE,$ANAME[$CNAME])

  For $COUNTER=1 To UBound($AMENU)-1
   if StringLeft($AMENU[$COUNTER][0],1)="m" then
    if $ANAME[$CNAME]="Menu" then
     Assign($AMENU[$COUNTER][0],TrayCreateMenu($AMENU[$COUNTER][1]))
    else
     Assign($AMENU[$COUNTER][0],TrayCreateMenu($AMENU[$COUNTER][1],Eval($ANAME[$CNAME])))
    endif
   elseif StringLeft($AMENU[$COUNTER][0],1)="p" then
    if $ANAME[$CNAME]="Menu" then
     Assign($AMENU[$COUNTER][0],TrayCreateMenu($AMENU[$COUNTER][1]))
    else
     Assign($AMENU[$COUNTER][0],TrayCreateItem($AMENU[$COUNTER][1],Eval($ANAME[$CNAME])))
    endif
   endif
  Next

 Next

 while true
  sleep(100)
 wend

; КОНЕЦ


Содержимое файла 2.txt

Код:
[Menu]
m1=Menu1
m2=Menu2
m3=Menu3

[m1]
m11=Меню11
p12=Пункт12

[m2]
m21=Меню12
p22=Пункт22
 
Автор
R

r35p3ct

Продвинутый
Сообщения
228
Репутация
60
т.к. Пункты меню известны (в данный момент), то задачу решил так:
Код:
$menu=TrayCreateMenu("+")
$m1=TrayCreateMenu("CPE",$menu)
$m2=TrayCreateMenu("Другое",$menu)
func men($pmen,$men)
	Select
	Case $men='CPE'
		Return  TrayCreateItem($pmen,$m1,$men)
	Case $men='Другое'
		Return  TrayCreateItem($pmen,$m2,$men)
	EndSelect	
EndFunc

men('Подменю2','CPE')
men('Подменю1','CPE')
men('Подменю3','Другое')


snoitaleR, спасибо за вариант.
 
Верх