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

Статус
В этой теме нельзя размещать новые ответы.

Zimbo

Участник
Всем жителям этого форума привет! :)
Ребята есть вопрос:
Когда создаешь кнопку для вывода лого делаешь так что бы кнопки и чекбоксы не были активные. А как зделать что бы лейбл чекбокса не был активный тоже ?
procedure LogoClick(hBtn:HWND);
var
Check:boolean;
begin
Check:=BtnGetChecked(hBtn);
sndPlaySound(ExpandConstant('{tmp}\Click.wav'),$0001);
Check:=BtnGetChecked(hBtn);
BtnSetEnabled(hBackBtn, not Check);
BtnSetEnabled(hNextBtn, not Check);
BtnSetEnabled(hCancelBtn, not Check);
BtnSetEnabled(hDirBrowseBtn, not Check);
BtnSetEnabled(hGroupBrowseBtn, not Check);
BtnSetEnabled(QuickLaunchCheck, not Check);
BtnSetEnabled(DesktopCheck, not Check);
BtnSetEnabled(NoIconsCheck, not Check);
BtnSetEnabled(MusicButton, not Check);
ImgSetVisibility(Logo, not ImgGetVisibility(Logo));
ImgApplyChanges(WizardForm.Handle);
end;
 

Rikill

Новичок
Zimbo, тогда можно написать второй лейбл и при клике на лого он активировался и на него нельзя нажать и прятался старый при втором клике на кнопку всё возвращалось бы на свои места - оба варианта говорят о неактивности :)
или попробуй так:
Код:
procedure LogoClick(hBtn:HWND);
 var
 Check:boolean;
 begin
 Check:=BtnGetChecked(hBtn);
 sndPlaySound(ExpandConstant('{tmp}\Click.wav'),$00 01);
 Check:=BtnGetChecked(hBtn);
 BtnSetEnabled(hBackBtn, not Check);
 BtnSetEnabled(hNextBtn, not Check);
 BtnSetEnabled(hCancelBtn, not Check);
 BtnSetEnabled(hDirBrowseBtn, not Check);
 BtnSetEnabled(hGroupBrowseBtn, not Check);
 BtnSetEnabled(QuickLaunchCheck, not Check);
 BtnSetEnabled(DesktopCheck, not Check);
 BtnSetEnabled(NoIconsCheck, not Check);
 BtnSetEnabled(MusicButton, not Check);
 ImgSetVisibility(Logo, not ImgGetVisibility(Logo));
 ImgApplyChanges(WizardForm.Handle);
//=====тут я начинаю изменять
LogoLable.OnClick:= nil;//иногда так канает, если безнадёга
LogoLable.Cursor:=  crArrow;
if Check then NoIconsLabel.Font.Color:=$FFFFFF else NoIconsLabel.Font.Color:=-16777199; //==чтобы цвета менялись ;)
if not BtnGetChecked(hBtn) then
LogoLable.OnClick:= функция;
LogoLable.Cursor:=  crHand;
 end;
end;
 
Последнее редактирование:

DaRKdemoN

Участник
Проверенный
Всем жителям этого форума привет!
тебе того же.
лейбл должен быть не активным
что ты подразумеваешь под не активностью лейбла?
если имеешь ввиду цвет при клике на чекбокс, то вызывай ту процедуру которую и указывал при BtnSetEvent.

procedure NoIconsClick(hBtn:HWND);
var
Check: Иoolean;
begin
Check:= BtnGetChecked(hBtn);
if Check then NoIconsLabel.Font.Color:=$FFFFFF else NoIconsLabel.Font.Color:=-16777199;
end;

.......
begin
NoIconsCheck:=BtnCreate(WizardForm.Handle,100,320,20,20,ExpandConstant('{tmp}\CheckBox.png'),8,True);
BtnSetEvent(NoIconsCheck,BtnClickEventID,WrapBtnCallback(@NoIconsClick,1));
BtnSetCursor(NoIconsCheck,GetSysCursorHandle(32649));
end;
в данном случае вызывай NoIconsClick(NoIconsCheck).
 
Последнее редактирование:

Zimbo

Участник
DaRKdemoN,
У меня лейбл активний от чекбокса, мне надо что бы лейбл был не активний!
З.Ы. Когда лого активное лейбл не нажимаеться!
Это надо зделать!
 
Последнее редактирование:

Rikill

