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

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

Автор: antifire
Дата сообщения: 03.06.2008 15:57
SotM

Если запускать setup.exe с диска, там же должна быть и проверка на наличие. Проверяет, но не копирует в {app}, потом просит DATA.002 даже если он там есть. Вот подправил [more=код]

procedure WaitForNewDisk( a: integer );
var
DiskInserted: boolean;
DiskNumber: string;
begin
DiskInserted := false;
while not DiskInserted do
begin
DiskNumber:='DATA.00' + IntToStr(a)
MsgBox('Вставьте следующий диск c '+ DiskNumber, mbInformation, MB_OK);
if FileExists( '{src}\DiskNumber') then
DiskInserted := true;
end;
end;


procedure ReadFromFile();
var
FS: TFileStream;
str: string;
i: integer;
a: 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
NewFile:='DATA.00' + IntToStr( a );
if FileExists('{src}\NewFile') then
begin
FileCopy('{src}\NewFile','{app}\NewFile', true);
end
else
begin
     WaitForNewDisk(a);
end;
finally
FS.Free;
end;
end;

[/more]
Автор: SotM
Дата сообщения: 03.06.2008 16:04
antifire
Эх, молодо-зелено! Тут же сто раз уже говорили о такой чудо функции как: ExpandConstant.


Код:
if FileExists( '{src}\DiskNumber') then
меняем на:
if FileExists( ExpandConstant( '{src}\' ) + IntToStr( DiskNumber ) ) then

if FileExists('{src}\NewFile') then
begin
FileCopy('{src}\NewFile','{app}\NewFile', true);
меняем на:
if FileExists(ExpandConstant( '{src}\' ) + NewFile) then
begin
FileCopy(ExpandConstant( '{src}\' ) + NewFile, ExpandConstant( '{app}\' ) + NewFile, true);

Автор: antifire
Дата сообщения: 03.06.2008 16:07
SotM

Да понял! Не знал, буду знать спасибо. ^_^

Добавлено:
SotM

Ничего не изменилось, по прежнему установка встает на 'Вставьте диск с DATA.002', хотя он уже вставлен и файла DATA.001 в дириктории с программой нет, значит и копирования не происходит. Один момент подправил - FileExists( ExpandConstant( '{src}\' ) + IntToStr( DiskNumber ) ) - здесь IntToStr не нужен, DiskNumber - string.
Автор: SotM
Дата сообщения: 03.06.2008 16:31
antifire
выложи свой измененный код, можешь сделать в старом посте, чтоб не загромождать.
Автор: antifire
Дата сообщения: 03.06.2008 16:33
SotM

Так стоп. что изменилось, теперь копирует DATA.001 но DATA.002... щас запишу на диски, с диска и проверю.
Автор: dmimel
Дата сообщения: 03.06.2008 20:36
[Setup]
AppName=The Suffering
AppVerName=The Suffering
AppPublisher=Midway, Inc.
DefaultDirName={pf}\The Suffering
DefaultGroupName=The Suffering
OutputDir=C:\Documents and Settings\Димон\Мои документы
OutputBaseFilename=Setup
SetupIconFile=I:\The Suffering\Suffering.ico
Compression=lzma
SolidCompression=yes

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "I:\The Suffering\SUFFERING.EXE"; DestDir: "{app}"; Flags: ignoreversion
Source: "I:\The Suffering\dbghelp.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "I:\The Suffering\manual.rtf"; DestDir: "{app}"; Flags: ignoreversion
Source: "I:\The Suffering\mfc71.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "I:\The Suffering\mfc71u.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "I:\The Suffering\msvci70.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "I:\The Suffering\msvcp71.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "I:\The Suffering\msvcr71.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "I:\The Suffering\protect.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "I:\The Suffering\README.txt"; DestDir: "{app}"; Flags: ignoreversion
Source: "I:\The Suffering\RERES.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "I:\The Suffering\SSAPI.DLL"; DestDir: "{app}"; Flags: ignoreversion
Source: "I:\The Suffering\SSSCC.DLL"; DestDir: "{app}"; Flags: ignoreversion
Source: "I:\The Suffering\SSUS.DLL"; DestDir: "{app}"; Flags: ignoreversion
Source: "I:\The Suffering\SSVB.DLL"; DestDir: "{app}"; Flags: ignoreversion
Source: "I:\The Suffering\Suffering.ico"; DestDir: "{app}"; Flags: ignoreversion
Source: "I:\The Suffering\SUFFERING.EXE"; DestDir: "{app}"; Flags: ignoreversion
Source: "I:\The Suffering\Suffering.gdf"; DestDir: "{app}"; Flags: ignoreversion
Source: "I:\The Suffering\SUFFERING.RFL"; DestDir: "{app}"; Flags: ignoreversion
Source: "I:\The Suffering\common\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "I:\The Suffering\levels\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "I:\The Suffering\world common\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "I:\The Suffering\xvsh\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; ОТМЕТЬТЕ: Не используйте "Флажки: Проигнорировать версию" на любых общедоступных системных файлах

[Icons]
Name: "{group}\The Suffering"; Filename: "{app}\SUFFERING.EXE"
Name: "{group}\{cm:UninstallProgram,The Suffering}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\The Suffering"; Filename: "{app}\SUFFERING.EXE"; Tasks: desktopicon

[Run]
Filename: "{app}\SUFFERING.EXE"; Description: "{cm:LaunchProgram,The Suffering}"; Flags: nowait postinstall skipifsilent

Не запускается игра после инсталляции. В чем ошибка?

Добавлено:
Я делал скрипт в первый раз
Автор: braunberg
Дата сообщения: 03.06.2008 20:54
dmimel
А ключи реестра там никакие не нужны?
Автор: htuos
Дата сообщения: 03.06.2008 21:36
кому нужно было сменить иконку в левом углу WizardForm, а остальное оставить на месте
[more=всего пара строк кода]
[Files]
Source: icon.ico; DestDir: {tmp}; Flags: dontcopy

[Code_]
function LoadImage(hInst: THandle; ImageName: PChar; ImageType: UINT; X, Y: Integer; Flags: UINT): THandle; external 'LoadImageA@user32.dll stdcall delayload';

procedure InitializeWizard;
begin
ExtractTemporaryFile('icon.ico');
SendMessage(WizardForm.Handle, $0080, 0, LoadImage(0,ExpandConstant('{tmp}')+'\icon.ico',1,16,16,$1010));
end;[/more]
Автор: Kutsenko
Дата сообщения: 03.06.2008 21:47
2 dmimel
[Run]
Filename: {app}\speed.exe; WorkingDir: {app}; Description: Запустить Need for Speed Most Wanted; Flags: postinstall nowait
Я лично так делаю и у меня всё работает.
Автор: braunberg
Дата сообщения: 03.06.2008 22:27
htuos
Красивое решение. Хотя сам вопрос задавал не я, но все равно - спасибо!
Автор: Raf_SE
Дата сообщения: 04.06.2008 11:09
А ктонить может объединить [more=этот код]procedure InitializeWizard();
begin
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) then
begin
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONDOWN,0,0);
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONUP,0,0);
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) and
(CurPageID = wpSelectComponents) then
WizardForm.BackButton.Visible := False;
end;
[/more] [more=с этим]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 $0008);

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.Width-420);
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]?
Автор: antifire
Дата сообщения: 04.06.2008 11:22
SotM

Сейчас вроде получше стало, но теперь копирует только последний файл DATA.00x, никаких ошибок не выдает, но и не копирует первые файлы. к примеру если файлов DATA 5 штук, то копирует только последний, DATA.005 (если устанавливать не с диска). А если с диска устанавливать он так же не копирует, и просит диск с DATA.006 хотя их всего 5. Вот сам [more=код]

procedure WaitForNewDisk( a: integer );
var
DiskInserted: boolean;
DataFile: string;
begin
DiskInserted := false;
while not DiskInserted do
begin
DataFile:='DATA.00' + IntToStr(a)
MsgBox('Вставьте следующий диск c '+ DataFile, mbInformation, MB_OK);
if FileExists( ExpandConstant('{src}\')+DataFile) then
DiskInserted := true;
end;
end;



procedure ReadFromFile();
var
FS: TFileStream;
str: string;
i: integer;
a: 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
NewFile:='DATA.00' + IntToStr( a );
if FileExists(ExpandConstant( '{src}\' ) + NewFile) then
begin
FileCopy(ExpandConstant( '{src}\' ) + NewFile, ExpandConstant( '{app}\') + NewFile, true);
end
else
begin
     WaitForNewDisk(a);
end;
finally
FS.Free;
end;
end;


[/more]
Автор: SotM
Дата сообщения: 04.06.2008 11:35
Raf_SE
этот код

Код:
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) then
begin
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONDOWN,0,0);
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONUP,0,0);
end;
Автор: Raf_SE
Дата сообщения: 04.06.2008 11:52
Пасибо, щас протестирую
Автор: SotM
Дата сообщения: 04.06.2008 12:02
Raf_SE
Ууфф... что ж ты идешь постоянно таким сложными путями...
Естественно он будет ругаться на слово "WM_LBUTTONDOWN", потому что нет его... Я не знаю, где ты берешь такие примеры...

1. Идешь в шапку темы и качаешь "Руководство по расширенным возможностям Inno Setup 5 (не для чайников)".
2. Ставишь его.
3. Смотришь различные примеры.
4. Там тебе будет по-русски написано:


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



Код:
procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpWelcome then
begin
WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;
end;

//**************************************************//
//Альтернативный вариант
//procedure CurPageChanged(CurPageID: Integer);
//begin
//If CurPageID=wpWelcome then
//begin
//SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
//SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
//end;
//end;
//**************************************************//
Автор: Raf_SE
Дата сообщения: 04.06.2008 12:16

Цитата:
Естественно он будет ругаться на слово "WM_LBUTTONDOWN", потому что нет его... Я не знаю, где ты берешь такие примеры...

Да ет я напутал, забыл в начало скрипта вставить
const
WM_LBUTTONDOWN = 513;
WM_LBUTTONUP = 514;
НО всерано твой скрипт работает не так как нужно. Я использую улучшеный деинсталлятор для Inoo, у которого есть функции "Изменить", "Восстановить" и "Удалить", (называется "UninsHs"). Вобщем тот код, постом выше, взят именно из справки по этому деинсталлятору. Проблема в том, что страничку приветствия нужно отключать только когда ее запускает "UninsHs". Данный тобой пример почемуто этого не делает.

[more=Код из справки UninsHs]
8. [Code] section
==================

* Add the appropriate functions for your version of Inno Setup:

; For Inno Setup 4.x:

function SkipCurPage(CurPage: Integer): Boolean;
begin
if Pos('/SP-', UpperCase(GetCmdTail)) > 0 then
case CurPage of
wpLicense, wpPassword, wpInfoBefore, wpUserInfo,
wpSelectDir, wpSelectProgramGroup, wpInfoAfter:
Result := True;
end;
end;

; For Inno Setup 5.x:

function ShouldSkipPage(CurPage: Integer): Boolean;
begin
if Pos('/SP-', UpperCase(GetCmdTail)) > 0 then
case CurPage of
wpLicense, wpPassword, wpInfoBefore, wpUserInfo,
wpSelectDir, wpSelectProgramGroup, wpInfoAfter:
Result := True;
end;
end;

* If you want to skip the welcome wizard page when modify, add these const and
procedures:

; For Inno Setup 4.x and 5.x:

const
WM_LBUTTONDOWN = 513;
WM_LBUTTONUP = 514;

procedure InitializeWizard();
begin
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) then
begin
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONDOWN,0,0);
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONUP,0,0);
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) and
(CurPageID = wpSelectComponents) then
WizardForm.BackButton.Visible := False;
end;
[/more]

