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

» Autoplay Media Studio

Автор: tavria2
Дата сообщения: 08.05.2007 18:43
2ALL
Может кому-то пригодится.

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

On Preload
Код: hWnd = Application.GetWndHandle();
WndStyle = DLL.CallFunction(_SystemFolder.."\\user32.dll", "SetWindowLongA", hWnd..", -20, 16640", DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL);
tSize = Window.GetSize(hWnd);
Window.SetSize(hWnd, tSize.Width - 10, tSize.Height - 5);
Автор: sly33
Дата сообщения: 08.05.2007 18:43
To Tavria2
Я так и сделал - убрал sTXTFilePath = String.Replace(sEXEFilePath, "exe", "txt", false);, и вставил tFilePath = String.SplitPath(sEXEFilePath);
-- собираем путь с новым расширением
sTXTFilePath = tFilePath.Drive..tFilePath.Folder..tFilePath.Filename..".rar"


To GOOSE
Я прекрасно понял что на что меняется, просто во второй ЛистБокс надо вывести и экзешники и заархивированные папки с несколькими файлами.А комменты здесь вообще ни при чём.Я ж об этом и толкую.
Автор: tavria2
Дата сообщения: 08.05.2007 19:02
sly33
Выкладывай проект, будем разбираться.
Автор: sly33
Дата сообщения: 08.05.2007 19:16
Этот проект с сайта уважаемого GOOSE "Учимся работать с AutoPlay" , только он помог мне добавить второй ЛистБокс.Основные изменения я как раз на предыдущей странице показал. Но это было сделано для русификаторов .exe , а теперь хотелось бы во второй ЛистБокс добавить архивы. В этом вся и суть вопроса.Я думал достаточно поменять где-то расширение и все дела....
Автор: tavria2
Дата сообщения: 08.05.2007 22:30
sly33
Верни код в первоначальное состояние, т.е. до моих изменений.
Ниже приведена часть кода, в которой нужно сделать изменения.
Код: Label.SetVisible("Label2", true);
-- Делаем видимым ЛистБокс русиков
ListBox.SetVisible("ListBox2", true);
-- Заполняем его
-- директория русиков
_SearchdirRus =_SourceFolder.."\\Autoplay\\Docs\\system\\Rus\\";
-- разлаживаем путь: диск, папка, имя и расширение
tFilePath = String.SplitPath(sEXEFileName);
-- убираем расширение выбранного файла в ЛистБокс1
_sEXEFileName = tFilePath.Drive..tFilePath.Folder..tFilePath.Filename;

-- ищем файлы с именем выбранного файла в ЛистБокс1
FileListRus = File.Find(_SearchdirRus, _sEXEFileName..".*", false, false, nil);
---добавляем в ЛистБокс2
if FileListRus then -- если есть русификатор
for j in FileListRus do
if (String.SplitPath(FileListRus[j]).Extension ~= ".txt") then -- исключаем файлы *.txt
resName = String.SplitPath(FileListRus[j]).Filename; -- получаем имя файла
resPath = _SearchdirRus..sEXEFileName; -- получаем путь
ListBox.AddItem("ListBox2", "Русификатор "..resName, resPath); -- добавляем запись в ЛистБокс2, имя файла пишем в 'text', а путь к нему в 'data'
end
end
end
Автор: sly33
Дата сообщения: 08.05.2007 23:00
tavria2

Здорово! Спасибо! Ура, Заработало!

Добавлено:
А как бы сделать чтобы папка открывалась только когда архив распаковывается? Спасибо.

tSelected = ListBox.GetSelected("ListBox2");
if tSelected then
for nTableIndex, nListBoxIndex in tSelected do

sFilePath = ListBox.GetItemData("ListBox2", nListBoxIndex);
result = File.Run(sFilePath, "", "", SW_SHOWNORMAL, false);


Zip.Extract("AutoPlay\\Docs\\system\\Rus\\TU2007TrialEN.zip", {"*.*"}, "C:\\My Folder", true, true, "", ZIP_OVERWRITE_NEVER, nil);
Zip.Extract("AutoPlay\\Docs\\system\\Rus\\Sequoia1_3XPInstall.zip", {"*.*"}, "C:\\My Folder", true, true, "", ZIP_OVERWRITE_NEVER, nil);

if Zip.Extract then
File.ExploreFolder("C:\\My Folder", SW_SHOWNORMAL);

end
end
end
Автор: tavria2
Дата сообщения: 09.05.2007 09:16
sly33

Цитата:
if Zip.Extract then

Читай справку, Zip.Extract ничего не возвращает, значит его нельзя использовать в проверке на успешность операции, используй Application.GetLastError.
Автор: Avandom
Дата сообщения: 11.05.2007 00:48
Люди извините, но кто скажет, я вот скачал AutoPlay Media Studio 6 с пакетом обновлений. Там в обновлениях попалась мне такая библиотека Microsoft Office-ская MSO.DLL на 9.5 метров... Скажите зачем ее туда засунули???
Или как я думаю скорее всего она нужна для запуска оффисных документов с диска, не имея сам Офис установленный на компе, типа откроется какой-то doc-viewer???
Скажите пожалуйста че мне с ней делать?
Автор: Andy B69
Дата сообщения: 11.05.2007 17:13
Подскажите как получить из autorun.exe проэкт файл, чтобы сделать обновления, или нужно делать проэкт по новой?
Автор: sly33
Дата сообщения: 11.05.2007 20:31
tavria2



Цитата:
Читай справку, Zip.Extract ничего не возвращает, значит его нельзя использовать в проверке на успешность операции, используй Application.GetLastError.


Оно "возвращает последний ошибочный кодекс" и "Используется, чтобы проверить, встречалась ли ошибка, выполняя последнее действие". Вот часть кода:

result = File.Run(sFilePath, "", "", SW_SHOWNORMAL, false);

end

data1 = "AutoPlay\\Docs\\system\\Rus\\TU2007TrialEN.zip"
Zip.Extract(data1, {"*.*"}, "C:\\My Folder4", true, true, "", ZIP_OVERWRITE_NEVER, nil);
if data1 then
File.ExploreFolder("C:\\My Folder4", SW_SHOWNORMAL);
end
data2 = "AutoPlay\\Docs\\system\\Rus\\Sequoia1_3XPInstall.zip"
Zip.Extract(data2, {"*.*"}, "C:\\My Folder5", true, true, "", ZIP_OVERWRITE_NEVER, nil);
if data2 then
File.ExploreFolder("C:\\My Folder5", SW_SHOWNORMAL);
end

на двойной клик в ЛистБоксе.(Малость тяжеловесно, но для меня - неплохо - оно ж работает).

error = Application.GetLastError();
if (error ~= 0) then
А вот чего then чтобы при каждом клике не получать все папки?
Автор: GOOSE
Дата сообщения: 11.05.2007 21:29
sly33
Application.GetLastError(); проверяет "успешность" последнего действия.
Соответственно, нужно применять там, где требуется подтвердить успешность...
После then выведи например диалоговое окно с сообщением, что при распаковке архива произошла ошибка и предложи юзеру варианты


Автор: sly33
Дата сообщения: 11.05.2007 21:38
GOOSE

А так про сообщение-то понятно, а нужно чтоб при клике на одну строку выдавалась одна папка,которая ей соответствует, а при File.Run вообще папок не было.

Автор: GOOSE
Дата сообщения: 12.05.2007 22:14
sly33

Цитата:
error = Application.GetLastError();
if (error ~= 0) then
А вот чего then чтобы при каждом клике не получать все папки?

Я ничего не понял.
В этом коде идет проверка на ошибку последнего действия (оно, кстати вот: File.ExploreFolder("C:\\My Folder5", SW_SHOWNORMAL);)
И чего мы тут проверяем???
Дальше:
Ты задаешь жестко путь в data1 и data2, потом запускаешь распаковку, а потом, через условие, открываешь папку в проводнике...
Ты можешь эту логику объяснить???
А File.Run(sFilePath, "", "", SW_SHOWNORMAL, false); у тебя вообще в начале...
А зачем после него стоит end????
Пока у тебя нет получения выделенной строки, у тебя и будет отрабатывать весь этот код, с первой строки до последней...
Если хочешь получить помощь, формулируй вопросы конкретнее, и не надо больше "кусков кода" из которых без стакана нифига не понятно...
Автор: sly33
Дата сообщения: 12.05.2007 23:04
GOOSE

Забудем про Application.GetLastError. Ситуация такая - в одном ЛистБоксе и экзешники и архивы (просто для некоторых программ нужен не один Rus.exe , а несколько файлов, сответственно они лежат в одной папке и сжаты в Zip .) Потому я на Double_Click делаю и File.Run и Zip.Extract. Ну а при том что я наваял при клике на одной строке открываются и все другие окна.
Сейчас у меня код выглядит так

tSelected = ListBox.GetSelected("ListBox2");
if tSelected then
for nTableIndex, nListBoxIndex in tSelected do

sFilePath = ListBox.GetItemData("ListBox2", nListBoxIndex);
result = File.Run(sFilePath, "", "", SW_SHOWNORMAL, false);

end
tFilePath = String.SplitPath(sEXEFileName);

_sEXEFileName = tFilePath.Drive..tFilePath.Folder..tFilePath.Filename..".zip";

target_folder = Dialog.FolderBrowse("Select a Folder", "C:\\");


-- Check to see if the user cancelled or an error occurred.
if (target_folder ~= "CANCEL") and (target_folder ~= "") then
-- Gets a list of the contents of a zip file.
zip_contents = Zip.GetContents("AutoPlay\\Docs\\system\\Rus\\TU2007TrialEN.zip", true);

-- Get the error code of the last action.
error = Application.GetLastError();

-- If an error occurred, display the error code message.
if (error ~= 0) then
Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION);
else
-- Take the table and turn it into a string with newlines for displaying.
zip_contents_display = Table.Concat(zip_contents, "\r\n", 1, TABLE_ALL);

-- Ask the user if they are sure they would like to unzip the contents.
result = Dialog.Message("Information", "The following files will be unzipped:\r\nClick the Cancel button to abort the process.\r\n\r\n"..zip_contents_display, MB_OKCANCEL)

-- If the user clicked Ok, unzip the files.
if (result == IDOK) then
-- Show the status dialog.
StatusDlg.Show();
-- Extract the contents of the Zip file.
Zip.Extract("_sEXEFileName", {"*.*"}, target_folder, true, true, "", ZIP_OVERWRITE_NEVER, nil);

-- Check the error code for the last action.
error = Application.GetLastError();

-- Hide the status dialog.
StatusDlg.Hide();

-- If an error occurred, display the error code message.
if (error ~= 0) then
Dialog.Message("Errror", tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION);
else
Dialog.Message("Success", "The unzipping was successful.", MB_OK, MB_ICONINFORMATION);
end
end
end
end

Всё здорово, но это только один Zip архив ,а их несколько. Так что я пока толкусь на одном месте. Если несложно подскажите как решить эту проблемку.
Автор: sly33
Дата сообщения: 13.05.2007 15:27
Нашёл очень простое решение и вроде всё работает так как хотелось


tSelected = ListBox.GetSelected("ListBox2");
if tSelected then
for nTableIndex, nListBoxIndex in tSelected do
sFilePath = ListBox.GetItemData("ListBox2", nListBoxIndex);
result = File.Run(sFilePath, "", "", SW_SHOWNORMAL, false);
sEXEFilePath = ListBox.GetItemData("ListBox2", nListBoxIndex);
        
        sEXEFileName = ListBox.GetItemText("ListBox2", nListBoxIndex);
        
        tFilePath = String.SplitPath(sEXEFilePath);
sTXTFilePath = tFilePath.Drive..tFilePath.Folder..tFilePath.Filename..".zip"
        end
end


Shell.Execute(sTXTFilePath, "explore", "", "", SW_SHOWNORMAL);
Автор: GOOSE
Дата сообщения: 13.05.2007 20:12
Чесс слово, даже не смотрел, но раз работает - молодец.
В предидущих постах у тебя была логическая ошибка: сначала ты получал динамический путь в переменной (смотря какой пункт выбран в листбоксе), а на распаковку прописывал жестко путь. Причем это было подряд. Вот тебе и ответ

Добавлено:
ЗЫ Еще раз прошу: пользуйся возможностями форума по форматированию сообщений! Читать очень сложно...
Автор: DenVl
Дата сообщения: 14.05.2007 00:09

Код: function Resize()
tblObjects = Page.EnumerateObjects();
    if (tblObjects ~= nil) then
        for index, sObject in tblObjects do
            Object = _tblObjectType[Page.GetObjectType(sObject)];
            local m_PosXR = ?.GetPos(sObject).X / Page.GetSize().Width;
        end
    end
end
Автор: tavria2
Дата сообщения: 14.05.2007 10:30
DenVl

Цитата:
А вот собственно и проблема: куда и как этот Object прикрутить, чтоб я мог получить значение m_PosXR.

Ты наверное хотел сделать что-то типа макроподстановки: local m_PosXR = Object.GetPos(sObject).X / Page.GetSize().Width; или local m_PosXR = Object..".GetPos(sObject).X / Page.GetSize().Width;"?!
AMS не поддерживает макро подстановку, по этому нужно либо описывать действия для каждого названия объекта в отдельности, что делает код громоздким и неудобным, либо пойти в обход, т.е. создать альтернативу макроподстановки.

Вот собственно алтернатива для твоего случая:(исправленно)
Код: function Macro(cScript)
tProp = {Width = 0, Height = 0}; -- св-ва создаваемого объекта
Page.CreateObject(OBJECT_HOTSPOT, "Macro", tProp); -- создаем невидимый объект HOTSPOT (можно любой другой)
Page.SetObjectScript("Macro", "On Click", cScript); -- записываем скрипт в "On Click" объекта "Macro"
Page.ClickObject("Macro"); -- выполняем скрипт
end

function Resize()
tblObjects = Page.EnumerateObjects();
if (tblObjects ~= nil) then
for index, sObject in tblObjects do
Object = _tblObjectType[Page.GetObjectType(sObject)];
cScript = "m_PosXR = "..Object..".GetPos(\""..sObject.."\").X / Page.GetSize().Width;";
Macro(cScript); -- выполняем скрипт
end
end
end
Автор: Avandom
Дата сообщения: 14.05.2007 22:41
Здраствуйте! Скажите пожалуйста как мне осуществить вот что..
К примеру у меня две страницы. На первой - объект Input и кнопка. На второй объект Paragraph.
Мне необходимо, чтобы например, на первой странице в Input вводилось слово, а при переходе на вторую страницу, в Paragraphe оно отображалось.
Делаю так: в глобальных функциях пишу
name = Input.GetText("Input1");
а на второй странице в свойствах OnPreload пишу
text = name;
Paragraph.SetText("Paragraph1", "Здравствуй "..text" Ты .....");

Подскажите как быть?
Автор: DenVl
Дата сообщения: 15.05.2007 01:02
tavria2
У меня после выполнения скрипта m_PosXR возращает вот такую строчку: Label.GetPos(sObject).X / Page.GetSize().Width;, а мне надо чтоб m_PosXR возвращало число, т.е вместо sObject подставлялось к примеру "Label1" а затем вычислялось m_PosXR... Как с этим справиться?
Автор: tavria2
Дата сообщения: 15.05.2007 09:19
DenVl
Sorry, это я напортачил с двойными кавычками. См. исправленный код выше.

Avandom

Цитата:
Делаю так: в глобальных функциях пишу
name = Input.GetText("Input1");

Код глобальных ф-ций автоматически выполняется только до загрузки страниц проекта, а в этот момент у тебя в "Input1" еще ничего нет. Выполняй свой код в событии On Click кнопки перехода на вторую страницу. Строка кода перехода на вторую страницу должна быть последней.
Автор: sly33
Дата сообщения: 15.05.2007 18:02
Господа, новая проблема: Есть программа, для неё видеоуроки( кнопка "Видеоуроки"-> в ЛистБоксе список видео). Как бы попроще организовать просмотр видео?
Автор: Avandom
Дата сообщения: 15.05.2007 22:15
Здравствуйте! Спасибо tavria2 - все получилось.
Подскажите вот что - У меня выходит Диалоговое окно Dialog.Message типа MB_OK. Так вот можно ли для него установить Позицию??? Чтобы оно например не в центре появлялось, а с координатами Х = 0, У = 0. Или нужно создавать другое собственное СВОЕ окно, а то это же идет от родительского и получится, что оно будет принимать значения главного окна программы?
Автор: DenVl
Дата сообщения: 16.05.2007 00:29
tavria2
А терь ругается на то, что sObject должен быть в кавычках, потому что Page.ClickObject("Macro") пытается выполнить такой код m_PosXR = Button.GetPos(Button1).X / Page.GetSize().Width;, а Button1 должен быть в кавычках
Автор: tavria2
Дата сообщения: 16.05.2007 00:42
DenVl

Цитата:
А терь ругается на то, что sObject должен быть в кавычках

Мда, что-то я не внимательный стал
Код исправил.

Avandom

Цитата:
Так вот можно ли для него установить Позицию???

Нельзя.

Цитата:
Или нужно создавать другое собственное СВОЕ окно

AMS не поддерживает создание окон.
Автор: DenVl
Дата сообщения: 16.05.2007 01:27
tavria2 спасиб те огромное!
Автор: sly33
Дата сообщения: 16.05.2007 18:31
Как просматривать видео понял, но есть вопрос - на кнопку OnClick в Video Properties:Video1 поставил Video.SetFullScreen, на OnEnter поставил Video.IsFullScreen, полный экран -> мелкий экран, а как бы в режиме полного экрана вывести на экран кнопки Пуск, Стоп и слайдер? Или хотя бы выставляя в Attributies больший размер экрана сохранить вышеназванные вещи, а то они пропадают при увеличении.
Автор: tavria2
Дата сообщения: 16.05.2007 19:03
sly33

Попробуй так:

Сохрани размеры окна проекта и объекта Video
Разверни окно проекта на весь экран, изменяя его размеры
Установи ширину объекта Video равной ширине окна проекта, а высоту равной высоте окна проекта минус высота видеопанели
После просмотра видео или при его отмене верни все размеры назад
Автор: sly33
Дата сообщения: 16.05.2007 19:36
tavria2

Цитата:
После просмотра видео или при его отмене верни все размеры назад


Это в смысле как? Это в глобальных функциях прописать?
Автор: servint
Дата сообщения: 16.05.2007 20:49
Люди!

Как убрать рамку с функции Splash Image???

Уже задолбала эта рамка...

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Matrix Screensaver


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