PDA

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


Страниц : 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 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 [117] 118 119 120 121 122 123 124 125

Shkutu
17-01-2015, 00:55
это точно не сработает. да и команда dir не работает даже при обычной установке »
во-первых, почему это не сработает? вы проверяли?
а во-вторых, вы код вообще смотрели? в каком месте там команда dir?
я порекомендовала это:
WizardForm.DirEdit.Text := ExpandConstant('{pf}\{#MyAppName}');
это обычное присвоение, где WizardForm.DirEdit - поле объекта формы установщика, содержащее путь установки вашего приложения. и конструкция эта прекрасно работает и при обычной установке и при тихой.

habib2302
17-01-2015, 10:14
Shkutu, ну вот мой код который на данный момент стоит
Procedure CurPageChanged(CurPageID: Integer);
Begin
Case CurPageID of
wpFinished:
begin
if IsTaskSelected('ic\taskbar') then
PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName}'), True);
if IsTaskSelected('ic\startmenu') then
PinToStartMenu(ExpandConstant('{app}\{#MyAppExeName}'), True);
end;
wpSelectTasks:
if IsComponentSelected('BSOD\I') then
begin
WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
end;
wpSelectDir: if WizardForm.Tag = 1 then

begin
WizardForm.SelectDirPage.Notebook.ActivePage:= WizardForm.SelectComponentsPage;
WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectComponents);
WizardForm.Hint:= WizardForm.PageDescriptionLabel.Caption; // запомнить SetupMessage(msgSelectDirDesc)
WizardForm.PageDescriptionLabel.Caption:= SetupMessage(msgSelectComponentsDesc);
end;
wpSelectComponents: if WizardForm.Tag = 1 then
begin
WizardForm.SelectComponentsPage.Notebook.ActivePage:= WizardForm.SelectDirPage;
WizardForm.DiskSpaceLabel.Caption:= WizardForm.ComponentsDiskSpaceLabel.Caption;
WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectDir);
WizardForm.PageDescriptionLabel.Caption:= WizardForm.Hint; // иначе вместо названия программы [name]
if not WizardSilent then
if IsComponentSelected('BSOD\I') then
begin
WizardForm.DirEdit.Text :=(ExpandConstant('{#SetupSetting("DefaultDirName")}'))
end else
if not WizardSilent then
if IsComponentSelected('BSOD\P') then
begin
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + '{#MyAppName} Portable'
WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
end;
end;
end;
end;
вот и сделайте как вы говорили. а вообще мне кажется проблема из-за кода для смены страниц местами

StongCool
17-01-2015, 12:34
Не нашел я нормально рабочего скрипта на счет redist.

Кто какими пользуется, скиньте пожалуйста)

Shift85
17-01-2015, 13:10
Не нашел я нормально рабочего скрипта на счет redist. »

StongCool, Плохо искал.

Вот через секцию код + ISDone:

procedure Soft(CurStep: TSetupStep);
var res: integer;
begin
if (CurStep = ssPostInstall) and not ISDoneError then begin
if BtnGetChecked(SoftCheck) then begin
MainLabel.Left:= ScaleX(0);
MainLabel.Caption:=ExpandConstant('{cm:SoftInstall1}');
StatusLabel.Caption:=ExpandConstant('{cm:Status3}');
BtnSetEnabled(hCancelBtn, False);
Exec(ExpandConstant('{src}\Redist\DirectX\DXSETUP.exe'), '/silent', ExpandConstant('{src}'), SW_SHOW, ewWaitUntilTerminated, Res);
Exec(ExpandConstant('{src}\Redist\VC\vcredist_x86.exe'), '/Q', ExpandConstant('{src}'), SW_SHOW, ewWaitUntilTerminated, Res);
end;
end;
end;

Shkutu
17-01-2015, 18:08
habib2302, в вашем коде вообще не прописана ветка, где WizardSilent=true, и не работает именно из-за этого, я думаю.
wpSelectComponents: if WizardForm.Tag = 1 then
begin
WizardForm.SelectComponentsPage.Notebook.ActivePage:= WizardForm.SelectDirPage;
WizardForm.DiskSpaceLabel.Caption:= WizardForm.ComponentsDiskSpaceLabel.Caption;
WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectDir);
WizardForm.PageDescriptionLabel.Caption:= WizardForm.Hint; // иначе вместо названия программы [name]
if not WizardSilent then
if IsComponentSelected('BSOD\I') then
begin
WizardForm.DirEdit.Text :=(ExpandConstant('{#SetupSetting("DefaultDirName")}'))
end else
if not WizardSilent then
if IsComponentSelected('BSOD\P') then
begin
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + '{#MyAppName} Portable'
WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
end;
По поводу как надо, я тоже уже писала. Собственно, этот кусок я и переписывала в своем посте http://forum.oszone.net/post-2457093-2313.html. Но судя по всему вам лень не только пробовать, что вам советуют, но даже просто читать, что вам отвечают. Правда в этом случае, уж извините за резкость, вообще непонятно, зачем вы тут вопросы задаете.

habib2302
17-01-2015, 19:24
Shkutu, мне уже дали код в krinkels
function ParamExists(S: String): Boolean;
var
i: Integer;
begin
Result:= False;
for i:= 0 to ParamCount() do begin
if Pos('/'+Uppercase(S), Uppercase(ParamStr(i))) > 0 then begin
Result:= true;
Break;
end;
end;
end;

function GetCmdDirValue(): String;
var
i: Integer;
begin
Result:= '';
for i:= 0 to ParamCount() do begin
if (Pos('/DIR', Uppercase(ParamStr(i))) > 0) then begin
Result:= Copy(ParamStr(i), 6, Length(ParamStr(i)));
StringChange(Result, 'expand:', '');
StringChange(Result, 'EXPAND:', '');
Result:= ExpandConstant(Result);
Break;;
end;
end;
end;

***
if (ParamExists('dir')) then
WizardForm.DirEdit.Text:= GetCmdDirValue();
***
но куда пихать if (ParamExists('dir')) then
WizardForm.DirEdit.Text:= GetCmdDirValue();

StongCool
18-01-2015, 01:30
Как сделать нижнею панель прозрачной?

kotyarko@fb
18-01-2015, 02:52
Как сделать нижнею панель прозрачной? »
http://forum.oszone.net/attachment.php?attachmentid=121173&stc=1&d=1421538561
Пример прикрепил (взят с Krinkels).

habib2302
18-01-2015, 10:04
StongCool, ISWin7 бесполезен если вы используйте WinTB и добавлено лого в нижней панельке

StongCool
18-01-2015, 12:48
kotyarko@fb, Ссылка битая на скриншот.

И еще хотелось узнать.

Как сделать стартовой эту страницу + окошко такое.

habib2302
18-01-2015, 13:18
StongCool,
Ссылка битая на скриншот. »

http://i.imgur.com/KmwwLFB.png (http://i.imgur.com/qWdoADN.png)

http://krinkels.org/threads/iswin7.1946/
[Setup]
DisableWelcomePage=true
InfoBeforeFile=файл с описанием.rtf

ShadeUa
18-01-2015, 13:45
Здраствуйте. Я не так давно завадал вопрос но на него так не кто не ответил , а сам не мог розобраться. Как мне затекстурировать кнопку info через батву, и как сдлеать что при нажатии на кнопку открівалось не окно а картинка ?
http://forum.oszone.net/attachment.php?attachmentid=121184&stc=1&d=1421577903

kotyarko@fb
18-01-2015, 15:22
Как мне затекстурировать кнопку info через батву »
Так же, как и текстурировали остальные.

и как сдлеать что при нажатии на кнопку открівалось не окно а картинка ? »
Создать функцию\процедуру, рисующую эту картинку и вызывать её через свойство OnClick вашей кнопки.

ShadeUa
18-01-2015, 15:54
Еще один вопрос , а что ето за ошибка?
http://forum.oszone.net/attachment.php?attachmentid=121188&stc=1&d=1421585491

kotyarko@fb
18-01-2015, 16:36
Еще один вопрос , а что ето за ошибка? »
У вас два раза подряд создаётся InfBtn, это во-первых.
Во-вторых, InfBtn должен быть объявлен как HWND.
В-третьих, последний заданный параметр функции BtnCreate - это://IsCheckBtn - если True, то будет создана кнопка (аналог CheckBox) имеющая включенное и выключенное состояние
// если False, то создастся обычная кнопка
По логике (если кнопка просто должна открывать изображение) должен быть выставлен False, а у вас True.

ShadeUa
18-01-2015, 16:51
У вас два раза подряд создаётся InfBtn, это во-первых.
Во-вторых, InfBtn должен быть объявлен как HWND.
В-третьих, последний заданный параметр функции BtnCreate - это:
Код: Выделить весь код
//IsCheckBtn - если True, то будет создана кнопка (аналог CheckBox) имеющая включенное и выключенное состояние
// если False, то создастся обычная кнопка
По логике (если кнопка просто должна открывать изображение) должен быть выставлен False, а у вас True. »
Я все исправил , но тоже самое , я то не програмист просто любитель , вот каникулы начались решил опять етим позаниматься но нечего не полуаеться
Я сделал все как вы говорили , и обьявил его
([Code]
var
hCancelBtn, hNextBtn, hBackBtn, hDirBrowseBtn, hGroupBrowseBtn, InfBtn (*, TButtonOnClick *):HWND;
ButtonFont: TFont ; ) но нечего не изменилось

Dodakaedr
18-01-2015, 20:12
и как сдлеать что при нажатии на кнопку открівалось не окно а картинка ? »
Такой пример не пойдет?
[Setup]
AppName=My Programm
AppVersion=1.1
DefaultDirName={pf}\My Programm
OutputDir=.

[Files]
DestName: "WizardForm.BitmapImage1.bmp"; Source: "compiler:WizModernSmallImage-IS.bmp"; Flags: dontcopy solidbreak

[Code]
const
GCL_STYLE = -26;
CS_NOCLOSE = $200;

var
BitmapImage1: TBitmapImage;
NewButton1, NewButton2: TButton;
Form: TSetupForm;

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 ButtonOnClick(Sender: TObject);
begin
Form.Close;
WizardForm.Enabled:=true;
end;

procedure ButtonOnClick2(Sender: TObject);
begin
Form.Show;
WizardForm.Enabled:=false;
end;

procedure RedesignWizardForm;
begin
Form:= CreateCustomForm;
Form.ClientWidth := ScaleX(150);
Form.ClientHeight := ScaleY(100);
Form.Caption := 'Инфо';
Form.Center;
Form.FormStyle := fsStayOnTop;
SetClassLong(Form.Handle, GCL_STYLE, GetClassLong(Form.Handle, GCL_STYLE) or CS_NOCLOSE);

NewButton2 := TButton.Create(Form);
NewButton2.Parent := Form;
NewButton2.Width := ScaleX(55);
NewButton2.Height := ScaleY(23);
NewButton2.Left := Form.ClientWidth - ScaleY(57);
NewButton2.Top := Form.ClientHeight - ScaleY(25);
NewButton2.Caption := 'OK';
NewButton2.OnClick := @ButtonOnClick;

BitmapImage1 := TBitmapImage.Create(Form);
with BitmapImage1 do
begin
Parent := Form;
Left := ScaleX(0);
Top := ScaleY(0);
Width := ScaleX(50);
Height := ScaleY(50);
ExtractTemporaryFile('WizardForm.BitmapImage1.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardForm.BitmapImage1.bmp'));
end;

NewButton1 := TButton.Create(WizardForm);
with NewButton1 do
begin
Parent := WizardForm;
Left := ScaleX(48);
Top := ScaleY(328);
Width := ScaleX(75);
Height := ScaleY(25);
Caption := 'Инфо';
OnClick := @ButtonOnClick2;
end;
end;

procedure InitializeWizard();
begin
RedesignWizardForm;
end;

ShadeUa
18-01-2015, 21:18
Такой пример не пойдет? »
к сожилению нет , я вам сейчас покажу что я хочу сделать

ShadeUa
18-01-2015, 21:24
Такой пример не пойдет? »
Вот так хотелося б сделать .Весь скрипт перелапошил и непонял как ето сделать
http://forum.oszone.net/attachment.php?attachmentid=121196&stc=1&d=1421605464
http://forum.oszone.net/attachment.php?attachmentid=121195&stc=1&d=1421605464

sergey3695
18-01-2015, 21:59
ShadeUa,
function InitializeSetup:boolean;
begin
if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
if not FileExists(ExpandConstant('{tmp}\1.png')) then ExtractTemporaryFile('1.png');
Result:=True;
end;

#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif

const
GWL_WNDPROC = -4;
WM_NCLBUTTONDOWN = $00A1;
type
LPARAM = Integer;
WPARAM = Integer;
LRESULT = Integer;
TFNWndProc = Integer;
var
OldWindowProc: Longint;

function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: TFNWndProc; hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; external 'CallWindowProc{#A}@user32.dll stdcall';

function WindowProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
case Msg of
WM_NCLBUTTONDOWN:
begin
Msg := 0;
WizardForm.Close;
end;
end;
Result := CallWindowProc(OldWindowProc, hWnd, Msg, wParam, lParam);
end;

procedure CloseForm(Sender: TObject);
begin
WizardForm.Close;
end;

procedure InitializeWizard;
begin
CreateFormFromImage(wizardform.Handle,ExpandConstant('{tmp}\1.png'));
ImgApplyChanges(WizardForm.Handle);
OldWindowProc := SetWindowLong(WizardForm.Handle, GWL_WNDPROC, CallbackAddr('WindowProc'));
end;

procedure DeinitializeSetup();
begin
SetWindowlong(WizardForm.Handle, GWL_WNDPROC, OldWindowProc);
gdipShutdown;
end;
на кнопку, на форму, картинку. удачи :)




© OSzone.net 2001-2012