Новичок
Zimbo,
Код:
procedure LogoClick(hBtn:HWND); 
 var 
 Check:boolean; 
 begin 
 Check:=BtnGetChecked(hBtn); 
 sndPlaySound(ExpandConstant('{tmp}\Click.wav'),$00 01); 
 Check:=BtnGetChecked(hBtn); 
 BtnSetEnabled(hBackBtn, not Check); 
 BtnSetEnabled(hNextBtn, not Check); 
 BtnSetEnabled(hCancelBtn, not Check); 
 BtnSetEnabled(hDirBrowseBtn, not Check); 
 BtnSetEnabled(hGroupBrowseBtn, not Check); 
 BtnSetEnabled(QuickLaunchCheck, not Check); 
 BtnSetEnabled(DesktopCheck, not Check); 
 BtnSetEnabled(NoIconsCheck, not Check); 
 BtnSetEnabled(MusicButton, not Check); 
 ImgSetVisibility(Logo, not ImgGetVisibility(Logo)); 
 ImgApplyChanges(WizardForm.Handle); 
//=====тут я начинаю изменять 
POLabel.OnClick:= nil;//лого активное - не нажимается надпись, что собственно тебе и нужно)
POLabel.Cursor:=  crArrow; 
if not BtnGetChecked(hBtn) then 
POLabel.OnClick:= @POLabelClick; //убрали лого - всё нажимается
POLabel.Cursor:=  crHand; 
 end; 
end;
 
Последнее редактирование:

DaRKdemoN

Участник
Проверенный
У меня лейбл активний от чекбокса, мне надо что бы лейбл был не активний!
спрошу так - что ты подразумеваешь под активностью метки? насколько я понял ты про цвет лейбла когда чекбокс на ботве отмечен или не отмечен. ну вообще я знаю только одну активность лейбла - это свойство Enabled у TControl.
 

shidow

Новичок
Какую процедуру нужно задать для onclick, чтобы при нажатии переходила, например, на страницу инсталляции?
 

Sten

Новичок
shidow, Как именно перейти на определённую страницу, не знаю! Но можно заюзать ShouldSkipPage:
Код:
function ShouldSkipPage(PageID: Integer): Boolean;
begin
  if (PageID =wpLicense)or(PageID =wpInfoBefore)or(PageID =wpUserInfo)or(PageID =wpSelectDir)or(PageID =wpSelectComponents)or(PageID =wpSelectProgramGroup)or(PageID =wpSelectTasks)or(PageID =wpReady)then
  Result:= True;
end;
 

DaRKdemoN

Участник
Проверенный
Какую процедуру нужно задать для onclick, чтобы при нажатии переходила, например, на страницу инсталляции?
можно задать что-бы при нажатии на кнопку программно нажималась next определённое кол-во раз, вот и будет эффект перехода на опр. страницу.
 

shidow

Новичок
DaRKdemoN, хм.. ну так можно попробовать

Добавлено:
DaRKdemoN, ну так что, поделишься примерчиком? :-[

[hr]Даблпост обязателен был?
 

shidow

Новичок
DaRKdemoN, что-то я туплю сегодня, а как пропустить больше одной страницы?)
[hr]
Тебе-же ответили.
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID =wpLicense)or(PageID =wpInfoBefore)or(PageID =wpUserInfo)or(PageID =wpSelectDir)or(PageID =wpSelectComponents)or(PageID =wpSelectProgramGroup)or(PageID =wpSelectTasks)or(PageID =wpReady)then
Result:= True;
end;
с помощью добавок в виде or(PageID =ID страницы) забиваеш страницами, которые нужно скрыть. Gnom.
 
Последнее редактирование модератором:

DaRKdemoN

Участник
Проверенный
что-то я туплю сегодня, а как пропустить больше одной страницы?)
просто несколько раз вызываешь
Код:
SendMessage(WizardForm.NextButton.Handle,BM_CLICK,0,0);
Добавлено через 1 минуту
вот пример (не полный)
[Setup]
AppName=My Program
AppVerName=My Program v1.0
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
DefaultUserInfoName={sysuserinfoname}
DefaultUserInfoOrg={sysuserinfoorg}
DefaultUserInfoSerial=1234-1234-1234-1234
UserInfoPage=true
LicenseFile=C:\Program Files\Inno Setup 5\license.txt
InfoBeforeFile=C:\Program Files\Inno Setup 5\license.txt
OutputDir=.

