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

» Inno Setup (создание инсталяционных пакетов)

Автор: sjwrec
Дата сообщения: 19.03.2012 14:50
vintage_1
Ага, то есть нельзя задать позицию видео, а только можно получить её, правильно?


Цитата:
да и для вас сделаю процедуру перемотки видео ну и музыки

Спасибо буду ждать.
Автор: vintage_1
Дата сообщения: 19.03.2012 17:21
sjwrec

Цитата:
Ага, то есть нельзя задать позицию видео, а только можно получить её, правильно?

Да, правильно поняли
Автор: sjwrec
Дата сообщения: 19.03.2012 20:08
vintage_1
Да и вот что ещё. Возможно это не моё дело, но раз ваша библиотека проигрывает музыку и видео - почему бы не назвать её IsMedia.dll ?

А новый фикс не сможет WAV файлы проигрывать для озвучки кнопок?
Чтобы окончательно избавится от вызова MCI (winmm.dll).
Автор: Shegorat
Дата сообщения: 19.03.2012 20:15
sjwrec 21:08 19-03-2012
Цитата:
А новый фикс не сможет WAV файлы проигрывать для озвучки кнопок?   Чтобы окончательно избавится от вызова MCI (winmm.dll).


Библа и так использует winmm.dll и вызывает mciSendString для работы с видео и аудио, причем активным будет оставаться только последнее запущенное видео или аудио, т.к видео описывается как Background, а аудио как Music.
Автор: sjwrec
Дата сообщения: 19.03.2012 20:46
Shegorat
Да это так. Но комманды "sndPlaySound" там нет, а это лучший вариант проигрывания мелких WAV файлов.
Причём при воспроизведении следующего файла, предыдущий отключается не вызывая наложения звука.
Автор: Gnom3
Дата сообщения: 19.03.2012 20:52

Цитата:
Но комманды "sndPlaySound" там нет

А как, по твоему, там реализовано воспроизведение аудио?
Автор: vintage_1
Дата сообщения: 19.03.2012 22:06
sjwrec
Я и так уже работаю над загрузкой MIDI и WAVE файлов!
А ISVideo.dll назвал, потому что она как бэ создавалась для видео, но вдруг решил добавить музыку вот и все! Если вы настаиваете я могу библиотеку переименовать на ISMedia.dll....
Да в dll используется mciSendString (winmm.dll)...
Можно конечно и перейти на DXSound (DX), и тогда будет практически все форматы муз-файлов читать, ну и форматы видео...
P.S.: Но это случится в далёком будущем, так как не хочу работать с DX! Но проект ISMusic.dll есть (Создан на DX)!
Автор: ZverBY
Дата сообщения: 19.03.2012 22:24
Всем здрасте !!!
Кто-нибудь может подсказать, как можно сделать, чтобы установка шла не с arc-архива, лежащего рядом с файлом setup, а с bin-файла, в который запихан этот arc ???
Автор: sjwrec
Дата сообщения: 20.03.2012 00:02
Gnom3

Цитата:
А как, по твоему, там реализовано воспроизведение аудио?

Через комманду mciSendString. Практика показала что это совершенно разные комманды.


Добавлено:

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


Если имеется в виду стандартный архив Inno (bin). То последущую распаковку можно проделать:

1. Добавить в инсталлятор файл arc.exe (распаковщик arc архивов) через Секцию [Run]

2. Использовать IsDone - внимательно прочитав справку.

Второй вариант позволит вам видеть распаковку в прогресс-баре.

Первый же просто покажет коммандную строку и будет так распаковывать архив.


Добавлено:

Цитата:
Если вы настаиваете я могу библиотеку переименовать на ISMedia.dll

Я не настаиваю. Вы автор вам виднее. Просто я думал так будет правильнее. Но вам решать
Автор: Shegorat
Дата сообщения: 20.03.2012 05:23
sjwrec 15:50 19-03-2012
Цитата:
Ага, то есть нельзя задать позицию видео, а только можно получить её, правильно?

Да нет, можно. Код будет примерно таким

Код: function mciSendString(lpstrCommand: String; lpstrReturnString: PAnsiChar; uReturnLength, hwndCallback: Integer): Integer; external 'mciSendStringA@winmm.dll stdcall';

procedure SetPosition(Pos: Integer); //Pos - процент от 0 до 100
var
s: String; n: Integer;
begin
s:= StringOfChar(#0, 32);
mciSendString('status AVIFIle length wait', s, 32, 0);
n:= StrToInt(s);
mciSendString('play AVIFIle from '+inttostr(round(pos*n/100)), s, 32, 0);
end;
Автор: vintage_1
Дата сообщения: 20.03.2012 11:48
Shegorat

Цитата:
Да нет, можно. Код будет примерно таким

Хех, код как у меня почти
Автор: mdid
Дата сообщения: 20.03.2012 11:55
подскажите плиз а то совсем завис...
надо увеличить рабочие размеры формы...размер самого окна увеличить не проблема через WizardForm....а вот как увеличить рабочую область?
Автор: Snoopak96
Дата сообщения: 20.03.2012 13:57
mdid

Код:
WizardForm.InnerNotebook.SetBounds(ScaleX(0), ScaleY(0), ScaleX(640), ScaleY(313));
WizardForm.OuterNotebook.SetBounds(ScaleX(0), ScaleY(0), ScaleX(640), ScaleY(313));
Автор: mdid
Дата сообщения: 20.03.2012 15:00
Snoopak96
что то как то не так Ссылка
видимо сместился уже TWizardPage иль хз...но как двигать TWizardPage я тож не нашел
------------------------------------
путем WizardForm.InnerNotebook.SetBounds(ScaleX(20), ScaleY(100) проблема решилась...спасибо за совет

Автор: sjwrec
Дата сообщения: 20.03.2012 20:22
Shegorat
А вы можете мне помочь, чтобы происходило получение текущей позиции видео. И видео перематывалось на 5 секунд вперёд и назад.

Вот мой скрипт: Ссылка
Автор: Snoopak96
Дата сообщения: 20.03.2012 20:59
mdid
я чисто для примера написал, как вам уже надо делайте сами.
Автор: Shegorat
Дата сообщения: 21.03.2012 09:02
sjwrec 21:22 20-03-2012
Цитата:
А вы можете мне помочь, чтобы происходило получение текущей позиции видео. И видео перематывалось на 5 секунд вперёд и назад.  

Думаю как-то так [more=Код][Files]
Source: MEDIA\Video.avi; Flags: dontcopy

[Code]
//var
//time, ReturnLength:integer;
//ReturnString, ST:string;
var
CanUseXvid, VideoPlayed, VideoPause: Boolean;
time: Integer;

function mciSendString(lpstrCommand: String; lpstrReturnString: PAnsiChar; uReturnLength, hwndCallback: Integer): Integer; external 'mciSendStringA@winmm.dll stdcall';

procedure MenuOnClick3(Sender: TObject); // Воспроизведение/Пауза
begin
if CanUseXvid then begin
if VideoPlayed=False then begin
mciSendString('open '+ExpandConstant('{tmp}\Video.avi')+' type AVIVideo alias Video parent '+IntToStr(MainForm.Handle)+' style child','',0,0);
mciSendString('put Video window at 0 0 '+IntToStr((MainForm.Width)-1)+' '+IntToStr((MainForm.Height)-20)+'','',0,0);
mciSendString('set Video time format ms','',0,0);
mciSendString('play Video repeat','',0,0);
MainForm.ClientWidth:= 800;
MainForm.ClientHeight:= 600;
MainForm.Show;
VideoPlayed:=True;
VideoPause:=False;
end else begin
if VideoPause=False then begin
mciSendString('pause Video','',0,0);
VideoPlayed:=True;
VideoPause:=True;
end else begin
mciSendString('play Video repeat','',0,0);
MainForm.ClientWidth:= 800;
MainForm.ClientHeight:= 600;
MainForm.Visible:=True;
VideoPlayed:=True;
VideoPause:=False;
end;
end;
end;
end;

procedure VideoOnStop(Sender: TObject); // Стоп и Закрытие окна Видео
begin
if VideoPlayed=True then begin
mciSendString('close Video','',0,0);
MainForm.Hide;
VideoPlayed:=False;
VideoPause:=False;
end;
end;

procedure VideoOnSeekFF(Sender: TObject); // Перемотка Видео на 5 сек вперёд
var
rs: String;
begin
if VideoPlayed=True then begin
rs:= StringOfChar(#0, 64);
mciSendString('status Video position',rs,64,0);
time:=StrToInt(rs)+5000;
if time>StrToInt(rs) then
time:= StrToInt(rs);
mciSendString('seek Video to '+IntToStr(time)+'','',0,0);
mciSendString('play Video repeat','',0,0);
end;
end;

procedure VideoOnSeekREW(Sender: TObject); // Перемотка Видео на 5 сек назад
var
rs: String;
begin
if VideoPlayed=True then begin
rs:= StringOfChar(#0, 64);
mciSendString('status Video position',rs,64,0);
time:= StrToInt(rs)-5000;
if time<0 then time:= 0;
mciSendString('seek Video to '+IntToStr(time)+'','',0,0);
mciSendString('play Video repeat','',0,0);
end;
end;

procedure VideoPlayer();
begin
if not FileExists(ExpandConstant('{tmp}\Video.avi')) then ExtractTemporaryFile('Video.avi');
// Начало Создание MEDIA.
MainForm.Visible:=False;
MainForm.ClientWidth:= 800;
MainForm.ClientHeight:= 600;
// MainForm.BorderStyle:=bsSingle;
MainForm.Caption:= 'SJW Install Wizard - Media Player';
VideoPlayed:=False;
VideoPause:=False;
// time:=1;
end;[/more]. Не проверял, но должен работать.
Автор: quorg
Дата сообщения: 21.03.2012 12:43
Просьба для тех, у кого есть готовое решение: Нужен диалог открытия графического файла с предпросмотром.
Автор: sjwrec
Дата сообщения: 21.03.2012 13:08
Shegorat
Спасибо за исправленный скрипт. Всё работает! Правда пришлось удалить некоторые строки. И я также на основе получения данных, прикрутил показ текущей позиции в заголовке окна Main Form.


Код:
function TimeToStr(rs: String): String; // Переводим текущую позицию Видео в Время. Взят из скрипта IsVideo
var
vMsc, vSms, vSec, vMin, vidtim: Integer;
begin
vidtim:= StrToInt(rs);
vMsc := (vidtim) div 1000;
vSec := (vidtim) div 1000;
vMin := (vSec) div 60;
vSms := (vMsc) mod 60;
Result:= IntToStr(vMin)+':'+IntToStr(vSms);
end;

procedure VidOnTimer(Sender: TObject); // Показ Времени в заголовке окна по таймеру
begin
rs:= StringOfChar(#0, 64);
mciSendString('status Video position',rs,64,0);
MainForm.Caption:= 'SJW Install Wizard - Video Player - Воспроизведение: '+TimeToStr(rs);
end;
Автор: Shegorat
Дата сообщения: 21.03.2012 13:14
sjwrec 14:08 21-03-2012
Цитата:
 vMsc := (vidtim) div 1000;

Вообще-то время и так возвращается в миллисекундах, так что

Код: vMsc:= StrToInt(rs);
vMin:= trunc(vMsc/1000/60);
vSec:= round((vMsc - (vMin*1000*60))/1000);
Автор: SotM
Дата сообщения: 21.03.2012 20:18
quorg
Ты сразу напиши для чего такое нужно в инсталляторе!
Автор: sjwrec
Дата сообщения: 21.03.2012 20:40
Shegorat
И ещё хотелось бы чтобы время показывалось в этом формате "00:00", а не как у меня "0:0"
Автор: vintage_1
Дата сообщения: 21.03.2012 20:58
sjwrec
Вот можно так сделать (00:00:00), Пример:

Цитата:
function TimeToStr(TimeSec: Cardinal): String;
var
H,M,S : Integer;
HStr,MStr,SStr : String;
begin
TimeSec := TimeSec div 1000;
H := (TimeSec div 60) div 60;
M := (TimeSec div 60) - (60*H);
S := TimeSec - ((TimeSec div 60) * 60);
HStr := IntToStr(H);
IF Length(HStr)=1 then HStr := '0' + HStr;
MStr := IntToStr(M);
IF Length(MStr)=1 then MStr := '0' + MStr;
SStr := IntToStr(S);
IF Length(SStr)=1 then SStr := '0' + SStr;
Result := Format('%S:%S:%S',[HStr,MStr,SStr]);
end;


ЗЫ: Думаю можно и переделать данный пример на "00:00"...
Автор: sjwrec
Дата сообщения: 21.03.2012 21:29
vintage_1
Спасибо! Попробую переделать

Добавлено:
vintage_1
Вот так переделал:

Код:
function TimeToStr(rs: String): String;
var
H,M,S,MS: Integer;
MStr,SStr : String;
begin
MS := StrToInt(rs) div 1000;
H := (MS div 60) div 60;
M := (MS div 60) - (60*H);
S := MS - ((MS div 60) * 60);
MStr := IntToStr(M);
IF Length(MStr)=1 then MStr := '0' + MStr;
SStr := IntToStr(S);
IF Length(SStr)=1 then SStr := '0' + SStr;
Result := Format('%S:%S',[MStr,SStr]);
end;
Автор: Karbid87
Дата сообщения: 22.03.2012 05:49
Помню тут как-то отдавали библиотеку на доработку, чтобы в XP тоже можно было делать прозрачные инсталлы. Её доделали и где взять? Заранее спасибо за ответы.
Автор: sjwrec
Дата сообщения: 22.03.2012 10:40

Цитата:
Помню тут как-то отдавали библиотеку на доработку, чтобы в XP тоже можно было делать прозрачные инсталлы. Её доделали и где взять? Заранее спасибо за ответы.

Можно прозрачность через системную библиотеку сделать. Работает и в ХР и в 7. Но прозрачным будет всё окно полностью. Если вас это интересует. Напишу пример.
Автор: Shegorat
Дата сообщения: 22.03.2012 10:53
Karbid87 06:49 22-03-2012
Цитата:
Помню тут как-то отдавали библиотеку на доработку, чтобы в XP тоже можно было делать прозрачные инсталлы. Её доделали и где взять? Заранее спасибо за ответы.

Нет, еще не доделали. И там используются стили, для задания форме определенного вида.

sjwrec 21:40 21-03-2012
Цитата:
И ещё хотелось бы чтобы время показывалось в этом формате "00:00", а не как у меня "0:0"

PadZ уже отменили?

Код: S:= PadZ(IntToStr(vMsc div 60000), 2)+':'+PadZ(IntToStr((vMsc div 1000) mod 60), 2);
Автор: YURSHAT
Дата сообщения: 22.03.2012 10:56

Цитата:
Помню тут как-то отдавали библиотеку на доработку, чтобы в XP тоже можно было делать прозрачные инсталлы. Её доделали и где взять? Заранее спасибо за ответы.

Да, библиотеку отдали мне, но я честно говоря и забыл уже про нее. Спасибо что напомнили, допилю на днях...


Цитата:
Можно прозрачность через системную библиотеку сделать. Работает и в ХР и в 7. Но прозрачным будет всё окно полностью.

Это не то. Речь идет об использовании в инсталле скина, кототрый и на ХР делает подобие Aero в семерке...
Автор: quorg
Дата сообщения: 22.03.2012 10:58

Цитата:
Ты сразу напиши для чего такое нужно в инсталляторе!

Есть программулечка - пазлы, проблема в том, что картинка одна и вбита в ресурсы файла...
Появилась идея сделать инсталлятор, без деинсталлятора, который позволяет выбрать картинку, пропатчить этой картинкой основную программу (всё во временной папке установщика), запустить полученный файл (тут бы желательно свернуть инсталлятор и ждать окончания работы пазлов), потом по выбору: сохранить полученный файл со своёй картинкой, выбрать другой файл или выйти из программы (с удалением промежуточных файлов).
Диалог можно через кнопку или вообще отдельную страницу.
Вот как-то так...
Патчить, наверно, лучше через RasHacker, поэтому не помешали бы примеры использования ключей для замены ресурсов.
Автор: SotM
Дата сообщения: 22.03.2012 15:32
quorg
Исходя из твоего описания складывается логичный вопрос - а при чём здесь Inno? Тебе ведь в принципе ничего не нужно устанавливать.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177

Предыдущая тема: поиск


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