Войти

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


Страниц : 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 126

Sotonisto
17-07-2015, 09:08
Uragan66, вы забыли раскомментировать строку BtnPanel.OnClick:=@logoOnClick в процедуре создания лого.

Uragan66
17-07-2015, 15:25
Sotonisto, Спасибо большое за помощь, но когда раскомментирую эту строку компилятор не находит идентификатора logoOnClick.

Sotonisto
17-07-2015, 15:45
не находит идентификатора »
Извините, я не сразу заметил, что у вас процедура LogoOnClick расположена после процедуры LogoImage, хотя должна находится перед ней.
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';

// функция проверки того, сработает iswin7, или нет
function GlassEnabled:Boolean;external 'GlassEnabled@files:dwmEnabled.dll stdcall';

procedure LogoOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://www.google.com/', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

// Сделал отдельную процедуру создания лого,чтоб удобно было - вызываем и указываем размеры
procedure LogoImage(ImgLeft,ImgTop,ImgWidth,ImgHeight:Integer);
var BtnPanel:TPanel;
begin
ExtractTemporaryFile('gnom.bmp');
//-----------start----------LOGO-----------//
BtnPanel:=TPanel.Create(WizardForm)
BtnPanel.SetBounds(ImgLeft,ImgTop,ImgWidth,ImgHeight);
BtnPanel.Cursor:=crHand
BtnPanel.ParentColor := True;
BtnPanel.OnClick:=@LogoOnClick
BtnPanel.Parent:=WizardForm

with TBitmapImage.Create(WizardForm) do
begin
Parent := BtnPanel;
SetBounds(0,0,BtnPanel.Width,BtnPanel.Height);
// Собственно, применение
if GlassEnabled then BackColor := BtnPanel.Color else BackColor := clNone;

ReplaceColor := clBlack; // это обязательно
ReplaceWithColor := clNone;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\gnom.bmp'));
end;
end;

procedure InitializeWizard16();
begin
if GlassEnabled then WizardForm.WelcomeLabel2.Caption:='Включено' else WizardForm.WelcomeLabel2.Caption:='Выключено';
// Необходимо добавлять каждую кнопку расположенную на стекле
// до инициализации стекла для того что бы не было дыр ))
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);

// Вызываем лого, и говорим ему координаты.
LogoImage(ScaleX(618),ScaleY(0),ScaleX(69),ScaleY(50));
end;

procedure DeinitializeSetup11();
begin
iswin7_free;
end;

Uragan66
17-07-2015, 16:31
Sotonisto, спасибо. Но не хочет работать . Установщик компилируется нормально, но ссылки не работают, то есть клик на лого ничего не дает... Хотя вот procedure LogoOnClick(Sender: TObject);
var ResCode: Integer;
begin
ShellExec('', 'http://www.forum.ru-board.com', '' , '', SW_SHOW, ewNoWait, ResCode)
end;

procedure InitializeWizard();
var
BtnPanel: TPanel;
BtnImage: TBitmapImage;
begin
ExtractTemporaryFile('Button.bmp')

BtnPanel:=TPanel.Create(WizardForm)
with BtnPanel do begin
Left:=320
Top:=100
Width:=132
Height:=27
Cursor:=crHand
OnClick:=@logoOnClick
Parent:=WizardForm
end;
BtnImage:=TBitmapImage.Create(WizardForm)
with BtnImage do begin
AutoSize:=True;
Enabled:=False;
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Button.bmp')
Parent:=BtnPanel
end;
end; с такой же функцией и в нем все работает... Но в нем нет прозрачности

Sotonisto
17-07-2015, 17:43
Uragan66, в каком смысле нет прозрачности?
К слову, желательно увидеть весь скрипт, а еще лучше - архив со всеми файлами (для полноты картины). Исправлять ошибки вслепую - напрасная трата времени :)

Uragan66
17-07-2015, 18:20
Sotonisto, в том скрипте нельзя поставить лого на MAINPANEL. Прикрепил архив, но еще не полностью сделано, много недоработок, посмотрите, пожалуйста, если есть время...

habib2302
17-07-2015, 20:06
как убрать PreparingPage перед распаковкой портативной версии

ekspoint
18-07-2015, 03:21
как убрать PreparingPage перед распаковкой портативной версии »
не?

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if PageID = wpPreparing then Result:= True;
end;

или

procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID= wpPreparing then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
end;

habib2302
18-07-2015, 08:55
ekspoint, не помогло

