Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Indigo Rose AutoPlay Media Studio (часть 5)

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191

Открыть новую тему     Написать ответ в эту тему

Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AutoPlay Media Studio





  AutoPlay Media Studio - мощная программа для создания меню автозагрузки CD/DVD. Эта программа создаст все необходимые файлы для автозапуска и его графическую оболочку, и даже сама встроит в нее использованные в проекте нестандартные шрифты. Пользователю останется лишь записать готовый проект на свой CD/DVD.
  AutoPlay Media Studio не требует от пользователя никаких особых знаний и очень прост в освоении, имеет дружественный и интуитивно понятный интерфейс. Приложение, которое будет создано AutoPlay Media Studio в конце работы, представлено в виде объектной модели. Эта модель состоит из группы отдельных страниц. На этих страницах можно размещать объекты, которые могут представлять собой графику, музыку, текст, видео, Flash, HTML и пр. Любому элементу можно назначить определенное действие. Например, при наведении на рисунок курсора мыши, может возникать текст с комментариями, при нажатии на кнопку "Play" начнет проигрываться фильм и т.д. Программа предоставляет сотни различных действий, которые можно связать с объектами. В AutoPlay Media Studio присутствует большое количество уже готовых шаблонов.
  AutoPlay Media Studio имеет широкие возможности и богатый набор инструментов для разработки мультимедийных проектов. Использовать программу можно не только для создания файлов автозапуска, но и, например, для разработки интерактивного обучающего софта или мультимедийной презентации.

Язык интерфейса: Английский
Страница загрузки: AutoPlay Media Studio Commerical Trial 8.5


Скриптовый язык LUA:
на Lua.Org (Official) - на Lua.Ru

Ресурсы, посвященные AMS (содержат коллекции примеров, дополнений, уроков):
  • icynorth.com
  • imagine-programming.com
  • mindquake.com.br

    Инструменты:
  • ScriptOMatic Tool - создает скрипт обращения ко всем свойствам выбранного WMI-класса

    Ответы на наиболее часто задаваемые вопросы


    Раскраска AMS-кода для публикации на форуме от UModeL: версия 1 и версия 2.

  • Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 06:17 05-08-2012 | Исправлено: Komandor, 13:30 23-09-2023
    ctaty3



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KerberX, благодарю!)

    Всего записей: 75 | Зарегистр. 17-04-2016 | Отправлено: 09:53 09-06-2017 | Исправлено: ctaty3, 09:53 09-06-2017
    karpovukg



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго.
    Хотелось бы в элементе Tree получить древовидную структуру папок и файлов (как в левой части Проводника). Есть ли в AMS или lua штатное средство обращения к файловой таблице диска? Если нет такого (что ожидаемо - ибо не под такие задачи заточена среда), может какой-нибудь костыль можно соорудить?
    Я пока додумался до следующего:
    Drive.Enumerate();
    Затем for-ом перебираю их и при условии что диск постоянный или временный выполняю поиск файлов.
    Но мне такой путь не нравится ибо во первых получается аццки долго, а во вторых пока слабо представляю как из путей к файлам соорудить древовидную структуру для отображения ее в Tree (даже не буду приводить свои соображения, чтобы народ не смешить ).
    Есть мысли, как это реализовать? Если конкретно: получить в Дереве структуру папок и файлов.
    Аналогичной задачи на форуме не нашел. Если есть и я проглядел пните калi ласка.

    Всего записей: 81 | Зарегистр. 13-01-2016 | Отправлено: 11:45 14-06-2017
    CryptoUsbtor



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть плагин...
    Explorer tree кажется называется..

    Всего записей: 742 | Зарегистр. 24-04-2016 | Отправлено: 13:53 14-06-2017
    KerberX



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    karpovukg

    Цитата:
    Есть ли в AMS или lua штатное средство обращения к файловой таблице диска? Если нет такого (что ожидаемо - ибо не под такие задачи заточена среда), может какой-нибудь костыль можно соорудить?  

    Не надо ничего сооружать. В AMS есть группа функций в таблицах File и Folder как раз для этого. Просто нужно иногда читать справку. Всё достаточно просто.
     
    Это в глобальные функции.

    Код:
    function Folder.IsEmpty(sPath)
        local bEmpty = true;
     
        local tFiles = File.Find(sPath, "*", false, true, nil,
        (
            function (sFoundPath)
                bEmpty = false;
                return false;
            end
        ));
     
        return (tFiles == nil or #tFiles == 0) and bEmpty;
    end
    function File.IsDirectory(sPath)
        local tAttributes = File.GetAttributes(sPath);
        return tAttributes ~= nil and tAttributes.Directory == true;
    end

     
    Этот код осуществляет начальное заполнение дерева списком дисков. И достаёт их метки чтобы было совсем как в проводнике.

    Код:
    local tDrives = Drive.Enumerate();
    for i, sDrive in ipairs(tDrives) do
        local nType = Drive.GetType(sDrive);
        if (nType ~= DRIVE_UNKNOWN and nType ~= DRIVE_NO_ROOT_DIR) then
            local tInfo = Drive.GetInformation(sDrive);
            local sLabel = sDrive;
            if (tInfo and tInfo.DisplayName) then
                sLabel = tInfo.DisplayName;
            elseif (tInfo and tInfo.Label) then
                sLabel = string.format("%s (%s)", tInfo.Label, String.TrimRight(sDrive, "\\"));
            end
     
            local sIndex = Tree.InsertNode("FolderTree", i, {Text = sLabel, Data = sDrive});
            if (not Folder.IsEmpty(sDrive)) then
                Tree.InsertNode("FolderTree", sIndex..".1", {Text = "", Data = ""});
            end
        end
    end

     
    А этот кусок уже добавляет папки и файлы к нужной ветке. Поместить в событие "On Expanded". Он не сканирует всю файловую структуру, а только выбранную папку и её подпапки первого уровня, но не глубже. Но всё равно будет тупить на папках с очень большим количеством файлов и папок. Например на "C:\Windows\System32".
     
    Переменная "this" это имя текущего объекта, если что. Как "FolderTree" из предыдущей функции.

    Код:
    if (e_NodeIndex ~= "" and e_Expanded) then
        local tNode = Tree.GetNode(this, e_NodeIndex..".1");
        if (tNode.Text == "" and tNode.Data == "") then
            Tree.RemoveNode(this, tNode.NodeIndex);
            tNode = Tree.GetNode(this, e_NodeIndex);
     
            local tFiles = File.Find(tNode.Data, "*", false, true, nil, nil);
            if (tFiles) then
                for i, sPath in ipairs(tFiles) do
                    local tPath = String.SplitPath(sPath);
                    local sIndex = Tree.InsertNode(this, e_NodeIndex.."."..i, {Text = tPath.Filename..tPath.Extension, Data = sPath});
     
                    if (File.IsDirectory(sPath) and not Folder.IsEmpty(sPath)) then
                        Tree.InsertNode(this, sIndex..".1", {Text = "", Data = ""});
                    end
                end
            end
        end
    end

     
    Так можно получить путь к выбранной папке или файлу (tNode.Data). Это в событие "On Select".

    Код:
    if (e_NodeIndex ~= "") then
        local tNode = Tree.GetNode(this, e_NodeIndex);
        if (tNode) then
            Paragraph.SetText("Paragraph1", tNode.Data);
        end
    else
        Paragraph.SetText("Paragraph1", "");
    end

    Всего записей: 597 | Зарегистр. 08-09-2011 | Отправлено: 15:17 14-06-2017 | Исправлено: KerberX, 15:24 14-06-2017
    karpovukg



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    CryptoUsbtor

    Цитата:
    Есть плагин...
    Explorer tree кажется называется..

    Что-то поискал в тырнете, не нашел. Сенкс и увы.
    KerberX

    Цитата:
    Не надо ничего сооружать.

    Под штатным средством я понимаю примерно такую реализацию:
    Там_какя-то_категория.ГетФайлСтруктуре(); возвращающую структуру файлов диска.
    А решения, компенсирующие недостатки среды разработки я и называю костылем.

    Цитата:
    Просто нужно иногда читать справку.

    Подзатыльник засчитан. Читаю я ее, читаю. Но помимо справки надо еще и много тематических ресурсов читать и кодить, кодить, кодить...
    По здравом размышлении я пришел к такому же алгоритму, что и ты - считывать не всю структуру разом, а поуровнево. Только код получается менее универсальный и более длинный и кривой.  
    Как обычно, снимаю шляпу.
    Спасибо за классное решение задачи "под ключ", теперь у меня пойдет дело.

    Всего записей: 81 | Зарегистр. 13-01-2016 | Отправлено: 00:10 15-06-2017
    KerberX



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    А решения, компенсирующие недостатки среды разработки я и называю костылем.  

    Все функции которые тебе когда-либо понадобятся не запихнёшь в стандартную библиотеку. Ну и это не костыль. Я даже не использовал плагины и явные вызовы функций WinAPI. Костыль это например установка Subclass на окно чтобы ловить события которые AMS не обрабатывает сам.
     

    Цитата:
    Там_какя-то_категория.ГетФайлСтруктуре(); возвращающую структуру файлов диска.  

    Сам подумай что должна была бы возвращать такая функция? Список файлов и папок на всех дисках? Ну так уже есть. File.Find называется, нужно только скомбинировать её с Drive.Enumerate. В программировании всё так и работает. Берёшь кусочки и собираешь из них то, что тебе надо. В AMS легче, кусков много и взаимодействуют они достаточно хорошо.

    Всего записей: 597 | Зарегистр. 08-09-2011 | Отправлено: 06:18 15-06-2017 | Исправлено: KerberX, 06:19 15-06-2017
    CryptoUsbtor



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    karpovukg

    Цитата:
    Что-то поискал в тырнете, не нашел. Сенкс и увы.  

    не там ищем...

    Всего записей: 742 | Зарегистр. 24-04-2016 | Отправлено: 12:18 15-06-2017
    karpovukg



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KerberX
    Возразить нечего. Аргументы принимаются. Отношение к вопросу изменилось.
    CryptoUsbtor
    И действительно не там. Лежат они где должны в папке программы. Только почему-то не отображаются в Объекты\Плагины...
    Допишу софтину, буду думать, почему.
    Спасибо, мужики, за науку.

    Всего записей: 81 | Зарегистр. 13-01-2016 | Отправлено: 16:41 15-06-2017
    karpovukg



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго.
    Продолжение темы.  
    Пытаюсь записать таблицу в файл

    Код:
    TextFile.WriteFromTable("AutoPlay\\Docs\\restore.txt", tbCheckedItem, false);

    Файл создается, но оказывается пуст. Таблица не пустая (в процессе отладки заполнения таблицы я выводил ее в Paragraf). Таблица содержит четыре поля с данными. GetLastError ошибку не обнаруживает. Построчно, в цикле записывается.
    Я до этого ни с таблицами, ни с записью данных в файл не работал. С заполнением и очисткой таблиц методом научного тыканья и курением справки разобрался.  
    В справке про метод WriteFromTable написано: "Таблица должна содержать по одной строке текста на каждый пункт таблицы."
    Вопрос: как выглядит структура хранения данных в таблице
    так
    таблица
        индекс
        1-е поле
        2-е поле
        n-е поле
    или так
    таблица
    индекс |(какой-то разделитель) 1-е поле | 2-е поле | n-е поле
    ?
    И, если по первому варианту, можно ли как-то записать таблицу в файл таблицей, чтобы потом таблицей же считать? Или, если таблица многопольная придется ее записывать построчно, а потом уже как-то обрабатывать эти строки при считывании и записывать их в таблицу?
    А если по второму - почему она не пишется в файл?
    PS
    KerberX
    Твоя мега функция для вывода данных располагает поля в одну строку, но это, конечно, не показатель, что оно так и хранится.

    Всего записей: 81 | Зарегистр. 13-01-2016 | Отправлено: 16:35 22-06-2017 | Исправлено: karpovukg, 16:37 22-06-2017
    KerberX



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    karpovukg
    Та функция не годится для сериализации таблицы так как получившийся результат может не быть корректной таблицей. Можешь использовать эти функции. Помести этот код в глобальные функции.
    Код
    Код взят отсюда: http://piratery.net/dump/index.html
     
    Table.Save(vValue, sFile) сохраняет таблицу в файл.
    Table.Load(sFile) - загружает из файла и возвращает таблицу.
     

    Цитата:
    И, если по первому варианту, можно ли как-то записать таблицу в файл таблицей, чтобы потом таблицей же считать? Или, если таблица многопольная придется ее записывать построчно, а потом уже как-то обрабатывать эти строки при считывании и записывать их в таблицу?  
    А если по второму - почему она не пишется в файл?  

    Я бы смог тебе сказать почему не сработала TextFile.WriteFromTable если бы ты показал реальную таблицу, а не её схему используя этот странный синтаксис. Вообще TextFile.WriteFromTable записывает только численно-индексированные таблицы со строковыми или числовыми (не проверял, но должно работать) значениями.

    Всего записей: 597 | Зарегистр. 08-09-2011 | Отправлено: 19:08 22-06-2017 | Исправлено: KerberX, 00:54 23-06-2017
    karpovukg



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KerberX
    Если я правильно понял, ты хочешь увидеть код ее обработки?
    Tree - OnCheck

    Код:
    -- табл. tbCheckedItem содерж. помеч. п-ты {индекс в дереве, путь к папке/файлу, признак паки/файла, рекурсия}
    if e_Checked then
        if Table.Count(tbCheckedItem) <= 0 then
            nTableIndex = 1;
        else
            nTableIndex = Table.Count(tbCheckedItem) + 1;
        end
        Table.Insert(
            tbCheckedItem, nTableIndex,
            {
                sTreeIndex = e_NodeIndex,
                sPath = Tree.GetNode(this, e_NodeIndex).Data,
                bIsDirectory = File.IsDirectory(Tree.GetNode(this, e_NodeIndex).Data),
                bRecurse = false
            }
        );
        if (File.IsDirectory(Tree.GetNode(this, e_NodeIndex).Data)) and (not Folder.IsEmpty(Tree.GetNode(this, e_NodeIndex).Data)) then
            result = Dialog.Message("Notice",
                "Выбранный элемент - " .. tbCheckedItem[nTableIndex].sPath
                .. " является непустым каталогом. Изменить параметры безопасности для подкаталогов?",
                MB_YESNO, MB_ICONQUESTION, MB_DEFBUTTON1);
            if result == IDYES then
                tbCheckedItem[nTableIndex].bRecurse = true;
            end
        end
    else
        for i, v in ipairs(tbCheckedItem) do
            if (v.sTreeIndex == e_NodeIndex) then
                Table.Remove(tbCheckedItem, i);
            end
        end
    end
     

    А TextFile.WriteFromTable я повесил на кнопку (ну и там же у меня формируется контрольный вывод в Paragraf).
    PS
    Вот ее синтаксис:

    Код:
    TextFile.WriteFromTable("AutoPlay\\Docs\\restore.txt", tbCheckedItem, false);

    PPS
    Table.Save отработала. Но что меня подивило, так это, что поля записались в обратном порядке (что произошло и при использовании функции М()). Это, конечно, не играет никакой роли, но тем не менее непонятненько... И, да, без числовых индексов. Хотя по логике в таблице они должны быть, иначе как бы удалялись у меня ее строки.

    Всего записей: 81 | Зарегистр. 13-01-2016 | Отправлено: 23:18 22-06-2017 | Исправлено: karpovukg, 00:02 23-06-2017
    KerberX



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    karpovukg

    Цитата:
    Если я правильно понял, ты хочешь увидеть код ее обработки?  

    Вообще я хотел увидеть пример таблицы, но это тоже подойдёт. Как я уже говорил TextFile.WriteFromTable может записывать только численно-индексированные таблицы со строковыми или числовыми значениями. Твоя таблица численно-индексированная, но в качестве значений содержит другие таблицы, поэтому функция и не сработала. Кстати, слово "Paragraf" пишется так: Paragraph.
     
    Ещё твой код можно переписать так.

    Код:
    -- табл. tbCheckedItem содерж. помеч. п-ты {индекс в дереве, путь к папке/файлу, признак паки/файла, рекурсия}
    if e_Checked then
        local tRecord = {sTreeIndex = e_NodeIndex, sPath = Tree.GetNode(this, e_NodeIndex).Data, bRecurse = false};
        tRecord.bIsDirectory = File.IsDirectory(tRecord.sPath);
        table.insert(tbCheckedItem, tRecord);
     
        if (tRecord.bIsDirectory and not Folder.IsEmpty(tRecord.sPath)) then
            local result = Dialog.Message
            (
                "Notice",
                "Выбранный элемент - "..tRecord.sPath.." является непустым каталогом. Изменить параметры безопасности для подкаталогов?",
                MB_YESNO,
                MB_ICONQUESTION,
                MB_DEFBUTTON1
            );
            tRecord.bRecurse = result == IDYES;
        end
    else
        for i, v in ipairs(tbCheckedItem) do
            if (v.sTreeIndex == e_NodeIndex) then
                table.remove(tbCheckedItem, i);
            end
        end
    end


    Цитата:
    Table.Save отработала. Но что меня подивило, так это, что поля записались в обратном порядке (что произошло и при использовании функции М()). Это, конечно, не играет никакой роли, но тем не менее непонятненько... И, да, без числовых индексов. Хотя по логике в таблице они должны быть, иначе как бы удалялись у меня ее строки.

    Какие именно поля? Если те, в которых хранится индекс, путь и прочее, то они могут быть вообще в любом порядке. Это же ассоциативный массив, конкретнее хэш-таблица, порядок следования индексов там не определён. Числовые индексы не обязательны если таблица является последовательностью, индексируется с 1 и в ней нет дыр - то есть все её элементы идут друг за другом. Соответственно индексация будет сохранена после загрузки.

    Всего записей: 597 | Зарегистр. 08-09-2011 | Отправлено: 01:04 23-06-2017 | Исправлено: KerberX, 01:05 23-06-2017
    ctaty3



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребят, а как имитировать нажатие клавиши "Стрелка вверх" и "Стрелка вниз" при нажатии на кнопку? А то не могу нигде найти плагин SendKeys..

    Всего записей: 75 | Зарегистр. 17-04-2016 | Отправлено: 10:29 23-06-2017 | Исправлено: ctaty3, 10:34 23-06-2017
    karpovukg



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KerberX

    Цитата:
    Ещё твой код можно переписать так.

    Этим фрагментом я пытался явно проставлять числовые индексы в таблице.

    Код:
    if Table.Count(tbCheckedItem) <= 0 then
            nTableIndex = 1;
        else
            nTableIndex = Table.Count(tbCheckedItem) + 1;
        end

    Это что получается:  

    Код:
    local tRecord = {sTreeIndex = e_NodeIndex, sPath = Tree.GetNode(this, e_NodeIndex).Data, bRecurse = false};

    содержит в себе индекс? Или индексация идет по первому полю - в моем случае sTreeIndex? Или с индексацией можно вообще не париться:

    Цитата:
    Числовые индексы не обязательны если таблица является последовательностью, индексируется с 1 и в ней нет дыр - то есть все её элементы идут друг за другом. Соответственно индексация будет сохранена после загрузки.

    Тогда как же быть в случае, когда я удаляю какую-нибудь запись/строку? Переиндексация же не происходит автоматом? Будут дыры? Значит перед записью в файл надо вручную переиндексировать каким-то образом?
    NB Извини за возможно глупые вопросы, но что для тебя азбука, для меня может быть великие откровения.
    Кстати о терминологии: когда-то давным-давно, лет 19 тому назад я взял несколько уроков по программированию (турбо паскаль фарева ), так там в применении к массивам (таблицам) строки назывались записами, а столбцы в этих строках - полями. С тех пор я так это дело и именую.

    Цитата:
    Кстати, слово "Paragraf" пишется так: Paragraph

    Бывает... Особенно когда с языком на "Вы".

    Цитата:
    Какие именно поля? Если те, в которых хранится индекс, путь и прочее, то они могут быть вообще в любом порядке.

    Да я это понимаю, и написал же, что не играет. Просто интересненько. Думал может ты знаешь, что, допустим, "поля записываются в обратном порядке"  или "ты сделал не так то-то и то-то".
    Ну я если конкретно, то у нас они задаются: ИндексВДереве, Путь, Директория, Рекурсия. А в файле наоборот почему-то.  

    Код:
    {
            bIsDirectory = true,
            bRecurse = false,
            sPath = "D:\\codysafe-sigma-112146",
            sTreeIndex = "2.8",
        },

    То-есть либо так хранятся, либо так считываются. По логике-то должно быть так: в каком порядке кодер определил поля, в таком и записалось... Ну и при считывании тоже вроде так же.
    . Я на всякий случай выложил проект
    PS И, собственно, вопрос дня: как заполнить таблицу, чтобы она корректно записалась в файл методом TextFile.WriteFromTable?
     
    Добавлено:
    ctaty3
    На примере перемещения кнопки.
    Объект - Page
    Событие - OnKey (при нажатии клавиши)

    Код:
    -- определяем текущую позицию объекта
    tPos = xButton.GetPos("Exit");
    -- если нажата клавиша "Вверх" с кодом 38
    if System.IsKeyDown(38) then
        -- меняем одну из координат кнопки
        xButton.SetPos("Exit", tPos.X, tPos.Y - 10);
    -- то же саомое с клавишей "Вниз" с кодом 40
    elseif System.IsKeyDown(40) then
        xButton.SetPos("Exit", tPos.X, tPos.Y + 10);
    end
    -- перерисовываем страницу, чтобы не осталось старое изображение кнопки
    Page.Redraw();

    Всего записей: 81 | Зарегистр. 13-01-2016 | Отправлено: 10:39 23-06-2017 | Исправлено: karpovukg, 13:11 23-06-2017
    ctaty3



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    karpovukg
    Это то понятно, но дело в том, что мне нужно посылать нажатие клавиш в ListBox, чтобы указатель перемещался по списку (вверх или вниз), как при нажатии на стрелки

    Всего записей: 75 | Зарегистр. 17-04-2016 | Отправлено: 14:53 23-06-2017
    KerberX



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    karpovukg

    Цитата:
    содержит в себе индекс? Или индексация идет по первому полю - в моем случае sTreeIndex? Или с индексацией можно вообще не париться:  

    Нет и нет. Просто функция table.insert(t, v) если вызвана только с двумя параметрами добавляет значение v в конец таблицы t.
     

    Цитата:
    Кстати о терминологии: когда-то давным-давно, лет 19 тому назад я взял несколько уроков по программированию (турбо паскаль фарева  ), так там в применении к массивам (таблицам) строки назывались записами, а столбцы в этих строках - полями. С тех пор я так это дело и именую.  

    Я всегда знал что в Паскаль странный, но это уже просто хрень какая-то.
     

    Цитата:
    Да я это понимаю, и написал же, что не играет. Просто интересненько. Думал может ты знаешь, что, допустим, "поля записываются в обратном порядке"  или "ты сделал не так то-то и то-то".  
    Ну я если конкретно, то у нас они задаются: ИндексВДереве, Путь, Директория, Рекурсия. А в файле наоборот почему-то.  
     

    В целом порядок не определён, но нам везёт и обычно они перебираются а алфавитном порядке. Сам посмотри: b -> I, b -> R, s -> P, s -> T.
     

    Цитата:
    То-есть либо так хранятся, либо так считываются. По логике-то должно быть так: в каком порядке кодер определил поля, в таком и записалось... Ну и при считывании тоже вроде так же.  

    Если бы это была структура (struct) в C, то так бы и было, за вычетом того что в C нет рефлексии. В Lua это не работает, причину я уже объяснял.
     

    Цитата:
    PS И, собственно, вопрос дня: как заполнить таблицу, чтобы она корректно записалась в файл методом TextFile.WriteFromTable?  

    Уф, я думал я уже достаточное количество раз объяснял это. Это должна быть одномерная численно-индексированная таблица (последовательность) со строковыми или числовыми значениями. У меня есть смутное предположение что TextFile.WriteFromTable использует функцию table.concat для сериализации. В любом случае подойдут таблицы такого вида:

    Код:
    local t1 = {"asd", "wqeqwe", 45, 3, "7545"};
    local t2 = {[1] = "asd", [2] = "wqeqwe", [3] = 45, [4] = 3, [5] = "7545"};
    local t3 = {};
    for i = 1, 8 do
        t3[i] = i^2;
    end
     
    local t4 = {};
    for i = 1, 8 do
        table.insert(t4, i^3 - i^2);
    end

    Всего записей: 597 | Зарегистр. 08-09-2011 | Отправлено: 16:52 23-06-2017
    karpovukg



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ctaty3
    Он и так перемещается.
    Единственно, что фокус может оказаться на другом объекте. Но его можно поместить на нужный объект оператором Page.SetFocus("ListBox1");

    Всего записей: 81 | Зарегистр. 13-01-2016 | Отправлено: 17:25 23-06-2017
    KerberX



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    karpovukg

    Цитата:
    Но его можно поместить на нужный объект оператором Page.SetFocus("ListBox1");

    Page.SetFocus - функция, а не оператор.
     
    ctaty3
    Это в глобальные функции.

    Код:
    User32 = Library.Load("User32.dll");
     
    WM_KEYDOWN = 0x0100;
    WM_KEYUP = 0x0101;
    function System.SendMessage(hWnd, nMsg, wParam, lParam)
        return User32.SendMessageA(hWnd, nMsg, wParam, lParam);
    end

     
    Использовать так:

    Код:
    --[[
    37 - (left arrow)
    38 - (up arrow)
    39 - (right arrow)
    40 - (down arrow)
    Остальные коды здесь: https://msdn.microsoft.com/en-us/library/dd375731(v=vs.85).aspx
    Также они есть в справке AMS.
    --]]

     
    local hWnd = ListBox.GetProperties("ListBox1").WindowHandle;
    System.SendMessage(hWnd, WM_KEYDOWN, 38, 0); -- Послать нажатие кнопки со стрелкой вверх
    System.SendMessage(hWnd, WM_KEYDOWN, 40, 0); -- Послать нажатие кнопки со стрелкой вниз

     
    Пока не нашёл этот способ пытался использовать функцию SendInput, но через неё не работает. Функция возвращает 0, но ничего не происходит. Не знаю в чём дело, но разбираться дальше мне лень. Вот функция, может кому пригодится.
    Код
     
    Для всего этого требуется плагин MemoryEx.

    Всего записей: 597 | Зарегистр. 08-09-2011 | Отправлено: 18:30 23-06-2017 | Исправлено: KerberX, 18:35 23-06-2017
    karpovukg



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KerberX

    Цитата:
    Я всегда знал что в Паскаль странный

    Зато простой и понятный. Когда-то читал, что он не прижился как прикладная среда и годился только в качестве обучающего инструмента. А записи и поля... Вероятней всего такие понятия использовались при обучении моего тогдашнего преподавателя. Потому, что паскаль никак не мог быть его рабочим инструментом.

    Цитата:
    Уф, я думал я уже достаточное количество раз объяснял это. Это должна быть одномерная численно-индексированная таблица

    Вот, что одномерная, первый раз читаю. Что я в глубине души и подозревал.
    Намотал всё на ус. Спасибо за разъяснения и потраченное время. И, разумеется за очередное решение.
    ctaty3
    Сорян. Тупанул.

    Всего записей: 81 | Зарегистр. 13-01-2016 | Отправлено: 19:23 23-06-2017
    KerberX



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    karpovukg

    Цитата:
    Зато простой и понятный

    Это достаточно спорное утверждение. Си на порядок проще и понятнее.
     

    Цитата:
    Вот, что одномерная, первый раз читаю. Что я в глубине души и подозревал.  

    Мне казалось что это понятно по фразе "TextFile.WriteFromTable может записывать только численно-индексированные таблицы со строковыми или числовыми значениями.". Я нигде не говорил про табличные значения, что и определяет многомерность таблицы.

    Всего записей: 597 | Зарегистр. 08-09-2011 | Отправлено: 19:32 23-06-2017
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191

    Компьютерный форум Ru.Board » Компьютеры » Программы » Indigo Rose AutoPlay Media Studio (часть 5)


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru