Войти

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 4]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 [70] 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105

El Sanchez
03-04-2012, 17:40
вроде есть решение в виде WizardForm.DoubleBuffered := True, которая доступна только в Unicode. Но у меня ANSI
может есть другое решение? »
Johny777, самое простое - задать расширенный стиль WS_EX_COMPOSITED форме:

SetWindowLong(WizardForm.Handle, GWL_EXSTYLE, GetWindowLong(WizardForm.Handle, GWL_EXSTYLE) or WS_EX_COMPOSITED);

Devils Night
03-04-2012, 21:18
А что это за финтиклюшка такая {ini:{src}\setup.ini,Setup,AppName}? Файлы приложил!
Какие ещё секции могут работать? Ну может Code там, что можно ещё в Setup добавить?
setup.rar (http://forum.oszone.net/attachment.php?attachmentid=81913&d=1335945404)

Johny777
04-04-2012, 00:14
SetWindowLong(WizardForm.Handle, GWL_EXSTYLE, GetWindowLong(WizardForm.Handle, GWL_EXSTYLE) or WS_EX_COMPOSITED); »
вроде полностью будет так:

const
GWL_EXSTYLE = 16;
WS_EX_COMPOSITED = 20;

function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
function GetWindowLong(Wnd: HWnd; Index: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';

procedure initializeWizard();
begin
SetWindowLong(WizardForm.Handle, GWL_EXSTYLE, GetWindowLong(WizardForm.Handle, GWL_EXSTYLE) or WS_EX_COMPOSITED)
end;

а чему равны?
GWL_EXSTYLE = ?;
WS_EX_COMPOSITED = ?;
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,
что можно ещё в Setup добавить? »
да много чего
вот например El Sanchez выкладывал много страниц назад
не даёт пользователю запустить тот же инсталл несколько раз пока он работает
очень полезная штука!

[Setup]
AppMutex=MyProgramMutexUniqueName

[ code]
procedure InitializeWizard();
begin
CreateMutex('MyProgramMutexUniqueName');
end;

или

/// обновить рабочий после установки
ChangesAssociations=true
ChangesEnvironment=true
/// поиск установленной версии через реестр
AppId=MySuperAppid
DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1,InstallLocation|{pf}\Source Engine 15}
/// максимальное сжатие /// начало
Compression=none
///lzma2/ultra64
LZMAUseSeparateProcess=yes
LZMAMatchFinder=BT
LZMANumFastBytes=273
LZMADictionarySize=262144
///LZMADictionarySize=131072
InternalCompressLevel=ultra64
///SolidCompression=true
MergeDuplicateFiles=true
/// конец
/// описание экзешника инсталла
VersionInfoDescription=не запускай меня
/// версия экзешника
VersionInfoVersion=1.1.1.1
/// не отображать окно выбора язык а при запуске
ShowLanguageDialog=auto
LanguageDetectionMethod=uilanguage

Devils Night
04-04-2012, 02:49
да много чего »Ну вообще это понятие растяжимое конечно, да и я виноват в том что точнее не выразился что нужно! А так за разъяснение спасибо, кое что не было известно.
Я имею ввиду не в *.iss добавить что-то в секцию [Setup] например DefaultDirName={pf}\My Program, а именно что ещё можно добавить в *.iss для Setup.ini в секцию [Setup]?
Например в iss хотел добавить DefaultDirName={pf}\My Program для ini, т.е DefaultDirName={ini:{src}\setup.ini,Setup,DefaultDirName}, а в ini добавил DefaultDirName={pf}\My Program, так в итоге нифига не получилось, при компиляции выдало ошибку.

wertulll
04-04-2012, 06:55
помогите пожалуйста прикрутить к этому скрипту отображение времяни и процентов установки

скрипт

#define MyAppName "Deus Ex Human Revolution"
#define NeedSize "7168"
#include "Module\Components.iss"


[Setup]
SetupIconFile=1.ico
Diskspanning=yes
AppName=Deus Ex - Human Revolution
AppVerName=Deus Ex - Human Revolution
DefaultDirName={pf}\Deus Ex - Human Revolution
DefaultGroupName=Deus Ex - Human Revolution
DirExistsWarning=no
AppVersion=1.0
OutputBaseFilename=setup
OutputDir=.
VersionInfoCopyright=Me
AppPublisher=Square Enix
WizardImageFile=Files\WizardImage.bmp
WizardSmallImageFile=Files\WizardSmallImage.bmp
UninstallDisplayIcon=1.ico
ShowTasksTreeLines=true

[UninstallDelete]
Type: filesandordirs; Name: {app}


[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Tasks]
Name: desktopicon; Description: Создать значок на Рабочем столе; GroupDescription: Дополнительные значки:
Name: Redist; Description: Дополнительное программное обеспечение:
Name: Redist\DirectXCheck; Description: Обновить Microsoft DirectX; Flags: unchecked
Name: Redist\VCCheck; Description: Установить Microsoft Visual C++ Redist; Flags: unchecked


[CustomMessages]
rus.Welcome2=Программа установит игру {#MyAppName} на Ваш компьютер.%n%nРекомендуется закрыть антивирусные пакеты, а также все прочие приложения перед тем, как продолжить.
rus.Finished=Игра {#MyAppName} установлена на Ваш компьютер.%n%nПриложение можно запустить с помощью соответствующего значка.%n%nНажмите «Завершить», чтобы выйти из программы установки.

[Files]

Source: Files\unarc.dll; DestDir: {tmp}; Flags: dontcopy
Source: Files\InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: Files\facompress.dll; DestDir: {tmp}; Flags: dontcopy
Source: Files\papka.bmp; DestDir: {tmp}; Flags: dontcopy
Source: Files\Finishe.bmp; DestDir: {tmp}; Flags: dontcopy

[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
Name: "{group}\{cm:UninstallProgram,My Program}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\My Program"; Filename: "{app}\MyProg.exe"; Tasks: desktopicon






[Run]
Filename: {src}\Redist\DirectX\DXSETUP.exe; StatusMsg: Обновление компонентов DirectX...; Tasks: Redist\DirectXCheck; Flags: waituntilterminated; Parameters: "/silent";
Filename: "{src}\Redist\vcredist_x86.exe"; StatusMsg: "Установка Microsoft Visual C++ Redist..."; Tasks: Redist\VCCheck; Flags: waituntilterminated; Parameters: "/Q";


[Registry]

Root: HKLM; Subkey: "SOFTWARE\Deus Ex Human Revolution"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "SOFTWARE\Deus Ex Human Revolution"; ValueName: "InstallPath"; ValueType: String; ValueData: "{app}";
Root: HKLM; Subkey: "SOFTWARE\Deus Ex Human Revolution"; ValueName: "Version"; ValueType: String; ValueData: "1.0";
Root: HKLM; Subkey: "SOFTWARE\Deus Ex Human Revolution"; ValueName: "Language"; ValueType: String; ValueData: "Russian";



[Code]
var
WelcomeLabel1, WelcomeLabel2, FinishedLabel, FinishedHeadingLabel: TLabel;
PageNameLabel, PageDescriptionLabel: TLabel;


procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=True;
end;

procedure Labels();
begin
WelcomeLabel1:= TLabel.Create(WizardForm);
WelcomeLabel1.AutoSize:= False;
with WizardForm.WelcomeLabel1 do
//координаты WelcomeLabel1
WelcomeLabel1.SetBounds(ScaleX(30), ScaleY(10), ScaleX(200), ScaleY(220));
WelcomeLabel1.Font:= WizardForm.WelcomeLabel1.Font
WelcomeLabel1.Font.Color:= clWhite;
WelcomeLabel1.Transparent:= True;
WelcomeLabel1.WordWrap:= true;
WelcomeLabel1.Caption:= WizardForm.WelcomeLabel1.Caption;
WelcomeLabel1.Parent:= WizardForm.WelcomePage

WelcomeLabel2:= TLabel.Create(WizardForm);
WelcomeLabel2.AutoSize:= False;
with WizardForm.WelcomeLabel2 do
//координаты WelcomeLabel2
WelcomeLabel2.SetBounds(ScaleX(30), ScaleY(105), ScaleX(130), ScaleY(220));
WelcomeLabel2.Font:= WizardForm.WelcomeLabel2.Font
WelcomeLabel2.Font.Color:= clWhite;
WelcomeLabel2.Transparent:= True;
WelcomeLabel2.WordWrap:= true;
WelcomeLabel2.Caption:= ExpandConstant('{cm:Welcome2}');
WelcomeLabel2.Caption:= WizardForm.WelcomeLabel2.Caption;
WelcomeLabel2.Parent:= WizardForm.WelcomePage

WizardForm.WizardSmallBitmapImage.SetBounds(ScaleX(0), ScaleY(0), WizardForm.MainPanel.Width, WizardForm.MainPanel.Height);

PageNameLabel:= TLabel.Create(WizardForm)
with WizardForm.PageNameLabel do
PageNameLabel.SetBounds(Left, Top, Width, Height);
PageNameLabel.Transparent:= True;
PageNameLabel.Font:= WizardForm.PageNameLabel.Font;
PageNameLabel.Font.Color:= clWhite; //цвет надписи
PageNameLabel.Parent:= WizardForm.MainPanel;

PageDescriptionLabel:= TLabel.Create(WizardForm)
with WizardForm.PageDescriptionLabel do
PageDescriptionLabel.SetBounds(Left, Top, Width, Height);
PageDescriptionLabel.Transparent:= True;
PageDescriptionLabel.Font:= WizardForm.PageDescriptionLabel.Font;
PageDescriptionLabel.Font.Color:= clWhite; //цвет надписи
PageDescriptionLabel.Parent:= WizardForm.MainPanel;

FinishedHeadingLabel:= TLabel.Create(WizardForm);
FinishedHeadingLabel.AutoSize:= False;
with WizardForm.FinishedHeadingLabel do
//координаты FinishedHeadingLabel
FinishedHeadingLabel.SetBounds(ScaleX(30), ScaleY(20), ScaleX(200), ScaleY(220));
FinishedHeadingLabel.Font:= WizardForm.FinishedHeadingLabel.Font
FinishedHeadingLabel.Font.Color:= clWhite;
FinishedHeadingLabel.Transparent:= True;
FinishedHeadingLabel.WordWrap:= true;
FinishedHeadingLabel.Parent:= WizardForm.FinishedPage

FinishedLabel:= TLabel.Create(WizardForm);
FinishedLabel.AutoSize:= False;
with WizardForm.FinishedLabel do
//координаты FinishedLabel
FinishedLabel.SetBounds(ScaleX(30), ScaleY(120), ScaleX(130), ScaleY(220));
FinishedLabel.Font:= WizardForm.FinishedLabel.Font
FinishedLabel.Font.Color:= clWhite;
FinishedLabel.Transparent:= True;
FinishedLabel.WordWrap:= true;
FinishedLabel.Parent:= WizardForm.FinishedPage

WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.FilenameLabel.Hide;
WizardForm.StatusLabel.Caption:='Идет распаковка данных, ждем...'
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.FinishedHeadingLabel.Hide;
end;


procedure InitializeWizard();
Begin
LabelSize();
ButtonTextures();
Labels();
ExtractTemporaryFile('Finishe.bmp');
WizardForm.WizardBitmapImage.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Finishe.bmp'));
ExtractTemporaryFile('papka.bmp');
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
WizardForm.SelectDirBitmapImage.AutoSize:=true;
WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
WizardForm.SelectGroupBitmapImage.AutoSize:=true;

end;
Procedure CurPageChanged(CurPageID: Integer);
Begin
UpdateButtons();
FinishedLabel.Caption:= ExpandConstant('{cm:Finished}');
PageNameLabel.Caption:= WizardForm.PageNameLabel.Caption;
//PageDescriptionLabel.Caption:= WizardForm.PageDescriptionLabel.Caption;

FinishedHeadingLabel.Caption:= WizardForm.FinishedHeadingLabel.Caption;



begin
GetNeedSpaceCaption;
if FreeMB < NeedSize then
begin
WizardForm.NextButton.Enabled := False;
ButtonLabel[bidNext].Enabled := False;
ButtonPanel[bidNext].Enabled := False;
end;
end;
end;


и к нему Components.iss


[CustomMessages]
rus.Space=Доступно места на диске:
rus.Space1=Требуется места на диске:

[Files]
Source: Files\button2.bmp; DestDir: {tmp}; Flags: dontcopy

[Code]
const
ButtonWidth = 80;
ButtonHeight = 23;
Color = clblack;

bidBack = 0;
bidNext = 1;
bidCancel = 2;
bidDirBrowse = 3;
bidGroupBrowse = 4;
bidbtnCancelUnpacking = 5;

var
WizardLabel: TLabel;
ButtonPanel: array of TPanel;
ButtonImage: array of TBitmapImage;
ButtonLabel: array of TLabel;
UsedButtons: array of TButton;
ButtonsCount: Integer;
NeedSpaceLabel,FreeSpaceLabel: TLabel;
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;

Function NumToStr(Float: Extended): String;
Begin
Result:= Format('%.2n', [Float]); StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Pos('.', Result) > 0) do
SetLength(Result, Length(Result)-1);
End;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := ExpandConstant('{cm:SPACE} ')+ NumToStr(round(FreeMB/1024*100)/100) + ' Гб' else
FreeSpaceLabel.Caption := ExpandConstant('{cm:SPACE} ')+ IntToStr(FreeMB)+ ' Мб';
if WizardForm.CurPageID = wpSelectDir then begin //Чтоб не было глюков на других страницах
if FreeMB < NeedSize then begin
WizardForm.NextButton.Enabled := False;
ButtonPanel[bidNext].Enabled:= False;
ButtonLabel[bidNext].Enabled:= False;
end else begin
WizardForm.NextButton.Enabled := True;
ButtonPanel[bidNext].Enabled:= True;
ButtonLabel[bidNext].Enabled:= True; end;
end;
end;

procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := ExpandConstant('{cm:SPACE1} ')+ NumToStr(round(NeedSize/1024*100)/100) + ' Гб' else
NeedSpaceLabel.Caption := ExpandConstant('{cm:SPACE1} ')+ NumToStr(NeedSize)+ ' Мб';
end;

procedure LabelSize();
begin
NeedSize:= {#NeedSize};
with WizardForm do
begin
DiskSpaceLabel.Hide;end;
////////////////////// SelectDirPage //////////////////////
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;
end;

procedure ButtonLabelClick(Sender: TObject);
var Button: TButton; n, i: Integer;
begin
i:= TLabel(Sender).Tag; ButtonImage[i].Left:= 0
for n:=0 to (ButtonsCount-1) do begin
if i = n then Button:= UsedButtons[n];
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*2
end;

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

procedure ButtonLabelMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var n, I: Integer;
begin
I:=TLabel(Sender).Tag;
//Сначала восстанавливаем картинку у всех кнопок, так надо иначе могут быть глюки
for n:=0 to (ButtonsCount-1) do begin if (ButtonLabel[n].Enabled)and(ButtonImage[n].Left <> -ButtonWidth*2)and(I<>N) then ButtonImage[n].Left:= 0; end;
//Теперь собственно ставим нужную картинку
if (ButtonLabel[I].Enabled)and(ButtonImage[I].Left <> -ButtonWidth*2) then begin ButtonImage[I].Left:= -ButtonWidth; end;
end;

procedure WizardLabelMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var n: Integer;
begin
//Т.к Sender'ом выступает WizardLabel то не получится испльзовать индекс кнопки
for n:=0 to (ButtonsCount-1) do if (ButtonLabel[n].Enabled)and(ButtonImage[n].Left <> -ButtonWidth*2) then begin ButtonImage[n].Left:= 0; end;
end;

procedure LoadButtonImage(AButton: TButton);
var n: Integer;
begin
n:=ButtonsCount; SetArrayLength(ButtonPanel, n+1);
SetArrayLength(ButtonImage, n+1); SetArrayLength(ButtonLabel, n+1);
SetArrayLength(UsedButtons, n+1); UsedButtons[n]:= AButton;

ButtonPanel[n]:=TPanel.Create(WizardForm)
ButtonPanel[n].SetBounds(AButton.Left, AButton.Top, AButton.Width, AButton.Height)
ButtonPanel[n].Tag:= n
ButtonPanel[n].Enabled:= AButton.Enabled
ButtonPanel[n].Parent:=AButton.Parent

ButtonImage[n]:=TBitmapImage.Create(WizardForm)
ButtonImage[n].SetBounds(ScaleX(0), ScaleY(0), ScaleX(320), ScaleY(23))
ButtonImage[n].Enabled:=False
ButtonImage[n].Bitmap.LoadFromFile(ExpandConstant('{tmp}\Button2.bmp'))
ButtonImage[n].Parent:=ButtonPanel[n]

with TLabel.Create(WizardForm) do begin
Tag:=n
Parent:=ButtonPanel[n]
Width:=AButton.Width
Height:=AButton.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseMove:=@ButtonLabelMove
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end;

ButtonLabel[n]:=TLabel.Create(WizardForm)
ButtonLabel[n].Autosize:=True
ButtonLabel[n].Alignment:=taCenter
ButtonLabel[n].Tag:=n
ButtonLabel[n].Enabled:= AButton.Enabled
ButtonLabel[n].Transparent:=True
ButtonLabel[n].Font.Color:=clWhite
ButtonLabel[n].Caption:=AButton.Caption
ButtonLabel[n].OnClick:=@ButtonLabelClick
ButtonLabel[n].OnDblClick:=@ButtonLabelClick
ButtonLabel[n].OnMouseMove:=@ButtonLabelMove
ButtonLabel[n].OnMouseDown:=@ButtonLabelMouseDown
ButtonLabel[n].OnMouseUp:=@ButtonLabelMouseUp
ButtonLabel[n].Parent:=ButtonPanel[n]

ButtonsCount:= ButtonsCount+1
end;

procedure UpdateButtons();
var n: Integer;
begin
for n:=0 to ButtonsCount-1 do begin
ButtonLabel[n].Caption:=UsedButtons[n].Caption
ButtonPanel[n].Visible:=UsedButtons[n].Visible
if (UsedButtons[n].Enabled = False) then ButtonImage[n].Left:= -ButtonWidth*3 else ButtonImage[n].Left:= 0;
ButtonLabel[n].Enabled:= UsedButtons[n].Enabled;
ButtonPanel[n].Enabled:= UsedButtons[n].Enabled;
//Ставим Left и Top лейбла соразмерно размеру лейбла
ButtonLabel[n].Left:= ButtonPanel[n].Width div 2 - ButtonLabel[n].Width div 2;
ButtonLabel[n].Top:= ButtonPanel[n].Height div 2 - ButtonLabel[n].Height div 2;
end;
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
//Делаем кнопку активной
WizardForm.NextButton.Enabled:= True;
//Обновляем текстурированную кнопку (обновляем активность и текстуру)
UpdateButtons();
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
//Делаем кнопку неактивной
WizardForm.NextButton.Enabled:= False;
//Обновляем текстурированную кнопку (обновляем активность и текстуру)
UpdateButtons()
end;

procedure ButtonTextures();
begin
WizardForm.Font.Color:=clWhite;
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.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.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.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.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;

WizardLabel:= TLabel.Create(WizardForm)
WizardLabel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(WizardForm.Width), ScaleY(WizardForm.Height))
WizardLabel.Transparent:= True;
WizardLabel.AutoSize:=false;
WizardLabel.OnMouseMove:=@WizardLabelMove
WizardLabel.Parent:= WizardForm;

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:=ScaleX(337)
WizardForm.DirBrowseButton.Width:= ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight

WizardForm.GroupBrowseButton.Left:=ScaleX(337)
WizardForm.GroupBrowseButton.Width:= ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight

WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

ExtractTemporaryFile('button2.bmp')
LoadButtonImage(WizardForm.BackButton)
LoadButtonImage(WizardForm.NextButton)
LoadButtonImage(WizardForm.CancelButton)
LoadButtonImage(WizardForm.DirBrowseButton)
LoadButtonImage(WizardForm.GroupBrowseButton)
//Сначала текстурируются кнопки, затем выполняется процедура которую мы перенесли
WizardForm.DirEdit.OnChange:= @GetFreeSpaceCaption;
WizardForm.DirEdit.Text:= WizardForm.DirEdit.Text + #0;
end;

Devils Night
04-04-2012, 08:06
помогите пожалуйста прикрутить »Так (http://forum.oszone.net/attachment.php?attachmentid=80563&stc=1&d=1333512224) что ли?!

Да и в следующий раз облочай всю свою портянку в CODE и под спойлер

чтоб получилось примерно следующее:
[ CODE]
, и какие нибудь файлы к скрипту прикрути, здесь люди не волшебники из страны ОЗ.

Script.7z (http://forum.oszone.net/attachment.php?attachmentid=81912&d=1335945404)

wertulll
04-04-2012, 08:29
не получается не отображаются время и проценты установки

Raf-9600
04-04-2012, 11:41
Ктонить может прикрутить возможность вертикальной прокрутки к коду на отображение комментариев к компонентам? В смысле чтоб если комментарий слишком велик, то справа него появлялся скроллбар.

Сам код:
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(212); //чем больше значение, тем уже
WizardForm.ComponentsList.OnItemMouseMove:= @ShowDescription

InfoPanel := TPanel.Create(WizardForm);
InfoPanel.Parent := WizardForm.SelectComponentsPage;
InfoPanel.Caption := '';
InfoPanel.Top := WizardForm.ComponentsList.Top; // поднимает панель, но опускает панель с текстом
InfoPanel.Left := ScaleX(220); //сдвигает текстовую панель
InfoPanel.Width := ScaleX(197);
InfoPanel.Height := WizardForm.ComponentsList.Height;
InfoPanel.BevelInner := bvRaised;
InfoPanel.BevelOuter := bvLowered;
InfoCaption := TNewStaticText.Create(WizardForm);
InfoCaption.Parent := WizardForm.SelectComponentsPage;
InfoCaption.Caption := ExpandConstant('{cm:ComponentsInfoPanel1}');
InfoCaption.Left := ScaleX(234); // размещение слова Описание, по горизонтали
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 := ExpandConstant('{cm:ComponentsInfoPanel2}');
Info.WordWrap := true;

AddDescription(1, 'текст1.');
AddDescription(2, 'текст2.');
AddDescription(3, 'текст3.');

Johny777
04-04-2012, 13:21
wertulll,
так сойдёт?
http://rghost.ru/private/37400744/c278fa61100677abdefcdec6682fe96a
*(за скрипт который я добавил спасибо Serega скажи)
_______________________
блин
как вы вкладываете файл в сообщение?
"вложения"
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

Raf-9600,
ты в курсе?
есть всплывающие подсказки в расширенной версии.
Наводишь на элемент и появляется подсказка
вот сделал
если описание большое, то появляется скроллбар (здесь вертикальный)

[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
ComponentsListTVStyle=true

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[CustomMessages]
russian.ComponentsName1=Моя программа™
russian.ComponentsName2=Помощь
russian.ComponentsName2_1=Документация
russian.ComponentsName2_2=Руководство пользователя
russian.ComponentsInfoPanel1=Описание
russian.ComponentsInfoPanel2=Наведите курсор мыши на компонент, чтобы прочитать его описание.
russian.ComponentsDescription1=Устанавливается обязательно
russian.ComponentsDescription2=Помощь
russian.ComponentsDescription3=Прочитать документацию
russian.ComponentsDescription4=Прочитать руководство пользователя

[Components]
Name: readme; Description: Справка; Types: full custom;
Name: readme\en; Description: "Английская "; Types: full custom; Flags: fixed
Name: readme\ru; Description: Русская; Types: full

;*************************************************************************
Name: plugs; Description: Плагины; Types: full ; Flags: collapsed
Name: plugs\wlx; Description: Внутреннего просмотра; Types: full
Name: plugs\wcx; Description: Архиваторные; Types: full
Name: plugs\wfx; Description: Системные; Types: full
Name: plugs\wfx\CanonCam; Description: CanonCam; Types: full
Name: plugs\wfx\PluginManager; Description: PluginManager; Types: full
Name: plugs\wfx\Registry; Description: Registry; Types: full
Name: plugs\wfx\Services; Description: Services; Types: full
Name: plugs\wfx\StartupGuard; Description: StartupGuard; Types: full
Name: plugs\wdx; Description: Другие; Types: full

[ Code]
{ RedesignWizardFormBegin } // Не удалять эту строку!
// Не изменять эту секцию. Она создана автоматически.
var
DRTF: TRichEditViewer;

procedure RedesignWizardForm;
begin
with WizardForm.ComponentsList do
begin
Width := ScaleX(201);
end;

{ DRTF }
DRTF := TRichEditViewer.Create(WizardForm);
with DRTF do
begin
Name := 'DRTF';
Parent := WizardForm.SelectComponentsPage;
Left := ScaleX(208);
Top := ScaleY(74);
Width := ScaleX(209);
Height := ScaleY(131);
ScrollBars := ssVertical;
Text := '';
end;

DRTF.TabOrder := 4;

{ ReservationBegin }
// Вы можете добавить ваш код здесь.

{ ReservationEnd }
end;
// Не изменять эту секцию. Она создана автоматически.
{ RedesignWizardFormEnd } // Не удалять эту строку!

type
TComponentDesc = record Description: String; Index: Integer; end;

var
Descs: array of TComponentDesc;
Indx: Integer;

procedure ShowDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);
var i: Integer;
begin
Indx:=-1;
for i:= 0 to GetArrayLength(Descs)-1 do begin
if (Descs[i].Index=Index) then begin Indx:=i; Break end; end;
if (Indx >=0)and(Area=iaItem) then DRTF.Text:= Descs[Indx].Description else DRTF.Text:= ExpandConstant('{cm:ComponentsInfoPanel2}');
end;

procedure AddDescription(AIndex: Integer; ADescription: String);
var i, k: Integer;
begin
i:= GetArrayLength(Descs); SetArrayLength(Descs, i+1);
Descs[i].Description:= ADescription; Descs[i].Index:= AIndex-1
end;

procedure InitializeWizard();
begin
RedesignWizardForm;
WizardForm.ComponentsList.OnItemMouseMove:= @ShowDescription


AddDescription(1, 'Справка'); //первый параметр - это номер компонента, идет последовательно от начала записи компонентов
AddDescription(2, 'Эта сказка возникла в устных рассказах, пока не стала историей Великой Войны Кольца, включая множество эскурсов в более древние времена. Она начала создаваться после того, как был написан "Хоббит", и по его первой публикации в 1937 году: но я не торопился с продолжением, потому что хотел прежде собрать и привести в порядок мифологию и легенды древних дней, а для этого потребовалось несколько лет. Я делал это для собственного удовольствия и мало надеялся, что другие люди заинтересуются моей работой, особенно потому что она была преимущественно лингвистической по побуждениям и возникла из необходимости привести в порядок мои отрывочные сведения о языках эльфов.'); //Второй параметр - это собственно описание компонента
AddDescription(3, 'Русская справка');
AddDescription(4, 'Плагины');
AddDescription(5, 'Внутреннего просмотра');
AddDescription(6, 'Архиваторные');
AddDescription(7, 'Системные');
AddDescription(8, 'CanonCam');
AddDescription(9, 'PluginManager');
AddDescription(10, 'Registry');
AddDescription(11, 'Services');
AddDescription(12, 'StartupGuard');
AddDescription(13, 'Другие');

end;

[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D003010A802000054504630F10B5457697A617264466F726D0A57697A61726 4466F726D0C436C69656E744865696768740368010B436C69656E74576964746803F1010C4578706C696369744C656674020 00B4578706C69636974546F7002000D4578706C6963697457696474680301020E4578706C69636974486569676874038E010 D506978656C73506572496E636802600A54657874486569676874020D00F10C544E65774E6F7465626F6F6B0D4F757465724 E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B57656C636F6D65506167650D4578706C6963697457696 4746803F1010E4578706C696369744865696768740339010000F110544E65774E6F7465626F6F6B5061676509496E6E65725 06167650D4578706C69636974576964746803F1010E4578706C6963697448656967687403390100F10C544E65774E6F74656 26F6F6B0D496E6E65724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B4C6963656E7365506167650D4 578706C69636974576964746803A1010E4578706C6963697448656967687403ED000000F110544E65774E6F7465626F6F6B5 06167651453656C656374436F6D706F6E656E7473506167650D4578706C69636974576964746803A1010E4578706C6963697 448656967687403ED0000F110544E6577436865636B4C697374426F780E436F6D706F6E656E74734C6973740557696474680 3C9000D4578706C69636974576964746803C9000000F10C544E6577436F6D626F426F780A5479706573436F6D626F0A49746 56D486569676874020D00000F5452696368456469745669657765720444525446044C65667403D00003546F70024A0557696 4746803D100064865696768740383000A5363726F6C6C42617273070A7373566572746963616C085461624F7264657202040 0000000000000


под расширенную версию
без использования библиотеки

wertulll
04-04-2012, 13:54
Johny777, не работает не отображается ни проценты не время

nik1967
04-04-2012, 13:57
блин
как вы вкладываете файл в сообщение?
"вложения" »

Johny777
04-04-2012, 14:13
wertulll,
я проверил перед тем как выложить
к тому же везде где куски скрипта вставил приписал, что они вставлены
ты можешь легко всё убрать
не отображается ни проценты не время »
100% ты не сделал как написано в коментарии
/// к каждой строке фалов, относящейся к отображению процентов и размера нужно приписать ;AfterInstall: Progress;
/// Пример Source: Files\screenshots\*;DestDir: {app};AfterInstall: Progress;

Raf-9600
04-04-2012, 14:51
ты в курсе?
есть всплывающие подсказки в расширенной версии.
Наводишь на элемент и появляется подсказка
вот сделал
если описание большое, то появляется скроллбар (здесь вертикальный) »
Я знаю про такую фишку, и использовал её реализацию от Shegorat http://forum.oszone.net/post-1769157.html#post1769157

Но в версии от Shegorat меня смущало отсутствие скроллбара, а в твоей версии не нравиться, что в ней можно выделить текст. Это можно как-то изменить?

wertulll
04-04-2012, 14:58
Johny777, блин точно пропустил :) Спасиб большой всё работает :up

Johny777
04-04-2012, 15:20
, и использовал её реализацию от Shegorat »
не
не то
вот к каждому элементу приписываешь

Hint := 'я всплывающая подсказка';
ParentShowHint := False;
ShowHint := True;

Это можно как-то изменить? »
так поставь
http://forum.oszone.net/attachment.php?attachmentid=80581&stc=1&d=1333538391

Raf-9600
04-04-2012, 15:26
Hint := 'я всплывающая подсказка'; »
Полноценного описания компонентов это конечно не заменит, но все же любопытно... Можешь показать реализацию? А то я слегка нюб :)

так поставь »
Пробовал. Но тогда текст становиться менее темным и скроллбар блокируется =(

Johny777
04-04-2012, 15:51
о тогда текст становиться менее темным и скроллбар блокируется =( »
тогда хз
да и какая разница. Пусть выделяется!
Можешь показать реализацию? А то я слегка нюб »
вот готовый пример
скомпилируй и наведи курсор на чекбокс

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
SolidCompression=yes
Compression=lzma/ultra
PrivilegesRequired=none
OutputDir=.

[ Code]
var
Demo_CheckBox: TCheckBox;

procedure InitializeWizard();
begin
Demo_CheckBox := TCheckBox.Create(WizardForm);
with Demo_CheckBox do
begin
Parent := WizardForm;
Caption := 'Я чекбокс';
Left := ScaleX(20);
Top := ScaleY(327);
Width := ScaleX(100);
Height := ScaleY(15);
Checked := False;
/// всплывающая подсказака /// начало
Hint := 'а я всплывающая подсказка';
ParentShowHint := False;
ShowHint := True;
/// конец
end;
end;

а делается легко
http://forum.oszone.net/attachment.php?attachmentid=80582&stc=1&d=1333540276
раньше тоже как ты скрипт использовал для описания в отдельном окошке, но потом отказался от ComponentList-a, тк криво отрисовываются чекбоксы (заместо тех, что в скине виндовсовские). Двигать их нельзя и прочее
в месте с компонентами улетело и описание, тк ему на смену пришли всплывающие подсказки

Raf-9600
04-04-2012, 16:12
да и какая разница. Пусть выделяется! »
Ну да, хоть и менее солидно, но не критично. Возможно на ру-боарде ещё уточню, на всякий случай.

а делается легко »
Благодарю, весьма полезная штукенция.

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

Интуиция подсказывает мне что это фантастика... Но вдруг я ошибаюсь? :)

Собсно сами правила блокировки:
var
OldEvent_ComponentsListClickCheck: TNotifyEvent;

procedure ComponentsListClickCheck(Sender: TObject);

begin
If IsComponentSelected('PlugY') or IsComponentSelected('GameLoD') then begin
WizardForm.ComponentsList.ItemEnabled[84]:=False //Version\104c
WizardForm.ComponentsList.ItemEnabled[85]:=False //Version\105b
end else begin
WizardForm.ComponentsList.ItemEnabled[84]:=True
WizardForm.ComponentsList.ItemEnabled[85]:=True
OldEvent_ComponentsListClickCheck(Sender);
end;

begin
If IsComponentSelected('GameLoD') and not IsComponentSelected('PlugY') then begin
WizardForm.ComponentsList.ItemEnabled[86]:=True; //Version\107
WizardForm.ComponentsList.ItemEnabled[87]:=True; //Version\108
end else begin
WizardForm.ComponentsList.ItemEnabled[86]:=False;
WizardForm.ComponentsList.ItemEnabled[87]:=False;
OldEvent_ComponentsListClickCheck(Sender);
end;
end;

begin
If IsComponentSelected('GameLoD') and (IsComponentSelected('Version\109') or IsComponentSelected('Version\109b') or IsComponentSelected('Version\109d') or IsComponentSelected('Version\110') or IsComponentSelected('Version\111') or IsComponentSelected('Version\111b') or IsComponentSelected('Version\112a') or IsComponentSelected('Version\113c')) then
WizardForm.ComponentsList.ItemEnabled[104]:=True //PlugY
else
WizardForm.ComponentsList.ItemEnabled[104]:=False;
OldEvent_ComponentsListClickCheck(Sender);
end;


begin
If IsComponentSelected('PlugY') then
WizardForm.ComponentsList.ItemEnabled[96]:=False //Version\113d
else
WizardForm.ComponentsList.ItemEnabled[96]:=True;
OldEvent_ComponentsListClickCheck(Sender);
end;


end;



procedure InitializeWizard();
begin
with WizardForm.ComponentsList do
begin
OldEvent_ComponentsListClickCheck := OnClickCheck;
OnClickCheck := @ComponentsListClickCheck;
ItemEnabled[84]:=False; //Version\104c
ItemEnabled[85]:=False; //Version\105b
ItemEnabled[104]:=False; //PlugY
end;
end;
//---


//Автоматический выбр компонентов
procedure ComponentsListOnClickCheck(Sender: TObject);
begin
if wizardform.ComponentsList.Checked[1] then
wizardform.ComponentsList.Checked[5]:=true; //GameDiablo2\Text

begin
if wizardform.ComponentsList.Checked[50] then //GameLoD
wizardform.ComponentsList.Checked[51]:=true; //GameLoD\VoiceLoD

begin
if wizardform.ComponentsList.Checked[1] then
wizardform.ComponentsList.Checked[83]:=true; //Version

begin
if wizardform.ComponentsList.Checked[1] then
wizardform.ComponentsList.Checked[17]:=true; //GameDiablo2\VoiceD2
end;
end;
end;
end;

procedure InitializeWizard6();
begin
wizardform.ComponentsList.OnClickCheck:=@ComponentsListOnClickCheck
end;
//---

sergey3695
04-04-2012, 16:22
вот например El Sanchez выкладывал много страниц назад
не даёт пользователю запустить тот же инсталл несколько раз пока он работает
очень полезная штука! »
Так та оно прикольно, но ведь эта же штука не даст сделать откат установки исдона (или ISExec и т.п.). Т.к. при откате запускается деинсталлятор, а он тоже будет проверять наличие запущенного приложения. А оно будет запущено, следовательно выдаст уведовмление и деинсталляция не произведется.

Johny777
04-04-2012, 16:35
Raf-9600,
сложно для меня
не знаю как добавить подсказку, если компонент "выключен" (ItemEnabled[86]:=False)
и попробовав скажу, что для заблокированного элемента подсказка не всплывает
вот так могу сделать (других идей нет)
скомпилируй
посмотри

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
SolidCompression=yes
Compression=lzma/ultra
PrivilegesRequired=none
OutputDir=.




[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D0030107D01000054504630F10B5457697A617264466F726D0A57697A61726 4466F726D0C436C69656E744865696768740368010B436C69656E74576964746803F101134F6E436F6E73747261696E65645 26573697A6507036F66660C4578706C696369744C65667402000B4578706C69636974546F7002000D4578706C69636974576 96474680301020E4578706C69636974486569676874038E010D506978656C73506572496E636802600A54657874486569676 874020D00F10C544E65774E6F7465626F6F6B0D4F757465724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B50616 7650B57656C636F6D65506167650D4578706C69636974576964746803F1010E4578706C69636974486569676874033901000 0000C544E6577436865636B426F780C6F66665F636865636B626F78044C65667403980003546F70034801055769647468026 10648656967687402110743617074696F6E120400000032044B043A043B04085461624F726465720205074F6E436C69636B0 7036F6666000000

[ Code]
{ RedesignWizardFormBegin } // Не удалять эту строку!
// Не изменять эту секцию. Она создана автоматически.
var
off_checkbox: TNewCheckBox;

procedure off(Sender: TObject); forward;

procedure RedesignWizardForm;
begin
{ off_checkbox }
off_checkbox := TNewCheckBox.Create(WizardForm);
with off_checkbox do
begin
Name := 'off_checkbox';
Parent := WizardForm;
Left := ScaleX(152);
Top := ScaleY(328);
Width := ScaleX(97);
Height := ScaleY(17);
Caption := 'выкл';
OnClick := @off;
end;

off_checkbox.TabOrder := 5;

{ ReservationBegin }
// Вы можете добавить ваш код здесь.

{ ReservationEnd }
end;
// Не изменять эту секцию. Она создана автоматически.
{ RedesignWizardFormEnd } // Не удалять эту строку!
var
Demo_CheckBox: TCheckBox;

procedure InitializeWizard();
begin
RedesignWizardForm;

Demo_CheckBox := TCheckBox.Create(WizardForm);
with Demo_CheckBox do
begin
Parent := WizardForm;
Caption := 'Я чекбокс';
Left := ScaleX(20);
Top := ScaleY(327);
Width := ScaleX(120);
Height := ScaleY(15);
Checked := False;
/// всплывающая подсказака /// начало
Hint := 'а я всплывающая подсказка';
ParentShowHint := False;
ShowHint := True;
/// конец
end;
end;


function make: Boolean;
begin
Result:=off_checkbox.Checked;
end;

procedure off(Sender: TObject);
begin
If off_checkbox.Checked = false
then
begin
Demo_CheckBox.Enabled:= true;
Demo_CheckBox.Caption := 'Я чекбокс';
end
else
begin
Demo_CheckBox.Enabled:= false;
Demo_CheckBox.Caption := 'меня заблокировали';
end;
end;


запускается деинсталлятор »
какой?
можно пример?




© OSzone.net 2001-2012