Sotonisto
18-07-2015, 09:40
Uragan66, мне не удалось проверить скрипт на работоспособность т.к. использую ANSI версию IS.
Пробежался глазами по коду и признаюсь, такой мешанины из скриптов я еще ни разу не видел (не в обиду). Я понимаю, что вы сами их писали и прекрасно знаете что и где, но 9 секций [Setup], 5 [Files] и 2 [Languages] (дублирующие друг друга) в одном скрипте - как по мне, так это перебор :) Для меня уже странно то, что они вообще у вас работают :)
Сейчас попытаюсь его пересобрать "под себя", потом отпишусь получилось или нет.

habib2302
18-07-2015, 10:09
такой мешанины из скриптов я еще ни разу не видел »
согласен.
Uragan66, лучше разбить каждую секцию на скрипты, а потом поудалять дублирующие строки софтиной Beyond Compare 4 или через сайт (http://webmasta.org/tools/norepeatlines/) (пример прикрепил)

Uragan66
18-07-2015, 10:18
Sotonisto, согласен, смесь еще та... Но я первый раз работаю с Inno Setup, так что не судите строго :) А секций дублирующих почему много ? отдельные скрипты собирал Join Skripts, вот так и получилось. У меня компилируется нормально и работает тоже, но "сижу" в основном на ХР -ке, а потом проверил на 8.1 x-64 там вообще нет картинок, задействованных в секции MUI_InstallShield и в скине кнопки обычные, непонятно почему. Если у вас получиться проверить и исправить ошибки буду премного благодарен

habib2302, спасибо , попробую...

или через сайт (пример прикрепил) »
Не могу зайти на него, нет соединения... Попробую Beyond Compare 4

habib2302
18-07-2015, 15:59
А вот если запускать из секции Code »
и как?

ekspoint
18-07-2015, 17:55
как сделать так что бы инсталлятор запускался от админа, в setup поставил PrivilegesRequired=admin но не помогает

kotyarko@fb
18-07-2015, 17:55
и как? »
А вот если запускать из секции Code при помощи Exec »

ekspoint
18-07-2015, 17:56
не помогло »
ну тогда вроде больше никак, я тоже раньше писал про это, сказали что нет

habib2302
22-07-2015, 09:57
kotyarko@fb, и как?

Uragan66
22-07-2015, 10:27
Всем привет ! Возник вопрос как на страницу выбора компонентов добавить кнопку с запуском программы ( это каталог html, но сделанный в формате exe ) Буду благодарен за помощь.

kotyarko@fb
22-07-2015, 11:48
и как? »
Ну блин, ну я же всё нужное процитировал.. Используй Exec (http://www.jrsoftware.org/ishelp/index.php?topic=isxfunc_exec).

Возник вопрос как на страницу выбора компонентов добавить кнопку с запуском программы ( это каталог html, но сделанный в формате exe ) »Var
ExecButton: TNewButton;

Procedure ExecButtonOnClick(Sender: TObject);
var
ResCode: Integer;
begin
Exec(ExpandConstant('ПУТЬ_К_ФАЙЛУ'), '', '', SW_SHOW, ewNoWait, ResCode);
end;

Procedure InitializeWizard();
begin
ExecButton := TNewButton.Create(WizardForm);
with ExecButton do
begin
Parent := WizardForm;
SetBounds(ScaleX(50), ScaleY(WizardForm.ComponentsList.Height + 20), ScaleX(30), ScaleY(15));
Caption := 'Запуск';
OnClick := @ExecButtonOnClick;
end;
end;

Procedure CurPageChanged(CurPageID: Integer);
begin
ExecButton.Hide;
case CurPageID of
wpSelectComponents: ExecButton.Show;
end;
end;

Uragan66
22-07-2015, 16:04
kotyarko@fb, Спасибо большое за код , но на дефолтной странице Inno он работает, а когда добавляю на свою страницу нажатие на кнопку ничего не дает [Code]
type
TComponentDesc = record
Description: String;
ImageName: String;
Index: Integer;
end;

var
CompDescs: array of TComponentDesc;
CompDescPanel, CompDescImgPanel: TPanel;
CompDescText: array[1..2] of TLabel;
CompIndex, LastIndex: Integer;
CompDescImg: TBitmapImage;
ExecButton: TNewButton;

Procedure ExecButtonOnClick(Sender: TObject);
var
ResCode: Integer;
begin
Exec(ExpandConstant('Catalog.exe'), '', '', SW_SHOW, ewNoWait, ResCode);
end;

procedure ShowCompDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);
var
i: Integer;
begin
if Index = LastIndex then Exit;
CompIndex := -1;
for i := 0 to GetArrayLength(CompDescs) -1 do
begin
if (CompDescs[i].Index = Index) then
begin
CompIndex := i;
Break;
end;
end;
if (CompIndex >= 0) and (Area = iaItem) then
begin
if not FileExists(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName) then
ExtractTemporaryFile(CompDescs[CompIndex].ImageName);
CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName);
CompDescImg.Show;