[Files]
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Components]
Name: "main"; Description: "Main Files"; Types: full compact custom; Flags: fixed
Name: "help"; Description: "Help Files"; Types: full
Name: "help\english"; Description: "English"; Types: full
Name: "help\dutch"; Description: "Dutch"; Types: full

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

[Run]
Filename: "{app}\MyProg.exe"; Description: "{cm:LaunchProgram,My Program}"; Flags: nowait postinstall skipifsilent


[_Code]
var
Welcome, License, InfoBefore, UserInfo, Tasks, SelProgGroup, SelectDir,
Components, Ready: TButton;

CurPage: integer;

const
BM_CLICK= $00F5;

procedure ChangePage(Sender: TObject);
var i: integer;
begin
if Sender is TButton then
case TButton(Sender) of

Welcome: if CurPage > wpWelcome then begin
if CurPage = wpLicense then
SendMessage(WizardForm.BackButton.Handle,BM_CLICK,0,0)
else
for i:=CurPage-2 downto 1 do SendMessage(WizardForm.BackButton.Handle,BM_CLICK,0,0);
MsgBox('WelcomePage',mbInformation,0);
end;

License: if CurPage= wpLicense then EXIT else begin
if CurPage = 1 then
SendMessage(WizardForm.NextButton.Handle,BM_CLICK,0,0)
else
for i:=CurPage-2 downto 2 do SendMessage(WizardForm.BackButton.Handle,BM_CLICK,0,0);
MsgBox('LicensePage',mbInformation,0);
end;

InfoBefore: if CurPage= wpInfoBefore then EXIT else begin
if CurPage < wpInfoBefore then
for i:=CurPage+1 to 3 do SendMessage(WizardForm.NextButton.Handle,BM_CLICK,0,0)
else
for i:=CurPage-1 downto 4 do SendMessage(WizardForm.BackButton.Handle,BM_CLICK,0,0);
MsgBox('InfoBeforePage',mbInformation,0);
end;

UserInfo: MsgBox('UserInfoPage',mbInformation,0);

Tasks: MsgBox('SelectTasksPage',mbInformation,0);

SelProgGroup: MsgBox('SelectProgramGroupPage',mbInformation,0);

SelectDir: MsgBox('SelectDirPage',mbInformation,0);

Components: MsgBox('SelectComponentsPage',mbInformation,0);

Ready: MsgBox('ReadyPage',mbInformation,0);
end;
end;

procedure RedesignWizardForm;
begin
with WizardForm do
begin
AutoScroll := False;
ClientHeight := ScaleY(409);
end;

{ Welcome }
Welcome := TButton.Create(WizardForm);
with Welcome do
begin
Name := 'Welcome';
Parent := WizardForm;
Left := ScaleX(27);
Top := ScaleY(352);
Width := ScaleX(75);
Height := ScaleY(25);
OnClick:= @ChangePage;
end;

{ License }
License := TButton.Create(WizardForm);
with License do
begin
Name := 'License';
Parent := WizardForm;
Left := ScaleX(102);
Top := ScaleY(352);
Width := ScaleX(75);
Height := ScaleY(25);
OnClick:= @ChangePage;
end;

{ InfoBefore }
InfoBefore := TButton.Create(WizardForm);
with InfoBefore do
begin
Name := 'InfoBefore';
Parent := WizardForm;
Left := ScaleX(177);
Top := ScaleY(352);
Width := ScaleX(75);
Height := ScaleY(25);
OnClick:= @ChangePage;
end;

{ UserInfo }
UserInfo := TButton.Create(WizardForm);
with UserInfo do
begin
Name := 'UserInfo';
Parent := WizardForm;
Left := ScaleX(252);
Top := ScaleY(352);
Width := ScaleX(75);
Height := ScaleY(25);
OnClick:= @ChangePage;
end;

{ Tasks }
Tasks := TButton.Create(WizardForm);
with Tasks do
begin
Name := 'Tasks';
Parent := WizardForm;
Left := ScaleX(212);
Top := ScaleY(380);
Width := ScaleX(80);
Height := ScaleY(25);
OnClick:= @ChangePage;
end;

{ ProgramGroup }
SelProgGroup := TButton.Create(WizardForm);
with SelProgGroup do
begin
Name := 'ProgramGroup';
Parent := WizardForm;
Left := ScaleX(132);
Top := ScaleY(380);
Width := ScaleX(80);
Height := ScaleY(25);
OnClick:= @ChangePage;
end;

{ SelectDir }
SelectDir := TButton.Create(WizardForm);
with SelectDir do
begin
Name := 'SelectDir';
Parent := WizardForm;
Left := ScaleX(327);
Top := ScaleY(352);
Width := ScaleX(75);
Height := ScaleY(25);
OnClick:= @ChangePage;
end;

{ Components }
Components := TButton.Create(WizardForm);
with Components do
begin
Name := 'Components';
Parent := WizardForm;
Left := ScaleX(403);
Top := ScaleY(352);
Width := ScaleX(75);
Height := ScaleY(25);
OnClick:= @ChangePage;
end;

{ Ready }
Ready := TButton.Create(WizardForm);
with Ready do
begin
Name := 'Ready';
Parent := WizardForm;
Left := ScaleX(292);
Top := ScaleY(380);
Width := ScaleX(80);
Height := ScaleY(25);
OnClick:= @ChangePage;
end;
end;

procedure InitializeWizard();
begin
RedesignWizardForm;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
CurPage:= CurPageID;
if CurPageID= wpLicense then SendMessage(WizardForm.LicenseAcceptedRadio.Handle,BM_CLICK,0,0);
end;
остальное в том же духе.

Добавлено через 5 минут
ну вообще можно и в таком духе
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID= wpWelcome then begin
WizardForm.WelcomePage.Hide;
WizardForm.LicensePage.Show;
end;
end;
 

Avangard

Участник
Как скрыть лого в iswin7logo.dll на некоторых страницах?
 
Последнее редактирование модератором:

sergey3695

Ветеран
Модератор
alexa1995, Ну судя по комментарию я понял вообще..

Протестируйте инсталлятор http://rghost.ru/19735501
В твоем инсталляторе если перейти на страницу компонентов или доп. ПО и отметить там чекбоксы, перейти на следующую страницу а потом обратно то чекбоксы снова неактивные.:unknown: как то странно получается? (я же их отмечал следовательно они должны быть отмеченные)
 

Avangard

Участник
Как на прозрачную область iswin7 поместить лейб? Parent:=WizardForm - лейб вообще скрывается...
 

GVS276

Старожил
Проверенный
MasteR, писал на ru-board`e пример
Вот он:
#define AppName "1"

[Setup]
AppName={#AppName}
AppVerName={#AppName}
DefaultDirName={pf}\{#AppName}

[Files]
Source: ISWin7.dll; DestDir: {tmp}; Flags: dontcopy;

Код:
 var  
  RGNameLabel: TNewStaticText; 
  
 procedure iswin7_add_glass(Handle:HWND; Left, Top, Right, Bottom : Integer; GDIPLoadMode: boolean); external 'iswin7_add_glass@files:iswin7.dll stdcall'; 
 procedure iswin7_add_button(Handle:HWND); external 'iswin7_add_button@files:iswin7.dll stdcall'; 
 procedure iswin7_free; external 'iswin7_free@files:iswin7.dll stdcall'; 
 procedure RGNameSiteOnClick(Sender: TObject); var SiteCode: Integer; begin ShellExec('open', 'http://element-team.org/index.php', '', '', SW_SHOWNORMAL, ewNoWait, SiteCode); end; 
  
 procedure InitializeWizard(); 
 begin 
  RGNameLabel:= TNewStaticText.Create(WizardForm);   
  RGNameLabel.Left:= 10;  
  RGNameLabel.Top:= 324;  
  RGNameLabel.Width:= 50;  
  RGNameLabel.Height:= 15;  
  RGNameLabel.AutoSize:= True;   
  RGNameLabel.Font.Color:= $484848;   
  RGNameLabel.Font.Name:= 'Georgia'; 
  RGNameLabel.Font.Style:=[fsBold] 
  RGNameLabel.Font.Size:= 10; 
  RGNameLabel.Color:= clBlack; 
  RGNameLabel.Caption:= '[ R.G. Element Arts ]'+#13+#10+ 
                        '                 element-team.org'; 
  RGNameLabel.OnClick:=@RGNameSiteOnClick 
  RGNameLabel.Cursor:=crHand   
  RGNameLabel.Parent:= WizardForm; 
  
  iswin7_add_button(WizardForm.BackButton.Handle); 
  iswin7_add_button(WizardForm.NextButton.Handle); 
  iswin7_add_button(WizardForm.CancelButton.Handle); 
  iswin7_add_glass(WizardForm.Handle, 0, 0, 0, 47, False); 
 end; 
  
 procedure DeinitializeSetup(); 
 begin 
  iswin7_free; 
 end;[/SPOILER]
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху