PDA

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 5]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 [38] 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

Johny777
29-08-2012, 16:17
Как текструировать DirEdit и GroupEdit через ботву »
нафиг тебе
сделай так

with WizardForm.DirEdit do
begin
BorderStyle := bsNone;
Color := clBtnFace;
end;

чтоб эдит сливался с окном (не было границ)
и картинку наложи

vint56
29-08-2012, 16:38
Ivan_009, вот пример
[Setup]
AppName=«Company of Heroes. Anthology»
AppVersion=1.5
DefaultDirName={pf}\Company of Heroes. Anthology
DefaultGroupName=Company of Heroes. Anthology


[Files]
Source: Files\botva2.dll; DestDir: {tmp}; Flags: dontcopy;
Source: Files\b2p.dll; DestDir: {tmp}; Flags: dontcopy;
Source: Files\Edit.png; DestDir: {tmp}; Flags: dontcopy;

[Icons]
Name: "{group}\«Company of Heroes. Anthology»"; Filename: "{app}\MyProg.exe"
Name: "{group}\{cm:UninstallProgram,«Company of Heroes. Anthology»}"; Filename: "{uninstallexe}"

[Code]
var
Edit,GroupEdit: Longint;
DirEditLabel, GroupEditLabel: TLabel;

#include "Modules\botva2.iss"

function InitializeSetup:boolean;
begin
if not FileExists(ExpandConstant('{tmp}\b2p.dll')) then ExtractTemporaryFile('b2p.dll');
if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
Result:=True;
end;

procedure DirChange(Sender: TObject);
begin
DirEditLabel.Caption:=MinimizePathName(WizardForm.DirEdit.Text, DirEditLabel.Font, DirEditLabel.Width);
end;

procedure GroupChange(Sender: TObject);
begin
GroupEditLabel.Caption := MinimizePathName(WizardForm.GroupEdit.Text, GroupEditLabel.Font, GroupEditLabel.Width);
end;

procedure InitializeWizard;
begin
Edit:=ImgLoad(WizardForm.SelectDirPage.Handle,ExpandConstant('{tmp}\Edit.png'),ScaleX(0), ScaleY(81),ScaleX(332),ScaleY(22),True,True);
GroupEdit:=ImgLoad(WizardForm.SelectProgramGroupPage.Handle,ExpandConstant('{tmp}\Edit.png'),ScaleX( 0), ScaleY(81),ScaleX(332),ScaleY(22),True,True);
ImgApplyChanges(WizardForm.SelectDirPage.Handle);
ImgApplyChanges(WizardForm.SelectProgramGroupPage.Handle);

DirEditLabel := TLabel.Create(WizardForm);
with DirEditLabel do begin
AutoSize:=False;
SetBounds(ScaleX(5), ScaleY(85), ScaleX(446), ScaleY(15));
WordWrap:= True;
ShowAccelChar := False;
Transparent:=True;
Font.Name:= 'Arial'
Font.Size:= 9;
Font.Color:=$000000;
Font.Style:=[fsBold];
Caption := MinimizePathName(WizardForm.DirEdit.Text, DirEditLabel.Font, DirEditLabel.Width);
Parent := WizardForm.SelectDirPage;
end;

GroupEditLabel := TLabel.Create(WizardForm);
with GroupEditLabel do begin
AutoSize:=False;
SetBounds(ScaleX(5), ScaleY(85), ScaleX(446), ScaleY(15));
WordWrap:= True;
ShowAccelChar := False;
Transparent:=True;
Font.Name:= 'Arial'
Font.Size:= 9;
Font.Color:=$000000;
Font.Style:=[fsBold];
Caption := MinimizePathName(WizardForm.GroupEdit.Text, GroupEditLabel.Font, GroupEditLabel.Width);
Parent := WizardForm.SelectProgramGroupPage;
end;
WizardForm.DirEdit.OnChange := @DirChange;
WizardForm.DirEdit.Text:= WizardForm.DirEdit.Text;
WizardForm.GroupEdit.OnChange := @GroupChange;
end;

procedure HideComponents;
begin
WizardForm.DirEdit.Hide;
WizardForm.GroupEdit.Hide;
DirEditLabel.Hide;
GroupEditLabel.Hide;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
HideComponents;
case CurPageID of
wpSelectDir:
begin
DirEditLabel.Show;
end;
wpSelectProgramGroup:
GroupEditLabel.Show;
end;
end;

procedure DeinitializeSetup();
begin
gdipShutdown;
end;

MogilShik2007
29-08-2012, 19:40
Привет, подскажите скрипт и что за .dll использовались на скринах:

http://s017.radikal.ru/i408/1208/01/fcbb1acb7ed7.jpg
http://s019.radikal.ru/i604/1208/ea/3cdfd35de576.jpg

И если можно поподробнее)))

alert30
29-08-2012, 20:06
MogilShik2007, набери в Google "ISDone" и ищи! Тысеача раз уже спросили!

Ivan_009
29-08-2012, 21:14
Привет, подскажите скрипт и что за .dll использовались на скринах: »
Лови

Johny777
30-08-2012, 11:09
El Sanchez,
можно пожалуйста пример загрузки скина из оперативки (тогда его не нужно копировать в директорию установки а оттуда в темп для деинсталятора и загрузка должна быть быстрее)?

и скажи можно ли пихать библиотеки в RawDataResource (если да то с примером пожалуйста для например той же ISSkin.dll)?
так не работает - procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@RawDataResource:skin stdcall setuponly';

в Example_RawDataResource.iss немного не то тк файл извлекается в конечном итоге в темп и грузится оттуда

al1511
30-08-2012, 13:38
Здравствуйте!
Я использую Stormlib.dll для упаковки игровых архивов.
У меня не получается использовать Callback с помощью функции SFileSetAddFileCallback.
Вот описание функции: http://www.zezula.net/en/mpq/stormlib/sfilesetaddfilecallback.html

Вылетает ошибка:
"Access violation at address xxxxxxxx. Write of address xxxxxxxx

Дебаггер указывает на SFileSetAddFileCallback (phMPQ, @AddFileCallback, 0);

Очень надеюсь на помощь, заранее спасибо!

Вот мой код:


var
phMPQ: THandle;

type
TCallback = function (pvUserData: Integer; dwBytesWritten:DWORD; dwTotalBytes: DWORD; bFinalCall: BOOL): PAnsiChar;

function SFileSetAddFileCallback(phMPQ: THandle; pfnAddFileCB: TCallback ; pvUserData: Integer): BOOL; external 'SFileSetAddFileCallback@files:StormLib.dll stdcall';


// Функция, которая должна вызываться dll-кой
function AddFileCallback (pvUserData: Integer; dwBytesWritten:DWORD; dwTotalBytes: DWORD; bFinalCall: BOOL): PAnsiChar;
begin

end;


//
procedure CurStepChanged(CurStep: TSetupStep);
begin
SFileSetAddFileCallback (phMPQ, @AddFileCallback, 0);
end;

MogilShik2007
30-08-2012, 17:10
MogilShik2007, набери в Google "ISDone" и ищи! Тысеача раз уже спросили! »

Мне нужен конкретный скрипт, как на скринах, а не сидеть и подбирать из нескольких десятков найденных в нете...

alert30
30-08-2012, 17:47
MogilShik2007, http://freearc.org/ru/InnoSetup.aspx

