1 (изменено: Misamoto, 2014-06-17 00:18:20)

Тема: AHK: Gui, Edit, File, Function, Voodoo

Снова всем здрасьте и спасибо за предоставленную и предоставляемую помощь.
Если вкраце, то я пытаюсь написать себе функцию, которая будет создавать мне контрол Edit, связанный с файлом - при загрузке гуя содержимое Edit становится равно файлу, при изменении содержимого Edit меняется файл.
Саму задачу я осилил:

Gui, Selector:Add, edit, x20  yp+15 r3 w350 vStaticEditVar gEditToFile , 
    FileRead, FileContents, %A_ScriptDir%\ConfigTexts\Default.txt
    GuiControl,, CompServEdit, %FileContents%

EditToFile:
    Gui, Submit, NoHide
    FileDelete, %A_ScriptDir%\ConfigTexts\Default.txt
    FileAppend, %StaticEditVar%, %A_ScriptDir%\ConfigTexts\Default.txt
Return

В виде функции же всё немного сложнее:

AddEditToFile("Selector", "xp", "yp+15", "w350", "r3", "ServComp", "Default")

AddEditToFile(GuiName, GuiXpos, GuiYpos, GuiWidth, GuiRows, DynamicEditVar, FileToEdit)
{
Global
Gui, %GuiName%:Add, edit, %GuiXpos% %GuiYPos% %GuiWidth% %GuiRows% v%DynamicEditVar% gGuiEditSub,
FileRead, FileContents, %A_ScriptDir%\ConfigTexts\%FileToEdit%.txt
GuiControl,, %GuiEditVar%, %FileContents%
EditFile = %FileToEdit%
EditVar = %GuiEditVar%
Return
}

GuiEditSub:
Gui, Submit, NoHide
FileDelete, %A_ScriptDir%\ConfigTexts\%EditFile%.txt
FileAppend, %EditVar%, %A_ScriptDir%\ConfigTexts\%EditFile%.txt
Return

Оно ПОЧТИ работает.
Где-то ошибка в переносе в файл содержимого Edit. При разных вариантах написания файл у меня равен: ServComp, %ServComp%, предыдущему содержанию Edit (которое было до пересоздания Гуя) и черт знает чему еще.

Кроме помощи с этой проблемой также прошу оценить как вообще такая функция будет работать при многократном использовании - это следующий этап теста, после отладки одноразовой работы, но мало ли, вдруг кто заметит какую-нибудь страшную ошибку, которая помешает мне?

2

Re: AHK: Gui, Edit, File, Function, Voodoo

Misamoto, ознакомьтесь с этой темой, отредактируйте заголовок.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Gui, Edit, File, Function, Voodoo

teadrinker пишет:

Misamoto, ознакомьтесь с этой темой, отредактируйте заголовок.

Да, прошу прощения, попутал

4 (изменено: Alectric, 2014-06-17 11:21:59)

Re: AHK: Gui, Edit, File, Function, Voodoo

А где у Вас переход на метку "GuiEditSub:"?

А все... увидил.

Попробуйте не создавать edit в функции, а редактировать его содержимое (controllsettext вроде).

Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

5

Re: AHK: Gui, Edit, File, Function, Voodoo

Alectric пишет:

А где у Вас переход на метку "GuiEditSub:"?

А все... увидил.

Попробуйте не создавать edit в функции, а редактировать его содержимое (controllsettext вроде).

Не совсем понимаю как это относится к моему вопросу. Цель функции - сделать так чтобы каждый раз когда я хочу добавить себе в гуй поле, связанное с файлом, мне приходилось вводить для него переменную и имя файла один раз, а не 5. Если для этого есть способ кроме функции, буду благодарен за лекцию, но насколько я понимаю редактирование содержимого Edit - явно из другой области.

6

Re: AHK: Gui, Edit, File, Function, Voodoo

Что название темы, что суть вопроса - непонятно о чём.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

7

Re: AHK: Gui, Edit, File, Function, Voodoo

serzh82saratov пишет:

Что название темы, что суть вопроса - непонятно о чём.

Ммм... Ну, прошу прощения. Попробуем еще раз.
Название темы - перечисление ключевых слов. "Речь идет о графическом интерфейсе, элементе управления "Поле для ввода", работе с файлами, создании функции и мне нужно немного магии"

Вопрос - как легко и быстро создавать на GUI элемент управления EDIT, ввод в который будет связан с текстовым файлом?
Успешные собственные наработки:

Gui, Selector:Add, edit, x20  yp+15 r3 w350 vStaticEditVar gEditToFile , 
    FileRead, FileContents, %A_ScriptDir%\ConfigTexts\Default.txt
    GuiControl,, CompServEdit, %FileContents%

EditToFile:
    Gui, Submit, NoHide
    FileDelete, %A_ScriptDir%\ConfigTexts\Default.txt
    FileAppend, %StaticEditVar%, %A_ScriptDir%\ConfigTexts\Default.txt
Return

Что делает код - под спойлером.

+ открыть спойлер

1) Создает поле Edit
2) Считывает содержимое файла, который мы с ним связываем
3) Делает содержимое этого файла содержанием поля Edit (то есть при открытии графического интерфейса поле открывается с содержимым, взятым из файла).
Кроме того подпрограмма, связанная с созданным полем при каждом изменении содержимого поля через графический интерфейс:
1) Применяет содержимое поля в переменную, не скрывая графический интерфейс с экрана
2) Удаляет связанный файл
3) Создаёт связанный файл и записывает в него текущее содержимое переменной, в которой сохранено содержание поля Edit

Что не устраивает: при многократном использовании кода требуется в двух местах менять имя переменной и в трех - имя файла. Много, да и опечатки печалят.
Принятое решение:Сделать функцию, параметрами которой будут имя файла и переменной.
Получившийся код:

AddEditToFile(GuiName, GuiXpos, GuiYpos, GuiWidth, GuiRows, DynamicEditVar, FileToEdit)
{
Global
Gui, %GuiName%:Add, edit, %GuiXpos% %GuiYPos% %GuiWidth% %GuiRows% v%DynamicEditVar% gGuiEditSub,
FileRead, FileContents, %A_ScriptDir%\ConfigTexts\%FileToEdit%.txt
GuiControl,, %GuiEditVar%, %FileContents%
EditFile = %FileToEdit%
EditVar = `%%GuiEditVar%`%
Return
}

GuiEditSub:
Gui, Submit, NoHide
FileDelete, %A_ScriptDir%\ConfigTexts\%EditFile%.txt
FileAppend, %EditVar%, %A_ScriptDir%\ConfigTexts\%EditFile%.txt
Return

Комментарии к коду под спойлером

+ открыть спойлер

Параметры функции - это параметры команды Gui, Add,  Edit - без них не обойтись. Координаты и размер нового поля, переменная для поля (уникальная), а так же какой файл мы с полем связываем.
Без объявления Global функция вываливается с ошибкой. "A control's variable must be global or static"
Создаем поле (работает)
Считываем файл (работает)
Делаем содержимое файла содержимым поля (работает)

Так как параметры существуют только внутри функции, которая во время работы с полем уже прекращает свое действие - сохраняем параметры "Переменная поля" и "Связанный файл" в отдельные переменные.
Имя файла сохраняется нормально
Имя переменной сохраняется без знаков "%"

Подпрограмма вынесена вне функции (логично)
Применяем поля (Ок)
Удаляем старый файл (Ок)
Записываем новое значение файла (Не ок)

Проблема:В записанном примере содержимое файла становится не содержимым переменной DynamicEditVar,  а буквально - "%DynamicEditVar%". Пробовались разные способы присвоения - результат бывает другой, но все равно неверный.

Главный вопрос: Как правильно записать содержимое созданного поля в файл?
Побочный вопрос: Оно ведь будет работать как я ожидаю если создать несколько полей, правда?

8

Re: AHK: Gui, Edit, File, Function, Voodoo

Misamoto, извините, но содержание заголовка отражает сумбур (по данной теме, во всяком случае) в Вашей голове. Для начала попытайтесь всё же придумать внятное название для темы. После этого попробуйте освоить правила присвоения значений переменным.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9 (изменено: Alectric, 2014-06-18 10:43:16)

Re: AHK: Gui, Edit, File, Function, Voodoo

Я бы сделал данную функцию с помощью gosub, в котором будет счетчик создающихся "едитов". Точно также можно будет использовать много раз, как и функцию, и не будет проблем с потерями содержимого переменных.

Ps Немогу показать рабочий код - пишу с телефона. И да название темы непонятное.

Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

10

Re: AHK: Gui, Edit, File, Function, Voodoo

Misamoto
У вас там путаница с именами переменных и меток. Приведите рабочий пример, который можно скопировать, запустить и хоть что-то увидеть.