1 (изменено: mtc_err, 2018-03-05 17:06:11)

Тема: AHK: Checkbox

Помогите сделать пожалуйста. Нужно чтобы если в конфиге значение - 1, то работал чат-лог, а если 0, то не работал.

Вот пример кода:


SetTimer, AutoChatLogs, 50 

Gui, set:Add, Checkbox, x5 y49 w162 h15 vcisChekCL, Использовать сhatLogs 

chat := A_MyDocuments "/GTA San Andreas User Files/SAMP/chatlog.txt"

AutoChatLogs: 
if(GUISys.isChekCL) 
{ 
SetTimer, Chat, 50 
} else { 
SetTimer, AutoChatLogs, off 
} 
return 

Chat: 
FileRead, chatlog, % chat 
save(chatlog)
return

2

Re: AHK: Checkbox

В примере, перед меткой "AutoChatLogs", нужен "return", для корректности.
Поле "isChekCL", объекта "GUISys" - нигде не получает значение, следовательно, условие "if(GUISys.isChekCL) {}" - всегда возвращает "false", сразу же выключая таймер "AutoChatLogs".
Так же, нигде не указан путь к "конфигу", который Вы упоминаете и, соответственно, чтение из него настроек.

3

Re: AHK: Checkbox

KusochekDobra напишите пример)

4

Re: AHK: Checkbox

Я так понял главный вопрос это связь между CheckBox`ом и меткой.

Gui,Add, Checkbox,gCh1 vCheckbox1,bla-bla 
gui,show, w150 h50
return

ch1:
gui,submit,nohide
if Checkbox1=1
	SetTimer,Lb,100
else
	SetTimer,Lb,Off
return

Lb:
indx++
ToolTip % indx
return

Esc::ExitApp

5

Re: AHK: Checkbox

Не уверен, что правильно понимаю, что должно быть результатом, но вот такой пример должен сгодиться для ориентира:


#SingleInstance, Force
#NoEnv

SetWorkingDir, A_ScriptDir
SetBatchLines, -1

; >>--++--<<  >>--++--<<
	INI		:= "Data\Config.ini"
	chatLog := "chatlog.txt" ; A_MyDocuments . "\GTA San Andreas User Files\SAMP\chatlog.txt"
	IfNotExist, Data
		FileCreateDir, Data
	IfNotExist,% INI
		FileAppend,,% INI,UTF-16
	IfNotExist,% chatLog
		FileAppend,,% chatLog,UTF-8
; >>--++--<<  >>--++--<<
	IniRead,check_log,% INI,Main,check_log
	if (check_log == "ERROR") {
		check_log := 1
		IniWrite,% check_log,% INI,Main,check_log
	}
	
; >>--++--<<  >>--++--<<

Gui,1: Margin, 5, 5
Gui,1: Add, Checkbox,gCheckToggle Checked%check_log%,Читать лог
Gui,1: Add, Edit,xm y+5 w600 r20 vmy_edit ReadOnly
Gui,1: Show,,Log Reader

logFile  := FileOpen(chatLog,"r","UTF-8")
logLen	 := 0
logData	 := ""
Run,% chatLog
if (check_log) {
	SetTimer,LogReader,100
}
return

CheckToggle:
	IniWrite,% (check_log := !check_log),% INI,Main,check_log
	if (check_log)
		SetTimer,LogReader,100
	else
		SetTimer,LogReader,Off
return
LogReader:
	if (logFile.Length > logLen) {
		logLen := logFile.Length
		logData := logFile.Read()
		GuiControl,Text,my_edit,% logData
	}
return
GuiClose:
	logFile.Close()
	ExitApp

На старте читает настройку "check_log" из "Config.ini", лежащего в папке "Data" и, соответственно, отмечает галочкой чекбокс, или нет, а так же, соответствуя этому, начинает читать файл лога, путь к которому сохранён в "chatLog". При чтении лога, указатель перемещается в конец файла всякий раз, когда в него добавляются новые строки, помещая в "logData" только ту информацию, которая была записана последней. Таким образом исключается необходимость постоянно обрабатывать данные всего файла, что должно существенно ускорить процесс обработки поступающих в лог данных. У Вас, например, каждый раз всё содержимое файла попадает в переменную. Если в работе нужна только обновляющаяся информация, то работа с лог-файлом очень большой длины, будет всё сложнее, с его ростом.

К тому же, чтение происходит не всякий раз при обходе кода по таймеру, как в Вашем примере, а только в том случае, если в файл была произведена запись.

Попробуйте написать что-либо в открытый для теста файл, сохранить результат и посмотреть в GUI скрипта, проделав это несколько раз в таком порядке.

6

Re: AHK: Checkbox

KusochekDobra спасибо большое) Все помогло!