El Sanchez
30-08-2012, 18:50
можно пожалуйста пример загрузки скина из оперативки (тогда его не нужно копировать в директорию установки а оттуда в темп для деинсталятора и загрузка должна быть быстрее)?
и скажи можно ли пихать библиотеки в RawDataResource (если да то с примером пожалуйста для например той же ISSkin.dll)? »
Этот геморрой (http://www.rsdn.ru/article/baseserv/peloader.xml) не стоит свеч.

Я использую Stormlib.dll для упаковки игровых архивов.
У меня не получается использовать Callback с помощью функции SFileSetAddFileCallback. »
al1511,

var
phMPQ: THandle;

function SFileSetAddFileCallback(hMpq: THandle; pfnAddFileCB, pvUserData: Longint): BOOL; external 'SFileSetAddFileCallback@files:stormlib.dll stdcall';

procedure AddFileCallback(pvUserData: Longint; dwBytesWritten, dwTotalBytes: DWORD; bFinalCall: BOOL);
begin
//
end;

//
procedure CurStepChanged(CurStep: TSetupStep);
begin
SFileSetAddFileCallback (phMPQ, CallbackAddr('AddFileCallback'), 0);
end;

Gnom_aka_Lexander
30-08-2012, 19:14
Этот геморрой не стоит свеч. »
там немного другое, инно этого точно не умеет. попытки были - модификации своего исполняемого файла инно также не поддерживает. Да и загрузку длл из Stream инно тоже не может. посему, только RawDataResource и только предварительная распаковка на диск. Хотя, никто не запрещает плагин, который будет за инно грузить нужные функции из длл прямо из памяти, куда эту длл можно кинуть из ресурсов. У Инно, все-таки, великолепная расширяемость плагинами, плюс есть простые и понятные примеры в папке Inno Setup 5\Examples\MyDll

Ivan_009
30-08-2012, 19:24
Как на b2p сделать деинсталлятор как инсталлятор или это надо делать на botva2 подскажите пожалуйста...
На b2p не получается... :(

Gnom_aka_Lexander
30-08-2012, 19:30
Ivan_009, никак. тоесть, можно, конечно - загнать графику в те-же RawDataResource и переписать модуль для b2p. Могу занятся, если время будет. но скорей всего в ближайшее время его не будет - мне на сборку-то мою, и то пришлось соавтора приглашать...
P.S. И да, b2p - это всего лишь воспомогательный плагин для botva2, который подает botva2 картинки из памяти, не более, сами картинки грузит из botva2.

JIeBaH
30-08-2012, 20:30
Здравствуйте.
В общем, есть игра, которую можно модифицировать поместив в нужную папку файлы. Так вот, мне нужно создать инсталлятор, который распакует в папку указанную пользователем нужные файлы и папки. НО! Есть одна самая главная проблема, нужно чтобы при установке был выбор компонентов установки. Например, некие два файла это "Мод_1" следующие 3 файла "Мод_2" и нужно что бы пользователь ставил галочки, что ему нужно, а, что нет. Так вот, как это реализовать.
Заранее спасибо.

Gnom_aka_Lexander
30-08-2012, 20:47
Справка. Секция [Files] и ее связь с секцией [Components]
Приер из инсталлятора InnoUltra:

[Components]
Name: std; Description: {cm:Comp2Label}; Flags: exclusive; Types: custom compact full;
Name: std\a; Description: {cm:CompANLabel}; Flags: exclusive; Types: custom compact full;
Name: std\u; Description: {cm:CompULabel}; Flags: exclusive; Types: custom compact;
[Files]
Source: ANSI\ISCC.exe; DestDir: {app}; Components: std\a
Source: ANSI\ISCmplr.dll; DestDir: {app}; Components: std\a
Source: ANSI\ISPP.dll; DestDir: {app}; Components: std\a
Source: ANSI\Setup.e32; DestDir: {app}; Components: std\a
Source: ANSI\SetupLdr.e32; DestDir: {app}; Components: std\a

Source: ANSI\Compil32.exe; DestName: Compil32.exe; DestDir: {app}; Components: std\a;
Source: UNICODE\Compil32.exe; DestName: Compil32.exe; DestDir: {app}; Components: std\u;

Source: UNICODE\ISCC.exe; DestDir: {app}; Components: std\u
Source: UNICODE\ISCmplr.dll; DestDir: {app}; Components: std\u
Source: UNICODE\ISPP.dll; DestDir: {app}; Components: std\u
Source: UNICODE\Setup.e32; DestDir: {app}; Components: std\u
Source: UNICODE\SetupLdr.e32; DestDir: {app}; Components: std\u

HElmo
30-08-2012, 22:02
Gnom_aka_Lexander, извиняюсь, это мне ответ? Если нет то простите, если да, то что с этим делать и как использовать? Заранее спасибо.

Gnom_aka_Lexander
30-08-2012, 22:11
извиняюсь, это мне ответ? »
Ага.то что с этим делать и как использовать? »
Использовать. Имена и надписи компонентов меняшь на свои, файлы тоже.

HElmo
30-08-2012, 22:20
Gnom_aka_Lexander, а в какое место это вставлять в скрипте и где что менять, а то вдруг что-то не то изменю. Прочтите за надоедливость, первый раз с этим столкнулся. Заранее спасибо!

Gnom_aka_Lexander
30-08-2012, 22:23
Ооо... Как можно первый раз столкнуться с тем, с чего обычно начинают? Почитайте справку на ночь - очень просветляет.

HElmo
30-08-2012, 22:28
Gnom_aka_Lexander,
Англоязычная версия..,пожалуйста, просто изучать конкретно нет времени, пожалуйста. Что с этим кодом делать. Заранее спасибо.




© OSzone.net 2001-2012