Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 5]
Ivan_009,
какой я не внимательный)) спс
Ivan_009
26-08-2012, 20:42
Извиняюсь за тупой вопрос но если у меня компилятор ANSI в этой строке, что нужно поставить, чтобы не использовать...
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif
Johny777
26-08-2012, 20:45
Ivan_009,
если юникод то А - W
в противном случае (только ANSI) A - A
Raf-9600
27-08-2012, 13:41
Ктонить может написать простенький скриптик, который в случае если выбран компонент "Game\Lokal" и нажата кнопка «Далее», проверял, существует ли ключ реестра "InstallPath" в ветке "HKLM\SOFTWARE\Blizzard Entertainment\Diablo II\" если ключ найден, то проверял по указанному в этом ключе реестра пути, существование файлов "Game.exe" и "d2data.mpq". Если всё найдено, то молча переходить на следующую страницу, если же файлы или ключ в реестре не найден, то выводить сообщение с кнопками «Да» и «Нет», на которые невозможно нажать в течение 10 секунд. По умолчанию выбрана кнопка «Да», и при нажатии на неё автоматически выбирался компонент "Game\Full" и осуществлялся автоматический переход на следующую страницу, если же нажать на «Нет» то осуществлялся переход на следующую страницу без дополнительных действий.
Johny777
27-08-2012, 15:00
Raf-9600,
[Setup]
AppName=My program
AppVerName=My program 1.5
DefaultDirName={pf}\My program
AppId=The_Best_AppId_Ever_Made
[Components]
Name: Game; Description: Game_Component;
Name: Game\Lokal; Description: Game_Local_Component; Flags: exclusive
Name: Game\Full; Description: Game_Full_Component; Flags: exclusive
[Files]
Source: Game.exe; DestDir: {app}
Source: d2data.mpq; DestDir: {app}
[code]
var
Error_Form: TSetupForm;
No_Clicked: boolean;
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';
procedure Error_Form_Button_OnClick(Sender: TObject);
begin
case TButton(Sender).Caption of
SetupMessage(msgButtonYes):
begin
with WizardForm do
begin
ComponentsList.Checked[2] := True; /// где 2 - индекс компонета - 3-й по списку (отсчёт от 0)
Enabled := True;
NextButton.OnClick(nil);
end;
end;
SetupMessage(msgButtonNo):
begin
with WizardForm do
begin
Enabled := True;
No_Clicked := True;
NextButton.OnClick(nil);
end;
end;
end;
Error_Form.Hide;
end;
function NextButtonClick(CurPageID: Integer): Boolean;
var
AppPath: String;
Cycle: Integer;
NO_Button, YES_Button: TButton;
begin
Result := True;
AppPath := RemoveQuotes(ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSe tting("AppID")}_is1,InstallLocation|}'));
if (CurPageID = wpSelectComponents) and IsComponentSelected('Game\Lokal') then
begin
if not FileExists(AppPath + 'Game.exe') and not FileExists(AppPath + 'd2data.mpq') and not No_Clicked then
begin
Result := False;
WizardForm.Enabled := False;
Error_Form := CreateCustomForm;
with Error_Form do
begin
Position := poScreenCenter;
BorderStyle := bsDialog;
ClientWidth := ScaleX(250);
ClientHeight := ScaleY(100);
Caption := SetupMessage(msgErrorTitle);
Color := clBtnFace;
DeleteMenu(GetSystemMenu(Error_Form.Handle,False), $F060,0); /// сделать кнопку "закрыть" неактивной
SetClassLong(Error_Form.Handle, -26, GetClassLong(Error_Form.Handle, -26) or $200); /// блокировка комбинации alt + f4
with TLabel.Create(nil) do
begin
SetBounds(ScaleX(15), ScaleY(10), ScaleX(290), ScaleY(30));
AutoSize := False;
Caption := 'будет выбран компнент Game_Full';
WordWrap := True;
Parent := Error_Form;
Font.Size := 9;
end;
YES_Button := TButton.Create(nil)
with YES_Button do
begin
Caption := SetupMessage(msgButtonYes);
Parent := Error_Form;
SetBounds(Error_Form.Width - ScaleX(90), ScaleY(65), ScaleX(71), ScaleY(25));
Cursor := crHand;
Enabled := False;
OnClick := @Error_Form_Button_OnClick;
end;
NO_Button := TButton.Create(nil)
with NO_Button do
begin
Caption := SetupMessage(msgButtonNo);
Parent := Error_Form;
SetBounds(Error_Form.Width - ScaleX(175), ScaleY(65), ScaleX(71), ScaleY(25));
Cursor := crHand;
Enabled := False;
OnClick := @Error_Form_Button_OnClick;
end;
Application.Title := ' ' + SetupMessage(msgErrorTitle);
Show;
Repaint;
Cycle := 10;
repeat
begin
Sleep(1000);
Cycle := Cycle - 1;
Error_Form.Caption := IntToStr(Cycle) + ' Секунд';
end;
until (Cycle = 0)
YES_Button.Enabled := True;
NO_Button.Enabled := True;
end;
end;
end;
end;
procedure InitializeWizard();
begin
No_Clicked := False;
end;
Друзья помогите, кто нибудь прикрутите пожалуйста ISDone и если не сложно то сделайте кликабельное лого без фона.
Вот скрипт: http://rghost.ru/40017592
Raf-9600, Johny777, [Setup]
AppName=My program
AppVerName=My program 1.5
DefaultDirName={pf}\My program
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[Types]
Name: full; Description: Full installation; Flags: iscustom
[Components]
Name: Game; Description: Game_Component;
Name: Game\Lokal; Description: Game_Local_Component; Flags: exclusive; Types: full;
Name: Game\Full; Description: Game_Full_Component; Flags: exclusive;
[Files]
Source: Game.exe; DestDir: {app};
Source: d2data.mpq; DestDir: {app};
[Registry]
Root: HKLM; Subkey: "SOFTWARE\Blizzard Entertainment"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Blizzard Entertainment\Diablo II"; ValueName: "InstallPath"; ValueType: String; ValueData: "{app}\"; Flags: uninsdeletekey
[_Code]
function NextButtonClick(CurPageID: Integer): Boolean;
var
AppPath: String;
begin
Result:= true;
AppPath:= RemoveQuotes(ExpandConstant('{reg:HKLM\SOFTWARE\Blizzard Entertainment\Diablo II\,InstallPath|}'));
if (CurPageID = wpSelectComponents) and IsComponentSelected('Game\Lokal') then
if not FileExists(AppPath + 'Game.exe') and not FileExists(AppPath + 'd2data.mpq') then
if MsgBoxEx(0, 'Не найдены Game.exe и d2data.mpq'+#13#10+'Установить Game_Full_Component?', 'Проблема', MB_YESNO or MB_ICONQUESTION, 0, 10) = IDYES then
WizardForm.ComponentsList.Checked[2]:= True /// где 2 - индекс компонета - 3-й по списку (отсчёт от 0)
else
WizardForm.ComponentsList.Checked[1]:= True; /// где 1 - индекс компонета - 2-й по списку (отсчёт от 0)
end;
Raf-9600
27-08-2012, 17:21
nik1967, Если бы можно было сделать чтобы возможность нажать на Да\Нет появлялась только через 10 секунд, тогда было бы в самом деле лучше.
Johny777, Благодарю http://www.kolobok.us/smiles/light_skin/good.gif
alert30 »
Пытался, подключил, но выходила ошибка, музыку и сплаш сам подключил, а вот ISDone не получается без ошибки и лого получается с фоном, уже голову сломал, если сможешь помочь, помоги пожалуйста, в любом случае спасибо что откликнулся.
Twoface, не пользовался Inno Setup Joiner?
Inno Setup Joiner »
Нет. Делал всё руками.
Raf-9600
27-08-2012, 18:37
А можно ли программно изменить путь установки? Ну в смысле сменить содержимое {app}?
Twoface, руками так же как бы правильно пользуюся, вот только сколько дублей выдает; тем самым и выдает ошибку. Попробуй эту утилиту, и отпишись результаты.
alert30 »
Прости, а как ею вообще пользоваться, вернее сказать как её запустить то, там просто .EXE файл.
Ivan_009
27-08-2012, 19:03
Twoface, так
Ivan_009 Ivan_009 сейчас на форуме »
Не могу не через командную строчку не через Експловер запустить.
Ivan_009
27-08-2012, 19:43
Twoface, Для начала установи InnoUltra
http://innoultra.ru/?p=1
Ivan_009 »
Готово. Теперь что нужно сделать, научи пожалуйста.
Ivan_009
27-08-2012, 19:56
Twoface,
После чего, в проводнике выделяем подготовленные скрипты, и в контекстном меню выбираем Join Scripts.
И все :drug:
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.