Скрипты Inno Setup. Помощь и советы [часть 3]

Ответить
 • Просмотры: 59
Аватара пользователя
insombia

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение insombia »

insombia,

Спс

Я его вставил в скрипт

все комилится без ошибок

но

в установке ничего не почему то((
Аватара пользователя
R.i.m.s.k.y.

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение R.i.m.s.k.y. »

Ктонить может объединить эти коды?



Описания компонентов


читать дальше »


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;



procedure DeinitializeSetup();

begin

disabledesc();

end;



procedure InitializeWizard();

begin

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,

'Английская озвучка;'+ // SoundUnit\eng

'Французская озвучка;'+ // SoundUnit\fra

'Немецкая озвучка;'+ // SoundUnit\deu

'Итальянская озвучка;'+ // SoundUnit\ita

'Испанская озвучка;' // SoundUnit\spa

);

end;





Сколько есть, и требуеться для установки


читать дальше »


var

NeedSize:Integer;

FreeMB, TotalMB: Cardinal;

NeedSpaceLabel: TLabel;

n: Integer;

VolumeName, FileSystemName: String;

VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;

ListBox: TListBox;

StartMenuTreeView: TStartMenuFolderTreeView;



procedure GetFreeSpaceCaption(Sender: TObject);

var

Path: String;

begin

Path := ExtractFileDrive(WizardForm.DirEdit.Text);

GetSpaceOnDisk(Path, True, FreeMB, TotalMB);

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) + ' Гб свободного дискового пространства.' else

NeedSpaceLabel.Caption := 'Требуется как минимум '+ IntToStr(NeedSize)+ ' Мб свободного дискового пространства.';end;



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 InitializeWizard();

begin

NeedSize := 6100; //Здесь указывается место для приложения

WizardForm.DiskSpaceLabel.Hide;

NeedSpaceLabel := TLabel.Create(WizardForm);

with NeedSpaceLabel do

begin

Parent := WizardForm.SelectDirPage;

Left := ScaleX(0);

Top := ScaleY(220);

Width := ScaleX(209);

Height := ScaleY(13);

end;

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.DirEdit.OnChange := @GetFreeSpaceCaption;

WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;

end;



procedure CurPageChanged(CurPageID: Integer);

begin

if CurPageID=wpSelectDir then

begin

GetNeedSpaceCaption;

if FreeMB < NeedSize then

WizardForm.NextButton.Enabled:=False

ListBoxRefresh

end;

end;





Слайд-шоу рандомно (в окне инсталляции)


читать дальше »


const

n=21; //количество слайдов

type

TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);

TRandNumbers = array[1..N] of byte;



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 get_unique_random_number(X:byte):TRandNumbers;

var

A,b,c: string;

i,j,k:byte;

begin

For i:=1 to X do A:=A+chr(i);

B:='';

For i:=1 to X do begin

j:=Random(Length(A)-1)+1;

C:='';

B:=B + A[j];

for k:=1 to Length(A) do

if kj then C:=C+A[k];

A:=C;

end;

for i:=1 to X do Result:=ord(B);

end;



var

TimerID: LongWord;

currTime: Integer;

SplashImage: TBitmapImage;

StatusMessages: TNewStaticText;

bmp: TRandNumbers;

z:byte;



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

begin

currTime := currTime + 1;

if (currTime mod {#TIME_FOR_VIEW} = 0)

then begin

SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[currTime/{#TIME_FOR_VIEW}])+'.bmp'));

if (currTime/{#TIME_FOR_VIEW} = N) then currTime:=0;

end;

end;





procedure InitializeWizard;

begin

bmp:=get_unique_random_number(N);

ExtractTemporaryFile('Image_'+inttostr(bmp[1])+'.bmp');



currTime := 0;



WizardForm.ProgressGauge.Parent := WizardForm;

WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + ScaleY(12);

WizardForm.ProgressGauge.Left := ScaleX(10);

WizardForm.ProgressGauge.Width := WizardForm.MainPanel.Width - ScaleX(20);

WizardForm.ProgressGauge.Height := 16;

WizardForm.ProgressGauge.Hide;



WizardForm.StatusLabel.Parent := WizardForm;

WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);

WizardForm.StatusLabel.Left := ScaleX(10);

WizardForm.StatusLabel.Width := ScaleX(397);

WizardForm.StatusLabel.Hide;



SplashImage := TBitmapImage.Create(WizardForm);

SplashImage.Top := 0;

SplashImage.Left := 0;

SplashImage.Width := WizardForm.MainPanel.Width;

SplashImage.Height := WizardForm.Bevel.Top;

SplashImage.Parent := WizardForm.InnerPage;

SplashImage.Stretch := True;

SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[1])+'.bmp'));

SplashImage.Hide;

end;



procedure CurStepChanged(CurStep: TSetupStep);

begin

if CurStep = ssInstall then

begin

WizardForm.StatusLabel.Caption := 'Распаковка слайдов ...';

for z:=2 to N do ExtractTemporaryFile('Image_'+inttostr(bmp[z])+'.bmp');

end;

end;



procedure CurPageChanged(CurPageID: Integer);

var

pfunc: LongWord;

begin

if (CurPageID = wpInstalling) then

begin

pfunc := WrapTimerProc(@OnTimer, 5);

TimerID := SetTimer(0, 0, 1000, pfunc);

WizardForm.PageNameLabel.Visible := False;

WizardForm.PageDescriptionLabel.Visible := False;

WizardForm.InnerNotebook.Hide;

WizardForm.Bevel1.Hide;

WizardForm.MainPanel.Hide;

WizardForm.PageNameLabel.Hide;

WizardForm.PageDescriptionLabel.Hide;

WizardForm.ProgressGauge.Show;

WizardForm.StatusLabel.Show;

SplashImage.Show;

WizardForm.CancelButton.Enabled := True;

WizardForm.CancelButton.Top := WizardForm.Bevel.Top + ScaleY(100);

end else

begin

WizardForm.ProgressGauge.Hide;

SplashImage.Hide;

WizardForm.FileNameLabel.Hide;

WizardForm.StatusLabel.Hide;

if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then

begin

WizardForm.InnerNotebook.Show;

WizardForm.Bevel1.Show;

WizardForm.MainPanel.Show;

WizardForm.PageNameLabel.Show;

WizardForm.PageDescriptionLabel.Show;

end;

If CurPageID = wpFinished then

end;

end;



procedure DeInitializeSetup();

begin

KillTimer(0, TimerID);

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

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;





//Проверка на оставшыеся файлы

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

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

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

end

end

end

end;






Реализация рисунка 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;
Аватара пользователя
LinkOFF

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение LinkOFF »

Доброго времени суток.Как мне сделать так чтоб во время установки выплыло сообщение "Вставьте диск 2, содержащий файл Data2.bin и дождитесь его инициализации" вместо обычного окна с выбором папки со 2-ым диском.Скрипт Isdone

И как отключить кнопку "Отмена" в процессе установки?
Аватара пользователя
Bit of perfect

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение Bit of perfect »

insombia

Подсвечивает первую строчку, и пишет ошибку Unknown type 'PChar'.
Аватара пользователя
R.i.m.s.k.y.

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение R.i.m.s.k.y. »

Raf-9600 PChar это значит у тебя не такая инно как надо когда будет Лександер или ещё кто-то понимающий подскажут тебе
Аватара пользователя
insombia

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение insombia »

Цитата Habetdin:



замените PChar на PAnsiChar
Скрипты Inno Setup. Помощь и советы [часть 3]




Подсвечивает эту строчку



Код:

Код: Выделить всё

StringChange(Result, ',', '.')

И пишет ошибку Semicolon (';') expected.
Аватара пользователя
insombia

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение insombia »

VASYAKRN, ты и тут срать будешь?! хватит уже!
Аватара пользователя
Rikill

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение Rikill »

insombia, попробуй это условие if WizardSelectedComponents(False) = '' then заменить на это

if (CurPageID = wpSelectComponents) and WizardSelectedComponents(False) = '' then
Аватара пользователя
VASYAKRN

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение VASYAKRN »

Приветствую всех! Подскажите, пожалуйста, код, чтобы увеличить размеры изображения на первой странице инсталлятора, как это сделано у RG Механиков. Заранее благодарен. Изображение
Ответить

Вернуться в «Автоматическая установка приложений»