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

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

Автор: Raf_SE
Дата сообщения: 02.06.2008 14:06
А ктонить может модифицировать код слайдшоу так, чтобы инсталляха сама определяла какой у юзера монитор (простой или широкоэкранный) и в зависимости от этого использовался определенный набор картинок (для простого монитора 640x480 для широкоэкранного 704x368) ?
В том что это возможно, уверен на 100% ибо таким образом было сделано слайдшоу в золотом (полностью русском) издании Oblivion.

[more=Код слайдшоу][Code]
type TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);

var Form : TSetupForm;
BackImage, SlideImage: TBitmapImage;
TimerID: LongWord;
S : String;
Width, Height:Integer;


function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:innocallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';

function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';


function PercentProgress(): Integer;
begin
with WizardForm.ProgressGauge do
begin
Result:=(Position-Min)/((Max - Min)/100)
end
end;


procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);

var Percent: Integer;

begin
Percent:= PercentProgress;
with SlideImage do
begin
if ((percent>0) and (percent<4) and (Tag<>1)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd1.bmp')
Tag:=1
end
else
if ((percent>5) and (percent<8) and (Tag<>2)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd2.bmp')
Tag:=2
end
else
if ((percent>9) and (percent<13) and (Tag<>3)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd3.bmp')
Tag:=3
end
else
if ((percent>14) and (percent<18) and (Tag<>4)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd4.bmp')
Tag:=4
end
else
if ((percent>19) and (percent<23) and (Tag<>5)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd5.bmp')
Tag:=5
end
else
if ((percent>24) and (percent<28) and (Tag<>6)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd6.bmp')
Tag:=6
end
else
if ((percent>32) and (percent<36) and (Tag<>7)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd7.bmp')
Tag:=7
end
else
if ((percent>37) and (percent<41) and (Tag<>8)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd8.bmp')
Tag:=8
end
else
if ((percent>42) and (percent<46) and (Tag<>9)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd9.bmp')
Tag:=9
end
else
if ((percent>47) and (percent<51) and (Tag<>10)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd10.bmp')
Tag:=10
end
else
if ((percent>52) and (percent<56) and (Tag<>11)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd11.bmp')
Tag:=11
end
else
if ((percent>57) and (percent<61) and (Tag<>12)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd12.bmp')
Tag:=12
end
else
if ((percent>62) and (percent<66) and (Tag<>13)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd13.bmp')
Tag:=13
end
else
if ((percent>67) and (percent<71) and (Tag<>14)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd14.bmp')
Tag:=14
end
else
if ((percent>72) and (percent<76) and (Tag<>15)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd15.bmp')
Tag:=15
end
else
if ((percent>77) and (percent<81) and (Tag<>16)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd16.bmp')
Tag:=16
end
else
if ((percent>82) and (percent<86) and (Tag<>17)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd17.bmp')
Tag:=17
end
else
if ((percent>87) and (percent<91) and (Tag<>18)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd18.bmp')
Tag:=18
end
else
if ((percent>92) and (percent<96) and (Tag<>19)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd19.bmp')
Tag:=19
end
else
if ((percent>97) and (percent<100) and (Tag<>20)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd20.bmp')
Tag:=20
end
end
end;


function sndPlaySound(lpszSoundName: string; uFlags: cardinal):integer;
external 'sndPlaySoundA@winmm.dll stdcall';

procedure InitializeWizard();
begin
ExtractTemporaryFile(ExpandConstant('splash.wav'));
sndPlaySound(ExpandConstant('{tmp}\splash.wav'), $0001 or $9999);

WizardForm.Position:= poScreenCenter;
Width:= GetSystemMetrics(0);
Height:= GetSystemMetrics(1);
MainForm.BorderStyle:= bsNone;
MainForm.Left:= 0;
MainForm.Top:= 0;
MainForm.Width:= Width;
MainForm.Height:= Height;

ExtractTemporaryFile('1.bmp');
S:= (ExpandConstant('{tmp}')+'\1.bmp');

BackImage:=TBitmapImage.Create(MainForm);
BackImage.Bitmap.LoadFromFile(S);
BackImage.Align:= alClient;
BackImage.Parent:= MainForm;
BackImage.Stretch:= True;
MainForm.Visible:= True;

ExtractTemporaryFile('1.bmp');
ExtractTemporaryFile('bbrd1.bmp');
ExtractTemporaryFile('bbrd2.bmp');
ExtractTemporaryFile('bbrd3.bmp');
ExtractTemporaryFile('bbrd4.bmp');
ExtractTemporaryFile('bbrd5.bmp');
ExtractTemporaryFile('bbrd6.bmp');
ExtractTemporaryFile('bbrd7.bmp');
ExtractTemporaryFile('bbrd8.bmp');
ExtractTemporaryFile('bbrd9.bmp');
ExtractTemporaryFile('bbrd10.bmp');
ExtractTemporaryFile('bbrd11.bmp');
ExtractTemporaryFile('bbrd12.bmp');
ExtractTemporaryFile('bbrd13.bmp');
ExtractTemporaryFile('bbrd14.bmp');
ExtractTemporaryFile('bbrd15.bmp');
ExtractTemporaryFile('bbrd16.bmp');
ExtractTemporaryFile('bbrd17.bmp');
ExtractTemporaryFile('bbrd18.bmp');
ExtractTemporaryFile('bbrd19.bmp');
ExtractTemporaryFile('bbrd20.bmp');
end;


procedure CurPageChanged(CurPageID: Integer);
var Pfunc : LongWord;
begin
If CurPageID = wpInstalling then
begin
Form := CreateCustomForm();

Form.Width:= MainForm.Width;
Form.Height:= MainForm.Height;
Form.BorderStyle := bsNone;
Form.Color:=clBlack;
Form.Parent:=MainForm;
Form.Position:=poScreenCenter;

Form.Show();

pfunc:=WrapTimerProc(@OnTimer, 4)
TimerID:=SetTimer(0, 0, 500, pfunc)

S:= (ExpandConstant('{tmp}') + '\bbrd1.bmp');

SlideImage:= TBitmapImage.Create(Form);
with SlideImage do
begin
Align:= alClient;
Stretch:= True;
Bitmap.LoadFromFile(S);
Parent:= Form;
Tag:= 1;
end

with WizardForm do
begin
MainPanel.Hide;
Bevel1.Hide;
Width:= ScaleX(395);
Height:= ScaleY(142);
Left:= ScaleX(0);
Top:= ScaleY(0);
Left:= ScaleX(MainForm.Left+20);
Top:= ScaleY(MainForm.Height-170);
InnerNotebook.Left:= ScaleX(10);
InnerNotebook.Top:= ScaleY(10);
InnerNotebook.Width:= ScaleX(370);
StatusLabel.Left:= ScaleX(0);
StatusLabel.Top:= ScaleY(0);
StatusLabel.Width:= WizardForm.InnerNotebook.Width;
FileNameLabel.Left:= ScaleX(0);
FileNameLabel.Top:= ScaleY(20);
FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
ProgressGauge.Top:= ScaleY(40);
ProgressGauge.Width:= WizardForm.InnerNotebook.Width;
CancelButton.BringToFront;
CancelButton.Left:= ScaleX(154);
CancelButton.Top:= ScaleY(80);
end
end

begin
if CurPageID = wpFinished then
begin
Form.Free;
KillTimer(0, TimerID);
WizardForm.Width:=502;
WizardForm.Height:=392;
WizardForm.Position:=poScreenCenter;
end
end
end;


procedure DeinitializeSetup();
begin
KillTimer(0, TimerID);
end;


procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
Res: Integer;
begin
case CurUninstallStep of
usPostUninstall:
begin
if DirExists(ExpandConstant('{app}')) then
if ExpandConstant('{language}') = 'ua' then
case MsgBox('Папка "' + ExpandConstant('{app}') + '" не порожня.'#13#13 +
'"Так" – повне видалення всіх файлів у папці, включаючи саму папку.' #13#13 +
'"Ні" – відкрити папку в провіднику, щоб вручну видалити файли.'#13#13 +
'"Скасувати" – нічого не робити, видалити папку пізніше самостійно.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Папка не видалена.' #13#13 'Папка або один з файлів у ній задіяні іншою програмою.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Помилка відкриття.' #13#13 'Папка не знайдена.', mbError, MB_OK);

IDCANCEL: Form.Close;
end
else
if ExpandConstant('{language}') = 'ru' then
case MsgBox('Папка "' + ExpandConstant('{app}') + '" не пуста.'#13#13 +
'"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 +
'"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
'"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK);

IDCANCEL: Form.Close;
end
else
case MsgBox('Directory "' + ExpandConstant('{app}') + '" is not empty.'#13#13 +
'"Yes" to delete all of the files in the directory, including the directory itself.' #13#13 +
'"No" to open the directory with explorer to delete the files manually.'#13#13 +
'"Cancel" to do nothing and delete the directory later manually. ', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Directory is not deleted.' #13#13 'Directory or one of the files are used by the other application.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Error opening the directory.' #13#13 'Directory is not found.', mbError, MB_OK);

IDCANCEL: Form.Close;
end
end
end
end;

function NextButtonClick(CurPage: Integer): Boolean;
begin
Result := True;
if CurPage = wpSelectDir then
if DirExists( ExpandConstant('{app}') ) then
begin
MsgBox(ExpandConstant('{cm:InstallationIsNotEnabled}'), mbError, mb_Ok);
Result := False;
end
end;
[/more]
Автор: SotM
Дата сообщения: 02.06.2008 14:23
antifire
Ну и кто тебе мешает написать что-то вроде этого?

Код:
for a := 0 to i do
begin
if FileExists( 'file00' + IntToStr( a ) + '.dat' ) then
begin
FileCopy( ... );
end;
end;
Автор: antifire
Дата сообщения: 02.06.2008 14:50
SotM

Это не совсем правильно. Если файла нет на диске - выдаст error? Счетчик будет на один увеличиваться при вставке следующего диска - и в итоге если файл file002.dat на 2ом диске, то будет искать file003.dat.
нужна такая же структура, с выводом сообщения, которую я описал выше.
Автор: SotM
Дата сообщения: 02.06.2008 15:05
antifire
Ну дык, тогда так:


Код:
procedure WaitForNewDisk( Number : integer );
var
DiskInserted: boolean;
begin
DiskInserted := false;
while not DiskInserted do
begin
MsgBox('Insert new disk', mbInformation, MB_OK);

if FileExists( 'file00' + IntToStr( Number ) + '.dat' ) then
DiskInserted := true;
end;
end;

ну а предыдущий код изменить на что-то вроде этого:

if FileExists( 'file00' + IntToStr( i ) + '.dat' ) then
begin
end
else
WaitForNewDisk;

Автор: Gekkon1976
Дата сообщения: 02.06.2008 15:25
Root: HKLM; Subkey: "SOFTWARE\Classes\CLSID\{{C6643EC0-49AC-4c15-A455-04104DB900A9}\InprocServer32"; Flags: uninsdeletekey; ValueType: string; ValueData: "C:\PROGRA~1\Sony\IMAGEC~1\CtxMenu.dll"

Как загрузить данную DLL не перегружая компьютер?
Автор: SotM
Дата сообщения: 02.06.2008 15:40
Gekkon1976
Что значит "загрузить"? Куда загрузить?
Автор: Gekkon1976
Дата сообщения: 02.06.2008 16:08
Как применить изменение в реестре без перезагрузки компьютера
по типу:
SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, 0);

ChangesAssociations=yes - не подходит
Автор: SotM
Дата сообщения: 02.06.2008 16:16
Gekkon1976
хммм, тебе типа зарегить в системе её нужно или нет?
Этот вопрос конечно не совсем про Inno, подобные вопросы лучше узнавать в других разделах.
Пробовал использовать: regsvr32 ?
Если это не поможет, то скорей всего - никак.
Автор: Raf_SE
Дата сообщения: 02.06.2008 18:35

Цитата:
Сохрани всю ветку в виде "для печати" и потом спокойно ищи то, что тебе надо!

А как это делать?


Цитата:
Тут на форуме уже что-то подобное пробегало, как именно получить текущие разрешения на экран и т.д.

Нуу даже если я найду как получить разрешения монитора юзера, то это мне не особо поможет. Я просто нешарю в паскале, даже слепить 2 кода для меня проблематично. Посему прошу изменить таким образом, данный выше, мой код.
Автор: Genri
Дата сообщения: 02.06.2008 21:08
AlexDJ666

Цитата:
Возможно ли в скрипте использовать одновременно Memo:= TMemo.Create(WizardForm) и Memo:= TRichEditViewer.Create(Page)?
-- возможно. Только в подавляющем большинстве случаев, надо давать разные имена (а у тебя и один Memo:= ... и другой Memo:= ...) Например:
Memo1:= TMemo.Create(WizardForm);
Memo2:= TRichEditViewer.Create(Page);


Цитата:
не отображаются скриншоты
.............
как реализована проверка на "отмеченность" пункта меню
-- [more=Пример с комментариями]
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program

[Files]
; Файлы с описанием
Source: ReadMe1.rtf; Flags: dontcopy
Source: ReadMe2.rtf; Flags: dontcopy
Source: ReadMe3.rtf; Flags: dontcopy
; Картинки к описаниям
Source: Image1.bmp; Flags: dontcopy
Source: Image2.bmp; Flags: dontcopy
Source: Image3.bmp; Flags: dontcopy
; Устанавливаемые файлы
; Будут установлены только если отмечен соответсвующий чекбокс
; Нумерация с нуля - CheckedBox(0) - первый; CheckedBox(1) - второй и т.д.
Source: MyProg.exe; DestDir: {app}; Flags: ignoreversion; Check: CheckedBox(0)
Source: MyProg.chm; DestDir: {app}; Flags: ignoreversion; Check: CheckedBox(1)
Source: Files\*; DestDir: {app}\add; Flags: ignoreversion recursesubdirs createallsubdirs; Check: CheckedBox(2)

[_Code]
var
Page: TWizardPage;
ListBox: TNewCheckListBox;
Memo: TRichEditViewer;
CheckLabel: TLabel;
MouseY: integer;
BitmapImage: TBitmapImage;
InfoBmp: array of TBitmap;

function CheckedBox(ItemNumber: integer): Boolean;
begin // проверка,
Result:= ListBox.Checked[ItemNumber]; // отмечен ли соответствующий чекбокс
end;

// ВНИМАНИЕ! Данная реализация процедур CheckOnClick и CheckMouseMove
// применима только в случае, если ListBox отображается без скролбара,
// т.е. все чекбоксы видны без промотки.
procedure CheckOnClick (Sender: TObject); // событие на клик
begin
if MouseY < ListBox.Items.Count then
begin // выполняется, если кликнули на чекбокс с номером MouseY
ListBox.Checked[MouseY]:= Not(ListBox.Checked[MouseY]);
// если надо при клике выполнить еще что-то,
// дописываем сюда
end;
end;

procedure CheckMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin // событие на движение мыши
MouseY:= Y/ScaleY(16);
if MouseY < ListBox.Items.Count then
begin // выполняется, если курсор пересекает чекбокс с номером MouseY
Memo.RTFText:= TStrings(ListBox.ItemObject[MouseY]).Text;
BitmapImage.Bitmap:= InfoBmp[MouseY];
// если надо при движении курсора выполнить еще что-то,
// дописываем сюда
end;
end;

procedure InitializeWizard();
var
i: integer;
begin
ExtractTemporaryFile('ReadMe1.rtf'); // распаковка фалов описания
ExtractTemporaryFile('ReadMe2.rtf');
ExtractTemporaryFile('ReadMe3.rtf');
ExtractTemporaryFile('Image1.bmp'); // распаковка картинок к описаниям
ExtractTemporaryFile('Image2.bmp');
ExtractTemporaryFile('Image3.bmp');

// Создание страницы, которая будет отображена после wpWelcome
// Надо в другом месте, меняем wpWelcome на wpSelectDir или другую
Page:=CreateCustomPage(wpWelcome, 'Интерфейс', 'Выберите компоненты, которые вы хотите установить.')

ListBox:= TNewCheckListBox.Create(Page); // создание списка чекбоксов
with ListBox do
begin
Left := 15
Top := 0
Width := 200
Height := 149
Parent := Page.Surface
// Добавляем нужное кол-во чекбоксов
AddCheckBox('Моя программа', '', 0, True, True, True, True, TStringList.Create);
AddCheckBox('Хелп', '', 1, True, True, False, True, TStringList.Create);
AddCheckBox('Дополнительные файлы', '', 1, True, True, False, True, TStringList.Create);
// Загружаем файлы описания (каждому чекбоксу - свой файл)
TStrings(ItemObject[0]).LoadFromFile(ExpandConstant('{tmp}\ReadMe1.rtf'));
TStrings(ItemObject[1]).LoadFromFile(ExpandConstant('{tmp}\ReadMe2.rtf'));
TStrings(ItemObject[2]).LoadFromFile(ExpandConstant('{tmp}\ReadMe3.rtf'));
end;

Memo:= TRichEditViewer.Create(Page); // создаем Memo для отображения описаний
with Memo do
begin
Left := ListBox.Left + ListBox.Width + 8;
Top := ListBox.Top;
Width := ListBox.Width;
Height := ListBox.Height;
Color := clBtnFace;
Enabled := False;
BorderStyle := bsNone;
Parent := Page.Surface;
end;

CheckLabel:= TLabel.Create(Page); // создаем TLabel (для событий мыши)
with CheckLabel do
begin
Width :=ListBox.Width;
Height :=ListBox.Height;
Autosize :=False;
Transparent :=True;
OnMouseMove :=@CheckMouseMove;
OnClick :=@CheckOnClick;
Parent :=ListBox;
Cursor := 1;
end;

BitmapImage := TBitmapImage.Create(Page); // создаем TBitmapImage для
with BitmapImage do // отображения картинок
begin // к описаниям
AutoSize := True;
Left := ListBox.Left;
Top := ListBox.Top + ListBox.Height + 8;
Width := ListBox.Width;
Height := 32;
Parent := Page.Surface;
end;

for i:=0 to ListBox.Items.Count - 1 do // по кол-ву чекбоксов
begin // создаем TBitmap-ы
SetArrayLength(InfoBmp, i+1);
InfoBmp[i]:= TBitmap.Create;
end;
// для каждого чекбокса грузим свою картинку к описанию
InfoBmp[0].LoadFromFile(ExpandConstant('{tmp}\Image1.bmp'));
InfoBmp[1].LoadFromFile(ExpandConstant('{tmp}\Image2.bmp'));
InfoBmp[2].LoadFromFile(ExpandConstant('{tmp}\Image3.bmp'));
end; [/more]
Автор: Diawer
Дата сообщения: 02.06.2008 22:00
Как убрать понял, но не понятно как поменять (правь саму иконку) – где?, надо поменять только в левом-верхнем углу инсталла и только.

Добавлено:
braunberg
???
Автор: braunberg
Дата сообщения: 02.06.2008 22:27
Diawer

Цитата:
???

В любом иконковом редакторе, каким бы оффтопом это ни звучало. Или ты считаешь, что абсолютно все делается в Inno Setup? (Включая редактирование графики)
Автор: Genri
Дата сообщения: 02.06.2008 23:36
Diawer

Цитата:
надо поменять только в левом-верхнем углу инсталла и только.
-- а просто...
[Setup]
SetupIconFile=icon_full.ico

...не подходит ?
Автор: braunberg
Дата сообщения: 02.06.2008 23:52
Genri
Да нет... видишь, просит поменять именно в левом верхнем углу, а все остальное не трогать. Вот я и предложил ему отредактировать ту часть файла .ico которая 16х16, да это полностью проблемы не решает, но как финт ушами сойдет
Добавлено:
Вот собственно идея того, что я хочу донести ICON
Автор: Diawer
Дата сообщения: 03.06.2008 08:10
Genri

Цитата:
[Setup]
SetupIconFile=icon_full.ico

меняет везде включая unins000.exe

braunberg
это тоже понятно, но хотелось бы всё таки вариант через код, что бе не править в редакторе.

Автор: Sampron
Дата сообщения: 03.06.2008 08:20
braunberg

Цитата:
Вот собственно идея того, что я хочу донести

Есть получше вариант, но требует вмешательство в файл инсталлятора.
В любом иконковом редакторе создаём иконку размером 16х16, переводим её в двоичные данные, чем это сделать я незнаю но можно с помощью делфи, далее открываем редактором ресурсов Setup.e32 заходим в RCData\TWIZARDFORM и добавляем к форме свойство Icon.Data с двоичными данными.
[more=Пример..]
object WizardForm: TWizardForm
Left = 191
Top = 139
BorderIcons = [biSystemMenu]
BorderStyle = bsDialog
Caption = 'WizardForm'
ClientHeight = 360
ClientWidth = 497
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
Scaled = False
OnClose = FormClose
PixelsPerInch = 96
TextHeight = 13
Icon.Data = {
0000010001001010000001002000680400001600000028000000100000002000
0000010020000000000040040000000000000000000000000000000000000000
00000235370000121300002023080134391C02444A33024F564801555D530155
5D53024E5647024249320134391A001E220800141500012A2C00000000000AD5
E00000161701001F23140040464300616A78028390A60BA2AEC415B2BCD214B2
BCD10BA2ADC302828EA3005F6875003E443F001F2211001A1D000AD3DE0010F0
F800001F2103002D3129015D656D0FAFB7C02EDFE4EE4EDFE0FA65D2D4FC64D2
D4FC4DDFE0FA2DDFE3ED0FAEB5BE015B6369002C30260021240310EFF80009D0
DA000CA3AD0205747A2313CACFAF2AD9DCF738ADB0FC52B3B7FE6BC4C8FE6AC4
C8FE51B3B7FE38ADB0FC2AD9DCF713CACFAE05767C220DA7B30109CFD9000CDA
E5000388960B09CDD99217D4D9F823A6AAFC49E6E9FE66FCFDFE72FDFDFE72FD
FDFE65FCFDFE48E6E9FE23A6AAFC17D3D9F809CBD8920385950B0CD8E4000BBA
C60102A5BC5009D6E4EF10A1A6FC28E6EAFE3AFAFCFE46FBFCFE4EFBFDFF4EFB
FDFF46FBFCFE39FAFCFE28E6EBFE10A1A6FC09D5E3EF02A2BA500BB9C5010056
6B0901B3D1AA05BDCEFC0A9BA3FD1BF1F7FE24F5FAFE2CF8FBFF30F8FCFF30F8
FCFF2CF8FBFF24F5FAFE1BF0F7FE0B9BA3FD05BCCDFC01B0CFAA005468090082
A62000B9DEDB04DCF3FD09E3F2FD13EBF6FE1BECF7FF1DEFF7FF1DF1F9FF1CF1
F8FF1DEFF7FF1BECF7FF13EBF6FE0AE3F2FD04DCF3FD00B8DCDB007EA2200079
9B3300B9DFEA02D5EFFD12DEF2FD3ADBEEFE5BD4E4FF4EDAE9FF2AE6F4FF28E6
F4FF44D3E3FF4EC6D6FF3BD8EAFE14DEF2FD03D5EFFD00B8DEEA00769833007B
9E3000B4DEE807CDECFD3CD4E9FD769FA7FE717A7BFF74888BFF6ACBD7FF5AC1
CDFF5C7275FF747D7EFF6D9298FE41D1E5FD08CEECFD00B3DCE800789A30017B
A01A00A9D5D30FC6EAFD5DBFCFFD808586FEAAACACFF9E9F9FFF8AAAADFF789C
9FFF6C6D6DFF7F8181FF8C8F8FFE65BECCFD12C7EAFD00A7D3D301779B1A0E5C
72050196C3971ABEE6FC75C4D3FCA1A5A5FE828383FE888989FF9BB9BCFF9ABB
BEFF9B9C9CFFB1B3B3FE9C9FA0FE83CCDAFC1BBEE6FC0194C0960E596F054BC0
E201037DA73824AFDAE384D8EDFBA1C0C6FD9AA3A4FE95A6A9FE9BD9E3FE9DDE
E7FEB0C2C5FEB2BBBCFEAFCAD0FD88D9EEFB23ADD9E3037AA33949BFE1012BA3
CE00207A9A051A8EB96D75CAE6EFA8E3F2FCAEE1ECFDABE4F0FEA2E6F5FEA1E6
F5FEACE6F2FEB2E5F0FDA9E3F3FC76C9E6EF1A8CB66D207897052BA2CC0060D2
EE00339FC601177091093F98BB6988C9E1DEB3E3F3FCBEEAF6FEBFEAF7FEBFEA
F7FEBEEAF6FEB2E3F3FC87C8E0DE4096B969176D8E09349DC3015CD2EE0042BD
E600125E7D00269BC5013A829D052E82A6355AA7C79679BED8D988CAE2F587C9
E2F576BCD7D957A5C4962C80A33539819C052598C301125D7B0042BBE500E007
FFFF8003FFFF8001FFFF8001FFFF8001FFFF0000FFFF0000FFFF0000FFFF0000
FFFF0000FFFF0000FFFF0000FFFF0000FFFF8001FFFF8001FFFFC003FFFF}
object Bevel: TBevel
Left = 0
.....
[/more]
Автор: antifire
Дата сообщения: 03.06.2008 08:28
Вопрос касающийся процедуры CurStepChanged

сейчас:

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then ReadFromFile();
end;

как правильно сделать так чтобы секция [_Code] срабатывала после копирования файлов из секции [Files], но не после завершения установки? Или же проще убрать секцию [Files] и все файлы для копирования прописать в коде?
Автор: Genri
Дата сообщения: 03.06.2008 09:11
antifire -- вероятно, имеется ввиду заменить ssInstall на ssPostInstall или другую константу, описанную в Inno Setup Help: Pascal Scripting: Event Functions
Автор: antifire
Дата сообщения: 03.06.2008 11:24
Genri

Да! Все работает именно так как нужно! Спасибо.
Автор: Gekkon1976
Дата сообщения: 03.06.2008 12:11
Как путь, для записи в реестре, привести к данному виду:
C:\PROGRA~1\Sony\IMAGEC~1\ICSCSI~1.DLL
Автор: SotM
Дата сообщения: 03.06.2008 13:08
Gekkon1976
Дык, а для чего существует справка?! Для кого она написана?


Цитата:
Prototype:
function GetShortName(const LongName: String): String;

Description:
Returns the short version of the specified long filename. If the short version of the long filename is not found, the long filename is returned.

Автор: antifire
Дата сообщения: 03.06.2008 13:32
SotM и Genri

Inno поддерживает работу с указателями? Проблема в цикле WaitForNewDisk с проверкой на наличие файла на диске. Сам [more=Код]

[_Code]
procedure WaitForNewDisk( d: integer );
var
DiskInserted: boolean;
DiskNumber: string;
begin
DiskInserted := false;
while not DiskInserted do
begin
        DiskNumber:='DATA.00' + IntToStr(d)
MsgBox('Вставьте следующий диск c '+ DiskNumber, mbInformation, MB_OK); ////Постоянно выдает это сообщение... =((//
if FileExists( 'DATA.00' + IntToStr(d)) then
DiskInserted := true;
end;
end;



procedure ReadFromFile();
var
FS: TFileStream;
str: string;
i: integer;
a: integer;
d: integer;
NewFile: String;
begin
str:= StringOfChar(' ',1);
FS := TFileStream.Create(ExpandConstant('{app}\struct.dat'), fmOpenReadWrite);
try
FS.Seek(21,soFromBeginning);
FS.ReadBuffer(str, 1);
i:= Ord(str[1]);
for a := 1 to i do
    if FileExists( 'DATA.00' + IntToStr( a )) then
begin
NewFile:='DATA.00' + IntToStr( a );
FileCopy('{src}\NewFile', '{app}\NewFile', true);
     end
    else
     begin
     d:=a
     WaitForNewDisk(d); /// Как после этого вернуться к проверке на существование файла ????//
end;
    finally
FS.Free;
end;
end;



procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then ReadFromFile();
end;

[/more]

После копирования файлов с секции [Files] должен быть сначала поиск файла с названием DATA.001, если есть, то копировать его в дирикторию с программой, а если нет то только после этого выдавать сообщение "Вставьте диск с DATA.001" и по новой проверять на наличие. Даже копирования файла DATA.001 не происходит... =((( В чем ошибка???
Автор: Gekkon1976
Дата сообщения: 03.06.2008 13:36

Цитата:
SotM

Спасибо
Автор: SotM
Дата сообщения: 03.06.2008 13:41
antifire

Код:
begin
d:=a
WaitForNewDisk(d); /// Как после этого вернуться к проверке на существование файла к строке сразу после for a := 1 to i do????
end;
Автор: Raf_SE
Дата сообщения: 03.06.2008 13:46
Как сделать чтобы музыка повторялась бесконечно? На данный момент, максимальное поддерживаемое число раз =99, если указать больше, то не проигрывается вобще.

function sndPlaySound(lpszSoundName: string; uFlags: cardinal):integer;
external 'sndPlaySoundA@winmm.dll stdcall';

procedure InitializeWizard();
begin
ExtractTemporaryFile(ExpandConstant('splash.wav'));
sndPlaySound(ExpandConstant('{tmp}\splash.wav'), $0001 or $0099);
Автор: SotM
Дата сообщения: 03.06.2008 14:08
Raf_SE
Пара кликов мыши в браузере и google, получаем:
MSDN
Пример использования
И как видно из MSDN "число раз" НЕ указывается во втором параметре, там указываются ТОЛЬКО флаги.
Откуда ты взял что там указывается "число раз" не понятно.
Автор: Raf_SE
Дата сообщения: 03.06.2008 14:19
SotM
А что делать если я ни с английским, ни паскалем не дружу?
Автор: SotM
Дата сообщения: 03.06.2008 14:46
Raf_SE
Изучать батенька и еще раз изучать
По-другому никак. Можешь пытаться смотреть примеры/исходники других людей, но это мало поможет.
Я знал программера, который со школы изучал немецкий, но потом ему пришлось самому английский изучать, т.к. все мануалы/хелпы/документации по-английски.

Не все ведь программеры знают кучу языков программирования с рождения и общаются свободно на английском.
Автор: serg_aka_lain
Дата сообщения: 03.06.2008 15:00
Raf_SE

Цитата:
Как сделать чтобы музыка повторялась бесконечно?

- $0001 or $0008



Автор: braunberg
Дата сообщения: 03.06.2008 15:42
Sampron

Цитата:
Есть получше вариант

Да, действительно, самое оно, но опять же не совсем удобно. А нет ли случайно библиотеки, которая позволила бы разлинковать привязку к одной иконке для Setup, Uninstall, иконке бордера, при выборе языка и возможно для значков на страницах выбора папки установки и выбора папки в меню пуск? Или хотя бы возможность написания такой dll существует?

Diawer
Сама программа Inno Setup 5-х версий не предусматривает использование различных иконок для выше перечисленных случаев. Воспользуйся советом Sampron'a, так оно правильнее будет.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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