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

» Autoplay Media Studio

Автор: tavria2
Дата сообщения: 23.02.2007 15:16
countryman
Ты пытаешся использовать одну переменную для хранения двух различных значений: имя zip-файла и имя извлекаемого файла - так работать не будет. Заведи еще одну переменную, например cFileZip, в которой храни путь и имя zip-файла, а переменная sFile будет получать имя файла для распаковки:

Код: cFileZip = "путь и имя zip-файла";
Zip.Extract(cFileZip, {sFile}, sTempDirectory, false, false, "password", 0, nil);
Автор: countryman
Дата сообщения: 23.02.2007 15:45
tavria2

Сделал как ты советуешь, добавил переменную - все равно не получается.

Код:

sTempDirectory = _TempFolder .. "\\";
tSelected = ListBox.GetSelected("ListBox2");
cFileZip = ListBox.GetItemData("ListBox2", tSelected[1]);
Zip.Extract(cFileZip, {sFile}, sTempDirectory, false, false, "1", 0, nil);
ViewerPath = _SourceFolder .. "\\PowerPointViewer\\pptview.exe";
Label.SetText("Label1", sFile); - при запуске выдает Argument 2 must be of type string. Если эту строчку закомментить, ту же ошибку выдает на следующей строке, где тоже встречается sFile:

File.Run(ViewerPath, sFile, "", SW_SHOWNORMAL, true);


Может, эту sFile нужно где-то дополнительно объявлять??
Ты уж извини, что надоедаю по пустякам, но у меня пока что это никак не получается. Хочется сделать все быстро, сижу тут, варианты разные пробую, но! увы и ах! - ничего пока что удаваться не собирается. В смысле - не подумай, что я информационным тунеядством занимаюсь, сижу тут, хэлпы читаю, но пока без толку...
Кстати, раньше тоже думал добавить еще одну переменную, но и это не заработало

Кстати, у меня вопрос: почему sTempDirectory называется именно так, а не, например, сTempDirectory?? Это просто совпадение? Или же есть переменные, которым можно присваивать только определенные категории значений (обозначать путь или нечто вроде)???
Автор: tavria2
Дата сообщения: 23.02.2007 15:58
countryman
Что у тебя находится в ListBox, в полях Text и Data?

Цитата:
почему sTempDurectory называется именно так, а не, например, сTempDurectory??

Это пользовательская переменная - имя задаешь сам.
Автор: DenVl
Дата сообщения: 23.02.2007 16:02
А вообще важно или нет какой командой запускать экзешник: File.Run (...) или File.Open (...)?
Автор: countryman
Дата сообщения: 23.02.2007 16:21
tavria2


Поле Text - названия презентаций, "Презентация бла-бла-бла №1"
В поле Data - адрес файла, "AutoPlay\Docs\1.zip"
1.zip запаролен.
Почему не работает - не представляю, по идее все нормально.
Автор: tavria2
Дата сообщения: 23.02.2007 17:47
DenVl
Чем тебя не устраивает File.Run?


countryman
В 1.zip содержится 1 файл или несколько?
Автор: DenVl
Дата сообщения: 23.02.2007 19:08
tavria2
Просто неизвестно будет ли это вообще экзешник или, например, архив, или текстовый файл, или еще что-нидь...вот я и думаю: File.Run запустит ток экзешник, а для File.Open наверно без разницы?
Автор: tavria2
Дата сообщения: 23.02.2007 21:37
DenVl
В твоем случае наверное лучше использовать Shell.Execute.
Автор: tavria2
Дата сообщения: 24.02.2007 00:57
countryman
Если в каждом архиве находится по одному файлу...
Код: cViewerPath = _SourceFolder .. "\\PowerPointViewer\\pptview.exe";
tSelected = ListBox.GetSelected("ListBox2");
cZipFileName = _SourceFolder .. "\\"..ListBox.GetItemData("ListBox2", tSelected[1]); -- путь и имя zip-файла
tFiles = Zip.GetContents(cZipFileName, true); -- список файлов в архиве, в виде таблицы
cFileName = tFiles[1]; -- имя файла в архиве (если файл единственный в архиве)
Zip.Extract(cZipFileName, {cFileName}, _TempFolder, true, false, "password", 0, nil); -- распаковываем во временную папку
error = Application.GetLastError(); -- проверка на ошибку
if (error ~= 0) then -- ошибка
Dialog.Message("Ошибка", "Не удалось извлечь файл из архива.", MB_OK, MB_ICONSTOP, MB_DEFBUTTON1);
else -- нет ошибок
if (File.DoesExist(_TempFolder.."\\"..cFileName)) then -- если файл найден во временной папке
File.Run(cViewerPath, cFileName, _TempFolder, SW_SHOWNORMAL, true); -- запускаем презентацию
File.Delete(_TempFolder.."\\"..cFileName, false, false, false, nil); -- удаляем файл из временной папки
else -- файл не найден во временной папке
Dialog.Message("Ошибка", "Файл не найден.", MB_OK, MB_ICONSTOP, MB_DEFBUTTON1);
end
end
Автор: countryman
Дата сообщения: 24.02.2007 09:23
tavria2

НЕ РАБОТАЕТ! Пишет: "Не удалось извлечь файл из архива.""
Блин...
Слушай, а такой вопрос: возможно, будешь смеяться, но ИМЕЕТ ЛИ ЗНАЧЕНИЕ, КАКОЙ АРХИВАТОР УСТАНОВЛЕН НА КОМПЕ???? А то у меня 7zip.

Через 5 минут:
Дурацкий вопрос )

ЗАРАБОТАЛО! НО! я немного поменял код:

cViewerPath = _SourceFolder .. "\\PowerPointViewer\\pptview.exe";
tSelected = ListBox.GetSelected("ListBox2");
cZipFileName = _SourceFolder .. "\\"..ListBox.GetItemData("ListBox2", tSelected[1]);
tFiles = Zip.GetContents(cZipFileName, true);
cFileName = tFiles[1];
Zip.Extract(cZipFileName, {cFileName}, _TempFolder, true, false, "******", 0, nil);


if (File.DoesExist(_TempFolder.."\\"..cFileName)) then
File.Run(cViewerPath, cFileName, _TempFolder, SW_SHOWNORMAL, true);
File.Delete(_TempFolder.."\\"..cFileName, false, false, false, nil);
end

СПАСИБО ТЕБЕ ОГРОМНОЕ!!!
Автор: tavria2
Дата сообщения: 24.02.2007 09:54
countryman

Цитата:
ИМЕЕТ ЛИ ЗНАЧЕНИЕ, КАКОЙ АРХИВАТОР УСТАНОВЛЕН НА КОМПЕ????

Нет.

Цитата:
ЗАРАБОТАЛО! НО! я немного поменял код:

Если у тебя в этом варианте все работает без проверки на ошибку, а с проверкой не хочет, то возможно у тебя глючит AMS, скорее всего из за русификатора. Я уже видел рабочий код, который не правильно работал на русифицированной версии. Если все-таки ты не будешь использовать проверку на ошибку, тогда убери строку: error = Application.GetLastError();
Автор: countryman
Дата сообщения: 24.02.2007 10:13
tavria2


Уже сделано!

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

Еще раз (и думаю, не последний) спасибо



Добавлено:
И еще один вопрос:

Как лучше всего сделать прогресс бар или нечто похожее?

Зачем нужно: фильм занимает, допустим, 100 Мб. Надо каким-то "интеллигентным" образом занять юзера в то время, пока фильм распаковывается в папку Темп. Где-то в форуме встречал, как прикрутить прогресс бар на разархивирование файла, но сейчас никак не могу найти, а самому не придумать . В хэлпе как-то размыто описано.

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

Кто-то уже делал похожее? Поделитесь, плиз!

Добавлено:
Вот код лист-бокса ListBox2 "Он дабл-клик" (то есть, в момент выбора фильма происходит его разархивация в Темп.)

moviesel = ListBox.GetSelected("ListBox2");
cZipFileName = _SourceFolder .. "\\"..ListBox.GetItemData("ListBox2", moviesel[1]);
tFiles = Zip.GetContents(cZipFileName, true);
playmovie = tFiles[1];

Zip.Extract(cZipFileName, {playmovie}, _TempFolder, true, false, "******", 0, nil);
Video.Load("Video1", _TempFolder.."\\"..playmovie, true, false);

vIsVisible = Video.IsVisible("Video1");
if (not vIsVisible) then
    Video.SetVisible("Video1", true);
end


Очень хочу показать пользователю прогресс, чтобы он не чувствовал себя брошенным

Добавлено:
Да, посмотрел примеры - нужен платный плагин....
Есть какой халявный выход?
Автор: tavria2
Дата сообщения: 24.02.2007 13:40
countryman
В справке есть пример, см. StatusDlg.Show() и StatusDlg.Hide().
Автор: countryman
Дата сообщения: 24.02.2007 13:44
ХА!
Нашел вот эТТо:

StatusDlg.Show(MB_ICONNONE, false);
        
Zip.Extract(cZipFileName, {playmovie}, _TempFolder, true, false, "1", 0, nil);
            
StatusDlg.Hide();

Но, опять-таки, кроме статуса выполнения пишет путь распаковки
Автор: tavria2
Дата сообщения: 24.02.2007 14:43
countryman
Читать Справку StatusDlg.
Автор: countryman
Дата сообщения: 24.02.2007 16:55
tavria2

Вот что натворил:


StatusDlg.Show(MB_ICONINFORMATION, false);

StatusDlg.SetTitle("Подготовка просмотра")

Zip.Extract(cZipFileName, {playmovie}, _TempFolder, true, false, "*********", 0, 1 );
    

StatusDlg.SetMeterPos (1);

StatusDlg.SetStatusText("Статус выполнения");
    
StatusDlg.Hide();

Но нерабочее...

Подскажи, пожалуйста, а то я себе голову сломаю.
Автор: tavria2
Дата сообщения: 24.02.2007 18:24
countryman
Для изменения статусных сообщений нужно использовать ф-цию CallBack:

Код: function CallBack (sPath, nPercent, nStatus)
if nStatus == ZIP_STATUS_MAJOR then
StatusDlg.SetTitle("Подготовка просмотра");
StatusDlg.SetMessage("Пожалуйста подождите...");
StatusDlg.SetStatusText("Выполнено: ".. nPercent .."%");
StatusDlg.SetMeterPos(nPercent);
StatusDlg.SetMeterRange(1, 100);
end
end

StatusDlg.Show(MB_ICONINFORMATION, false);
Zip.Extract(cZipFileName, {playmovie}, _TempFolder, true, false, "*********", 0, CallBack);
StatusDlg.Hide();
Автор: countryman
Дата сообщения: 24.02.2007 18:46
tavria2

Все превосходно работает!
Спасибо тебе огромное!!!
ЗЫ. Тоже смотрел в сторону CallBack, но не смог... В синтаксисе не силен
Автор: Djon1970
Дата сообщения: 25.02.2007 06:16
tavria2
Спасибо за часы.

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

И еще: можно ли сделать, чтобы была функция у кнопки, как в Autoplay Menu Bulder, - извлечь cd??

И еще: я уже задавал вопрос, но GOOSE может неправильно понял или я неправильно задал. Можно ли сделать, чтобы допустим на менюшке кнопка на программу, нажимаешь на нее, менюшка улетает в панель задач, а вместо нее появляется другая, меньше размером, ну и там серийник, установить, инфа и т.п. и кнопочка закрыть эту менюшку, при нажатии на нее, эта менюшка закрывается, а та из панели вылетает обратно на монитор? Во как!
Автор: tavria2
Дата сообщения: 25.02.2007 11:32
Djon1970

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

Под менюшкой, скорее всего ты подразумеваешь страницу/окно проекта?! Если так, то в дальнейшем называй вещи своими именами, потому-что меню и страница/окно проекта - это не одно и тоже.

Для создания произвольной формы окна проекта, нужно использовать маску, которая является графическим файлом. Изображение маски должно сотоять из 2-х цветов: черного и белого. Черный цвет выступает в роли прозрачного цвета. Например, если нужно сделать круглую форму, то на черном фоне нужно нарисовать круг заполненный белым цветом.

Что бы прикрутить маску к своему проекту, нужно в установках проекта выбрать стиль "Custom Mask" и указать имя файла являющегося маской. Используя этот стиль, все страницы проекта будут иметь форму определенную маской.
Если необходимо, чтобы каждая страница проекта имела свою форму, то нужно создать несколько масок и в событиях страниц On Preload использовать действие Window.SetMask, с помощью которого загружать нужную маску.

Цитата:
можно ли сделать, чтобы была функция у кнопки, как в Autoplay Menu Bulder, - извлечь cd??

Я никогда не сталкивался с Autoplay Menu Bulder и не знаю его возможностей, ели нужен код открытия/закрытия лотка CD/DVD привода, то см. код ниже:

Код: OPEN = true; -- открыть лолток
CLOSE = false; -- закрыть лоток

function CdTray(cDrive, lEject)
cAlias = "MyCD"; -- Alias CD (псевдоним)
cMsg="Open "..cDrive.." Alias "..cAlias.." Type CDAudio"; -- команда инициализация CD
DLL.CallFunction(_SystemFolder.."\\winmm.dll", "mciSendStringA", "\""..cMsg.."\",0,0,0", DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL);    
if (lEject == OPEN) then -- если параметр открыть лоток
cMsg="Set "..cAlias.." Door Open"; -- команда открыть лоток    
DLL.CallFunction(_SystemFolder.."\\winmm.dll", "mciSendStringA", "\""..cMsg.."\",0,0,0", DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL);        
else -- если параметр закрыть лоток
cMsg="Set "..cAlias.." Door Closed"; -- команда закрыть лоток
DLL.CallFunction(_SystemFolder.."\\winmm.dll", "mciSendStringA", "\""..cMsg.."\",0,0,0", DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL);        
end
end

CdTray("D:", OPEN); -- открыть лолток CD-ROM "D:"
CdTray("D:", CLOSE); -- закрыть лолток CD-ROM "D:"

-- P.S. Букву диска можно указывать в формате: "D", "D:" или "D:\\"
Автор: countryman
Дата сообщения: 26.02.2007 12:34
tavria2


Я опять...
Такая трабла: при первом запуске приложения (то есть при выборе первого файла) распаковка архива отображается корректно, при запуске всех последующих - прогрессбар отображается, но индикатор прогресса сразу указывает 100% выполнение.

ЧТО ДЕЛАТЬ???? КТО ВИНОВАТ????
Автор: tavria2
Дата сообщения: 26.02.2007 13:19
countryman

Цитата:
при запуске всех последующих - прогрессбар отображается, но индикатор прогресса сразу указывает 100% выполнение.

Не знаю, только что проверил - все ОК.
Автор: Djon1970
Дата сообщения: 26.02.2007 20:21
tavria2
Почему-то не получается ничего. Сделал две страницы одного вида, стал делать третью, хотел чтобы она была другой конфигурации, создал третью страницу, она получилась, по виду, как маска тех двух. В сценарии в On Preload прописал: Window.SetMask(Application.GetWndHandle(), "AutoPlay\\Images\\mask_1.png", true, 0);
Вообще какая - то абракадабра получилась!!! Подскажите, пожалуйста, как побороть это все, мозги уже кипят. Мне бы хотя-бы просто прямоугольную, без всяких загибов на углах.
Автор: tavria2
Дата сообщения: 26.02.2007 21:53
Djon1970
Вроде все правильно, может маска не корректная или с именами файлов напутал?!
Автор: Djon1970
Дата сообщения: 27.02.2007 05:13
tavria2
А в тех, первых двух страницах надо, что-нибудь в сценарии указывать??
Автор: tavria2
Дата сообщения: 27.02.2007 08:15
Djon1970

Цитата:
А в тех, первых двух страницах надо, что-нибудь в сценарии указывать??

Для применения маски к 3-й странице, достаточно сделать загрузку маски в On Preload 3-й страницы.

У тебя вообще получилось применить маску хоть к какой нибудь странице?
Автор: Djon1970
Дата сообщения: 27.02.2007 15:56
tavria2

Цитата:
У тебя вообще получилось применить маску хоть к какой нибудь странице?


Сейчас опишу проект, может я что-то неправильно сделал.
В опциях проекта у меня стоит:
Подвижность-галочка
Размер страницы-Custom, ну и соответственно ширина и высота
Выбрать маску-чекбокс
Применить к окну-галочка
И указано нахождение графического файла .png

В опциях страницы стоит:
Фон-чекбокс на изображении и указан графический файл .jpg
Наследование-нету, нету

И вот когда я выбираю функцию-добавить страницу у меня появляется белый фон png от предыдущих страниц.

Добавлено:
Извиняюсь, что пишу подряд второй пост. Но по прошествии двух часов, появились результаты и новые вопросы. Кое-чего я добился. В опциях проекта, в функции Стиль я поставил чекбокс на плоский. А в свойствах страницы указал, чтобы для фона использовался рисунок .jpg, а на вкладке сценарий указал:

Код: Window.SetMask(Application.GetWndHandle(), "AutoPlay\\Images\\mask.png", true, 0);
Автор: tavria2
Дата сообщения: 27.02.2007 22:13
Djon1970

Использование индивидуальных масок окна, для каждой страницы проекта.
WindowCustomMask.apz (42 кб).
Автор: Djon1970
Дата сообщения: 28.02.2007 10:10
tavria2
Классно, но опять появились проблемы. Почему-то у тебя в примере, которое окно поменьше стоит в середине, а у меня улетает в правый верхний угол маски. Тогда я сделал белый фон маски в том углу, но тогда при клике на ссылку, маленькое окошко тоже открывается в том же месте, а мне хочется чтобы посередине предыдущего меню.
Ничего не могу понять. Как ее подвинуть в программе на середину? Оно стоит как вкопанное.
А как сделать .apz? Я бы выложил свой проект здесь, может понятней тогда было бы.

PS: tavria2 ты сам рисовал окна для проекта? Классно. Если ты не против, можно я использую их в своем проекте, по причине отсутствия фантазии и корявых ручек в фотошопе.
Автор: Kindly
Дата сообщения: 28.02.2007 10:13
Проблема с распаковкой с параметрами. Задача: осуществить распаковку из 7z архива в папку, которая прописана в реестре. Только не обращайте внимание на то, что параметры не там указаны - разницы нет. Если вместо "..reg_data.." написать жесткий путь, например, C:\\EXTRACTED, то файл будет извлечен в эту папку.

reg_data = Registry.GetValue(HKEY_CURRENT_USER, "Software\\MY PROGRAM", "InstallFolder", true);
File.Run(_SourceFolder .."\\Crack\\7z.exe e crack.7z -y -o"..reg_data.."", "", _SourceFolder .."\\Crack", SW_SHOWNORMAL, true);
error = Application.GetLastError();
if (error ~= 0) then
Dialog.Message("Error", "Crack not found!", MB_OK, MB_ICONEXCLAMATION, MB_DEFBUTTON1);
end

Проблема заключается в невозможности правильно указать переменную в качестве параметра.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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