CompDescText[2].Caption := CompDescs[CompIndex].Description;
CompDescText[2].Enabled := True;
end else
begin
CompDescText[2].Caption := CustomMessage('ComponentsInfo');
CompDescText[2].Enabled := False;
CompDescImg.Hide;
end;
LastIndex := Index;
end;

procedure CompListMouseLeave(Sender: TObject);
begin
CompDescImg.Hide;
CompDescText[2].Caption := CustomMessage('ComponentsInfo');
CompDescText[2].Enabled := False;
LastIndex := -1;
end;

procedure AddCompDescription(AIndex: Integer; ADescription: String; AImageName: String);
var
i: Integer;
begin
i := GetArrayLength(CompDescs);
SetArrayLength(CompDescs, i + 1);
CompDescs[i].Description := ADescription;
CompDescs[i].ImageName := AImageName;
CompDescs[i].Index := AIndex - 1
end;

procedure InitializeWizard();
begin
ExecButton := TNewButton.Create(WizardForm);
with ExecButton do
begin
Parent := WizardForm;
SetBounds(ScaleX(89), ScaleY(WizardForm.ComponentsList.Height + 105), ScaleX(60), ScaleY(22));
Caption := 'Каталог';
OnClick := @ExecButtonOnClick;
begin
WizardForm.SelectComponentsLabel.Hide;
WizardForm.TypesCombo.Hide;
WizardForm.ComponentsList.SetBounds(ScaleX(0), ScaleY(0), ScaleX(160), ScaleY(185));
WizardForm.ComponentsList.Color := $00ffffff;
WizardForm.ComponentsList.OnItemMouseMove:= @ShowCompDescription;
WizardForm.ComponentsList.OnMouseLeave := @CompListMouseLeave;

CompDescImgPanel := TPanel.Create(WizardForm);
with CompDescImgPanel do
begin
Parent := WizardForm.SelectComponentsPage;
SetBounds(ScaleX(180), ScaleY(0), ScaleX(225), ScaleY(120));
BevelInner := bvLowered;
end;
end;
end;
CompDescText[1] := TLabel.Create(WizardForm);
with CompDescText[1] do
begin
Parent := CompDescImgPanel;
SetBounds(ScaleX(5), ScaleY(5), CompDescImgPanel.Width - ScaleX(10), CompDescImgPanel.Height - ScaleY(10));
AutoSize := False;
WordWrap := True;
Enabled := False;
Caption := CustomMessage('ComponentsImgInfo');
end;

CompDescImg := TBitmapImage.Create(WizardForm);
with CompDescImg do
begin
Parent := CompDescImgPanel;
SetBounds(ScaleX(5), ScaleY(5), CompDescImgPanel.Width - ScaleX(10), CompDescImgPanel.Height - ScaleY(10));
Stretch := True;
Hide;
end;

CompDescPanel := TPanel.Create(WizardForm);
with CompDescPanel do
begin
Parent := WizardForm.SelectComponentsPage;
SetBounds(ScaleX(180), ScaleY(125), ScaleX(225), ScaleY(80));
BevelInner := bvLowered;
end;

CompDescText[2] := TLabel.Create(WizardForm);
with CompDescText[2] do
begin
Parent := CompDescPanel;
SetBounds(ScaleX(5), ScaleY(5), CompDescPanel.Width - ScaleX(10), CompDescPanel.Height - ScaleY(10));
AutoSize := False;
WordWrap := True;
Enabled := False;
Caption := CustomMessage('ComponentsInfo');
Font.Color := clActiveCaption;
end;

AddCompDescription(1, CustomMessage('CompDesc1'), 'CompDescImg1.bmp');
AddCompDescription(2, CustomMessage('CompDesc2'), 'CompDescImg2.bmp');
end;
Procedure CurPageChanged(CurPageID: Integer);
begin
ExecButton.Hide;
case CurPageID of
wpSelectComponents: ExecButton.Show;
end;
end;




© OSzone.net 2001-2012