Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 8]
Dodakaedr
23-10-2015, 14:49
Куда мне добавить ваш код ? »
Вот вам функция, добавляйте куда хотите[setup]
appname=app
appvername=1.0
DefaultDirName={code:USERPROFILE}\uTorrent
[code]
const
CSIDL_PROFILE = $28;
function UserProfile(s:string): string;
begin
s := GetShellFolderByCSIDL(CSIDL_PROFILE, false);
Result := s;
end;
Painkiller
23-10-2015, 14:53
Вот вам функция, добавляйте куда хотите »
всё равно путь C:\Users\Mazahaka_lab\AppData\Roaming\uTorrent =((
Dodakaedr
23-10-2015, 14:57
всё равно путь »
Исключено. Вы хоть примеры компилируете у себя? http://i33.fastpic.ru/big/2015/1023/15/5e503f0c720b41fa97d5d412fefaf615.png
Painkiller
23-10-2015, 15:04
Исключено. Вы хоть примеры компилируете у себя? »
ваш пример работает , а вот мой увы нет =( Ладно , как всегда разберусь сам
Dodakaedr
23-10-2015, 15:06
ваш пример работает , а вот мой увы нет »
Интересно, что там может не работать?!
Batistas
24-10-2015, 11:06
Всем привет. Решил установить ISWin7 в свой скрипт, но не тут-то было:
http://s020.radikal.ru/i711/1510/56/d1bd445d4c3a.png
Как видно, в прозрачную область не попали: ссылка на сайт, кастомная кнопка и BeveledLabel. Может кто подсказать, как это исправить? Код ниже. Заранее спасибо!
#define MyAppURL "http://yandex.ru/"
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
UninstallDisplayIcon={app}\MyProg.exe
Compression=lzma
SolidCompression=yes
OutputDir=.
[Messages]
BeveledLabel=2015 © тест
[CustomMessages]
russian.InfoButton=Автор...
russian.InfoButtonText=© 2015. тест
russian.Community=Посетить наш сайт
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Files]
Source: iswin7.dll; Flags: dontcopy
[_Code_]
var
InfoButton: TNewButton;
PublisherLink: TNewStaticText;
/////////////////////////////////////////////
procedure InfoButtonClick(Sender: TObject);
begin
MsgBox(ExpandConstant('{cm:InfoButtonText}'), mbInformation, MB_OK);
end;
/////////////////////////////////////////////
procedure PublisherLinkClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', ExpandConstant('{#MyAppURL}'), '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;
/////////////////////////////////////////////
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 RedesignWizardForm;
begin
InfoButton := TNewButton.Create(WizardForm);
with InfoButton do
begin
Parent := WizardForm;
Caption := ExpandConstant('{cm:InfoButton}');
SetBounds(ScaleX(10), ScaleY(327), ScaleX(75), ScaleY(23));
OnClick := @InfoButtonClick;
end;
PublisherLink := TNewStaticText.Create(WizardForm);
with PublisherLink do
begin
Parent := WizardForm;
SetBounds(ScaleX(95), ScaleY(333), ScaleX(75), ScaleY(23));
Caption := ExpandConstant('{#MyAppURL}');
Cursor := crHand;
Font.Color := clBlue;
ShowHint := True;
Hint := ExpandConstant('{cm:Community}');
OnClick := @PublisherLinkClick;
end;
end;
/////////////////////////////////////////////
procedure InitializeWizard();
begin
RedesignWizardForm;
// Необходимо добавлять каждую кнопку расположенную на стекле
// до инициализации стекла для того что бы не было дыр ))
iswin7_add_button(WizardForm.BackButton.Handle);
iswin7_add_button(WizardForm.NextButton.Handle);
iswin7_add_button(WizardForm.CancelButton.Handle);
// Параметр True не трогать он для htuos ))
iswin7_add_glass(WizardForm.Handle, 0, 0, 0, 47, True);
end;
procedure DeinitializeSetup();
begin
iswin7_free;
end;
kotyarko@fb
24-10-2015, 11:22
Как видно, в прозрачную область не попали: ссылка на сайт »
Вместо TNewStaticText создайте TLabel, у него есть свойство Transparent, используйте его.
Как видно, в прозрачную область не попали: кастомная кнопка »
iswin7_add_button(InfoButton.Handle);
Как видно, в прозрачную область не попали: BeveledLabel » Здесь то же, что и со ссылкой на сайт. BeveledLabel - это TNewStaticText, создайте на его месте TLabel, а дальше всё то же самое, что я описал выше.
Batistas
24-10-2015, 11:44
Цитата Batistas:
Как видно, в прозрачную область не попали: ссылка на сайт »
Вместо TNewStaticText создайте TLabel, у него есть свойство Transparent, используйте его. »
Если не сложно, скиньте код. У меня при добавлении PublisherLink: TLabel; ссылка становится невидимой.
kotyarko@fb
24-10-2015, 18:36
У меня при добавлении PublisherLink: TLabel; ссылка становится невидимой. »
Да, есть такое. Видимо, библиотека просто не рассчитана.
habib2302
24-10-2015, 22:12
Как определить на какой диск была установлена программа и внести в реестр?
http://savepic.ru/8111499.png (http://savepic.ru/8110475.png)
P.S. все нашел код.
vadjliss
25-10-2015, 14:13
парни как прописать ярлыки имеется программа на рабочий стол надо 4 ярлыка вывести как сделать?
vadjliss, Как это читать? Знаки препинания где?
парни как прописать ярлыки имеется программа на рабочий стол надо 4 ярлыка вывести как сделать? »[Icons]
Name: {userdesktop}\Ярлык к Программе 1; Filename: {app}\MyProg.exe
Name: {userdesktop}\Ярлык к Программе 2; Filename: {app}\MyProg.exe
Name: {userdesktop}\Ярлык к Программе 3; Filename: {app}\MyProg.exe
vadjliss
25-10-2015, 16:06
:clapping: Nordek
спасибо!
всё работает
Batistas
25-10-2015, 22:34
Всем привет! Таки доделываю скрипт для сборки CS:S, но столкнулся с одним нюансом при установке на Windows 8:
http://i057.radikal.ru/1510/15/bf2484c5c237.png
Этот файл запускается после завершения установки
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
Если запускать от имени администратора, то эта ошибка исчезает. Вопрос: можно ли посредством манипуляций в скрипте это исправить?
_________________________________
Второй глюк. Ниже код создания ярлыков:
[Icons]
Name: "{group}\Запустить {#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\Сайт сообщества"; Filename: "{#MyAppURL}"
Name: "{group}\Удалить сборку"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon
При первой установке на Windows 8 не появляется ярлык удалить в метро-меню. Во время повторной установки в ту же папку - появляется. Парадокс...
palsn2000
27-10-2015, 19:16
Здравствуйте уважаемые форумчане.
У меня такой вопрос - имеется кусок скрипта со слайдшоу для препроцессора:
[Files]
; Файлы заставки
Source: SlideShou\*; DestDir: {tmp}; Flags: dontcopy deleteafterinstall noencryption nocompression;
Source: J:\Soft\ISS\Resource\isgsg_0.6.0.69.dll; DestDir: {tmp}; DestName: isgsg.dll; Flags: dontcopy deleteafterinstall noencryption nocompression overwritereadonly
[-Code-]
//Слайд шоу
const
Indent=25;
function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boo lean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload';
procedure ssAddImage(FileName:PAnsiChar); external 'ssAddImage@files:isgsg.dll stdcall delayload';
procedure ssStartShow; external 'ssStartShow@files:isgsg.dll stdcall delayload';
procedure ssStopShow; external 'ssStopShow@files:isgsg.dll stdcall delayload';
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';
procedure InitializeWizard4();
begin
ssInitialize(GetWindowLong(MainForm.Handle,-8),8,False,1,$FF000000);
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep=ssInstall then begin
ExtractTemporaryFile('Screen (1).jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Screen (1).jpg');
ExtractTemporaryFile('Screen (2).jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Screen (2).jpg');
ExtractTemporaryFile('Screen (3).jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Screen (3).jpg');
ExtractTemporaryFile('Screen (4).jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Screen (4).jpg');
ExtractTemporaryFile('Screen (5).jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Screen (5).jpg');
ExtractTemporaryFile('Screen (6).jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Screen (6).jpg');
ExtractTemporaryFile('Screen (7).jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Screen (7).jpg');
ExtractTemporaryFile('Screen (8).jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Screen (8).jpg');
ExtractTemporaryFile('Screen (9).jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Screen (9).jpg');
ExtractTemporaryFile('Screen (10).jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Screen (10).jpg');
ExtractTemporaryFile('Screen (11).jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Screen (11).jpg');
ExtractTemporaryFile('Screen (12).jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Screen (12).jpg');
ExtractTemporaryFile('Screen (13).jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Screen (13).jpg');
ExtractTemporaryFile('Screen (14).jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Screen (14).jpg');
ExtractTemporaryFile('Screen (15).jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Screen (15).jpg');
ExtractTemporaryFile('Screen (16).jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Screen (16).jpg');
ssStartShow;
end;
if CurStep=ssPostInstall then ssStopShow;
end;
procedure CurPageChanged2(CurPageID: Integer);
begin
if CurPageID=wpInstalling then begin
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);
WizardForm.Left:=ScaleX(GetSystemMetrics(0)-WizardForm.Width-Indent);
WizardForm.Top:=ScaleY(GetSystemMetrics(1)-WizardForm.Height-Indent);
WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(370);
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(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(40);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(154);
WizardForm.CancelButton.Top:=ScaleY(80);
end;
if (CurPageID=wpFinished) or (CurPageID=wpInfoAfter) then begin
if WizardForm.Width<>502 then begin
WizardForm.Visible:=False;
WizardForm.Width:=ScaleX(502);
WizardForm.Height:=ScaleY(392);
WizardForm.Left:=(GetSystemMetrics(0)-WizardForm.Width) div 2;
WizardForm.Top:=(GetSystemMetrics(1)-WizardForm.Height) div 2;
WizardForm.MainPanel.Visible:=True;
WizardForm.Bevel1.Visible:=True;
WizardForm.InnerNotebook.Left:=ScaleX(40);
WizardForm.InnerNotebook.Top:=ScaleY(72);
WizardForm.InnerNotebook.Width:=ScaleX(417);
WizardForm.Visible:=True;
end;
end;
end;
procedure DeinitializeSetup3();
begin
ssDeInitialize;
end;
Так вот можно ли каким-нибудь образом организовать автоматическое создание списка изображений (циклом или ещё как) в зависимости от количества файлов в папке, чтобы если
Source: SlideShou\* содержит 15 изображений то
ExtractTemporaryFile('Screen (1).jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Screen (1).jpg');
.......
ExtractTemporaryFile('Screen (15).jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Screen (15).jpg');
ssStartShow;
а если содержит 30 изображений то
ExtractTemporaryFile('Screen (1).jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Screen (1).jpg');
.......
ExtractTemporaryFile('Screen (30).jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Screen (30).jpg');
ssStartShow;
El Sanchez
28-10-2015, 19:56
Так вот можно ли каким-нибудь образом организовать автоматическое создание списка изображений (циклом или ещё как) в зависимости от количества файлов в папке »
palsn2000,
try
while True do
begin
ExtractTemporaryFile(Format('Screen (%d).jpg', [i + 1]));
ssAddImage(ExpandConstant(Format('{tmp}\Screen (%d).jpg', [i + 1])));
i := i + 1;
end;
except
{ no exception }
finally
if i > 0 then
ssStartShow;
end;
palsn2000
28-10-2015, 21:45
El Sanchez, Спасибо за пример, только вот, даже стыдно в этом признаваться, у меня проблема типа unknown identifier 'i' :blush:
когда указываю в константах i = 0; - ругается на строке i := i + 1;
когда в Var - ошибка с двоеточием.
kotyarko@fb
29-10-2015, 09:25
меня проблема типа unknown identifier 'i'
когда в Var - ошибка с двоеточием. »
Что значит "ошибка с двоеточием"? Скриншот бы привели.
Объявление переменной выглядит так (это вы должны знать чуть-ли не в первую очередь):
Var
I: Integer;
palsn2000
29-10-2015, 11:08
kotyarko@fb, Ошибка с двоеточием у меня была когда я в Var пытался занести i: 0; - потому, что при i: Integer; у меня выскакивает окошко с сообщением "Identifier expected." на строке procedure CurPageChanged2(CurPageID: Integer);
kotyarko@fb
29-10-2015, 12:51
Ошибка с двоеточием у меня была когда я в Var пытался занести i: 0; »
Конечно ошибка, здесь переменная так не объявляется.
потому, что при i: Integer; у меня выскакивает окошко с сообщением "Identifier expected." на строке procedure CurPageChanged2(CurPageID: Integer); »
Скрин, хотя бы?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.