Показать полную графическую версию : [архив] Inno Setup .:[все вопросы]:.
Очередной вопрос ламера:
Каким образом мы можем сделать следущее - если ставим в 1й раз, и программа определила, что каталога назначения нету - все проходит на ура - а если ставим уже поверх установленной программы - чтоб сперва удалил ярлыки которые были выведены, удалил папку назначения - и уже поставил ка бы с 0(с учетом что настройки программы хранятся в реестре, их удалять нельзя)
Можно, только поподробней объясните, что вы хотите сделать и что должно выполниться из секции кода. »
Распаковываются архивы freearc'a с помощью скрипта и dll Bulata Ziganshina. Дело в том что когда сначала копируются файлы и создаются ярлыки они выгледят на раб столе без картинок т.к. файлы содержащие их еще не распаковались а после распаковки приходится нажимать на рабочем столе обновить. А вообще сейчас сказав про это, возможно ли сделать что бы ярлыки создавались последними.
Berline, а не проще поставить поверх программу?
Теоретически, конечно можно определить куда были установлены ярлыки в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\..._isl, удалить их и удалить всю папку приложения, но как быть с хвостами в реестре? т.е. после удаления второй программы, они так и останутся мусором в системе пользователя...
Дело в том что когда сначала копируются файлы и создаются ярлыки они выгледят на раб столе без картинок т.к. файлы содержащие их еще не распаковались а после распаковки приходится нажимать на рабочем столе обновить. »
Решается очень просто, добавьте в секцию [Setup]:
ChangesEnvironment=yes
Возможные значения: yes или no
Значение по умолчанию: no
Описание:
При значении yes по завершению установки инсталлятор сообщит другим запущенным приложениям (в том числе Проводнику), чтобы они перезагрузили переменные среды (environment variables) из реестра.
На NT-платформах Windows, если инсталлятор создает или изменяет переменную среды (environment variable), а директиве ChangesEnvironment не присвоено значение yes, новая/обновленная переменная среды не будет доступна для приложений, запущенных из Проводника, до тех пор, пока пользователь не завершит сеанс или не перезагрузит компьютер.
Serega, не, вот "мусор" в реестре как раз надо оставить... а ярлыки, и папку с программой снести
R.i.m.s.k.y.
22-06-2009, 15:51
Искал, не нашел.
Подскажите пожалуйста, как можно сохранить в Inno изменяемые ветки реестра перед установкой программы (желательно автоматом, уж больно много), и восстановить реестр при деинсталляции программы?
Заранее спасибо.
Подскажите пожалуйста, как можно сохранить в Inno изменяемые ветки реестра перед установкой программы (желательно автоматом, уж больно много), и восстановить реестр при деинсталляции программы? »
[Setup]
AppName=RegBackup
AppVerName=Registry Backup
CreateAppDir=false
[Registry]
;если используется функция RegBackup, то желательно удалять ключ или параметр при деинсталляции (флаги deletevalue или uninsdeletekey), чтобы не оставались записи реестра, которых не было до установки.
Root: HKCU; SubKey: Control Panel\Desktop; ValueType: none; ValueName: Wallpaper; Flags: deletevalue uninsdeletevalue; BeforeInstall: RegBackup('HKCU\Control Panel\Desktop')
[Run]
Filename: {uninstallexe}; Flags: nowait postinstall; Description: Восстановить обои Рабочего стола; Parameters: /SILENT
Filename: {cmd}; Parameters: /C del /F /Q /AH IconCache.db; Flags: runhidden nowait; WorkingDir: {code:GetFolderByCSIDL|28}
[Code]
function SystemParametersInfo(uAction, uParam: integer; pvParam: longint; fUpdateProfile: integer): boolean; external 'SystemParametersInfoA@user32';
// получить путь к папке. Пример: DestDir: {code:GetFolderByCSIDL|28}
function GetFolderByCSIDL(CSIDL: String): String;
begin
Result:= GetShellFolderByCSIDL(StrToInt(CSIDL), true);
end;
// Зарезервировать параметры указанного раздела реестра или Восстановить записи реестра из резервной копии
Procedure RegBackup(Path: String);
var
errCode, n: Integer;
RegExe, isKey: String;
Keys: TArrayOfString;
begin
RegExe:= AddBackslash(GetSystemDir) + 'reg.exe'
if not FileExists(RegExe) then begin
MsgBox('Registry backup not created' #13#10 'File reg.exe not found!', mbError, MB_OK);
Exit;
end;
isKey:= 'HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting('AppName')}_regBackup' {! InnoSetup удаляет чужие ключи в AppName_is1}
if Length(Path) > 0 then
Exec(RegExe,'copy '+ AddQuotes(Path) +' '+ AddQuotes(AddBackslash(isKey) + Path) +' /s /f','',sw_HIDE, ewWaitUntilTerminated, errCode)
else begin
if not RegGetSubkeyNames(HKLM, Copy(isKey, 6,Length(isKey)), Keys) then Exit; { нет резервных записей}
for n:= 0 to GetArrayLength(Keys) -1 do { reg.exe не может сохранять в корень реестра}
Exec(RegExe, 'copy '+ AddQuotes(AddBackslash(isKey) + Keys[n]) +' '+ Keys[n] +' /s /f','', sw_HIDE, ewWaitUntilTerminated, errCode)
RegDeleteKeyIncludingSubkeys(HKLM, Copy(isKey, 6,Length(isKey)))
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then SystemParametersInfo(20,0,0,2) { update Desktop}
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then begin
RegBackup(''); SystemParametersInfo(20,0,0,2)
end;
end;
R.i.m.s.k.y.
22-06-2009, 17:25
Пример »
эээ, не совсем понятно какой кусок кода какой ключ сохраняет. Ну не силен я в Паскале.
Буду благодарен за простой кусок кода по сути в качестве примера, по аналогии я его размножу.
В принципе можно сделать reg export с параметрами, но выполнить его надо ДО секции [Registry]. Это второй вопрос - в какой последовательности выполняется скрипт Inno и как это сделать.
вот "мусор" в реестре как раз надо оставить... а ярлыки, и папку с программой снести »
как говорят: хозяин - барин...
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
AllowNoIcons=yes
OutputDir=.
;отключаем сообщение о существовании папки
DirExistsWarning=no
;не использовать папку, которую выбрал пользователь в прошлый раз
UsePreviousAppDir=no
;не использовать группу меню Пуск, выбранную пользователем при предыдущей установке
UsePreviousGroup=no
;не использовать тип установки, выбранный пользователем в прошлый раз
UsePreviousSetupType=no
;не использовать задания, которые выбрал пользователь при прошлой установке
UsePreviousTasks=no
;имя пользователя, название организации и серийный номер, которые ввел пользователь при предыдущей установке
UsePreviousUserInfo=no
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
[InstallDelete]
; делаем пустую команду, чтоб выполнить код перед установкой
Name: ''; Type: files; BeforeInstall: DeleteAppAndLnk
[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion
[Icons]
Name: {group}\My Program; Filename: {app}\MyProg.exe
Name: {group}\{cm:ProgramOnTheWeb,My Program}; Filename: http://www.example.com/
Name: {group}\{cm:UninstallProgram,My Program}; Filename: {uninstallexe}
Name: {commondesktop}\My Program; Filename: {app}\MyProg.exe; Tasks: desktopicon
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\My Program; Filename: {app}\MyProg.exe; Tasks: quicklaunchicon
[Run]
Filename: {app}\MyProg.exe; Description: {cm:LaunchProgram,My Program}; Flags: nowait postinstall skipifsilent
[Code]
// узнаём путь к папке
function GetGroupPath: string;
var
i, k: Integer;
s: string;
begin
s:= ExpandConstant('{group}');
repeat
if s[Length(s)] <> '\' then
Delete(s, Length(s), 1);
until s[Length(s)] = '\';
Result:= s;
end;
procedure DeleteAppAndLnk;
var
RootKey: Integer;
SubKeyName, ValueData: string;
begin
RootKey:= HKEY_LOCAL_MACHINE;
SubKeyName:= 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Program_is1';
if RegKeyExists(RootKey, SubKeyName) = True then begin
if RegValueExists(RootKey, SubKeyName, 'InstallLocation') = True then
// проверяем, куда была установлена программа
if RegQueryStringValue(RootKey, SubKeyName, 'InstallLocation', ValueData) = True then
ValueData:= Copy(ValueData, 1, Length(ValueData)-1);
// проверяем, существует ли папка
if DirExists(ValueData) = True then
// удаляем папку
DelTree(ValueData, True, True, True);
if RegValueExists(RootKey, SubKeyName, 'Inno Setup: Icon Group') = True then
// узнаём название группы
if RegQueryStringValue(RootKey, SubKeyName, 'Inno Setup: Icon Group', ValueData) = True then
// проверяем, существует ли папка в меню Пуск
if DirExists(GetGroupPath + ValueData) = True then
// если да, то удаляем папку
DelTree(GetGroupPath + ValueData, True, True, True);
// проверим рабочий стол
if FileExists(ExpandConstant('{commondesktop}\My Program.lnk')) = True then
DeleteFile(ExpandConstant('{commondesktop}\My Program.lnk'));
// проверим панель быстрого запуска
if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\My Program.lnk')) = True then
DeleteFile(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\My Program.lnk'));
end;
end;
простой кусок кода по сути в качестве примера, по аналогии я его размножу. »
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; AfterInstall: BackupReg; Flags: ignoreversion
[Code]
procedure BackupReg;
var
res: Integer;
BackupDir, Key, RegEdit: string;
begin
Key:= 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Inno Setup 5_is1';
BackupDir:= ExpandConstant('{app}');
RegEdit:= ExpandConstant('{win}\regedit.exe');
Exec(RegEdit, '-ea backup.reg ' + AddQuotes(Key), BackupDir, SW_HIDE, ewWaitUntilTerminated, Res);
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
res: Integer;
reg: string;
begin
reg:= ExpandConstant('{app}\backup.reg');
if CurUninstallStep = usUninstall then begin
// при деинсталляции, заносим ключ в реестр
if FileExists(reg) = True then
Exec('regedit.exe',' /s ' + AddQuotes(reg),ExpandConstant('{win}'),SW_HIDE,ewWaitUntilTerminated,res);
end;
end;
Krekerpro
25-06-2009, 12:17
Помогите пожалуйста:раньше использовал скрипт от z10y_ded,всё нормально работало,но после переустановки винды,почему то по не понятным причинам,при начале он мне выдаёт ошибку http://clip2net.com/page/m0/1228857
нормально работало,но после переустановки винды »
Это ошибка, не после переустановки, а просто вы стали пользоваться другой версией Inno Setup, а точнее 5.3...
Добавьте в начале секции кода:
type
PChar=PAnsiChar;
или заммеите все PChar на PAnsiChar.
Krekerpro
25-06-2009, 13:06
Теперь тут пишет:Syntax error
case MessageBox(StrToInt(ExpandConstant('{wizardhwnd}')), setupmessage(msgExitSetupMessage), setupmessage(msgExitSetupTitle), MB_YESNO or MB_defbutton2 or MB_ICONQUESTION) of
Krekerpro, так тяжело сказать, это ошибка синтаксиса, т.е. не хватает или лишние знаки препинания, (скобки)...
В сообщении об ошибке показывает строку и порядковый номер в строке. Посмотрите внимательней, где именно возникает ошибка.
Krekerpro
25-06-2009, 13:23
Serega,
В ISTool'e была это ошибка,а Inno всё нормально скомпил :)
Krekerpro
26-06-2009, 20:52
Хотелось бы узнать,как вот это реализовать http://clip2net.com/page/m0/1239208 и вот это http://clip2net.com/page/m0/1239224,на втором скрине на счёт свободного пространства,его возможно самому вписывать?
Raf-9600
26-06-2009, 22:53
Ктонить может немного переделать этот код, так, чтобы если UI инсталлятора английское, то и все фарзы были английским, если UI русский, то русские, и т.д.
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 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;
End;
BlackSelf
26-06-2009, 22:55
Krekerpro, примерно вот так:
[Setup]
AppName=My Program
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
DisableReadyPage=true
DisableProgramGroupPage=true
;Картинка сверху
WizardSmallImageFile=small.bmp
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Files]
;Картинка на WelcomePage
Source: welcome.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
[сode]
var
Image1: TBitmapImage;
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
NeedSpaceLabel,FreeSpaceLabel,WLabel1,WLabel2: TLabel;
procedure GetFreeSpaceCaption(Sender: TObject); /////Вычисление свободного места на диске
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := 'Доступно места на диске: '+ FloatToStr(round(FreeMB/1024*100)/100) + ' GB' else
FreeSpaceLabel.Caption := 'Доступно места на диске: '+ IntToStr(FreeMB)+ ' MB';
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;
procedure GetNeedSpaceCaption; /////Вычисление требуемого места для установки
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := 'Требуется места на диске: '+ FloatToStr(round(NeedSize/1024*100)/100) + ' GB' else
NeedSpaceLabel.Caption := 'Требуется места на диске: '+ IntToStr(NeedSize)+ ' MB';end;
procedure InitializeWizard();
begin
NeedSize := 6610; //Здесь указывается место для приложения
WizardForm.DiskSpaceLabel.Hide;
ExtractTemporaryFile('welcome.bmp')
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.WizardSmallBitmapImage.Left:= ScaleX(0);
WizardForm.WizardSmallBitmapImage.Width:=WizardForm.ClientWidth;
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
Image1:=TBitmapImage.Create(WizardForm)
with Image1 do begin
Left:=0
Top:=0
Width:=497
Height:=313
Parent:=WizardForm.WelcomePage
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\welcome.bmp')
end;
NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(202);
Width := ScaleX(209);
Height := ScaleY(13);
end;
FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(220);
Width := ScaleX(209);
Height := ScaleY(13);
end;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
WLabel1 := TLabel.Create(WizardForm);
WLabel1.Left := ScaleX(170);
WLabel1.Top := ScaleY(16);
WLabel1.Width := ScaleX(320);
WLabel1.Height := ScaleY(100);
WLabel1.AutoSize := False;
WLabel1.WordWrap := True;
WLabel1.Font.Size := 12;
WLabel1.Font.Style := [fsBold];
WLabel1.Font.Color:= clWhite;
WLabel1.Font.Name:= 'Tahoma';
WLabel1.ShowAccelChar := False;
WLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
WLabel1.Transparent := True;
WLabel1.Parent := WizardForm.WelcomePage;
WLabel2 :=TLabel.Create(WizardForm);
WLabel2.Top := ScaleY(76);
WLabel2.Left := ScaleX(170);
WLabel2.Width := ScaleX(300);
WLabel2.Height := ScaleY(234);
WLabel2.AutoSize := False;
WLabel2.WordWrap := True;
WLabel2.Font.Color:= clWhite;
WLabel2.ShowAccelChar := False;
WLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
WLabel2.Transparent := True;
WLabel2.Parent := WizardForm.WelcomePage;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
begin
if CurPageID=wpSelectDir then
begin //если Свободное место на диске < требуемого, то кнопка "Установить" на PageSelectDir неактивна
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
WizardForm.NextButton.Caption:='Установить'; //Rename кнопки "Далее" на SelectDir
end;
end;
end;
Raf-9600
26-06-2009, 22:55
Krekerpro, для WizardSmallImageFile размером 497х58.
procedure InitializeWizard();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 58; //Размер рисунка
Width := 497; //
end;
with PageNameLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
with PageDescriptionLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
end;
end;
Raf-9600
26-06-2009, 23:52
BlackSelf, По-моему, ваш код не работает.
К слову: вы не могли бы написать код, чтоб в "Требуется как минимум Мб свободного дискового пространства." (на странице выбора папки) можно было указать собственное значение? И чтоб до тех пор пока не выбран винт с необходимым объемом, невозможно было нажать на кнопку "Далее".
P.S.
Деректива ExtraDiskSpaceRequired мне не подходит, ибо данные в ней, плюсуються с полученными на странице выбора компонентов. А мне нужно, чтоб просто отображались указанные мною данные о необходимом месте, на странице выбора компонентов. Но на данные, на странице выбора компонентов этот никак не влияло. Т.е. инсталлятор считал необходимые мегабайты как будто на странице выбора папки, он показывал истенное значение, а не то, которое я ему указал.
BlackSelf
27-06-2009, 00:07
Raf-9600, напишите в моём скрипте слово "Code" правильно на англ. языке - всё будет работать.
В скрипте есть строчка, в кот. указывается собственное значение в мб:
NeedSize := 6610; //Здесь указывается место для приложения
Также в процедуре CurPageChanged указывается, что, если Свободное место на диске меньше требуемого, то кнопка "Установить" на PageSelectDir неактивна:
procedure CurPageChanged(CurPageID: Integer);
begin
begin
if CurPageID=wpSelectDir then
begin //если Свободное место на диске < требуемого, то кнопка "Установить" на PageSelectDir неактивна
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
WizardForm.NextButton.Caption:='Установить'; //Rename кнопки "Далее" на SelectDir
end;
end;
end;
Всё это есть в моём предыдущем скрипте.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC