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

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

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

спасибо. так лучше, но еще хотелось бы чтоб цвет где я выделил красным тоже менялся . с белым ето не заметно но если выбрать черный или еще какой будет заметно





P.S.
то же самое на странице компонентов и на readypage

Добавлено:
и еще кое что. что нужно вписать в скрипт чтоб здесь отображалась текстура, как и на других кнопках?


Автор: Raf_SE
Дата сообщения: 05.05.2009 16:13
spider91, DeKaNszn, Выделяет красным "PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;" и пишет ошибку "Unknown identifer "PageDescriptionLabel"".

P.S.
Ппц, ну и код. Ещё на одном форуме его запостил, и там тоже никому не удается его корректно объединить
Автор: spider91
Дата сообщения: 05.05.2009 16:22
Raf_SE

тебе ведь DeKaNszn напсал что нужно добавить в Var

Код: PageNameLabel,PageDescriptionLabel: TLabel;
Автор: Raf_SE
Дата сообщения: 05.05.2009 16:35

Цитата:
тебе ведь DeKaNszn напсал что нужно добавить в Var

Я так и сделал. Это [more=типо тут][code]
var
n: Integer;
FreeMB, TotalMB: Cardinal;
VolumeName, FileSystemName: String;
VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
ListBox: TListBox;
StartMenuTreeView: TStartMenuFolderTreeView;
Info, InfoCaption: TNewStaticText;
InfoPanel: TPanel;
PageNameLabel,PageDescriptionLabel: TLabel;

const
oneMB= 1024*1024;
WM_LBUTTONDOWN = 513;
WM_LBUTTONUP = 514;[/more]?


Цитата:
он просто с двумя L написал. поетому и не шло

А теперь, при запуске инсталла, выделяет красным "PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;" и пишет ошибку "Cold not call proc."
Автор: spider91
Дата сообщения: 05.05.2009 16:42
Raf_SE

ну теперь незнаю. жди пока ктото другой отзовется
Автор: Raf_SE
Дата сообщения: 05.05.2009 18:51
spider91
На форуме oszone.net, Serega_ дал [more=работающий скрипт]
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 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 CurPageChanged(CurPageID: Integer);
begin
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) and
(CurPageID = wpSelectComponents) then
WizardForm.BackButton.Visible := False;
if CurPageID = wpSelectDir then ListBoxRefresh;
end;

//Будьте очень осторожны в таких случаях! Не позволим пользователю установить программу в уже существующую папку:
function NextButtonClick(CurPage: Integer): Boolean;
var
s, s2:string;
begin
Result:= True;

if (CurPage = wpSelectDir) and
(Pos(Uppercase(ExpandConstant('{win}')), Uppercase(ExpandConstant('{app}'))) > 0) then
Result:= MessageBox(StrToInt(ExpandConstant('{wizardhwnd}')), ExpandConstant('{cm:SysDirSelect}'),
'Установка в системную папку', MB_YESNO or $30) = idYes;

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

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

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;

// 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ГиКц;'
);
end;

procedure DeinitializeSetup();
begin
disabledesc();
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;[/more], за что ему огромное пассибо!
Единственный побочный эффект, это долгое закрытие инсталлятора. Но это я ещё могу пережить...
Автор: SotM
Дата сообщения: 05.05.2009 19:20
Seup

Цитата:
А что, топик "Чем и как лучше жать" уже неработает? Я написал там сообщение о предложении в нести в шапку еще одну прогу, а сообщение не появилось..

Ну а зачем ты здесь это спрашиваешь?! Там и нужно это же спрашивать.
Автор: Seup
Дата сообщения: 05.05.2009 19:32
SotM

Цитата:
Ну а зачем ты здесь это спрашиваешь?! Там и нужно это же спрашивать.


Ну а если топик не работает, то кто его там прочтет?
Автор: Pantalone
Дата сообщения: 05.05.2009 20:00
Подскажите пожалуйста как при запуске сетапа сделать выбор из двух вариантов установки, т.е. после выбора которых ставилась одна или другая программа и при этом при переключении между этими вариантами чтобы картинки слева и сверху менялись, такое возможно? Речь о картинках которые идут в WizardImageFile и
WizardSmallImageFile.
Автор: spider91
Дата сообщения: 05.05.2009 23:40
SotM



Цитата:
топик "Чем и как лучше жать"



он уже не так называется

Добавлено:
ктото может мне помочь?
Автор: DeKaNszn
Дата сообщения: 06.05.2009 06:48
spider91

[more=пробуй][no][Code]
const
Color = $00FF00;

procedure InitializeWizard();
begin
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=Color;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.NoIconsCheck.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
end;[/no][/more]
Автор: spider91
Дата сообщения: 06.05.2009 10:05
DeKaNszn

спасибо. то что надо.



P.S.
а что насчет второго вопрося?
Автор: clemenco
Дата сообщения: 06.05.2009 10:46
Доброго времени суток! Помогите решить проблему!
В этот скрипт [more=CompDescImageAndText][Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program

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

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

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

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

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

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

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

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

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

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

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

for i:=0 to ListBox.Items.Count - 1 do // по кол-ву чекбоксов
begin // создаем TBitmap-ы
SetArrayLength(InfoBmp, i+1);
InfoBmp[i]:= TBitmap.Create;
end;
// для каждого чекбокса грузим свою картинку к описанию
InfoBmp[0].LoadFromFile(ExpandConstant('{tmp}\Image1.bmp'));
InfoBmp[1].LoadFromFile(ExpandConstant('{tmp}\Image2.bmp'));
InfoBmp[2].LoadFromFile(ExpandConstant('{tmp}\Image3.bmp'));
end;
[/more] из шапки темы нужно добавить к CheckBox ещё RadioButton. Так, чтобы при наведении на RadioButton, точно также как и на CheckBox выводилось описание компонента.
В теме не нашёл (искал в режиме для печати) У самого не получается. При наведении на RadioButton показывает ошибку.
Автор: DeKaNszn
Дата сообщения: 06.05.2009 12:41
spider91


Цитата:
и еще кое что. что нужно вписать в скрипт чтоб здесь отображалась текстура, как и на других кнопках?


это случаем не окно FreeArc/7-zip?
Автор: spider91
Дата сообщения: 06.05.2009 16:04
DeKaNszn


нет. ето окно инсталятора, простo я его (с твоей помощью) переместил в правый нижний угол и изменил размер.
Автор: Relatior
Дата сообщения: 06.05.2009 16:29
Как в инсталляторе сделать самораспаковку 7z SFX, секция run не подходит. Нужно, чтобы инсталлятор скопировал самораспаковку, распаковал и удалил её?
Автор: DeKaNszn
Дата сообщения: 06.05.2009 16:53
spider91

приведи исходный код
можно в личку
Автор: ertw
Дата сообщения: 06.05.2009 18:04
Как вот это сделать
http://pic.ipicture.ru/uploads/090405/hIVRh5RxRJ.jpg

вотЪ
и вотЪ
Автор: spider91
Дата сообщения: 06.05.2009 19:44
DeKaNszn

[more=вот][Code]
type
TMonitorInfo = record
cbSize: DWord;
Monitor, Work: TRect;
dwFlags: DWord;
end;


const
ButtonWidth = 80;
ButtonHeight = 23;
bidBack = 0;
bidNext = 1;
bidCancel = 2;
bidDirBrowse = 3;
bidGroupBrowse = 4;


var
MonitorInfo: TMonitorInfo;
PageNameLabel, PageDescriptionLabel: TLabel;
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;
bottom_img:TBitmapImage;
ResultStr:string;
ResultCode: Integer;



function InitializeSetup(): Boolean;
begin
RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{0872DB47-24CB-4C7F-AC4B-E6EFC27BD245}_is1', 'UninstallString', ResultStr)
if ResultStr='' then
begin
Result := True;
end
else
ResultStr:=RemoveQuotes(ResultStr);
Exec(ResultStr, '', '', SW_SHOWNORMAL, ewNoWait, ResultCode)
end;

function GetMonitorInfo(hMonitor: Integer; var lpMonitorInfo: TMonitorInfo): Boolean; external 'GetMonitorInfoA@user32';


procedure ButtonLabelClick(Sender: TObject);
var
Button: TButton;
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
case TLabel(Sender).Tag of
bidBack: Button:=WizardForm.BackButton
bidNext: Button:=WizardForm.NextButton
bidCancel: Button:=WizardForm.CancelButton
bidDirBrowse: Button:=WizardForm.DirBrowseButton
bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
else
Exit
end
Button.OnClick(Button)
end;

procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Enabled then
ButtonImage[TLabel(Sender).Tag].Left:=-ButtonWidth
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
end;

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
Image: TBitmapImage;
Panel: TPanel;
Labl: TLabel;

begin
Panel:=TPanel.Create(WizardForm)
Panel.Left:=AButton.Left
Panel.Top:=AButton.Top
Panel.Width:=AButton.Width
Panel.Height:=AButton.Height
Panel.Tag:=AButtonIndex
Panel.Parent:=AButton.Parent
ButtonPanel[AButtonIndex]:=Panel

Image:=TBitmapImage.Create(WizardForm)
Image.Width:=160
Image.Height:=23
Image.Enabled:=False
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button3.bmp'))
Image.Parent:=Panel
ButtonImage[AButtonIndex]:=Image

with TLabel.Create(WizardForm) do begin
Tag:=AButtonIndex
Parent:=Panel
Width:=Panel.Width
Height:=Panel.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end

Labl:=TLabel.Create(WizardForm)
Labl.Left:=15
Labl.Top:=5
Labl.Autosize:=True
Labl.Alignment:=taCenter
Labl.Tag:=AButtonIndex
Labl.Transparent:=True
Labl.Font.Color:=clWhite
Labl.Caption:=AButton.Caption
Labl.OnClick:=@ButtonLabelClick
Labl.OnDblClick:=@ButtonLabelClick
Labl.OnMouseDown:=@ButtonLabelMouseDown
Labl.OnMouseUp:=@ButtonLabelMouseUp
Labl.Parent:=Panel
ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonLabel[AButtonIndex].Caption:=AButton.Caption
ButtonPanel[AButtonIndex].Visible:=AButton.Visible
ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=False
end;

procedure CurPageChanged(CurPageID: Integer);
begin

if CurPageID=wpReady then
begin
TButton(WizardForm.FindComponent('NextButton')).Caption:=ExpandConstant('{cm:ins}');
end
else
begin
if CurPageID=wpFinished then
begin
TButton(WizardForm.FindComponent('NextButton')).Caption:=ExpandConstant('{cm:exit}');
end
else
begin
TButton(WizardForm.FindComponent('NextButton')).Caption:=ExpandConstant('{cm:next}');
end;
end;

TButton(WizardForm.FindComponent('CancelButton')).Caption:=ExpandConstant('{cm:exit}');
TButton(WizardForm.FindComponent('BackButton')).Caption:=ExpandConstant('{cm:back}');

if CurPageID=wpInstalling
then
begin

MonitorInfo.cbSize:= SizeOf(MonitorInfo);
GetMonitorInfo(1, MonitorInfo);
WizardForm.ClientWidth:=415;
WizardForm.ClientHeight:=110;
WizardForm.Top:=MonitorInfo.Work.Bottom-WizardForm.ClientHeight-15;
WizardForm.Left:=MonitorInfo.Work.Right-WizardForm.ClientWidth+113;
WizardForm.CancelButton.BringToFront;
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(300);
WizardForm.Height:=ScaleY(122);
WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(275);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(25);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(108);
WizardForm.CancelButton.Top:=ScaleY(68);
WizardForm.CancelButton.Enabled := False;
end
if CurPageID=wpFinished
then
begin
WizardForm.Width:=502;
WizardForm.Height:=386;
WizardForm.Position:=poScreenCenter;
end




UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
PageNameLabel.Caption:= WizardForm.PageNameLabel.Caption;

end;


procedure InitializeWizard();
begin


WizardForm.Color:=clwhite;
WizardForm.WelcomePage.Color:=clwhite;
WizardForm.InnerPage.Color:=clwhite;
WizardForm.FinishedPage.Color:=clwhite;
WizardForm.LicensePage.Color:=clwhite;
WizardForm.PasswordPage.Color:=clwhite;
WizardForm.InfoBeforePage.Color:=clwhite;
WizardForm.UserInfoPage.Color:=clwhite;
WizardForm.SelectDirPage.Color:=clwhite;
WizardForm.SelectComponentsPage.Color:=clwhite;
WizardForm.SelectProgramGroupPage.Color:=clwhite;
WizardForm.SelectTasksPage.Color:=clwhite;
WizardForm.ReadyPage.Color:=clwhite;
WizardForm.PreparingPage.Color:=clwhite;
WizardForm.InstallingPage.Color:=clwhite;
WizardForm.InfoAfterPage.Color:=clwhite;





WizardForm.ProgressGauge.Position := 1
ExtractTemporaryFile('logo.bmp');
bottom_img:= TBitmapImage.Create(WizardForm);
bottom_img.Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo.bmp'));
bottom_img.SetBounds(0, 315, 500, 45);
bottom_img.Parent:= WizardForm;
bottom_img.Stretch:= True;
WizardForm.Position:=poScreenCenter;
WizardForm.BackButton.Width:=ButtonWidth
WizardForm.BackButton.Height:=ButtonHeight
WizardForm.NextButton.Width:=ButtonWidth
WizardForm.NextButton.Height:=ButtonHeight
WizardForm.CancelButton.Width:=ButtonWidth
WizardForm.CancelButton.Height:=ButtonHeight
WizardForm.DirBrowseButton.Left:=337
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight
WizardForm.GroupBrowseButton.Left:=337
WizardForm.GroupBrowseButton.Width:=ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight
WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick
WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick
ExtractTemporaryFile('button3.bmp')
LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
PageNameLabel:= TLabel.Create( WizardForm );
PageNameLabel.Left:= WizardForm.PageNameLabel.Left;
PageNameLabel.Top:= WizardForm.PageNameLabel.Top;
PageNameLabel.Transparent:= True;
PageNameLabel.Font.Style:= [fsBold];
PageNameLabel.Font.Color:= clBlack;
PageNameLabel.Parent:= WizardForm.MainPanel;
PageDescriptionLabel:= TLabel.Create( WizardForm );
PageDescriptionLabel.Left:= WizardForm.PageDescriptionLabel.Left;
PageDescriptionLabel.Top:= WizardForm.PageDescriptionLabel.Top;
PageDescriptionLabel.Transparent:= True;
PageDescriptionLabel.Font.Color:= clBlack;
PageDescriptionLabel.Parent:= WizardForm.MainPanel;
WizardForm.WizardSmallBitmapImage.Left:= ScaleX(0);
WizardForm.WizardSmallBitmapImage.Width:=WizardForm.ClientWidth;
WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:msg1}');
WizardForm.FileNameLabel.Visible:=False;
WizardForm.ProgressGauge.max:= 8;

end;




procedure CurStepChanged(CurStep: TSetupStep);
var
res:Integer;
s,s1:string;
begin
If CurStep=ssInstall
then
begin




WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:msg1}');



if (FileExists(AddBackslash(ExpandConstant('{src}')) + 'data1.bin')) then
begin


s:=ExpandConstant('{src}')+'\data1.bin';
s1:=ExpandConstant('{app}');
Exec(s, '-y -o"'+ s1 + '"', '', SW_HIDE, ewWaitUntilTerminated, res);


WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:msg1}');
WizardForm.ProgressGauge.Position := 3


s:=ExpandConstant('{src}')+'\data2.bin';
s1:=ExpandConstant('{app}');
Exec(s, '-x -y -d"'+ s1 + '"', '', SW_HIDE, ewWaitUntilTerminated, res);


WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:msg1}');
WizardForm.ProgressGauge.Position := 5


s:=ExpandConstant('{src}')+'\data3.bin';
s1:=ExpandConstant('{app}');
Exec(s, '-x -y -d"'+ s1 + '"', '', SW_HIDE, ewWaitUntilTerminated, res);


WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:msg1}');
WizardForm.ProgressGauge.Position := 7

s:=ExpandConstant('{src}')+'\data4.bin';
s1:=ExpandConstant('{app}');
Exec(s, '-y -o"'+ s1 + '"', '', SW_HIDE, ewWaitUntilTerminated, res);


WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:msg1}');
WizardForm.ProgressGauge.Position := 8






end else begin
MsgBox(ExpandConstant('{cm:file}'), mbInformation, MB_OK);
Abort;
end;

If CurStep=ssPostInstall
then
WizardForm.ProgressGauge.Position := 11


end;
end;



procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usDone then
begin
if DirExists(ExpandConstant('{userdocs}\My Games\BIA Hells Highway')) then
begin
if MsgBox('Удалить сохраненные игры?',mbconfirmation, mb_yesno) = IDYES then
begin
DelTree(ExpandConstant('{userdocs}\My Games\BIA Hells Highway'), True, True, True);
MsgBox('Cохраненные игры были удалены...', mbinformation, mb_ok);
end;
end;
end;
end;













[/more]. если можеш поправь что не так плиз

Добавлено:
Relatior


ето уже обсуждалось. [more=держи][Files]
Source: C:\archive.exe; DestDir: {app}; AfterInstall: extractarc1; Flags: ignoreversion
Source: C:\archive2.exe; DestDir: {app} AfterInstall: extractarc2; Flags: ignoreversion


[Code]

procedure extractarc1;
var
ResultCode: Integer;
begin
Exec(ExpandConstant('{app}\archive.exe'), ' -y ', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
DeleteFile(ExpandConstant('{app}\archive.exe'));
end;

procedure extractarc2;
var
ResultCode: Integer;
begin
Exec(ExpandConstant('{app}\archive2.exe'), ' -y ', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
DeleteFile(ExpandConstant('{app}\archive2.exe'));
end; [/more]. а вобще почитай справку, там ето есть
Автор: DeKaNszn
Дата сообщения: 06.05.2009 22:41
spider91

добавь:

Код: [no]ButtonImage[ButtonLabel[bidCancel].Tag].Left:=-ButtonWidth;[/no]
Автор: boss911
Дата сообщения: 06.05.2009 22:43
Помогите, пожалуйста, со всем необходимым, чтобы запаролить свой инсталлятор. Видел подобные инсталляторы, вот и себе хочется приделать такую возможность.
Автор: DeKaNszn
Дата сообщения: 06.05.2009 23:00
boss911

чтобы пародь надо было вводить или чтобы пароль сам подставлялся?
Автор: spider91
Дата сообщения: 06.05.2009 23:22
DeKaNszn


не помогло. тоже самое.
Автор: Vitalliano
Дата сообщения: 06.05.2009 23:34
Ребята, такой вопрос, как сделать принудительное чтения соглашения, при опускании полосы прокрутки открывается кнопка "Я согласен"?

Заранее благодарю!!!
Автор: boss911
Дата сообщения: 06.05.2009 23:37
DeKaNszn

Чтобы инсталлятор (*.exe) нельзя было распаковать всеми имеющими средствами (innounp например), только распаковка по средствам инсталляции.
Автор: spider91
Дата сообщения: 06.05.2009 23:43
Vitalliano


такое вроде в Corona Skin есть
Автор: Vitalliano
Дата сообщения: 07.05.2009 00:19
Да, но хочется без корона скин. пример [more=этого][Files]
Source: compiler:InnoCallback.dll; Flags: dontcopy

[Code]
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
const
EM_GETFIRSTVISIBLELINE = $CE; TestLine = 40;
var
TimerID: LongWord;

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

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
CurrLine: integer;
begin
CurrLine:= SendMessage(WizardForm.LicenseMemo.Handle, EM_GETFIRSTVISIBLELINE, 0, 0);
If CurrLine >= TestLine then
begin
WizardForm.LicenseAcceptedRadio.Enabled:= True;
KillTimer(0, TimerID);
end;
//WizardForm.Caption:= IntToStr(CurrLine);
end;

procedure InitializeWizard();
begin
WizardForm.LicenseAcceptedRadio.Enabled:= False;
end;

procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;
begin
if CurPageID = wpLicense then
begin
pfunc:= WrapTimerProc(@OnTimer, 4);
TimerID:= SetTimer(0, 0, 500, pfunc);
end else
KillTimer(0, TimerID);
end;

procedure DeinitializeSetup();
begin
KillTimer(0, TimerID);
end;[/more] но без таймера.
Автор: spider91
Дата сообщения: 07.05.2009 00:28
Vitalliano


помотри в колекции скритов и в сборнике впросов, но там вроде тоже по таймеру.
Автор: DeKaNszn
Дата сообщения: 07.05.2009 04:55
boss911

смотри в шапке:


Цитата:
Inno Setup Scripting 5.1 - Руководство по расширенным возможностям Inno Setup от Kindly


spider91

попробуй в bmp-файле сделать текстуру для выключенной кнопки такой же как для нажатой
Автор: DuhaLab
Дата сообщения: 07.05.2009 07:31
что никто с этим не сталкивался, никто не ответит?
http://forum.ru-board.com/topic.cgi?forum=5&topic=29117&start=1720#11

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

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


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