P.S.
Руководство от Kindly у меня уже давно установленно.
Автор: SotM
Дата сообщения: 04.06.2008 12:49
Raf_SE
Дык, надо было тогда уже и ссылку на UninsHs дать. http://www.uninshs.com/index.php
Я не знаю как именно работает UninsHs, но судя по твоему коду из справки, процесс инсталяции (или же как я догадываюсь, деинсталяции) должен проходить именно так как ты написал ранее, т.е. пропуская страницу путём "нажатия" на кнопку Next.
Надо изначально давать больше информации о том, что нужно, куда нужно, кому нужно, и зачем это вообще нужно. А то так получается гадание на кофейной гуще...

Если ты следовал инструкции к UninsHs, то по идеи всё должно работать как надо.


Цитата:
НО всерано твой скрипт работает не так как нужно.

Ээээ, что значит не так как нужно?! Подробней излагай, пожалуйста, все необходимые данные для анализа.

Автор: Raf_SE
Дата сообщения: 04.06.2008 13:06

Цитата:
Ээээ, что значит не так как нужно?! Подробней излагай, пожалуйста, все необходимые данные для анализа.

Ну короче когда я нажимаю на кнопку "Изменить", в UninsHs, то он должен запускать инсталлятор, без странички приветствия и окна выбора папки установки. В данном тобой скрипте, отключается только страничка выбора папки установки.
Скорей всего коды объединены неправильно или хз. А может я чет нитуда вставил... Мож сам объединить все коды и дать их мне?

[more=Мой код]
[Code]
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 $0008);

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.Width-420);
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] [more=Код из справки UninsHs][Code] section
==================

* Add the appropriate functions for your version of Inno Setup:

; For Inno Setup 4.x:

function SkipCurPage(CurPage: Integer): Boolean;
begin
if Pos('/SP-', UpperCase(GetCmdTail)) > 0 then
case CurPage of
wpLicense, wpPassword, wpInfoBefore, wpUserInfo,
wpSelectDir, wpSelectProgramGroup, wpInfoAfter:
Result := True;
end;
end;

; For Inno Setup 5.x:

function ShouldSkipPage(CurPage: Integer): Boolean;
begin
if Pos('/SP-', UpperCase(GetCmdTail)) > 0 then
case CurPage of
wpLicense, wpPassword, wpInfoBefore, wpUserInfo,
wpSelectDir, wpSelectProgramGroup, wpInfoAfter:
Result := True;
end;
end;

* If you want to skip the welcome wizard page when modify, add these const and
procedures:

; For Inno Setup 4.x and 5.x:

const
WM_LBUTTONDOWN = 513;
WM_LBUTTONUP = 514;

procedure InitializeWizard();
begin
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) then
begin
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONDOWN,0,0);
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONUP,0,0);
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) and
(CurPageID = wpSelectComponents) then
WizardForm.BackButton.Visible := False;
end; [/more]

Автор: htuos
Дата сообщения: 04.06.2008 13:06
antifire
попробуй [more=так]procedure ReadFromFile();
var
FS: TFileStream;
str: string;
i: integer;
a: integer;
NewFile: String;
DiskInserted: boolean;
begin
str:=StringOfChar(' ',1);
FS:=TFileStream.Create(ExpandConstant('{app}\struct.dat'),fmOpenReadWrite);
try
FS.Seek(21,soFromBeginning);
FS.ReadBuffer(str,1);
finally
FS.Free;
end;
i:=Ord(str[1]);
for a:=1 to i do begin
//NewFile:='DATA.00'+IntToStr(a); //если кол-во файлов больше 9, то работать не будет
NewFile:='DATA.'+Copy('000'+IntToStr(a),Length('000'+IntToStr(a))-2,3);
DiskInserted:=False;
while not DiskInserted do
if FileExists(ExpandConstant('{src}\')+NewFile) then DiskInserted:=True
else MsgBox('Вставьте следующий диск c '+''''+NewFile+'''',mbInformation,MB_OK)
FileCopy(ExpandConstant( '{src}\' )+NewFile,ExpandConstant('{app}\')+NewFile,True);
end;
end;[/more]
вот только не очень хорошо делать бесконечные циклы, даже установку прервать нельзя
Автор: antifire
Дата сообщения: 04.06.2008 13:14
SotM

Нет, дело не в бинарниках, проблема в цикле (Для примера можно создать любой бинарный файл, и от начала отсчитать 21 позицию и туда записать любое число).

i:= Ord(str[1]);
for a:=1 to i do
NewFile:='DATA.00' + IntToStr( a );
if FileExists(ExpandConstant( '{src}\' ) + NewFile) then
begin
FileCopy(ExpandConstant( '{src}\')+ NewFile, ExpandConstant( '{app}\') + NewFile, true);
end
else
begin
WaitForNewDisk(a);
end;

(наример i=5 ) Если я меняю здесь вторую строку на for a:=1 to i-1 do то копируется предпоследний файл DATA. Получаеться чтo цикл работает до последнего значения 'a', и это копирует.
Автор: SotM
Дата сообщения: 04.06.2008 13:36
antifire

Цитата:
Если я меняю здесь вторую строку на for a:=1 to i-1 do то копируется предпоследний файл DATA. Получаеться чтo цикл работает до последнего значения 'a', и это копирует.

А, ну да, всё верно. Гы, чяво ж енто я этого не заметил. *бьюсь_ап_стену*

Raf_SE
Ну вроде [more=вот так]

Код:
procedure InitializeWizard();
begin
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) then
begin
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONDOWN,0,0);
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONUP,0,0);
end
else
begin
ExtractTemporaryFile(ExpandConstant('splash.wav'));
sndPlaySound(ExpandConstant('{tmp}\splash.wav'), $0001 or $0008);

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;
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
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) and
(CurPageID = wpSelectComponents) then
WizardForm.BackButton.Visible := False;
MainPanel.Hide;
Bevel1.Hide;
Width:= ScaleX(395);
Height:= ScaleY(142);
Left:= ScaleX(0);
Top:= ScaleY(0);
Left:= ScaleX(MainForm.Width-420);
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;
Автор: antifire
Дата сообщения: 04.06.2008 13:57
htuos

Да, этот код работает. Очень благодарен.

Есть только один вопрос: Копирование файлов DATA начинается после копирования основных файлов из секции [Files], то есть когда полоса процесса установки уже полная, и копирование происходит в фоновом режиме. Простые пользователи могут подумать что программа установки зависла. Можно ли вывести небольшое окно с сообщением о копировании этих файлов, с процессом копирования в процентах или даже с полосой процесса копирования?
Автор: Raf_SE
Дата сообщения: 04.06.2008 14:22
SotM
Уже лучше. Все ненужные страницы отключены, но кнопка "Назад" немного неправильно работает. Т.е. инсталлятор запускается (на страничке выбора компонентов), но благодаря кнопки "Назад" можно попасть на страничку приветствия, а этого не должно быть.
Автор: Diawer
Дата сообщения: 04.06.2008 14:27
Sampron
Да, если больше способов поменять иконку в левом-верхнем углу нет, то твой способ пойдёт.
Но появилась идея подойти с другой стороны, в принципе действие
[Setup]
SetupIconFile=icon_full.ico
устраивает, но только если возможно, что бы не менялась иконка в Unins000.exe и сответственно в ярлыке Программы\Uninnstal MyProg или заменить на свою.
Автор: SotM
Дата сообщения: 04.06.2008 14:32
Raf_SE
А где кнопка "Назад" появляется то?!
Там же в коде написано:
WizardForm.BackButton.Visible := False;

Так что я не знаю, где она может появится. Ты уже я думаю и сам сможешь разобраться как и куда добавить эту строчку кода

Diawer
Насколько я знаю есть такая команда:

UninstallDisplayIcon={app}\MyProg.exe,1
Но тут иконка берется только из exe файла.
Может тебе это и подойдет...
Автор: Sampron
Дата сообщения: 04.06.2008 14:37
Diawer

Цитата:
Да, если больше способов поменять иконку в левом-верхнем углу нет, то твой способ пойдёт.

На предыдущей странице есть получше способ
Автор: Raf_SE
Дата сообщения: 04.06.2008 14:49
SotM

Цитата:
А где кнопка "Назад" появляется то?!

Ну там где и обычно... Возле "Далее" и "Отмена".


Цитата:
Ты уже я думаю и сам сможешь разобраться как и куда добавить эту строчку кода

Ты о мне слишком высокого мнения
Пробывал вставить типо так:

Код: procedure CurPageChanged(CurPageID: Integer);
var Pfunc : LongWord;
begin
WizardForm.BackButton.Visible := False;
If CurPageID = wpInstalling then
Автор: SotM
Дата сообщения: 04.06.2008 15:08

Цитата:
Но тогда эта кнопка вобще отключается (при запуске инсталляхи через UninsHs). А должна просто не вести на страничку приветствия. Т.е. на страничке выбора компонентов ее быть не должно, на всех других страничках она должна быть.

Хе, ну хоть тут конкретней ты сказал, где она НЕ должна быть "на страничке выбора компонентов".

навскидочку щас скажу, в эту функцию:
procedure CurPageChanged(CurPageID: Integer);
добавим следующий код:

Код:
if CurPageID = wpSelectComponents then
WizardForm.BackButton.Visible := False;
Автор: Raf_SE
Дата сообщения: 04.06.2008 15:16
SotM
О! Другое дело! Теперь работает как надо. Пассибо!

P.S.
Только вобще желательно конкретнее говорить как добавить. Я то впихнул, но незнаю ли так правильно.

Код: procedure CurPageChanged(CurPageID: Integer);
var Pfunc : LongWord;
begin
if CurPageID = wpSelectComponents then
WizardForm.BackButton.Visible := False;
If CurPageID = wpInstalling then
begin
Form := CreateCustomForm();
Автор: SotM
Дата сообщения: 04.06.2008 15:43
Raf_SE
ё-моё, только щас заметил косяк, блин, когда ж вы все научитесь отступы делать, шоб читабельно было.
*сломал_стену_пойду_поищу_ещё_одну*
Вот, смотри [more=здесь]
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.Width-420);
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

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

if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) and
(CurPageID = wpSelectComponents) then
WizardForm.BackButton.Visible := False;
end;
[/more]
Теперь всё должно быть нормально

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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