Показать полную графическую версию : [архив] Скрипты Inno Setup. Помощь и советы [часть 2]
STRAYKER
25-10-2010, 20:07
Весь скрипт ?
Та я сам незнаю в чем проблемма
1.Должно предложить содать папку в меню " ПУСК " оно не предлагает
2.Должно предложить содать ярлык --- тоже не предлагает
так что делать
Весь скрипт ?
Та я сам незнаю в чем проблемма
1.Должно предложить содать папку в меню " ПУСК " оно не предлагает
2.Должно предложить содать ярлык --- тоже не предлагает
так что делать
STRAYKER
25-10-2010, 20:24
У меня не создает ярліки и папку в пуск
хотя в скрипте прописано чтобі оно создало
Habetdin
есть скрипт [_Code]
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';
procedure InitializeWizard();
begin
//Выносим кнопку "Отмена" на передний план
WizardForm.CancelButton.BringToFront;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpInstalling then
begin
WizardForm.BorderStyle:=bsDialog;
WizardForm.MainPanel.Visible:=False;
WizardForm.Width:=ScaleX(320);
WizardForm.Height:=ScaleY(127);
WizardForm.InnerNotebook.Left:=ScaleX(7);
WizardForm.InnerNotebook.Top:=ScaleY(7);
WizardForm.InnerNotebook.Width:=ScaleX(300);
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(17);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(37);
WizardForm.ProgressGauge.Left:=ScaleX(0);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(122);
WizardForm.CancelButton.Top:=ScaleY(70);
WizardForm.Left:=GetSystemMetrics(16)-ScaleX(330);
WizardForm.Top:=GetSystemMetrics(17)-ScaleX(110);
end;
if CurPageID=wpFinished
then
begin
WizardForm.Width:=502;{Размер окна по горизонтали}
WizardForm.Height:=392;{Размер окна по вертикали}
WizardForm.Position:=poScreenCenter; {Возврат в исходное состояние}
end
end;
как наложить текстуру на кнопку отмены в этом скрипте с помошью этого [ code]
const
ButtonWidth = 80; //Указываем размер кнопок
ButtonHeight = 23;
bidBack = 0;
bidNext = 1;
bidCancel = 2;
bidDirBrowse = 3;
bidGroupBrowse = 4;
var
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;
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}\button.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:=23 //Указываем положение текста
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
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
ButtonLabel[bidBack].Left := (ButtonPanel[bidBack].Width / 2 - ButtonLabel[bidBack].Width / 2);
ButtonLabel[bidNext].Left := (ButtonPanel[bidNext].Width / 2 - ButtonLabel[bidNext].Width / 2);
ButtonLabel[bidCancel].Left := (ButtonPanel[bidCancel].Width / 2 - ButtonLabel[bidCancel].Width / 2);
ButtonLabel[bidDirBrowse].Left := (ButtonPanel[bidDirBrowse].Width / 2 - ButtonLabel[bidDirBrowse].Width / 2);
ButtonLabel[bidGroupBrowse].Left := (ButtonPanel[bidGroupBrowse].Width / 2 - ButtonLabel[bidGroupBrowse].Width / 2);
end;
procedure InitializeWizard();
begin
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('button.bmp')
LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;
если просто объединить то вот что выйдет
http://s001.youpic.su/pictures/1288026000/45b8f620590a88f7be3eb9cabe6b8181.pnghttp://s001.youpic.su/pictures/1288026000/a96ac9b8663240d843858cc83b2afb8b.pnghttp://s001.youpic.su/pictures/1288026000/a4ea43b50f19c1d321d159332b6b37da.pnghttp://s001.youpic.su/pictures/1288026000/bd9674c77bf2c14ed1d1e5f4d51759ca.png
здравствуйте я здесь новенький и хочу узнать как установить скрипт Need for Speed™ Undercover.iss v 2.2 (Final) и другие ???я умею делать простые репаки без всяких картинок и.т.д Но я хочу научиться делать такие как в этом скрипте который я указал выше !!! очень надеюсь на вашу помощь.
А в данном случае »
То есть , если я правильно понял для удаления раздела используется флаг uninsdeletekey
Для удаления параметров - флаг uninsdeletevalue
Но дело в том , что я ..
Пробовал ставить флаги uninsdeletekey, uninsdeletekeyifempty, uninsdeletevalue, комбинировал их - всё безрезультатно... »
Может ли влиять на удаление параметров реестра то , что при деинсталляции программы сразу не удаляются несколько файлов , которые задействованы системой/которые висят в процессах, а также зарегистрированные DLL-ки. А полностью удаляются эти файлы только после перезагрузки системы. Перезагрузку предлагает сама программа после отработки деинсталляции, поскольку в секции [Files]
для этих файлов указан флаг uninsrestartdelete .
И подскажите пожалуйста, как альтернативу, можно ли использовать такой вариант для удаления раздела реестра ?
[UninstallRun]
Filename: {sys}\cmd.exe; Parameters: /c Reg Delete "HKCU\Software\MyProg" /f; Flags: runhidden
kenny_danger
25-10-2010, 23:23
здравствуйте уважаемые пользователи
хочу задать вам такие вопросы
1----------------------------------------
допустим у меня в скрипте
DefaultDirName={pf}\Steam\steamapps\your_account\counter-strike source\
но вовремя установки при выборе путя куда устанавливать данную программу автоматом дописывается "counter-strike source"
как сделать так что это не дописывалось
2----------------------------------------
как сделать так чтобы после выбора пользователем определенной папки установки программы в ней удалялись определенные
файлы или папки перед копированием самой программы через инсталлятор
serg aka lain
25-10-2010, 23:49
Может ли влиять на удаление параметров реестра то , что при деинсталляции программы сразу не удаляются несколько файлов , которые задействованы системой/которые висят в процессах, а также зарегистрированные DLL-ки. А полностью удаляются эти файлы только после перезагрузки системы. Перезагрузку предлагает сама программа после отработки деинсталляции, поскольку в секции [Files]
для этих файлов указан флаг uninsrestartdelete . »
Возможно они и загружены(используются).
И подскажите пожалуйста, как альтернативу, можно ли использовать такой вариант для удаления раздела реестра ? »
Можно конечно, только имхо cmd нужно юзать тогда, когда стандартными средствами никак ...
Еще можно попытаться закрыть программу перед удалением.
Вот ещё вариант, в принципе тоже самое uninsdeletekey
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usDone then
RegDeleteKeyIncludingSubkeys(HKCU, 'Software\MyProg');
end;
kenny_danger
как сделать так что это не дописывалось »
[Setup]
AppendDefaultDirName=False
как сделать так чтобы после выбора пользователем определенной папки установки программы в ней удалялись определенные
файлы или папки перед копированием самой программы через инсталлятор »
[InstallDelete]
Type: files; Name: "{app}\File.txt"
Type: filesandordirs; Name: "{app}\Path";
serg aka lain, Благодарю, за предложенные варианты!
Еще можно попытаться закрыть программу перед удалением. »
Об этом я тоже думал, но не знаю как сделать стандартными средствами. Только через CMD.
Хотя , перед деинсталляцией программы пробовал все процессы вручную остановить и все-равно раздел реестра не удалялся.
serg aka lain
26-10-2010, 00:43
Хотя , перед деинсталляцией программы пробовал все процессы вручную остановить и все-равно раздел реестра не удалялся. »
Тогда через перезагрузку.
Вариант с RegDeleteKeyIncludingSubkeys(HKCU, 'Software\MyProg') помог?
Вариант с RegDeleteKeyIncludingSubkeys(HKCU, 'Software\MyProg') помог? »
Я не пробовал ещё. Нет возможности, поскольку я на работе.
Попробую - обязательно отпишусь.
З.Ы. Раз уж такое дело, не могли бы ещё написать код на случай , если это будет параметр реестра , а не раздел.
Здравствуйте это снова я мне так и не помогли с объединением скрипта !!! я сам начал подставлять как по обычной сборке , и когда начал комплирировать и вышла ошибка function BtnCreate(hParent:HWND; Left,Top,Width,Height:integer; FileName:PAnsiChar; ShadowWidth:integer; IsCheckBtn:boolean):HWND; external 'BtnCreate@{tmp}\botva2.dll stdcall delayload'; что это я не знаю ???
STRAYKER
26-10-2010, 13:18
когда добавляю скрипт с картинкой на весь инсталятор то оно не выносит ярлыков и не создаёт папку в пуск
А когда убираю скрипт с кодом на отоброжение картинок на всех страницах инстолятора оно работает нормально чо за трабл ???
THE GUILTY GOD
26-10-2010, 15:12
Помагите что это и как исправить.
Появились при написании кода на проценты
Habetdin
26-10-2010, 17:06
если просто объединить то вот что выйдет »
Прикрепил к сообщению..
[hr]THE GUILTY GOD, 1.jpg »
У вас дублируется процедура InitializeWizard(), нужно их объединить.
[hr]чо за трабл ??? »
Телепаты в отпуске :not-me:
Habetdin, спасиб большое, а еще как сделать чтоб окошко нельзя перемешать по экрану?
serg aka lain
26-10-2010, 18:49
если это будет параметр реестра , а не раздел. »
RegDeleteValue(HKCU, 'Software\MyProg', 'Name');
STRAYKER
26-10-2010, 19:34
Habetdin,
ПОМОГИТЕ
когда добавляю скрипт с картинкой на весь инсталятор то оно не выносит ярлыков и не создаёт папку в пуск
А когда убираю скрипт с кодом на отоброжение картинок на всех страницах инстолятора оно работает нормально чо за трабл ??? »
как сделать чтоб окошко нельзя перемешать по экрану? »
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[Code]
function GetSystemMenu(Wnd: HWND; bRevert: Boolean): HWND; external 'GetSystemMenu@user32.dll stdcall';
function RemoveMenu(hMenu: HWND; uPosition: Integer; uFlags: Longint): Boolean; external 'RemoveMenu@user32.dll stdcall';
procedure InitializeWizard();
begin
RemoveMenu(GetSystemMenu(WizardForm.Handle, False), $F010, 0);
end;
когда добавляю скрипт с картинкой на весь инсталятор то оно не выносит ярлыков и не создаёт папку в пуск
А когда убираю скрипт с кодом на отоброжение картинок на всех страницах инстолятора оно работает нормально чо за трабл ??? »
Посмотрите внимательно свой скрипт, видимо где-то происходит ошибка при добавлении кода с картинкой...
STRAYKER
26-10-2010, 20:38
Serega,
а можно я сюда скину его (скрипт) а вы посмотрите ???
Потомушто я в них неочинь хорошо шарю :sorry: :(
Одна надежна только на вас
Habetdin
26-10-2010, 20:46
а можно я сюда скину его (скрипт) а вы посмотрите ??? »
Не можно, а нужно :)
О чем писалось вчера:
Выложите проблемную часть скрипта »
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.