Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 4]
R.i.m.s.k.y.
12-03-2012, 15:47
вот так я делаю с кастомными чекбоксами »
мне неохота с кастомными чекбоксами заморачиваться, сделано все стандартно
На каком шаге ты это делаешь?
Johny777
12-03-2012, 15:50
by_gangster,
простым дублированием
; Ñêðèïò ñîçäàí ñ ïîìîùüþ
; IS GameScript Generator by South
; ñïåöèàëüíî äëÿ www.csmania.ru
[Setup]
SourceDir=.
OutputDir=Setup
AppName=1
AppVerName=1
AppVersion=1
AppPublisherURL=http://forum.csmania.ru/
AppSupportURL=http://forum.csmania.ru/
AppUpdatesURL=http://forum.csmania.ru/
DefaultDirName={pf}\1
DefaultGroupName=1
AllowNoIcons=yes
OutputBaseFilename=setup
WindowVisible=no
WindowShowCaption=no
WindowResizable=no
Compression=lzma/normal
DiskSpanning=yes
DiskSliceSize=2100000000
SlicesPerDisk=1
[_Code]
const
dURL=2;
var
URLLabel,URLLabelShadow:TLabel; /// url 1
URLLabel_2,URLLabelShadow_2:TLabel; /// url 2
procedure URLLabelClick(Sender: TObject); /// url 1
var
ErrorCode:integer;
begin
ShellExec('open','http://forum.csmania.ru/','','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
end;
procedure URLLabelClick_2(Sender: TObject); /// url 2
var
ErrorCode:integer;
begin
ShellExec('open','http://forum.oszone.net/','','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
end;
procedure URLLabelMouseDown(Sender:TObject;Button:TMouseButton;Shift:TShiftState;X,Y:Integer);
begin
URLLabel.Top:=URLLabel.Top+dURL;
URLLabel.Left:=URLLabel.Left+dURL;
URLLabel.Font.Style:=URLLabel.Font.Style+[fsUnderline];
URLLabel.Font.Color:=clBlue;
URLLabelShadow.Visible:=False;
end;
procedure URLLabelMouseUp(Sender:TObject;Button:TMouseButton;Shift:TShiftState;X,Y:Integer);
begin
URLLabel.Top:=URLLabel.Top-dURL;
URLLabel.Left:=URLLabel.Left-dURL;
URLLabel.Font.Style:=URLLabel.Font.Style-[fsUnderline];
URLLabel.Font.Color:=clMaroon;
URLLabelShadow.Visible:=True;
end;
/// url 2
procedure URLLabelMouseDown_2(Sender:TObject;Button:TMouseButton;Shift:TShiftState;X,Y:Integer);
begin
URLLabel.Top:=URLLabel.Top+dURL;
URLLabel.Left:=URLLabel.Left+dURL;
URLLabel.Font.Style:=URLLabel.Font.Style+[fsUnderline];
URLLabel.Font.Color:=clBlue;
URLLabelShadow.Visible:=False;
end;
procedure URLLabelMouseUp_2(Sender:TObject;Button:TMouseButton;Shift:TShiftState;X,Y:Integer);
begin
URLLabel.Top:=URLLabel.Top-dURL;
URLLabel.Left:=URLLabel.Left-dURL;
URLLabel.Font.Style:=URLLabel.Font.Style-[fsUnderline];
URLLabel.Font.Color:=clMaroon;
URLLabelShadow.Visible:=True;
end;
procedure InitializeWizard;
/// url 1
begin
URLLabelShadow:=TLabel.Create(WizardForm);
with URLLabelShadow do begin
Top:=ScaleY(331);
Left:=ScaleX(25);
Caption:='http://forum.csmania.ru/';
AutoSize:=True;
Parent:=WizardForm;
Transparent:=True;
Font.Color:=$969696;
Font.Size:=9;
Font.Style:=Font.Style+[fsBold];
end;
URLLabel:=TLabel.Create(WizardForm);
with URLLabel do begin
Top:=ScaleY(331)-dURL;
Left:=ScaleX(25)-dURL;
Caption:='http://forum.csmania.ru/';
AutoSize:=True;
Parent:=WizardForm;
Cursor:=crHand;
Transparent:=True;
Font.Color:=clMaroon;
Font.Size:=9;
Font.Style:=Font.Style+[fsBold];
BringToFront;
OnClick:=@URLLabelClick;
OnMouseDown:=@URLLabelMouseDown;
OnMouseUp:=@URLLabelMouseUp;
end;
/// url 2
URLLabelShadow_2:=TLabel.Create(WizardForm);
with URLLabelShadow_2 do begin
Top:=ScaleY(331);
Left:=ScaleX(200);
Caption:='http://forum.oszone.net/';
AutoSize:=True;
Parent:=WizardForm;
Transparent:=True;
Font.Color:=$969696;
Font.Size:=9;
Font.Style:=Font.Style+[fsBold];
end;
URLLabel_2:=TLabel.Create(WizardForm);
with URLLabel_2 do begin
Top:=ScaleY(331)-dURL;
Left:=ScaleX(200)-dURL;
Caption:='http://forum.oszone.net/';
AutoSize:=True;
Parent:=WizardForm;
Cursor:=crHand;
Transparent:=True;
Font.Color:=clBlue;
Font.Size:=9;
Font.Style:=Font.Style+[fsBold];
BringToFront;
OnClick:=@URLLabelClick_2;
OnMouseDown:=@URLLabelMouseDown_2;
OnMouseUp:=@URLLabelMouseUp_2;
end;
end;
by_gangster
12-03-2012, 15:53
Johny777, спасибо :)
Johny777
12-03-2012, 15:57
мне неохота с кастомными чекбоксами заморачиваться, сделано все стандартно»
и не надо
насколько я знаю у компонетов есть номера как [0] или [1]
вот к ним если можешь привязать, что всё заработает
На каком шаге ты это делаешь?»
хз
процедуры и функции сверху записаны
конкретно действие выше у меня для на странице компонетов, когда один чекбокс относится только к одному радиобаттону, но думаю не проблема выполнять его для двух страниц.
единственное что у меня записано в InitializeWizard это main_CheckBox.Checked:= false;
могу дать скрипт, если нужно
сам посмотришь
R.i.m.s.k.y.
12-03-2012, 16:00
Johny777, да я пробовал вызывать TaskChek который галки расставляет раньше страницы Tasks - ошибка, хотя с компонентами такое прокатывает
CurPageID=wpSelectTasks тоже не прокатывает
by_gangster
12-03-2012, 16:04
дайте пожалуйста ссылку на форум ну или там где обсуждают bass.dll то есть музыка в инсталяторе
R.i.m.s.k.y.
12-03-2012, 16:09
Johny777, еслибы было так просто, там еще надо и контролировать в системе наличие других компонент (того же хаали чтобы второй раз принудительно не поставить)
но я уже починил
Спасибо за внимание
procedure TasksCheck();
var
Item: Integer;
begin
...
if ( check_for_haali ) then begin
Item := WizardForm.TasksList.Items.IndexOf(ExpandConstant('{cm:Haali}'));
WizardForm.TasksList.Checked[item] := True; // надо было вот эту строчку повторить, ее не было
if WizardForm.TasksList.ItemIndex = Item then WizardForm.TasksList.Checked[item] := True;
end;
end; //if (noComponentClick = False) then begin
end;
Johny777
12-03-2012, 16:11
R.i.m.s.k.y.,
вот смотри что накопал у себя в примерах
обрати внимание на самый конец
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Components]
Name: text; Description: Язык субтитров; Types: full;
Name: text\rus; Description: Русский; Flags: exclusive;
Name: text\eng; Description: Английский; Flags: exclusive;
Name: voice; Description: Язык озвучки;
Name: voice\rus; Description: Русский; Flags: exclusive;
Name: voice\eng; Description: Английский; Flags: exclusive;
[ code]
var
OldEvent_ComponentsListClickCheck: TNotifyEvent;
procedure ComponentsListClickCheck(Sender: TObject);
begin
If IsComponentSelected('text') then
WizardForm.ComponentsList.ItemEnabled[3]:=False
else
WizardForm.ComponentsList.ItemEnabled[3]:=True;
OldEvent_ComponentsListClickCheck(Sender);
end;
procedure InitializeWizard();
begin
with WizardForm.ComponentsList do
begin
OldEvent_ComponentsListClickCheck := OnClickCheck;
OnClickCheck := @ComponentsListClickCheck;
ItemEnabled[3]:=False;
end;
end;
_____________________продолжение,,,,,,,,,,,,,,,,,,,,,,,,,
[Components]
Name: "GameDiablo2"; Description: Diablo 2; Flags: fixed; Types: full compact custom;
Name: GameLoD; Description: Lord of Destruction; Types: full;
Name: Version; Description: Версия; Flags: fixed; Types: full compact custom;
Name: Version\107; Description: 1.07; Flags: exclusive;
Name: Version\108; Description: 1.08; Flags: exclusive;
Name: Version\109; Description: 1.09; Flags: exclusive; Types: full;
[ code]
var
OldEvent_ComponentsListClickCheck: TNotifyEvent;
procedure ComponentsListClickCheck(Sender: TObject);
begin
If IsComponentSelected('GameLoD') then
WizardForm.ComponentsList.ItemEnabled[3]:=True
else
WizardForm.ComponentsList.ItemEnabled[3]:=False;
OldEvent_ComponentsListClickCheck(Sender);
end;
procedure InitializeWizard();
begin
with WizardForm.ComponentsList do
begin
OldEvent_ComponentsListClickCheck := OnClickCheck;
OnClickCheck := @ComponentsListClickCheck;
ItemEnabled[3]:=True;
end;
end;
,,,,,,,,,,,,,,,,,,,,,,,,,,.................................
procedure ComponentsListClickCheck(Sender: TObject);
begin
If IsComponentSelected('GameLoD') then begin
WizardForm.ComponentsList.ItemEnabled[3]:=True;
WizardForm.ComponentsList.ItemEnabled[4]:=True;
end else begin
WizardForm.ComponentsList.ItemEnabled[3]:=False;
WizardForm.ComponentsList.ItemEnabled[4]:=False;
OldEvent_ComponentsListClickCheck(Sender);
end;
end;
R.i.m.s.k.y.
12-03-2012, 16:36
Johny777, ну у меня так и сделано, только номера не жоские а WizardForm.ComponentsList.Items.IndexOf('Diablo 2')
by_gangster
12-03-2012, 17:30
R.i.m.s.k.y., ты знаешь как этот код можно вписать в мой???
[_code]
var
PageNameLabel, PageDescriptionLabel: TLabel;
procedure InitializeWizard();
begin
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;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
PageNameLabel.Caption:= WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption:= WizardForm.PageDescriptionLabel.Caption;
end;
R.i.m.s.k.y.
12-03-2012, 17:36
ты знаешь как этот код можно вписать в мой »
я с фриарком, исдоне и формами никак »
by_gangster
12-03-2012, 19:10
кто знает, как вставить это в скрипт??? (проигрывание музыки)
//************************************************ [Начало - Музыка] ***************************************************//
function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean; external 'BASS_Init@files:BASS.dll stdcall delayload';
function BASS_StreamCreateFile(mem: BOOL; f: PAnsiChar; offset: DWORD; length: DWORD; flags: DWORD): DWORD; external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';
function BASS_Start: Boolean; external 'BASS_Start@files:BASS.dll stdcall delayload';
function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean; external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';
function BASS_ChannelIsActive(handle: DWORD): Integer; external 'BASS_ChannelIsActive@files:BASS.dll stdcall delayload';
function BASS_ChannelPause(handle: DWORD): Boolean; external 'BASS_ChannelPause@files:BASS.dll stdcall delayload';
function BASS_Pause: Boolean; external 'BASS_Pause@files:BASS.dll stdcall delayload';
function BASS_Stop: Boolean; external 'BASS_Stop@files:BASS.dll stdcall delayload';
function BASS_Free: Boolean; external 'BASS_Free@files:BASS.dll stdcall delayload';
procedure MusicButtonClick(hBtn:HWND);
begin
sndPlaySound(ExpandConstant('{tmp}\Click.wav'), $0001);
if BtnGetChecked(MusicButton) then BASS_ChannelPause(mp3Handle)
else if BASS_ChannelIsActive(mp3Handle)=BASS_ACTIVE_PAUSED then BASS_ChannelPlay(mp3Handle, False);
end;
procedure InsertMusic;
begin
ExtractTemporaryFile('MusicButton.png');
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('Music.mp3');
MusicButton:=BtnCreate(WizardForm.Handle,ScaleX(717),ScaleY(3),ScaleX(70),ScaleY(52),ExpandConstant( '{tmp}\MusicButton.png'),0,True);
BtnSetEvent(MusicButton,BtnClickEventID,WrapBtnCallback(@MusicButtonClick,1));
BtnSetEvent(MusicButton,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetVisibility(MusicButton,True);
BtnSetCursor(MusicButton,LoadCursorFromFile(ExpandConstant('{tmp}\Cursor2.ani')));
mp3Name:=ExpandConstant('{tmp}\Music.mp3');
BASS_Init(-1,44100,0,0,0);
mp3Handle:=BASS_StreamCreateFile(FALSE,PAnsiChar(mp3Name),0,0,BASS_SAMPLE_LOOP);
BASS_Start;
BASS_ChannelPlay(mp3Handle,False);
end;
//************************************************ [Конец - Музыка] ***************************************************//
valyok666
12-03-2012, 20:55
by_gangster, Всё до простоты просто))подумай логику включи и поймешь!Программирование это не токо копипастой вставить и всё здесь надо думать)
by_gangster
12-03-2012, 21:25
valyok666, я же только учюсь программированию, так что пока я чайник в этом, и прошу помочь :cool:
Это разве программирование?)
Изза тебя, вора, пришлось пойти на эти ограничения. Тебе кстати, никто не разрешал этот скрипт у себя выкладывать. »
Из-за меня тоже... Прошу прощения.
Добрый день. У меня возникла странная ошибка.
После вызова ф-ии из dll перестает работать кнопка "Back". Если в скрипте закоментировать этот вызов - вся навигация между страницами мастера работает правильно. Есть какие-то идеи в чем может быть проблема?
R.i.m.s.k.y.
13-03-2012, 16:35
al70, может unloadDLL не хватает после вызова функции из dll?
rasim933
13-03-2012, 22:41
Здравствуйте программисты! Скажите пожалста, можно ли прописать скрипт, который полсе закрытия установочного файла, откроет какой либо файл (например: *.docx, *.exe, *.rar, *папку, *mp3.)?
R.i.m.s.k.y.
13-03-2012, 23:27
rasim933, в секции Run указываешь файл например: *.docx, *.exe, *.rar, *папку, *mp3. и флаг shellexec
rasim933
13-03-2012, 23:31
Я извиняюсь, но можно подробней??
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.