Ru-Board.club
← Вернуться в раздел «Программы»

» Indigo Rose AutoPlay Media Studio

Автор: collagen
Дата сообщения: 14.11.2015 15:26
Baltazar500
Есть несколько способов. Они описаны в русской справке по программе. Посмотрите:
Справка => AMS на ru-board. Примеры кода => Элементарный код => Кнопки.
Да и в описании объекта как Кнопка (Button), так и хКнопка (xButton) тоже есть кнопка-переключатель.
Автор: KerberX
Дата сообщения: 14.11.2015 17:58
Pahuchiy1
Функция Input.GetText() возвращает строку, а не таблицу. Это написано в справке. Строки в Lua это именно строки, не массивы, как в C. Судя по твоему коду ты хочешь записать в ListBox на каждой новой строчке соответствующий символ из этой строки. Тогда это будет так:

Код:
local sString = Input.GetText("Input1");
for i = 1, #sString do
    ListBox.SetItemText("ListBox1", i, string.sub(sString, i, i));
end
Автор: Baltazar500
Дата сообщения: 14.11.2015 18:56
KerberX
Цитата:
Baltazar500 Не уверен что понял что ты хочешь. Такой код сменит файл для кнопки при нажатии на неё. Конечно, при условии что нужный файл будет в папке.
суть следующая - есть кнопка, выполняющая задачу, нужно чтобы по отработке задачи на её месте появилась бы другая кнопка (при нажатии кнопки одно, при отжатии другое если ещё проще), пока другого решения с вышеописанным костылём с подсовыванием 2-й страницы по отработке задачи я не вижу (ну или не знаю на данный момент), если есть решение - подскажите городить огород из 2-х или 3-х или более кнопок, когда можно обойтись одной мульти-кнопкой не хотелось бы но тот индусский костыль ненамного лучше кучи кнопок :\
Автор: KerberX
Дата сообщения: 14.11.2015 19:03
Baltazar500
Создай две кнопки одна под другой и вторую скрой по умолчанию. И после выполнения своей задачи скрой первую кнопку и покажи вторую. Также советую посмотреть на кнопки типа Toggle - переключатели.
Автор: Pahuchiy1
Дата сообщения: 14.11.2015 20:11
Судя по твоему коду ты хочешь записать в ListBox на каждой новой строчке соответствующий символ из этой строки.
Нет, я хочу в уже запущеном скрипте ввести в Input1 таблицу (её название) и чтоб прога вывела все данные из этой таблицы в листбокс.
Автор: KerberX
Дата сообщения: 14.11.2015 20:12
Pahuchiy1
Имя переменной, которая ссылается на эту таблицу? То есть local t = {"ds", "qwerty", 54}; и имя это "t"?
Автор: Pahuchiy1
Дата сообщения: 14.11.2015 20:55
Имя переменной, которая ссылается на эту таблицу? - вобщем, да
То есть local t = {"ds", "qwerty", 54}; и имя это "t"? - честно говоря, не понял смысла этой записи. Ты же просто присвоил значения таблице t, верно? Но, ведь не важно какие у неё значения, важно то, каким образом можно вывести эти значения, введя имя переменной в Input1
Автор: KerberX
Дата сообщения: 14.11.2015 21:07
Pahuchiy1
Здесь есть тег цитирования. Используй его.
[no]

Цитата:
Текст цитаты

[/no]


Цитата:
local t = {"ds", "qwerty", 54};

Эта запись была чтобы убедиться что я понял что ты хочешь.
Простой вариант, отображает всего один уровень.

Код: local sName = Input.GetText("Input1");
for x, y in pairs(_G[sName]) do
    ListBox.AddItem("ListBox1", string.format("Key: \"%s\". Value: \"%s\"", tostring(x), tostring(y)));
end
Автор: Pahuchiy1
Дата сообщения: 15.11.2015 08:33
KerberX
примного благодарен


Цитата:
И ещё вопрос: как получить список всех переменных?

Где и каких?

Все переменные, объявленные мной в проекте (или на текущей странице), вывести в том же Listbox1.

Новая проблема:
f={1,2,"sfg"}
Input.SetText("Input1", unpack(f));
выдаёт только "1", (в инпуте в свойствах/многострочность я поставил галку "включено")
Автор: KerberX
Дата сообщения: 15.11.2015 15:59
Pahuchiy1

Цитата:
Все переменные, объявленные мной в проекте (или на текущей странице), вывести в том же Listbox1

Глобальные переменные хранятся в той же глобальной таблице _G. Их покажет такой код:

Код: for x, y in pairs(_G) do
    ListBox.AddItem("ListBox1", string.format("Key: \"%s\". Value: \"%s\"", tostring(x), tostring(y)));
