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

» Autoplay Media Studio

Автор: ubian
Дата сообщения: 14.05.2012 19:41
godenemy
Да не за что)
Скайп: olowo. (с точкой)
ICQ: 894173
Лучше скайп
Автор: KerberX
Дата сообщения: 15.05.2012 18:04
Сможет мне кто помочь? Мне нужно определить возможные разрешения монитора у пользователя. Попытался использовать функцию WinApi.EnumDisplaySettings, но она выдаёт ещё глубину цвета и частоту обновления. Не проблема убрать эти лишние данные, но при этом остаётся много одинаковых значений. Как их убрать? Или, может быть, есть другой способ получать эту информацию?
Автор: Lexua
Дата сообщения: 15.05.2012 19:22
KerberX

Цитата:
Мне нужно определить возможные разрешения монитора у пользователя.

Все возможные? Или всё таки текущее? Если текущее то есть штатная функция System.GetDisplayInfo
Автор: KerberX
Дата сообщения: 15.05.2012 19:24
Все возможные.
Автор: ubian
Дата сообщения: 15.05.2012 20:49
KerberX
Циклом проверять на существование и удалять повторяющиеся?
Автор: KerberX
Дата сообщения: 15.05.2012 20:58
Да. Если использовать эту функцию. Я пытался написать такой цикл, но у меня не выходит. Ради эксперимента написал шесть штук своих "недоциклов" и сработало, но ведь это не выход. И я не собираюсь с этим мириться.
Автор: ubian
Дата сообщения: 15.05.2012 21:19
KerberX
А почему? Напишите функцию с циклами и все проблемы. Самое быстрое решение, имхо.
Автор: KerberX
Дата сообщения: 15.05.2012 21:22

Цитата:
Напишите функцию с циклами и все проблемы. Самое быстрое решение, имхо.

Что? Я тебя не понял. Я же написал что у меня не получается написать такой цикл. А шесть циклов сказываются на быстродействии. Подвисает программа при старте из-за этого.
Автор: ubian
Дата сообщения: 15.05.2012 21:35
KerberX

Код:
--Массив с расширениями - massive
for x=1, #massive do
massive[x] = String.Match(massive[x], '', ' @');
end
for x=1, #massive do
for y=1, #massive do
if (massive[x]==massive[y]) then
massive[y] = nil;
end
end
end
Автор: KerberX
Дата сообщения: 15.05.2012 21:39
Что за String.Math? Для чего он нужен?
Автор: ubian
Дата сообщения: 15.05.2012 21:43
KerberX
Выдиляет текст Например было a[text]skd
после

Код:
String.Match('a[text]skd', 'a[', ']skd');
Автор: KerberX
Дата сообщения: 16.05.2012 07:11
Я не понял для чего нужна твоя функция "Массив с расширениями". Она у меня не работает, да и не нравится мне такой способ. Какой-то он странный. Я подожду, может кто-нибудь предложит другой способ.
Автор: ubian
Дата сообщения: 16.05.2012 08:15
KerberX
А в Global Functions вставил?
См. здесь
Автор: Robby
Дата сообщения: 16.05.2012 09:37
KerberX возможно так


Код: local time=os.clock ();
local tDisplay=WinApi.EnumDisplaySettings(); -- получаем все возможные установки монитора
Table.Sort(tDisplay, nil); -- сортируем массив
sWidthHeight=string.gsub (Table.Remove(tDisplay, 1), "(%d+|%d+)(.*)", "%1"); -- получаем из первого элемента массива значения Width и Height
tWidthHeight={}; -- создаем новый массив который будет содержать разрешение экрана
tWidthHeight[1]={Width = String.Mid(sWidthHeight, 1, String.Find(sWidthHeight, "|", 1)-1) , Height = String.Mid(sWidthHeight, String.Find(sWidthHeight, "|", 1)+1, -1)}; -- заносим в него первое значение
local ind=1; -- счетчик элементов массива
Debug.ShowWindow(true); -- включаем окно отладки
for i, value in pairs(tDisplay) do -- перебираем элементы всех возможных установок монитора
sWidthHeight=string.gsub (value, "(%d+|%d+)(.*)", "%1"); -- получаем только значения Width и Height
-- заносим каждое значение в свою переменную
local sWidth=String.Mid(sWidthHeight, 1, String.Find(sWidthHeight, "|", 1)-1); -- Width
local sHeight=String.Mid(sWidthHeight, String.Find(sWidthHeight, "|", 1)+1, -1); -- Height
-- сравниваем значение массива разрешений монитора с значениями Width и Height
if tWidthHeight[ind].Width~=sWidth and tWidthHeight[ind].Height~=sHeight then -- если не совпадают
ind=ind+1; -- увеличиваем счетчик элемнтов массива
tWidthHeight[ind]={Width=sWidth, Height=sHeight}; -- записываем новое значение
end
end
-- проверка результата
for i, value in pairs(tWidthHeight) do
Debug.Print("Width="..value.Width.."\tHeight= "..value.Height.."\r\n");
end
Debug.Print("------------\r\nВыполнено за: "..os.clock ()-time.." секунд\r\n");
Автор: tavria2
Дата сообщения: 16.05.2012 11:00
KerberX
Попробуй это:

Код: function EnumDisplayModes()
    local tModesTMP = {};
    local tModes = {};
    local tSettings = WinApi.EnumDisplaySettings();

    for nIdx, sValue in pairs(tSettings) do
        local sMode = string.gsub(sValue, "(%d+)|(%d+)|(%d+)|(%d+)", "%1x%2");
        if (sMode ~= tModesTMP[sMode]) then
            tModesTMP[sMode] = sMode;
            table.insert(tModes, sMode);
        end
    end
    return tModes
end

tModes = EnumDisplayModes();
for nIdx, sMode in pairs(tModes) do
    sWidth = string.gsub(sMode, "(%d+)x(%d+)", "%1");    -- ширина
    sHeight = string.gsub(sMode, "(%d+)x(%d+)", "%2");    -- высота
    -- Отобразит например: Разрешение=800x600, Ширина=800, Высота=600
    Dialog.Message("Notice", "Разрешение="..sMode..", Ширина="..sWidth..", Высота="..sHeight);
end
Автор: KerberX
Дата сообщения: 16.05.2012 14:07

Цитата:
А в Global Functions вставил?
См. здесь

Естественно. Просто я не понял для чего ты мне её посоветовал.

tavria2, Robby, спасибо. Позже проверю. Только, что за функция string.gsub? Я такой раньше не видел. Откуда она?
Автор: Zloy_Gelud
Дата сообщения: 16.05.2012 14:10
KerberX

Цитата:
что за функция string.gsub? Я такой раньше не видел.

Действие стандартной бибилиотеки работы со строками Lua 5.1
http://www.lua.ru/doc/5.4.html
Автор: KerberX
Дата сообщения: 16.05.2012 14:37
Спасибо за ссылку.

Добавлено:
tavria2, спасибо. Robby, твой скрипт не использовал, но всё равно спасибо. Сортировка таблиц "в разные стороны" мне тоже полезна.
Автор: JHeavy
Дата сообщения: 19.05.2012 00:35
Здравствуйте, я пытаюсь вставить описания в Paragraph из текстового файла, но вместо русских букв каракули, понял что дело в кодировке, но не понял как решить данный вопрос, хотя обсуждение читал. Помогите с проблемой заранее спасибо.
Автор: UModeL
Дата сообщения: 19.05.2012 05:11
JHeavy

1. В свойствах самого объекта Paragraph, при выборе шрифта, нужно указать "Кириллический".
2. Используя любой текстовый редактор (например, Блокнот), сохранить файл с описаниями в кодировке ANSI.
Автор: JHeavy
Дата сообщения: 19.05.2012 10:05
UModeL большое спасибо, этот момент я упустил.
Автор: JHeavy
Дата сообщения: 19.05.2012 21:44
У меня такой вопрос, подскажите, я загружаю текст из txt файлов и картинку по выбору пунктов listbox и пишу такой код на странице On Select


Код: selected_items = ListBox.GetSelected("ListBox1");
if selected_items[1] then
Image.SetVisible("Image01", true);
Paragraph.SetText("Paragraph1", TextFile.ReadToString("AutoPlay\\Docs\\002.txt"));
end
Автор: ubian
Дата сообщения: 19.05.2012 22:17
JHeavy
ListBox.GetSelected возвращает массив с выделеными элементами. Если элемнент 1 то он записывается в массив (т.е.таблицу) под индексом один, т.е. индекса 2, 3 не существует. massive[1] будет содержать ID элемента (выделеного), т.е. цифра massive[1] не номер выделенного элемента.
Автор: Robby
Дата сообщения: 20.05.2012 08:57
JHeavy
ListBox.GetSelected возвращает таблицу содержащую индексы все выделенных элементов. Это нужно для того, чтобы получить индексы всех выделенных элементов при включеном мультивыборе. Если у тебя отключен мультивыбор, то, сответсвенно, тебе нужно проверять содержимое этой таблицы, а твое условие проверяет наличие данных. И соответсвенно если выбран всего один элемент оно не выполняется. Нужно так

Код: if selected_items[1]==1 then
...
end
Автор: collagen
Дата сообщения: 20.05.2012 15:35
Вот частичный перевод справки по АМС на русский язык.
http://rghost.ru/38182529
переведено чуть более половины действий.
Автор: JHeavy
Дата сообщения: 21.05.2012 13:47
ubian, Robby спасибо за ответы, правда я не совсем все понял, в программировании не силен, да и программой пользовался только на уровне "вставить пару кнопок", так что для меня пока все сложно.
У меня ещё такой вопрос мой код
Код: selected_items = ListBox.GetSelected(this);
if selected_items[1]==1 then
Image.SetVisible("Cover01", true);
Paragraph.SetText("Paragraph1", TextFile.ReadToString("AutoPlay\\Docs\\001.txt"));
Paragraph.SetVisible("Paragraph1", true);
Image.SetVisible("Cover02", false);
Image.SetVisible("Cover03", false);
else
if selected_items[1]==2 then
Image.SetVisible("Cover02", true);
Paragraph.SetText("Paragraph1", TextFile.ReadToString("AutoPlay\\Docs\\002.txt"));
Paragraph.SetVisible("Paragraph1", true);
Image.SetVisible("Cover01", false);
Image.SetVisible("Cover03", false);
else
if selected_items[1]==3 then
Image.SetVisible("Cover03", true);
Paragraph.SetText("Paragraph1", TextFile.ReadToString("AutoPlay\\Docs\\003.txt"));
Paragraph.SetVisible("Paragraph1", true);
Image.SetVisible("Cover01", false);
Image.SetVisible("Cover02", false);

end
end
end
Автор: Zloy_Gelud
Дата сообщения: 21.05.2012 14:45
JHeavy


Код: -- nMaxCover - максимальное количество обложек на странице
-- (чем меньше, тем быстрее будет работать)
local nMaxCover = 20;
local selected_items = ListBox.GetSelected(this);
if selected_items then
local nIndex = String.Repeat("0", 3 - #tostring(selected_items[1]))..selected_items[1];
Image.SetVisible("Cover"..nIndex, true);
Paragraph.SetText("Paragraph1", TextFile.ReadToString("AutoPlay\\Docs\\"..nIndex..".txt"));
Paragraph.SetVisible("Paragraph1", true);
local _tmp
Image.SetVisible("Cover"..nIndex, true);
for i = 1, nMaxCover do
if i ~= selected_items[1] then
_tmp = String.Repeat("0", 3 - #tostring(i))..i;
Image.SetVisible("Cover".._tmp, false);
Image.SetVisible("Cover".._tmp, false);
end
end
end
Автор: JHeavy
Дата сообщения: 21.05.2012 15:19
Zloy_Gelud спасибо за помощь и пример, текст работает, но картинки не отображаются. Я подозреваю что что-то сделал не то, хотя картинки переименовал, как вы указали. В какой папке физически они должны располагаться и имеет ли значение расширение файлов?


Добавлено:
Да и ещё в моем примере было несколько объектов Image, хотя Paragraph только один и в нем отображалась информация из txt файлов. Может в вашем примере картинки тоже берутся из файлов и отображаются в одном единственном Image объекте? Просто в коде я не могу найти строку откуда "берутся" картинки.
Автор: Zloy_Gelud
Дата сообщения: 21.05.2012 15:31
JHeavy
Надо переименовывать не картинки, а названия объектов Image.

Цитата:
Просто в коде я не могу найти строку откуда "берутся" картинки.

Изображения уже должны быть расположены на странице. Просто я в вашем коде также не увидел, что изображения как и текст должны динамически загружаться.
Автор: JHeavy
Дата сообщения: 21.05.2012 15:43
Zloy_Gelud Спасибо все работает. Я только начинаю в программе разбираться поэтому мне не всегда (точнее всегда) не все понятно.
Я так понимаю что это муторный подход, создавать по несколько десятков объектов, но я пока с этим справляюсь с трудом. На одной из страниц вы писали что такой подход уже давно морально устарел, что вы имели ввиду?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140

Предыдущая тема: Media Player Classic - Home Cinema (MPC-HC)


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