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

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

Автор: Seup
Дата сообщения: 04.05.2009 19:11
Raf_SE

Все, сделал. Объединил "список винчестеров", "боковушка с описанием компонентов", "проверка присудствия папок, после деинсталяции". А вот с UninsHs, думаю ты сам справишься. Я с ним не разобрался, там толи в компонентах надо чтото писать, толи еще куда..

Скрипт:
[more] files

Source: "C:\descctrl.dll"; DestDir: "{app}"

code

function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';

function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

var
Info: TNewStaticText;
InfoCaption: TNewStaticText;
InfoPanel: TPanel;

var n: Integer; FreeMB, TotalMB: Cardinal; VolumeName, FileSystemName: String; VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint; ListBox: TListBox; StartMenuTreeView: TStartMenuFolderTreeView;

const oneMB= 1024*1024;
function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
Begin
if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
StringChange(Result, ',', '.')
End;

Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
Begin
if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
else Result:= String;
End;

Procedure GetDiskInfo(Disk: String);
Begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
End;

Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
ListBox.Items.Clear
for n:= 1 to 31 do // диск 'А' пропустить
if (GetLogicalDrives and (1 shl n)) > 0 then
if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n:= 0 to ListBox.Items.Count -1 do begin
Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление }
if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;

Procedure ObjectOnClick(Sender: TObject); Begin
Case TObject(Sender) of
ListBox: for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'
WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;
end; End;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
Res: Integer;
begin
case CurUninstallStep of
usPostUninstall:
begin
//Проверяем присутствие папки после удаления
If DirExists(ExpandConstant('{app}')+'')
then
//Создаем диалог с тремя кнопками
case MsgBox('Папка "'+ExpandConstant('{app}')+'" не пуста.'#13#13 +
'"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 +
'"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
'"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL)
of IDYES:
begin
if not DelTree(ExpandConstant('{app}')+'', True, True, True)
then
MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK);
end
IDNO:
begin
if not ShellExec('open', ExpandConstant('{app}')+'', '', '', SW_SHOWMAXIMIZED, ewNoWait, Res)
then
MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK);
end
IDCANCEL:
begin
end;
end;
end;
end;
end;

//Будьте очень осторожны в таких случаях! Не позволим пользователю установить программу в уже существующую папку:
function NextButtonClick(CurPage: Integer): Boolean;
var
s, s2:string;
begin
Result:=True;
If CurPage=wpSelectDir
then
begin
s2:=ExpandConstant('{app}')+'';
If DirExists(s2)
then
begin
s:='Установка в существующую папку в целях безопасности невозможна!';
MsgBox(s, mbError, mb_Ok);
Result:=False;
end;
end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
if CurPageID = wpSelectDir then ListBoxRefresh
End;
Procedure InitializeWizard;
Begin
ListBox:= TListBox.Create(WizardForm)
ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
ListBox.Font.Size:= 9
ListBox.Font.Style:= []
ListBox.Font.Name:= 'Courier New';
ListBox.OnClick:= @ObjectOnClick;
ListBox.Parent:= WizardForm.SelectDirPage;
WizardForm.NoIconsCheck.SetBounds(WizardForm.DiskSpaceLabel.Left + 96, WizardForm.DiskSpaceLabel.Top + 1, WizardForm.NoIconsCheck.Width, WizardForm.NoIconsCheck.Height)
WizardForm.NoIconsCheck.OnClick:= @ObjectOnClick
WizardForm.NoIconsCheck.Parent:= WizardForm.SelectProgramGroupPage
WizardForm.NoIconsCheck.Show
StartMenuTreeView:= TStartMenuFolderTreeView.Create(WizardForm)
StartMenuTreeView.SetPaths(ExpandConstant('{userprograms}'), ExpandConstant('{commonprograms}'), ExpandConstant('{userstartup}'), ExpandConstant('{commonstartup}'));
StartMenuTreeView.SetBounds(ListBox.Left, ListBox.Top, ListBox.Width, ListBox.Height)
StartMenuTreeView.Parent:= WizardForm.SelectProgramGroupPage
StartMenuTreeView.Cursor:= crHand
StartMenuTreeView.OnChange:=@ObjectOnClick

WizardForm.TYPESCOMBO.Visible:= false;
WizardForm.ComponentsList.Height := WizardForm.ComponentsList.Height + WizardForm.ComponentsList.Top - WizardForm.TYPESCOMBO.Top;
WizardForm.ComponentsList.Top := WizardForm.TYPESCOMBO.Top;
WizardForm.ComponentsList.Width := ScaleX(200);
InfoPanel := TPanel.Create(WizardForm);
InfoPanel.Parent := WizardForm.SelectComponentsPage;
InfoPanel.Caption := '';
InfoPanel.Top := WizardForm.ComponentsList.Top;
InfoPanel.Left := ScaleX(216);
InfoPanel.Width := ScaleX(200);
InfoPanel.Height := WizardForm.ComponentsList.Height;
InfoPanel.BevelInner := bvRaised;
InfoPanel.BevelOuter := bvLowered;
InfoCaption := TNewStaticText.Create(WizardForm);
InfoCaption.Parent := WizardForm.SelectComponentsPage;
InfoCaption.Caption := 'Инфо';
InfoCaption.Left := ScaleX(224);
InfoCaption.Top := InfoPanel.Top - ScaleY(5);
InfoCaption.Font.Color := clActiveCaption;
Info := TNewStaticText.Create(WizardForm);
Info.Parent := InfoPanel;
Info.AutoSize := False;
Info.Left := ScaleX(6);
Info.Width := ScaleX(188);
Info.Top := ScaleY(12);
Info.Height := WizardForm.ComponentsList.Height - ScaleY(18);
Info.Caption := 'Наведите указатель для получения информации';
Info.WordWrap := true;
enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
'xmusic5-MIDI файл;'+
'xmusic6-MIDI файл;'+
'xmusic7-MIDI файл;'+
'УўОДГиКц;'+
'µВОДГиКц;'+
'ЦРОДГиКц;'+
'¶нОДГиКцІвКФ#3B#3B°ьє¬#3BУўОД·ЦєЕ;'+
'ІвКФГиКц;'+
'ІвКФ1ГиКц;'+
'ІвКФ2ГиКц;'+
'ІвКФ3ГиКц;'+
'ІвКФ4ГиКц;'+
'ІвКФ5ГиКц;'+
'ІвКФ6ГиКц;'
);
End;



procedure DeinitializeSetup();
begin
disabledesc();
end;

Components

Name: "xmusic5"; Description: "xmusic5"; Types: full
Name: "xmusic6"; Description: "xmusic6"; Types: full
Name: "xmusic7"; Description: "xmusic7"; Types: full [/more]

Ссылка на скрипт:
http://narod.ru/disk/8346427000/FOR%20Raf_SE2.rar.html



Автор: spider91
Дата сообщения: 04.05.2009 19:19
как в [Messages] вписать custommassage для DiskSpaceMBLabel? помогите плиз
Автор: perf92
Дата сообщения: 04.05.2009 19:30
kombat 77
Ага
Автор: Raf_SE
Дата сообщения: 04.05.2009 19:31
spider91
При запуске инсталлятора пишет ошибку "Cold not call proc." и выделяет "PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;"

Seup
Вроди работает. Я просто немного напутал, в скрипте "UninsHs" что выложил на предыдущей страничке много мусора, толькочто сверился с его Реадми, все подправил, и вродь работает
И кстати, там на компоненты можно не обращать внимания, для работы ему нужен только встроенный код, и "своя" запись в секции [Run]

[more=Вот что вышло][Setup]
AppName=TasksList
AppVerName=TasksList
DefaultDirName={pf}\My program 1.2

[Files]
Source: C:\Program Files\Inno Setup 5\descctrl.dll; DestDir: {app};

[Components]
Name: "xmusic5"; Description: "xmusic5"; Types: full
Name: "xmusic6"; Description: "xmusic6"; Types: full
Name: "xmusic7"; Description: "xmusic7"; Types: full

[code]
function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';

function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

var
Info: TNewStaticText;
InfoCaption: TNewStaticText;
InfoPanel: TPanel;

var n: Integer; FreeMB, TotalMB: Cardinal; VolumeName, FileSystemName: String; VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint; ListBox: TListBox; StartMenuTreeView: TStartMenuFolderTreeView;

const oneMB= 1024*1024;
function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
Begin
if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
StringChange(Result, ',', '.')
End;

Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
Begin
if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
else Result:= String;
End;

Procedure GetDiskInfo(Disk: String);
Begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
End;

Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
ListBox.Items.Clear
for n:= 1 to 31 do // диск 'А' пропустить
if (GetLogicalDrives and (1 shl n)) > 0 then
if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n:= 0 to ListBox.Items.Count -1 do begin
Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление }
if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;

Procedure ObjectOnClick(Sender: TObject); Begin
Case TObject(Sender) of
ListBox: for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'
WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;
end; End;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
Res: Integer;
begin
case CurUninstallStep of
usPostUninstall:
begin
//Проверяем присутствие папки после удаления
If DirExists(ExpandConstant('{app}')+'')
then
//Создаем диалог с тремя кнопками
case MsgBox('Папка "'+ExpandConstant('{app}')+'" не пуста.'#13#13 +
'"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 +
'"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
'"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL)
of IDYES:
begin
if not DelTree(ExpandConstant('{app}')+'', True, True, True)
then
MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK);
end
IDNO:
begin
if not ShellExec('open', ExpandConstant('{app}')+'', '', '', SW_SHOWMAXIMIZED, ewNoWait, Res)
then
MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK);
end
IDCANCEL:
begin
end;
end;
end;
end;
end;

//Будьте очень осторожны в таких случаях! Не позволим пользователю установить программу в уже существующую папку:
function NextButtonClick(CurPage: Integer): Boolean;
var
s, s2:string;
begin
Result:=True;
If CurPage=wpSelectDir
then
begin
s2:=ExpandConstant('{app}')+'';
If DirExists(s2)
then
begin
s:='Установка в существующую папку в целях безопасности невозможна!';
MsgBox(s, mbError, mb_Ok);
Result:=False;
end;
end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
if CurPageID = wpSelectDir then ListBoxRefresh

begin
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) and
(CurPageID = wpSelectComponents) then
WizardForm.BackButton.Visible := False;
end;
End;


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;

const
WM_LBUTTONDOWN = 513;
WM_LBUTTONUP = 514;


Procedure InitializeWizard;
Begin
ListBox:= TListBox.Create(WizardForm)
ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
ListBox.Font.Size:= 9
ListBox.Font.Style:= []
ListBox.Font.Name:= 'Courier New';
ListBox.OnClick:= @ObjectOnClick;
ListBox.Parent:= WizardForm.SelectDirPage;
WizardForm.NoIconsCheck.SetBounds(WizardForm.DiskSpaceLabel.Left + 96, WizardForm.DiskSpaceLabel.Top + 1, WizardForm.NoIconsCheck.Width, WizardForm.NoIconsCheck.Height)
WizardForm.NoIconsCheck.OnClick:= @ObjectOnClick
WizardForm.NoIconsCheck.Parent:= WizardForm.SelectProgramGroupPage
WizardForm.NoIconsCheck.Show
StartMenuTreeView:= TStartMenuFolderTreeView.Create(WizardForm)
StartMenuTreeView.SetPaths(ExpandConstant('{userprograms}'), ExpandConstant('{commonprograms}'), ExpandConstant('{userstartup}'), ExpandConstant('{commonstartup}'));
StartMenuTreeView.SetBounds(ListBox.Left, ListBox.Top, ListBox.Width, ListBox.Height)
StartMenuTreeView.Parent:= WizardForm.SelectProgramGroupPage
StartMenuTreeView.Cursor:= crHand
StartMenuTreeView.OnChange:=@ObjectOnClick

WizardForm.TYPESCOMBO.Visible:= false;
WizardForm.ComponentsList.Height := WizardForm.ComponentsList.Height + WizardForm.ComponentsList.Top - WizardForm.TYPESCOMBO.Top;
WizardForm.ComponentsList.Top := WizardForm.TYPESCOMBO.Top;
WizardForm.ComponentsList.Width := ScaleX(200);
InfoPanel := TPanel.Create(WizardForm);
InfoPanel.Parent := WizardForm.SelectComponentsPage;
InfoPanel.Caption := '';
InfoPanel.Top := WizardForm.ComponentsList.Top;
InfoPanel.Left := ScaleX(216);
InfoPanel.Width := ScaleX(200);
InfoPanel.Height := WizardForm.ComponentsList.Height;
InfoPanel.BevelInner := bvRaised;
InfoPanel.BevelOuter := bvLowered;
InfoCaption := TNewStaticText.Create(WizardForm);
InfoCaption.Parent := WizardForm.SelectComponentsPage;
InfoCaption.Caption := 'Инфо';
InfoCaption.Left := ScaleX(224);
InfoCaption.Top := InfoPanel.Top - ScaleY(5);
InfoCaption.Font.Color := clActiveCaption;
Info := TNewStaticText.Create(WizardForm);
Info.Parent := InfoPanel;
Info.AutoSize := False;
Info.Left := ScaleX(6);
Info.Width := ScaleX(188);
Info.Top := ScaleY(12);
Info.Height := WizardForm.ComponentsList.Height - ScaleY(18);
Info.Caption := 'Наведите указатель для получения информации';
Info.WordWrap := true;
enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
'xmusic5-MIDI файл;'+
'xmusic6-MIDI файл;'+
'xmusic7-MIDI файл;'+
'УўОДГиКц;'+
'µВОДГиКц;'+
'ЦРОДГиКц;'+
'¶нОДГиКцІвКФ#3B#3B°ьє¬#3BУўОД·ЦєЕ;'+
'ІвКФГиКц;'+
'ІвКФ1ГиКц;'+
'ІвКФ2ГиКц;'+
'ІвКФ3ГиКц;'+
'ІвКФ4ГиКц;'+
'ІвКФ5ГиКц;'+
'ІвКФ6ГиКц;'
);

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;
End;



procedure DeinitializeSetup();
begin
disabledesc();
end;[/more]
Автор: Seup
Дата сообщения: 04.05.2009 19:33
spider91


Цитата:
как в [Messages] вписать custommassage для DiskSpaceMBLabel? помогите плиз


Все очень просто, может не так как хотелось бы, но всеже:

Зайди в папку C:\Program Files\Inno Setup 5\Languages\ ну или куда установлена Inno Setup и открой блокнотом файл Russian.isl. Там введи в поиске DiskSpaceMBLabel и пиши что хочешь. Russian.isl копируется в инсталятор, поэтому то что ты напишешь будет не только у тебя на компе но и у всех.

з.ы. Не забудь сделать бакуп Russian.isl


Автор: spider91
Дата сообщения: 04.05.2009 19:42
Seup


а по другому никак? каждый раз ковырятся в файлах .isl не охота а в скрипте както проще поправить.
Автор: Seup
Дата сообщения: 04.05.2009 19:52
spider91
Все оказалось еще проще:

[Messages]
DiskSpaceMBLabel=Твоя надпись
Автор: kombat 77
Дата сообщения: 04.05.2009 19:57
perf92

Цитата:
Ага

Ну если в моем примере можно снять галку ...., ну не знаю чем могу помочь.
Автор: spider91
Дата сообщения: 04.05.2009 20:05
Seup


я так и делал но тепер нужен мултиязычный инсалятор . хотелось бы туда вписать надпись из CustomMassages
Автор: Seup
Дата сообщения: 04.05.2009 20:05
perf92

Цитата:
Ты наверно меня не понял, мне надо чтобы надпись "Обновить DirectX" была вдавленна, типо обязательно для установки.

А что если не делать вдавленной надпись "Обновить DirectX", а прописать тихую установку. Раз у пользователя нет выбора, устанавливать DirectX или нет, то большого смысла я невижу. Можно просто прописать в одном из label, что будет установлен в обязательном порядке DirectX, ну или еще что-то.

Автор: Qarma
Дата сообщения: 04.05.2009 20:17

Цитата:
Предлагаю вам мою новую библиотеку isFlash.dll v1.00
Библиотека предназначена для показа flash анимации и воспроизведение flv файлов в фоновом окне Inno Setup, пример использования смотрите в архиве.

Ввиду того, что isFlash.dll я написал только сегодня, то понятное дело особо не тестировал, поэтому возможны глюки. Кстати сразу предупреждаю, что при распаковке инсталлятором файлов анимация тормозит.
Ссылка для скачивания: http://narod.ru/disk/8272304000/isflash%20v1.00.rar.html

Можно лаги устранить?
Автор: perf92
Дата сообщения: 04.05.2009 20:20
kombat 77
Seup
Извиняюсь, все я разобрался, спасибо!
Автор: Seup
Дата сообщения: 04.05.2009 20:23
spider91

Цитата:
я так и делал но тепер нужен мултиязычный инсалятор . хотелось бы туда вписать надпись из CustomMassages


Не знаю, это то что тебе нужно или нет:

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "slovak"; MessagesFile: "compiler:Languages\Slovak.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Messages]
english.DiskSpaceMBLabel=Super
russian.DiskSpaceMBLabel=Супер
slovak.DiskSpaceMBLabel=не знаю этот язык
Автор: spider91
Дата сообщения: 04.05.2009 20:31
Seup

спасибо. то что надо. я думал можно писать язык (english. russian. ...) только в CustomMassages а оказалось что и здесь можно

Добавлено:
как удалить игровые сохранения без проверки ключей реестра?
Автор: Raf_SE
Дата сообщения: 04.05.2009 21:50
Заметил новый баг. На странице выбора папки в меню Пуск, появилась [more=такая вот хрень] [/more].
Вобщем мой предыдущий вопрос, остается открытым

Добавлено:
spider91
Незнаю ли оно, но вродь похоже. Нашел в справке собранной из этого форума (она в шабке)

[more=Читать дальше..]Как при деинсталляции сделать дополнительный чекбокс "Удалить сохраненные игры?" (удалить не спрашивая можно в секции [UninstallDelete], но нужен чекбокс)?

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usDone then
begin
if DirExists(ExpandConstant('{app}\profiles')) then
begin
if MsgBox('Удалить сохраненные игры?',mbconfirmation, mb_yesno) = IDYES then
begin
DelTree(ExpandConstant('{app}'), True, True, True);
end;
end;
end;
end;

-------------------
Можно ли сделать, чтобы когда папка будет удалена, выдавалось сообщение, что сохраненные игры были удалены?

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usDone then
begin
if DirExists(ExpandConstant('{app}\profiles')) then
begin
if MsgBox('Удалить сохраненные игры?',mbconfirmation, mb_yesno) = IDYES then
begin
DelTree(ExpandConstant('{app}'), True, True, True);
MsgBox('сообщение...', mbinformation, mb_ok);
end;
end;
end;
end; [/more]
Автор: spider91
Дата сообщения: 04.05.2009 22:09
Raf_SE


вроде оно. спасибо
Автор: DeKaNszn
Дата сообщения: 05.05.2009 05:12
Raf_SE


Цитата:
Вобщем мой предыдущий вопрос, остается открытым


[more=пробуй][no]var
n: Integer;
FreeMB, TotalMB: Cardinal;
VolumeName, FileSystemName: String;
VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
ListBox: TListBox;
StartMenuTreeView: TStartMenuFolderTreeView;
Info, InfoCaption: TNewStaticText;
InfoPanel: TPanel;

const
oneMB= 1024*1024;
WM_LBUTTONDOWN = 513;
WM_LBUTTONUP = 514;

function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';
function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';
function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
Begin
if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
StringChange(Result, ',', '.')
End;

Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
Begin
if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
else Result:= String;
End;

Procedure GetDiskInfo(Disk: String);
Begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
End;

Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
ListBox.Items.Clear
for n:= 1 to 31 do // диск 'А' пропустить
if (GetLogicalDrives and (1 shl n)) > 0 then
if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n:= 0 to ListBox.Items.Count -1 do begin
Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление }
if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;

Procedure ObjectOnClick(Sender: TObject); Begin
Case TObject(Sender) of
ListBox: for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'
WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;
end; End;

Function NextButtonClick(CurPageID: Integer): Boolean;
var
s, s2:string;
Begin
Result:= True;
If CurPage=wpSelectDir
then begin
s2:=ExpandConstant('{app}')+'';
If DirExists(s2)
then begin
s:='Установка в существующую папку в целях безопасности невозможна!';
MsgBox(s, mbError, mb_Ok);
Result:=False;
end;
end;
if (CurPageID = wpSelectDir) and (Pos(Uppercase(ExpandConstant('{win}')), Uppercase(ExpandConstant('{app}'))) > 0) and Result
then Result:= MessageBox(StrToInt(ExpandConstant('{wizardhwnd}')), ExpandConstant('{cm:SysDirSelect}'), 'Установка в системную папку', MB_YESNO or $30) = idYes;
End;

Procedure CurPageChanged(CurPageID: Integer);
Begin
if CurPageID = wpSelectDir then ListBoxRefresh
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) and (CurPageID = wpSelectComponents)
then WizardForm.BackButton.Visible := False;
PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
End;

Procedure InitializeWizard;
Begin
ListBox:= TListBox.Create(WizardForm)
ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
ListBox.Font.Size:= 9
ListBox.Font.Style:= []
ListBox.Font.Name:= 'Courier New';
ListBox.OnClick:= @ObjectOnClick;
ListBox.Parent:= WizardForm.SelectDirPage;
WizardForm.NoIconsCheck.SetBounds(WizardForm.DiskSpaceLabel.Left + 96, WizardForm.DiskSpaceLabel.Top + 1, WizardForm.NoIconsCheck.Width, WizardForm.NoIconsCheck.Height)
WizardForm.NoIconsCheck.OnClick:= @ObjectOnClick
WizardForm.NoIconsCheck.Parent:= WizardForm.SelectProgramGroupPage
WizardForm.NoIconsCheck.Show
StartMenuTreeView:= TStartMenuFolderTreeView.Create(WizardForm)
StartMenuTreeView.SetPaths(ExpandConstant('{userprograms}'), ExpandConstant('{commonprograms}'), ExpandConstant('{userstartup}'), ExpandConstant('{commonstartup}'));
StartMenuTreeView.SetBounds(ListBox.Left, ListBox.Top, ListBox.Width, ListBox.Height)
StartMenuTreeView.Parent:= WizardForm.SelectProgramGroupPage
StartMenuTreeView.Cursor:= crHand
StartMenuTreeView.OnChange:=@ObjectOnClick
WizardForm.TYPESCOMBO.Visible:= false;
WizardForm.ComponentsList.Height := WizardForm.ComponentsList.Height + WizardForm.ComponentsList.Top - WizardForm.TYPESCOMBO.Top;
WizardForm.ComponentsList.Top := WizardForm.TYPESCOMBO.Top;
WizardForm.ComponentsList.Width := ScaleX(200);
InfoPanel := TPanel.Create(WizardForm);
InfoPanel.Parent := WizardForm.SelectComponentsPage;
InfoPanel.Caption := '';
InfoPanel.Top := WizardForm.ComponentsList.Top;
InfoPanel.Left := ScaleX(216);
InfoPanel.Width := ScaleX(200);
InfoPanel.Height := WizardForm.ComponentsList.Height;
InfoPanel.BevelInner := bvRaised;
InfoPanel.BevelOuter := bvLowered;
InfoCaption := TNewStaticText.Create(WizardForm);
InfoCaption.Parent := WizardForm.SelectComponentsPage;
InfoCaption.Caption := 'ГиКц';
InfoCaption.Left := ScaleX(224);
InfoCaption.Top := InfoPanel.Top - ScaleY(5);
InfoCaption.Font.Color := clActiveCaption;
Info := TNewStaticText.Create(WizardForm);
Info.Parent := InfoPanel;
Info.AutoSize := False;
Info.Left := ScaleX(6);
Info.Width := ScaleX(188);
Info.Top := ScaleY(12);
Info.Height := WizardForm.ComponentsList.Height - ScaleY(18);
Info.Caption := 'ТЖ¶ЇДгµДКу±кЦёХлµЅЧйјюЦ®ЙПЈ¬±гїЙјыµЅЛьµДГиКцЎЈ';
Info.WordWrap := true;
enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
'іМРтОДјюГиКц;'+
'°пЦъОДјюГиКц;'+
'ЧФКцОДјюГиКц;'+
'УўОДГиКц;'+
'µВОДГиКц;'+
'ЦРОДГиКц;'+
'¶нОДГиКцІвКФ#3B#3B°ьє¬#3BУўОД·ЦєЕ;'+
'ІвКФГиКц;'+
'ІвКФ1ГиКц;'+
'ІвКФ2ГиКц;'+
'ІвКФ3ГиКц;'+
'ІвКФ4ГиКц;'+
'ІвКФ5ГиКц;'+
'ІвКФ6ГиКц;'
);
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 DeinitializeSetup();
begin
disabledesc();
end;

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;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
Res: Integer;
begin
case CurUninstallStep of
usPostUninstall:
begin
//Проверяем присутствие папки после удаления
If DirExists(ExpandConstant('{app}')+'')
then
//Создаем диалог с тремя кнопками
case MsgBox('Папка "'+ExpandConstant('{app}')+'" не пуста.'#13#13 +
'"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 +
'"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
'"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL)
of
IDYES: begin
if not DelTree(ExpandConstant('{app}')+'', True, True, True)
then MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK);
end;
IDNO: begin
if not ShellExec('open', ExpandConstant('{app}')+'', '', '', SW_SHOWMAXIMIZED, ewNoWait, Res)
then MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK);
end
IDCANCEL: begin
end;
end;
end;
end;
end; [/no][/more]
Автор: Relatior
Дата сообщения: 05.05.2009 10:42
люди подскажите!!

Например я создал мод для игры и мне нужно, чтобы инсталятор сам находил папку с установленной игрой?
Автор: Raf_SE
Дата сообщения: 05.05.2009 10:59
Relatior
Пропиши в секции [Setup] к примеру так DefaultDirName={reg:HKLM\SOFTWARE\Blizzard Entertainment\Diablo II,InstallPath|{pf}\Diablo II}
Тогда путь будет брать из параметра реестра "InstallPath", а если его не найдет, согда предложит "{pf}\Diablo II"

Добавлено:
DeKaNszn
выделяет красным "If CurPage=wpSelectDir" и пишет ошибку "Unknown identifer "CurPage""
Я ж просто забыл исправить код деинсталлятора UninsHs. Вот [more=каким он должен быть]
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;

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].

Кстати, на всяк: для работоспособности всего что в результате должно получиться, в инсталле должна быть библиотека http://narod.ru/disk/8343782000/descctrl.dll.html Ну и для UninsHs скрипт должен выглядеть типо так:
[more]
[Setup]
AppName=Earth 2140
AppVerName=Earth 2140
AppModifyPath="{app}\UninsHs.exe" /m0=Earth 2140

[Files]
Source: "D:\Документы\PSLan\Скачяно\Inno\UninsHs\UninsHs.exe"; DestDir: "{app}"; Flags: restartreplace

[Run]
Filename: {app}\UninsHs.exe; Parameters: /r0=Earth 2140,{language},{srcexe}; Flags: runminimized[/more] Сам UninsHs можно скачать тут http://www.han-soft.com/uninshs.php
Автор: Relatior
Дата сообщения: 05.05.2009 11:46
Raf_SE - СПАСИБО БОЛЬШОЕ!!!
Автор: DeKaNszn
Дата сообщения: 05.05.2009 12:08
Raf_SE


Цитата:
выделяет красным "If CurPage=wpSelectDir" и пишет ошибку "Unknown identifer "CurPage"


замени CurPage на CurPageID
Автор: Relatior
Дата сообщения: 05.05.2009 12:13
ребят подскажите еще!

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

И еще как сделать,чтобы некоторые файлы или НАПРИМЕР у меня есть архив и после распаковки всех файлов он сам удалился, ведь он больше не нужен!
Автор: Raf_SE
Дата сообщения: 05.05.2009 12:14
Выделяет красным "PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;" и пишет ошибку "Unknown identifer "PageNameLabel""

Добавлено:

Цитата:
И еще как сделать,чтобы некоторые файлы или НАПРИМЕР у меня есть архив и после распаковки всех файлов он сам удалился, ведь он больше не нужен!

Source: D:\Games\NFS 3\Text\Rus\-rus-\sound Russian.bat; DestDir: {app}; Components: Text\Russian; Flags: deleteafterinstall;


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

[Components]
Name: "Text"; Description: "Язык текста:"; Flags: fixed; Types: "full";
Name: "Text\English"; Description: "Английский"; Flags: exclusive;
Name: "Text\Russian"; Description: "Русский"; Flags: exclusive;

[Files]
Source: D:\Games\NFS 3\Text\Rus\FeData\text\ARIAL10B.FFN; DestDir: {app}\FeData\text; Components: Text\Russian
Source: D:\Games\NFS 3\Text\Rus\FeData\text\CP16BI.FFN; DestDir: {app}\FeData\text; Components: Text\English

А вобще, изучай русскоязычную справку. Элементарные вещи спрашиваешь...
Автор: Relatior
Дата сообщения: 05.05.2009 12:27
ИЗВИНИТЕ, просто я в этом деле новичок
Автор: Seup
Дата сообщения: 05.05.2009 13:34
Есть у когонб альтернативный рабочий скрипт для второго прогресбара, показывающего установку каждого файла отдельно? Ну я думаю, вы понимаете, про что я. Тот скрипт, который в "Коллекция скриптов" (Progress_Double.iss) использует InnoCallback.dll. Ему, как я понял, для правильного результата нужен файл SizeInfo.ini.
Вопрос: как заполнить этот файл?

з.ы. Желательно, все же, альтернативный скрипт, без использования дополнительных dll.
Автор: spider91
Дата сообщения: 05.05.2009 14:05
Raf_SE



Цитата:
Выделяет красным "PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;" и пишет ошибку "Unknown identifer "PageNameLabel""



пропиши
Код: var
PageNameLabel: TLabel;
Автор: Seup
Дата сообщения: 05.05.2009 14:13
А что, топик "Чем и как лучше жать" уже неработает? Я написал там сообщение о предложении в нести в шапку еще одну прогу, а сообщение не появилось..
Автор: DeKaNszn
Дата сообщения: 05.05.2009 14:14
Raf_SE

в Var (который перед const) добавь:

Код: [no]PageNameLabel,PageDescriptionLabell: TLabel;[/no]
Автор: spider91
Дата сообщения: 05.05.2009 14:43
DeKaNszn


ето как?
Автор: DeKaNszn
Дата сообщения: 05.05.2009 15:04
spider91

[more=попробуй][no]procedure InitializeWizard();
begin
WizardForm.Color:=$00FF00;
WizardForm.WelcomePage.Color:=$00FF00;
WizardForm.InnerPage.Color:=$00FF00;
WizardForm.FinishedPage.Color:=$00FF00;
WizardForm.LicensePage.Color:=$00FF00;
WizardForm.PasswordPage.Color:=$00FF00;
WizardForm.InfoBeforePage.Color:=$00FF00;
WizardForm.UserInfoPage.Color:=$00FF00;
WizardForm.SelectDirPage.Color:=$00FF00;
WizardForm.SelectComponentsPage.Color:=$00FF00;
WizardForm.SelectProgramGroupPage.Color:=$00FF00;
WizardForm.SelectTasksPage.Color:=$00FF00;
WizardForm.ReadyPage.Color:=$00FF00;
WizardForm.PreparingPage.Color:=$00FF00;
WizardForm.InstallingPage.Color:=$00FF00;
WizardForm.InfoAfterPage.Color:=$00FF00;
end;[/no][/more] для начала

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

Предыдущая тема: в очередной раз босудим антивиры?


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