end
Автор: Pahuchiy1
Дата сообщения: 15.11.2015 19:46

Цитата:
И вообще, зачем тебе это?

отладочные скрипты себе мастерю. Захочу проверить свойства какой нибудь переменной - и не надо вводить имя, достаточно выбрать из списка.
Автор: KerberX
Дата сообщения: 15.11.2015 19:53

Цитата:
Захочу проверить свойства какой нибудь переменной - и не надо вводить имя, достаточно выбрать из списка.

Есть более удобный способ. Существует такой GUI инструментарий - wxLua и там помимо GUI есть ещё всякие полезности. Подключи wx.dll к проекту AMS и вызови функцию wxlua.LuaStackDialog(); и увидишь красивое окно со списком всего что есть в скриптовом движке.
Автор: Pahuchiy1
Дата сообщения: 19.11.2015 12:35

Цитата:
-- Сам код
local sName = Input.GetText("Input1");
local sData = Table.Inspect(_G[sName]);
local tData = String.ToTable(sData, "\r\n");
for x, y in pairs(tData) do
ListBox.AddItem("ListBox1", tostring(y));
end

Спасибо, а как будет выглядеть код для grid?
Автор: KerberX
Дата сообщения: 20.11.2015 00:31
Pahuchiy1
Почти также. Только с небольшой оптимизацией, так как Grid это позволяет.


Код: local sName = Input.GetText("Input1");
local sData = Table.Inspect(_G[sName]);
local tData = String.ToTable(sData, "\r\n");
for x, y in pairs(tData) do
local nRow = Grid.InsertRow("Grid1", -1, false);
Grid.SetCellText("Grid1", nRow, 0, tostring(y), false);
end
Grid.AutoSizeColumns("Grid1", false);
Grid.Refresh("Grid1");
Автор: Pahuchiy1
Дата сообщения: 23.11.2015 11:57
подскажите, плиз, нужен аналог ThumbList, но для mp4 видео
Автор: sjdb45
Дата сообщения: 24.11.2015 17:27
Ребята нужна помощь.
Имеется страничка с Радиобутонами.
"RadioButtonA"
"RadioButtonB"
"RadioButtonC"
и так далее до:
"RadioButtonZ"
В свойствах страницы on show у всех стоит RadioButton.SetEnabled("название", false);
Если на компе имеется жестких диск например с буквой (D)
то нужно сделать

Код: RadioButton.SetEnabled("RadioButtonD", true);
Автор: KerberX
Дата сообщения: 24.11.2015 21:42
sjdb45
Готово. Это в глобальные функции.

Код: function UncheckAllButtons()
    local tObjects = Page.EnumerateObjects();
    if tObjects ~= nil then
        local sObjectName = "RadioButton";
        local sObjectNameLength = #sObjectName;
        for x, y in pairs(tObjects) do
            if Page.GetObjectType(y) == OBJECT_RADIOBUTTON and String.Left(y, sObjectNameLength) == sObjectName then
                RadioButton.SetChecked(y, false);
            end
        end
    end
end
function CheckFoundDrives()
    local tDrives = Drive.Enumerate();
    if tDrives ~= nil then
        for x, y in pairs(tDrives) do
            if Drive.GetType(y) == DRIVE_FIXED then
                local sObjectName = string.format("RadioButton%s", String.Left(y, 1));
                RadioButton.SetChecked(sObjectName, true);
            end
        end
    end
end
function RunActions()
    local tSelectedObjects = {};
    --
    local tObjects = Page.EnumerateObjects();
    if tObjects ~= nil then
        local sObjectName = "RadioButton";
        local sObjectNameLength = #sObjectName;
        for x, y in pairs(tObjects) do
            if Page.GetObjectType(y) == OBJECT_RADIOBUTTON and String.Left(y, sObjectNameLength) == sObjectName then
                if RadioButton.GetChecked(y) == true then
                    tSelectedObjects[#tSelectedObjects+1] = String.Right(y, 1);
                end
            end
        end
    end
    --
    for x, y in pairs(tSelectedObjects) do
        DrivesFunctionList[y]();
    end
end
--
DrivesFunctionList = {};
function DrivesFunctionList.A()
    Dialog.Message("", "Drive A selected");
end
function DrivesFunctionList.B()
    Dialog.Message("", "Drive B selected");
end
function DrivesFunctionList.C()
    Dialog.Message("", "Drive C selected");
end
function DrivesFunctionList.D()
    Dialog.Message("", "Drive D selected");
end
Автор: sjdb45
Дата сообщения: 25.11.2015 17:57
KerberX
Спасибо огромное за код. Мне как раз такой вариант и был нужен. Но к сожалению не работает.
Не знаю точную причину почему, скорее всего мой проект где в глобальных функциях имеются различные другие коды.
Я решил отказатья от радиобутонов и поступил иначе.
Создал "ComboBox1"
и в settings/Combobox items заполнил A:\, B:\, C:\, и так далее до Z:\
В Item Data последовательно 10, 02, 03 и т.д.
Затем в Button Properties on click:
----------
local nSel = ComboBox.GetSelected("ComboBox1");
if nSel == 01 then
--Действие
elseif nSel == 02 then
--Действие
elseif nSel == 03 then
--Действие
end
и т.д.
----------
Всё работает, но только при развёртывании Combobox идут все буквы диска
и пользователь сам должен выбрать диск с нужной буквой.


Тут как раз то что было мне нужно, но это сделано с AMS6 версии и при его запуске в AMS8.5 происходит ошибка во время его конвертирования из 6 в 8 версию. там строчка в линии 31 не совместима и к сожалению я не смог разобраться в проекте.
Может быть вы сможете раскопать эту информацию?
тут
http://www79.zippyshare.com/v/TMUASkL3/file.html
Автор: KerberX
Дата сообщения: 25.11.2015 18:05
sjdb45
Ты тогда уже определить что именно тебе нужно, а то писать ненужный код мне не хочется.

А в том проекте нужно всего лишь поменять одну строчку чтобы работало в AMS 8.x. У кнопки "Button4" в "On Click" на строке 31 нужно заменить это:

Код: for i,sDrive in tDrives do
Автор: sjdb45
Дата сообщения: 25.11.2015 18:25
KerberX
Вот отлично! В этом проекте все так как надо! Спасибо огромное.
Выручил без всяких сомнений. А я блин никак не мог запустить этот проект.

Добавлено:
KerberX
Пожалуйста выручи на последок с одним кодом..
Вот в исправленном проекте всё хорошо и я хотел бы добиться позледнего результата и вот какого:
Например кнопка "Delete Item" мне не нужна и я ее хочу переделать в кнопку Install. И нужен в нём другой код.
После того когда кликнешь на кнопку "Get drives" то заполняются все имеющиеся диски с компа. Потом пользователь выбирает нужный ему диск и давит на кнопку "Install" и код из кнопки Install выполняет действие.
Но вся беда в том, что у пользователя будет другая последовательность дисков, у всех ведь и разное количество дисков и их буквы. Так вот, в моём проекте уже готовые для каждой буквы диска exe-шники (В корне проекта в папке Install)
c.exe, d.exe, e.exe и т.д.
Теперь для выбранного диска нужно выбрать соответствующий букве диска exe-шник.
Пожалуйста помоги в этом, а дальше я смог бы сам добить начатый проект.
Спасибо!
Автор: KerberX
Дата сообщения: 25.11.2015 22:55
sjdb45
Вот код установки. Путь заменишь на свой.

Код: local sExePath = _SourceFolder.."\\Data"
--
local tSelected = ListBox.GetSelected("LB_Drive");
if tSelected ~= nil then
    local sDriveLetter = String.Left(ListBox.GetItemText("LB_Drive", tSelected[1]), 1);
    local sPath = string.format("%s\\%s.exe", sExePath, sDriveLetter);
    File.Run(sPath, "", "", SW_SHOWNORMAL, false);
    --
    Paragraph.SetText("Para_DriveProps", sPath);
else
    Dialog.Message("Error", "There is no item selected.");
end
Автор: sjdb45
Дата сообщения: 25.11.2015 23:25
KerberX
Не работает
Вписал код в бутон INSTALL.
папку вписал сюда local sExePath = _SourceFolder.."\\INSTALL"
В папке совершенно простые exe-шники с именами дисков C.EXE, D.EXE, E.EXE...
Выделяю в листбоксе например диск E:\ и жму на инсталл, ничего в итоге не происходит...
Автор: KerberX
Дата сообщения: 25.11.2015 23:27
sjdb45
Внизу, в текстовом поле, выводится получившийся путь. Проверь что он правильный.
Автор: sjdb45
Дата сообщения: 25.11.2015 23:40
Блин надо же быть таким идиотом
Вместо того что-бы создать папку INSTALL в корне проекта в папке CD_Root,
я создавал ее рядом с файлом проекта
Всё работает замечательно. запускает то что надо в зависимосто от буквы диска!!!
Огромное спасибо!
А ещё один вопрос, а можно сделать так, что-бы CDROM не выводились в листбокс а только жесткие диски?
Автор: KerberX
Дата сообщения: 25.11.2015 23:48
sjdb45
Учитывая мои прошлые примеры ты мог бы и сам исправить это. Но ладно. В этом проекте не самая хорошая реализация поиска и фильтра и чтобы не менять всё я просто добавил новое условие. Отличие в строке 62. Код для "Button4" (Get Drives).
[more]

Код: --The ListBox I'm using is named here. So u dont need to type a lot and u know what it is.
LB = "LB_Drive";

--Clear Previous Entry
ListBox.DeleteItem(LB, -1);

--Disable listbox Updating
ListBox.SetUpdate(LB, false);

--Make Suitable objects appear, otherwise remain invisible
ListBox.SetVisible(LB, true);
Label.SetVisible("Label1", true);
Paragraph.SetVisible("Para_DriveProps", true);
Paragraph.SetVisible("Para_Note", true);
Button.SetVisible("Button_Install", true);
Button.SetVisible("Button_ClearListDrive", true);

-- Get a list of the available drives.
tDrives = Drive.Enumerate();

-- Determine if an error occurred.
error = Application.GetLastError();

-- If an error occurred, display the error message.
-- If no error occurred, display the available drives in a dialog.
if (error ~= 0) then
Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION, MB_DEFBUTTON1);
else
--do the following for each drive. Info on the numbering in Help File
for i,sDrive in pairs(tDrives) do
        nType=Drive.GetType(sDrive)
            if nType==0 then
            nType = "UNKNOWN";
            elseif nType==1 then
            nType = "INVALID";
            elseif nType==2 then
            nType = "REMOVABLE";
            elseif nType==3 then
            nType = "HARD-DRIVE";
            elseif nType==4 then
            nType = "NETWORK-DRIVE";
            elseif nType==5 then
            nType = "CD-ROM";
            elseif nType==6 then
            nType = "RAM DISK";
            end
        sText = sDrive;
        nSpace = Drive.GetFreeSpace(sDrive); -- this gets the unused space in drive
        nSize = Drive.GetSize(sDrive); -- this gets the full size of the drive
        if nSpace == -1 then -- the output is -1 if drive is not loaded
        nSpace = "DRIVE NOT LOADED";
        sData = "Drive Type : "..nType.."\r\nAvailable Space : "..nSpace;
        else
            if nType=="HARD-DRIVE" or nType=="NETWORK-DRIVE" or nType=="RAM DISK" or nType=="REMOVABLE" then
            sData = "Drive : "..sDrive.." ["..nType.."]\r\nAvailable Space : "..Math.Round(nSpace/1024,2).." GB / "..Math.Round(nSize/1024,2).." GB".." - [ "..Math.Round(nSpace,2).." Mb / "..Math.Round(nSize,2).." Mb ]";
            elseif nType=="CD-ROM" then
            sData = "Drive : "..sDrive.." ["..nType.."]\r\nSpace Used : "..Math.Round(nSize/1024,2).." GB".." - [ "..Math.Round(nSize,2).." Mb ]";
            end
        end
--add the item to the listbox, with the name visible and path as data
if nType == "HARD-DRIVE" then
    ListBox.AddItem(LB, sText, sData);
end
end

end

--Allow the listbox to display the updated content
ListBox.SetUpdate(LB, true);
Автор: sjdb45
Дата сообщения: 25.11.2015 23:57
KerberX
Спасибо вcё супер!
Автор: Pahuchiy1
Дата сообщения: 27.11.2015 19:03
дел
Автор: sjdb45
Дата сообщения: 27.11.2015 22:04
KerberX

Никак не получается разобраться с кодом.


Код:
HIDDEN = File.DoesExist(_WindowsFolder.."\\HIDDEN.TXT");
OS64BIT= System.Is64BitOS();
if OS64BIT == and HIDDEN == true then
--Тут выполнение функций 1
else
--Тут выполнение функций 2
end
if OS64BIT == and HIDDEN == false then
--Тут выполнение функций 3
else
--Тут выполнение функций 4
end
Автор: KerberX
Дата сообщения: 27.11.2015 22:32
sjdb45
Это даже не интересно. Ты просто не знаешь как работает проверка нескольких переменных. И в предыдущем посте есть пример этой проверки. Ты ведь не вникал в тот код, верно? Впрочем это скорее проблема справки в AMS. Там просто так не отыщешь примера такой проверки. По крайней мере я не нашёл. В книге Programming in Lua я также не нашёл его, хотя я точно помню что там где-то было об этом написано.

Код: if nType == "HARD-DRIVE" or nType == "NETWORK-DRIVE" or nType == "RAM DISK" or nType== "REMOVABLE" then
Автор: sjdb45
Дата сообщения: 27.11.2015 22:59
KerberX

Спасибо за подсказку. Верно я не вникал, хоть и старался понять.
Да согласен, я не силён в ams и если сам этого понимал бы то разумеется не спрашивал бы помощи.
Справку читаю регулярно, но такие примеры никак не получается отыскать.
Спасибо!

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980

Предыдущая тема: память не может быть written


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.