Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 5]
Ещё одна небольшая проблема:
Нужно включить все вложенные папки, сделал вот так вот..
Source: "D:\GAMES\World of tanks\World_of_Tanks\res_mods\0.7.5\vehicles\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: Tankmodels
Но, при установке, инсталлятор распаковывает только подпапки, а саму папку нет.. что делать и как быть?
Johny777
13-09-2012, 19:42
Добрые люди!
вот намутил код
при нажатии на айтем всплывающего контекстного меню его название копируется в соответствующий эдит
но иногда нужно приписать соответствующее число (как с текстом +fps_max <число>)
для этого выполняется функция Param_Num
не знаю как не допускать ввод в этот самый эдит букв например через в OnKeyPress). Там могут быть только целые числа (иногда любое чисто кроме нуля а иногда именно что 0 или 1 или 2 или 3)
в общем возможности функции пока что хромают :(
вот код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[ code]
function GetSystemMenu(hWnd: HWND; bRevert: BOOL): LongWord; external 'GetSystemMenu@user32.dll stdcall';
function DeleteMenu(hMenu: LongWord; uPosition, uFlags: UINT): BOOL; external 'DeleteMenu@user32.dll stdcall';
function GetClassLong(Wnd: HWnd; Index: Integer): Longint; external 'GetClassLongA@user32.dll stdcall';
function SetClassLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetClassLongA@user32.dll stdcall';
var
Param_Edit: TEdit;
Param_Button, OK_Button: TButton;
Param_PopMenu: TPopupMenu;
procedure Num_Edit_OnChange(Sender:TObject);
begin
OK_Button.Enabled := TEdit(Sender).Text <> '';
end;
function Param_Num(Param, Info_Text: String): String;
var
NumForm: TForm;
Num_Edit: TEdit;
begin
Result := '';
NumForm := TForm.Create(nil);
with NumForm do
begin
ClientWidth := ScaleX(200);
ClientHeight := ScaleY(90);
Position := poScreenCenter;
DeleteMenu(GetSystemMenu(NumForm.Handle,False), $F060,0); /// сделать кнопку "закрыть" неактивной
SetClassLong(NumForm.Handle, -26, GetClassLong(NumForm.Handle, -26) or $200); /// блокировка комбинации alt + f4
with TLabel.Create(nil) do
begin
SetBounds(ScaleX(10), ScaleY(5), ScaleX(207), ScaleY(16));
Caption := Info_Text;
Parent := NumForm;
Font.Size := 8;
end;
Num_Edit := TNewEdit.Create(nil);
with Num_Edit do
begin
Parent := NumForm;
SetBounds(ScaleX(10), ScaleY(30), ScaleX(145), ScaleY(21));
Text := '';
OnChange := @Num_Edit_OnChange;
end;
OK_Button := TButton.Create(nil)
with OK_Button do // ok
begin
SetBounds(NumForm.ClientWidth - ScaleX(80), ScaleY(60), ScaleX(70), ScaleX(23));
Parent := NumForm;
Caption := ExpandConstant(SetupMessage(msgButtonOK));
ModalResult := mrOk;
Enabled := False;
end;
if ShowModal = mrOk then
begin
Delete(Param,Pos('<число>',Param),Length(Param));
Result := Param + ' ' + Num_Edit.Text;
end;
Free;
end;
end;
procedure Paste(Sender:TObject);
begin
case TMenuItem(Sender).Caption of
'-console': if Param_Edit.Text = '' then Param_Edit.Text := TMenuItem(Sender).Caption else Param_Edit.Text := Param_Edit.Text + ' ' + TMenuItem(Sender).Caption;
'+fps_max <число>': if Param_Edit.Text = '' then Param_Edit.Text := + Param_Num(TMenuItem(Sender).Caption, 'сколько кадров в секунду?') else Param_Edit.Text := Param_Edit.Text + ' ' + Param_Num(TMenuItem(Sender).Caption, 'сколько кадров в секунду?');
'-dev': if Param_Edit.Text = '' then Param_Edit.Text := TMenuItem(Sender).Caption else Param_Edit.Text := Param_Edit.Text + ' ' + TMenuItem(Sender).Caption;
'-gl': if Param_Edit.Text = '' then Param_Edit.Text := TMenuItem(Sender).Caption else Param_Edit.Text := Param_Edit.Text + ' ' + TMenuItem(Sender).Caption;
end;
end;
procedure Param_Button_OnClick(Sender:TObject);
var
pt: TPoint;
begin
pt := Param_Button.ClientToScreen(pt);
Param_PopMenu.Popup(pt.x, pt.y);
end;
procedure InitializeWizard();
begin
WizardForm.OuterNotebook.Hide;
Param_Edit := TNewEdit.Create(nil);
with Param_Edit do
begin
Parent := WizardForm;
SetBounds(ScaleX(100), ScaleY(100), ScaleX(145), ScaleY(21));
Text := '';
end;
Param_Button := TButton.Create(nil);
with Param_Button do
begin
Parent := WizardForm;
SetBounds(Param_Edit.Left + Param_Edit.Width + ScaleX(5), Param_Edit.Top, ScaleX(15), Param_Edit.Height);
Caption := '!';
Cursor := crHand;
OnClick := @Param_Button_OnClick;
end;
Param_PopMenu := NewPopupMenu(WizardForm, 'MyPopupMenu', paLeft, True, [
NewItem('-console', 0, False, True, @Paste, 11, ''),
NewLine,
NewItem('+fps_max <число>', 0, False, True, @Paste, 12, ''),
NewItem('-dev', 0, False, True, @Paste, 13, ''),
NewItem('-gl', 0, False, True, @Paste, 14, '')
]);
end;
==================================================================================================== =======================================
HElmo,
может так? (подчеркнул правку)
Source: "D:\GAMES\World of tanks\World_of_Tanks\res_mods\0.7.5\vehicles\*"; DestDir: "{app}\vehicles"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: Tankmodels
==================================================================================================== =======================================
MogilShik2007,
путём создания кастомнго чекбокса
(тк с чеклистбоксами я ещё, образно говоря, не бухал :) )
#define MyAppExeName "Stronghold.exe"
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[ Code]
#include "TextModule.iss"
var
Run_CheckBox: TNewCheckBox;
Run_Label: TLabelString;
procedure Color_Label_OnClick(Sender:TObject);
begin
if not Run_CheckBox.Checked then
begin
Run_CheckBox.Checked := True;
Exit;
end else
begin
Run_CheckBox.Checked := False;
Exit;
end
end;
procedure InitializeWizard();
var
w, s, h: Integer;
begin
Run_CheckBox := TNewCheckBox.Create(nil);
with Run_CheckBox do
begin
Parent := WizardForm.FinishedPage;
SetBounds(ScaleX(224),ScaleY(248),ScaleX(17),ScaleY(17))
end;
w := ScaleX(100); /// ширина
s := Run_CheckBox.Top + ScaleY(2); /// сверху
h := Run_CheckBox.Left + ScaleX(17); /// слева
Run_Label := WriteText('Запустить Игру',h,s,w,WizardForm.FinishedPage);
with TLabel.Create(nil) do
begin
SetBounds(h, s, w, ScaleY(17));
AutoSize := False;
OnClick := @Color_Label_OnClick;
Parent := WizardForm.FinishedPage;
Transparent := True;
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
var
ErrorCode: Integer;
begin
if (CurStep = ssDone) and (Run_CheckBox.Checked = True) then Exec(ExpandConstant('{app}\{#MyAppExeName}'), '', ExpandConstant('{app}'), SW_HIDE, ewNoWait, ErrorCode);
end;
==================================================================================================== ======================================
SatHan,
не думаю что функция рассчитана на протягивание ярлыка от ярлыка (как бы бредово это не звучало)
те в экзешнике может и есть инфа благодаря которой мы имеем правильное назвния а в ярлыке нет
Если код каким то образом находит имя и приписывает его к ярлыку - это конечно не понятно от куда берёт. А вот как его задать на своё (Например я хочу чтоб hl.exe назывался не Half-Life а Half-Life-Моя Игра). Как это сделать? »
Ты в этом коде итак задал имя ярлыка:Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon
Напиши вместо: {#MyAppName} что хочешь и будет тебе счастье.
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Half-Life - Моя Игра"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon
не думаю что функция рассчитана на протягивание ярлыка от ярлыка (как бы бредово это не звучало)
те в экзешнике может и есть инфа благодаря которой мы имеем правильное назвния а в ярлыке нет »чем и как он её берёт, какой функцией или процедурой и можно ли задать в ней в качестве имени ярлыка препроцессор?
Ты в этом коде итак задал имя ярлык »причём здесь Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon? её я здесь написал для примера. интересует для windows 7. как в качестве имя ярлыка на панели задач указать в коде препроцессор {#MyAppName}?
Напиши вместо: {#MyAppName} что хочешь и будет тебе счастье. »с препроцессором как раз проблем нет - там можно любое название написать. даже "Half-Life - Моя Игра". его удобно использовать во многих случаях а не только для названий.
Я её тебе тоже для примера написал...
#define NameQuickLaunch "Half-Life - Моя Игра"
...Microsoft\Internet Explorer\Quick Launch\{#NameQuickLaunch}...
El Sanchez
14-09-2012, 13:13
Нашел косяк в скрипте Закрепления на панели задач »
Aleksoid1978, в чем именно? Скрипт закрепления ярлыка на панели задач - это порт vbs-сценария, представленного вами (кстати, у вас в примере не используется самое главное - переменная strVerb) и гуляющего в интернете.
если в х64 битной системе и файл расположен по пути "C:\Program Files\..." - то значок программы закреплаяется, но если запустить программу - создается еще один значок, уже запущенной задачи на панели задач, если закрепить из пути "C:\Program Files (x86)\..." - то все ок. Разрядность программы при этом не имеет значения. »
Aleksoid1978, это верно. Гугл выдает, что эта проблема у многих программ возникает. Думаю, что система при вызове кода закрепления ярлыка программы из Program Files, system32 (т.е. для директорий, предназначенных для 64-битных файлов) из 32-битной программы, коей является Inno, тихо редиректит 64-битные директории на 32-битные. Да, созданный ярлык ссылается куда надо, но похоже имеет разные AppID с иконкой запущенного того же самого приложения, поэтому система и не может их сгруппировать. Как-то так, я могу и ошибаться, точнее программисты скажут, которые вплотную работают с API таскбара.
Все получилось, кроме одного - при наличии на панели уже такого ярлыка - создается ярлык типа MPC-BE(2).lnk; »
Aleksoid1978, кстати да, я не учел наличие ярлыка. Исправление:
const
LOAD_LIBRARY_AS_DATAFILE = $2;
#define A = (Defined UNICODE) ? "W" : "A"
function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';
/////////////////////////////////////////////////////////////////////////
function PinToTaskbar(const szFilename: String; IsPin: Boolean): Boolean;
//szFilename: full path to executable file
//IsPin: False - unpin to TaskBar, True - pin from TaskBar
var
hInst: THandle;
buf: array [0..255] of Char;
i, res: Integer;
strLnk, strVerb: String;
objShell, colVerbs: Variant;
begin
Result := False;
if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit;
if IsPin then
begin
if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
begin
while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
end;
res := 5386;
end else res := 5387;
hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
if hInst <> 0 then
try
for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
try
objShell := CreateOleObject('Shell.Application');
colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
begin
colVerbs.Item[i].DoIt;
Result := True;
Break;
end;
except
Exit;
end;
finally
FreeDLL(hInst);
end;
end;
не знаю как не допускать ввод в этот самый эдит букв например через в OnKeyPress »
Johny777, напиши в обработчике OnKeyPress:
if Pos(Key, '0123456789'#8) = 0 then Key := #0;
P.S. Но копипастой все равно можно будет вставить что угодно. :(
Gnom_aka_Lexander
14-09-2012, 13:28
если в х64 битной системе и файл расположен по пути "C:\Program Files\..." - то значок программы закреплаяется, но если запустить программу - создается еще один значок, »
Это нормально. Даже х64 приложения работают с эмуляцией х86. До сих пор. И это не более, чем косяк разработчиков. Обратите внимание, что далеко не все приложения так себя ведут. Поэтому способ добавления значка тут совершенно ни при чем, и работает он вполне корректно. а второй значек - при запуске приложения х64 - создается параллельный поток, в котором запускается тоже самое приложение, но в среде эмуляции х32 ( то, как я это вижу ), отсюда и появление второго значка - процесс-то уже другой.
Поправьте меня, если я не прав.
Ivan_009
14-09-2012, 21:47
Как сделать так чтобы если папка не пустая в которую устанавливается игра то выводилось сообщение типа:
Папка установки не пустая пожалуйста выберите другую!
R.i.m.s.k.y.
14-09-2012, 22:09
Ivan_009, [Setup]
DirExistsWarning=yes
MogilShik2007
15-09-2012, 10:20
Помогите со скриптом, чет с чекбоксом не получается:
не отображается текст рядом с чекбоксом и не видит .ехе
Ivan_009
15-09-2012, 10:42
Как сделать такие края через ботву...Если можно пример...Заранее спасибо...
Как сделать такие края в инсталляторе без ботвы..... »Как сделать такие края через ботву.. »Чё, издеваешься? http://forum.oszone.net/post-1972601.html#post1972601 Какая фиг разница - с ботвой, без ботвы...
Ivan_009
15-09-2012, 12:19
nik1967, мне нужно чтобы с прозрачностью... :yes:
Ivan_009
15-09-2012, 12:47
Как текструировать кнопку при нажатии на которую появлялся логотип png... :search:
помогите дописать пожалуйста действие к нопкам Ok и Back
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Code]
var
BrowseDialogTitle,BrowseDialogTitle1,BrowseDialogLabel:Tlabel;
DirBrowseSetting: TButton;
DirBrowseSettingPage, SetParameters: Boolean;
Edit: TNewEdit;
DirTreeView : TFolderTreeView;
Browse, OK, NO, back, new : TButton;
MainPanelBig1,MainPanelBig2: TPanel;
MainPanelBigBevel,BevelForm,BevelForm1,BevelForm2: TBevel;
procedure Okclick(Sender: TObject);
begin
//WizardForm.Enabled:=True;
WizardForm.DirEdit.Text:=AddBackslash(Edit.Text);
end;
procedure BackClick(Sender: TObject);
begin
Edit.Text:=AddBackslash(ExpandConstant('{pf}\')+'My Application');
DirTreeView.ChangeDirectory(AddBackslash(ExpandConstant('{pf}\')), True);
end;
procedure NOclick(Sender: TObject);
begin
WizardForm.Enabled:=true;
end;
procedure DirFolderChange(Sender: TObject);
Begin
Edit.Text:=AddBackslash(DirTreeView.Directory) + 'My Application';
end;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
begin
WizardForm.Enabled:=true;
end;
procedure DirBrowseSettingOnClick(Sender: TObject);
begin
if DirBrowseSettingPage = False then begin
DirBrowseSetting.Hide;
WizardForm.NextButton.Hide;
BrowseDialogTitle := TLabel.Create(WizardForm);
BrowseDialogTitle.SetBounds(ScaleX(19),ScaleY(5),ScaleX(135),ScaleY(16));
BrowseDialogTitle.Font.Style:=[fsBold];
BrowseDialogTitle.Font.Size:= 10;
BrowseDialogTitle.Transparent := True;
BrowseDialogTitle.Parent := WizardForm;
BrowseDialogTitle.Caption := 'Обзор папок';
BrowseDialogTitle.Font.Name := 'Tahoma';
BrowseDialogTitle.Font.Height := -13;
BrowseDialogTitle1 := TLabel.Create(WizardForm);
BrowseDialogTitle1.SetBounds(ScaleX(30),ScaleY(25),ScaleX(365),ScaleY(13));
BrowseDialogTitle1.Transparent := True;
BrowseDialogTitle1.Parent := WizardForm;
BrowseDialogTitle1.Caption := 'В какую папку Вы хотите установить игру?';
MainPanelBig1 := TPanel.Create(WizardForm);
MainPanelBig1.Parent := WizardForm;
MainPanelBig1.SetBounds(ScaleX(20),ScaleY(69),ScaleX(541),ScaleY(261));
MainPanelBig1.Caption := '';
MainPanelBig2 := TPanel.Create(WizardForm);
MainPanelBig2.Parent := MainPanelBig1;
MainPanelBig2.SetBounds(ScaleX(10),ScaleY(11),ScaleX(520),ScaleY(239));
MainPanelBig2.BevelOuter := bvLowered;
MainPanelBig2.Caption := '';
MainPanelBigBevel := TBevel.Create(WizardForm);
MainPanelBigBevel.Style := bsRaised;
MainPanelBigBevel.Parent := MainPanelBig2;
MainPanelBigBevel.SetBounds(ScaleX(9),ScaleY(10),ScaleX(500),ScaleY(220));
Edit:= TNewEdit.Create(WizardForm);
Edit.SetBounds(ScaleX(20),ScaleY(20),ScaleX(480),ScaleY(21));
Edit.Text:=WizardForm.DirEdit.text;
Edit.Parent:= MainPanelBig2;
Edit.Font.Color:=clBlack;
DirTreeView:= TFolderTreeView.Create(WizardForm);
DirTreeView.SetBounds(ScaleX(20),ScaleY(50),ScaleX(480),ScaleY(170));
DirTreeView.OnChange:=@DirFolderChange;
DirTreeView.Parent:=MainPanelBig2;
DirTreeView.ChangeDirectory(AddBackslash(WizardForm.dirEdit.Text), true);
Edit.Text:=(DirTreeView.Directory);
BrowseDialogLabel := TLabel.Create(WizardForm);
BrowseDialogLabel.SetBounds(ScaleX(130),ScaleY(335),ScaleX(365),ScaleY(13));
BrowseDialogLabel.Transparent := True;
BrowseDialogLabel.Parent := WizardForm;
BrowseDialogLabel.Caption := 'Выберите папку из списка и нажмите «OK».';
Back:=tbutton.create(WizardForm)
with back do begin
SetBounds(ScaleX(16),ScaleY(351),ScaleX(100),ScaleY(30));
parent:=WizardForm;
Caption:='Сброс';
onclick:=@BackClick;
end;
Ok:=tbutton.create(WizardForm)
with ok do begin
SetBounds(ScaleX(126),ScaleY(351),ScaleX(100),ScaleY(30));
parent:=WizardForm;
Caption:='OK';
onclick:=@OKclick;
end;
No:=tbutton.create(WizardForm)
with no do begin
SetBounds(ScaleX(236),ScaleY(351),ScaleX(100),ScaleY(30));
parent:=WizardForm;
Caption:='Отмена';
onclick:=@NOclick;
end;
DirBrowseSettingPage:= True;
end else begin
BrowseDialogTitle.Hide;
BrowseDialogTitle1.Hide;
BrowseDialogLabel.Hide;
MainPanelBig1.Hide;
MainPanelBig2.Hide;
MainPanelBigBevel.Hide;
DirBrowseSettingPage:= False;
SetParameters:= True;
DirBrowseSetting.Caption:= 'Обзор...';
end;
end;
procedure InitializeWizard();
begin
WizardForm.ClientWidth:=ScaleX(580);
WizardForm.ClientHeight:=ScaleY(410);
WizardForm.Center;
WizardForm.OuterNotebook.Hide;
WizardForm.InnerNotebook.Hide;
WizardForm.Color := clMenu;
WizardForm.NextButton.SetBounds(ScaleX(460),ScaleY(374),ScaleX(110),ScaleY(30));
WizardForm.CancelButton.SetBounds(ScaleX(487),ScaleY(500),ScaleX(110),ScaleY(30));
WizardForm.BackButton.SetBounds(ScaleX(344),ScaleY(374),ScaleX(110),ScaleY(30));
WizardForm.Bevel.SetBounds(ScaleX(0),ScaleY(365),ScaleX(580),ScaleY(2));
WizardForm.Bevel.Parent := WizardForm;
WizardForm.Bevel.BringToFront;
WizardForm.Bevel1.SetBounds(ScaleX(0),ScaleY(47),ScaleX(580),ScaleY(2));
WizardForm.Bevel1.Parent := WizardForm;
WizardForm.Bevel1.BringToFront;
DirBrowseSetting := TNewButton.Create(WizardForm);
with DirBrowseSetting do
begin
Name := 'DirBrowseSetting';
Parent := WizardForm;
SetBounds(ScaleX(100),ScaleY(375),ScaleX(110),ScaleY(30));
Caption := 'Настройки';
OnClick:= @DirBrowseSettingOnClick;
end;
end;
vint56, зачем усложнять? Проще сделать через дополнительную страницу.
P.S. Закос решил сделать под наш инсталл?
Почему при запуске инсталятора он создает две папки Mods, как мне надо и Modsscrips, в которую распаковывает эту папку. Почему так?
Source: "D:\GAMES\World of tanks\World_of_Tanks\res_mods\0.7.5\system\*"; DestDir: "{app}\system"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: Skybox
MogilShik2007
15-09-2012, 18:50
Johny777, твой предыдущий скрипт выдает ошибку вместе с моим(((
Подскажите пожалуйста. как поменять скорость выкатки/закатки окна побыстрее? код от сюда (http://forum.oszone.net/post-1917570-2069.html)
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
[#code]
var
SettingPanel : TPanel;
Flag : boolean;
Timer : LongWord;
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';
procedure Timer1;
begin
if SettingPanel.Top < 0 then SettingPanel.Top := SettingPanel.Top + ScaleY(3);
if SettingPanel.Top = 0 then KillTimer(WizardForm.Handle, Timer);
end;
procedure Timer2;
begin
if SettingPanel.Top > -315 then SettingPanel.Top := SettingPanel.Top - ScaleY(3);
if SettingPanel.Top = -315 then KillTimer(WizardForm.Handle, Timer);
end;
procedure HideShow(Sender: TObject);
begin
KillTimer(WizardForm.Handle, Timer);
case Flag of
True :
begin
Timer := SetTimer(WizardForm.Handle, 1, 5 , CallbackAddr('Timer2'));
TButton(Sender).Caption:='Show';
end;
False :
begin
Timer := SetTimer(WizardForm.Handle, 1, 5 , CallbackAddr('Timer1'));
TButton(Sender).Caption:='Hide';
end;
end;
Flag:= not Flag;
end;
procedure InitializeWizard();
begin
Flag:= False;
SettingPanel := TPanel.Create(WizardForm);
with SettingPanel do
begin
Parent := WizardForm;
SetBounds(ScaleX(0),ScaleY(-315),ScaleX(497),ScaleY(313));
ParentBackground := False;
end;
with TButton.Create(WizardForm) do
begin
OnClick:= @HideShow;
SetBounds(ScaleX(40),ScaleY(327),ScaleX(75),ScaleY(25))
Caption:='Show';
Parent:= WizardForm;
end;
end;
теперь ни копипастой »проверил. копипастой вставляется и мышью и через клаву ctrl+v.
Johny777
16-09-2012, 16:12
SatHan,
как поменять скорость выкатки/закатки окна побыстрее? »
Timer := SetTimer(WizardForm.Handle, 1, 5 , CallbackAddr('Timer1'));
в таймере выполняется процедура Timer1
5 - частота обновления таймера (в миллисекундах (в 1 секунде 1000)). Иначе говоря выполнения указанной процедуры
в самой процедуре стоит
....панель.сверху := панель.свеху + 3 пикселя
SettingPanel.Top := SettingPanel.Top + ScaleY(3);
те мы каждые пять миллисекунд двигаем панель на 3 пикселя
MogilShik2007,
procedure CurStepChanged(CurStep: TSetupStep);
var
ErrorCode: Integer;
begin
если (этап установки = после нажатия на кнопку завершить) и (такой_чекбокс.отмечен) то Запустить(расшифровать константу(расположение экзешника)). парамеьров нет, рабочая папка, спрятать консольное окно, не ждать, Переменная в которую пишется код ошибки))
if (CurStep = ssDone) and (Run_CheckBox.Checked = True) then Exec(ExpandConstant('{app}\{#MyAppExeName}'), '', ExpandConstant('{app}'), SW_HIDE, ewNoWait, ErrorCode);
end;
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.