K.A.V., Первую часть читал. Сидел ночью часа полтора и построчно "проходил" код, записывал как изменяются переменные. Забавно.
Как ни странно Код заработал с первого раза после проверки. Выложу ради интереса кусок. Правда "завести" массивы так и не вышло. Пока не разобрался почему, но, в любом случае, массивы тут нафиг не нужны оказались/
Код:
Function nsRkeeperIni
;!insertmacro var_message
${if} $NumCash > 0
Goto CreateTest0
${endif}
${IpPortMid_ar->Init}
${MID_ar->Init}
${RefServerMid_ar->Init}
${IPMidSrv_ar->Init}
${Station_ar->Init}
StrCpy $ini ".ini"
StrCpy $R6 "1"
StrCpy $R7 "1"
;!insertmacro var_message
StrCpy $NumMid "4"
StartTest0:
StrCpy $NumMidFlag "1" ;флаг входа в цикл NumMid
nsDialogs::Create 1018
Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
${NSD_CreateLabel} 0 0 100% 12u "Создаем Rkeeper.ini - Введите параметры ресторана ниже"
Pop $Label1
${NSD_CreateLabel} 0 13u 100% 12u "Имя кассового сервера:"
Pop $Label2
${NSD_CreateText} 0 25u 100% 13u "TEST_MIDSERVER" ;задаем имя клиента
Pop $MID
${NSD_CreateLabel} 0 38u 100% 12u "Кассовый сервер подсоединяестся к серверу:"
Pop $Label3
${NSD_CreateText} 0 50u 100% 13u "TEST_RK7SRV" ;задаем имя сервера к которому подсоединяемся
Pop $RefServerMid
${NSD_CreateLabel} 0 63u 100% 12u "IP-адрес и порт"
Pop $Label4
${NSD_CreateText} 0 75u 100% 13u "127.0.0.1:3669" ;
Pop $IpPortMid
${NSD_CreateLabel} 0 88u 100% 12u "Количество касс на данном кассовом сервере (1..50)"
Pop $Label25
${NSD_CreateText} 0 100u 100% 13u "1" ;
Pop $NumCash
;IntOp $R5 $NumCash -1
;MessageBox MB_OK "NumCash=$NumCash $\n MID=$MID $\n IpPortMid=$IpPortMid"
;!insertmacro var_message
;Задаем количество касс на кассовом сервере
;StrCpy $Num1 $NumCash ;зачем-то надо копировать. С Numcash не работает
nsDialogs::Show
${if} $R6 <= $NumMid
${andif} $NumCash == 0
Goto FinishTest0
${endif}
CreateTest0:
${if} $NumCash > 0
nsDialogs::Create 1018
Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
${NSD_CreateLabel} 0 0 100% 12u "Создаем wincash.ini - введите параметры кассовой станции"
Pop $Label8
${NSD_CreateLabel} 0 13u 100% 12u "Имя кассовой станции:"
Pop $Label9
${NSD_CreateText} 0 25u 100% 13u "TEST_ST01" ;задаем имя кассовой станции
Pop $Station
${NSD_CreateLabel} 0 38u 100% 12u "IP-адрес кассового сервера:"
Pop $Label10
${NSD_CreateText} 0 50u 100% 13u "127.0.0.1" ;
Pop $IPMidSrv
StrCpy $NumCashFlag "1" ;флаг разрешения входа в цикл NumCash
${endif}
nsDialogs::Show
IntOp $NumCash $NumCash - 1
;MessageBox MB_OK "Уменьшаю NumCash на 1 $\n Теперь NumCash=$NumCash"
FinishTest0:
${If} $NumCash == 0
IntOp $R6 $R6 + 1
;MessageBox MB_OK "Увеличиваю R6 на 1 $\n Теперь R6=$R6 $\n NumCash=$NumCash"
StrCpy $NumCashFlag "0" ;флаг запрета входа в цикл NumCash
${endif}
${if} $NumCash > 0
Goto CreateTest0
${endif}
${If} $R6 <= $NumMid
;${andif} $NumCash > 0
Goto StartTest0
${endif}
FunctionEnd
;работа с массивами тут необходима
Function nsRkeeperIniLeave
${if} $NumMidFlag == 1
${NSD_GetText} $NumCash $NumCash
${NSD_GetText} $MID $MID
${NSD_GetText} $RefServerMid $RefServerMid
${NSD_GetText} $IpPortMid $IpPortMid
;${NSD_GetText} $Num1 $Num1
${MID_ar->Write} $R6 "$MID"
${MID_ar->Read} $R2 $R6
${RefServerMid_ar->Write} $R6 "$RefServerMid"
${RefServerMid_ar->Read} $R3 $R6
${IpPortMid_ar->Write} $R6 "$IpPortMid"
${IpPortMid_ar->Read} $R4 $R6
!insertmacro var_message
!insertmacro MakeRkeeperIni
StrCpy $NumMidFlag "0" ;флаг выхода в цикл NumMid
StrCpy $NumCashFlag "0" ;флаг запрета входа в цикл NumCash - в принципе тут лишний
${endif}
${if} $NumCashFlag == 0
${orif} $NumCashFlag == ""
Goto FinishTest1
${endif}
${if} $NumCash < 1
${OrIf} $NumCash > 50
;MessageBox MB_OK "Задано слишком маленькое или большое количество станций $\n либо задано некорректное NumCash=$NumCash $\n $\n R6<NumCash ($R6<$NumCash) $\n Перезапустите инсталлятор"
${else}
;MessageBox MB_OK "На кассовой станции №$R6 $NumCash станций $\n R7=$R7"
${NSD_GetText} $Station $Station
;${NSD_GetText} $RefServer2 $RefServer2
${NSD_GetText} $IPMidSrv $IPMidSrv
${Station_ar->Write} $R7 "$Station"
${Station_ar->Read} $2 $R7
${IPMidSrv_ar->Write} $R7 "$IPMidSrv"
${IPMidSrv_ar->Read} $3 $R7
${NSD_GetText} $2 $2
${NSD_GetText} $3 $3
!insertmacro var_message
!insertmacro WinCashIniBat
IntOp $R7 $R7 + 1
${endif}
/*
${if} $NumCash
${if} $R6 < $NumMid
Goto FinishTest1
${endif}
*/
;;Íå îáÿçàòåëüíî, íî åñëè çàäàòü áóäåò êîííåêòèòüñÿ áûñòðåå, òî æå äëÿ êàññû
;;Èíîãäà íåîáõîäèìî (åñëè íå ïðîõîäÿò broadcast ñîîáùåíèÿ)
;;TEST_RK7SRV=127.0.0.1:3669
;MessageBox MB_OK "Внизу Numcash=$Numcash"
/*
*/
FinishTest1:
FunctionEnd
Форум читал - Ну страниц 50-80, наверное. Интересно
. Не помню, кажется первую часть читал. Некоторые вещи просто сносят крышу и вызывают вопросы "как это работает??", но практически для меня неважны были всё равно.
KAV, жалко ваших потраченных усилий, когда сам разобрался... Но спасибо. У вас способ короче намного, конечно. Пока в код досконально не всматривался. Но я так понимаю, что вы предлагаете перехватить управление кнопкой
Next. На будущее возьму на заметку.
Цитата:
Вопрос: для чего вам 2-ая функция в странице?
|
В макросах вставленных с длинными именами типа rkeeperini и wincashinibat создаются ини-файлы. А в первой функции они задаются. Нерационально вышло
грешу этим, но вышло.
Чай, прошли времени 3.5" и 5" дискет, чтобы заморачиваться размером кода Офигенно доволен! Отказался от циклов по совету
kotkovets в пользу
GoTo (по совету
KAV).