Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для alexfinik

Новый участник


Сообщения: 43
Благодарности: 0

Профиль | Отправить PM | Цитировать


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).

-------
Спасибо за помощь!


Отправлено: 13:21, 25-10-2013 | #644