Inno Setup Прошу протестировать

Nemko

Дилетант
Модератор
можно подумать у тебя там что-то секретное есть
Он как автор не секретность защищает, а уникальность.
никому твой инсталлятор и даром не нужен
Мне вот например интересно как некоторые вещи там реализованы, а высказывание звучит слегка грубовато.
 

Carlos

Участник
Модератор
Прошу помощи.
Уже всё перепробовал, никак не могу сделать следующее:
Как наложить .png изображение на кнопку для этого примера
Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Code]

var
About: TNewButton;
ResultCode: Integer;

procedure AboutClick(Sender: TObject);
begin
  ShellExec('open', ExpandConstant('{src}\readme.txt'),'','', SW_SHOW, ewNoWait, ResultCode)
end;


procedure InitializeWizard();
begin
  About := TNewButton.Create(WizardForm);
  with About do
  begin
    Parent := WizardForm;
    Left := ScaleX(16);
    Top := ScaleY(325);
    Width := ScaleX(75);
    Height := ScaleY(25);
    Caption := 'О программе';
    OnClick := @AboutClick;
  end;
end;
Bmp знаю как, а вот png никак не додумаюсь.
 
Последнее редактирование:

Nemko

Дилетант
Модератор
Carlos, извините за глупый вопрос. Вы хотите наложить текстуру формата .PNG на данную кнопку или же хотите чтобы изображение png закрывало эту кнопку.
 

Carlos

Участник
Модератор
Nemko, Мне нужно
наложить текстуру формата .PNG на данную кнопку
Пробовал создать новую кнопку с нужной мне текстурой (button.png), но не знаю как задать для неё действие.


haboutBtn:=BtnCreate(WizardForm.Handle,ScaleX(535),ScaleY(180),ScaleX(90),ScaleY(22),ExpandConstant('{tmp}\Button.png'),1,False);
BtnSetEvent(haboutBtn,BtnClickEventID,WrapBtnCallback@WizardFormBtnClick,1)); // ---- Не пойму на что её заменить, чтобы при нажатии открывался текстовый документ
Если менять на @AboutClick, то выдаёт ошибку.
 

Nemko

Дилетант
Модератор
Простите за скорость, я пока учусь. Но вроде на botva2 все работает как часы.

#include "Modules\botva2.iss"

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={sd}\My Application

[Files]
Source: Files\*; Flags: dontcopy

Код:
var
Test:HWND;

procedure ButtonClicks(hBtn: HWND);
var
  ErrorCode: Integer;
begin
  ShellExec('open', ExpandConstant ('{src}\1.txt'), '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

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

procedure InitializeWizard();
begin
  Test:=BtnCreate(WizardForm.Handle,16,325,75,25,PAnsiChar(ExpandConstant('button.png')),0,False);
  BtnSetEvent(Test,BtnClickEventID,WrapBtnCallback(@ButtonClicks,1));
  BtnSetText(Test,'Тест');
  ImgApplyChanges(WizardForm.Handle);
end;

procedure DeinitializeSetup;
begin
  gdipShutdown;
end;
 

Вложения

Последнее редактирование:

Carlos

Участник
Модератор
Nemko, то, что нужно, но после завершения установки выскакивает ошибка.
 

vint56

Ветеран
Проверенный
Carlos,
procedure DeinitializeSetup;
begin
gdipShutdown;
end;
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

[Files]
Source: Files\*; Flags: dontcopy

Код:
#include "Modules\botva2.iss"
var
InfoBtn: HWND;

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');
  if not FileExists(ExpandConstant('{tmp}\CallbackCtrl.dll')) then
    ExtractTemporaryFile('CallbackCtrl.dll');
Result := True;
end;

procedure Info(hBtn:HWND);
var
ResultCode: Integer;
begin
  ShellExec('open', ExpandConstant('{src}\readme.txt'),'','', SW_SHOW, ewNoWait, ResultCode)
end;

procedure InitializeWizard;
begin
  InfoBtn:=BtnCreate(WizardForm.Handle,ScaleX(10),ScaleY(320),ScaleX(36),ScaleY(36),ExpandConstant('{tmp}\Info.png'),0,True);
  BtnSetEvent(InfoBtn,1,WrapBtnCallback(@Info,1));
  BtnSetEvent(InfoBtn,BtnClickEventID,WrapBtnCallback(@Info,1));
  ImgApplyChanges(WizardForm.Handle);
end;

procedure DeinitializeSetup;
begin
  gdipShutdown;
end;
[/SPOILER]
 

Carlos

Участник
Модератор
Всем спасибо за помощь.


Друзья, прошу прощения, но я перепутал скрипт.
Мне нужно было для этого скрипта наложить на кнопку button.png
Или смысл действий такой же?


Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Files]
Source: "1.rtf"; DestDir: "{tmp}"; Flags: ignoreversion


[code_]
var
InfoForm: TSetupForm;
Info, Ok: TButton;
InfoBefore: TRichEditViewer;
ReadmeRu: AnsiString;


procedure Okclick(Sender: TObject);
begin
  InfoForm.Close;
  WizardForm.Enabled:=True;
end;

procedure FormClose(Sender: TObject; var Action: TCloseAction);
begin
  WizardForm.Enabled:=true;
end;

procedure InfoClick(Sender: TObject);
begin
InfoForm:= CreateCustomForm();
with InfoForm do begin
  ClientWidth := ScaleX(350);
  ClientHeight := ScaleY(250);
  CenterInsideControl(WizardForm, False);
  Caption:='';
  onClose:=@FormClose;
Ok:=tbutton.create(InfoForm)
with Ok do begin
  SetBounds(ScaleX(290),ScaleY(210),ScaleX(50),ScaleY(30));
  parent:=InfoForm;
  Caption:='OK';
  onclick:=@OKclick;
  end;
InfoBefore:= TRichEditViewer.Create(InfoForm);
with InfoBefore do begin
  SetBounds(ScaleX(10),ScaleY(10),ScaleX(330),ScaleY(180));
  Parent:= InfoForm;
  //    ParentColor := True;
  //    Color:= WizardForm.Color;
  //    BorderStyle:= bsNone;
  ScrollBars:= ssVertical;
  ReadOnly:= true;
  RTFText:= ReadmeRu
end;
  InfoForm.Show;
  WizardForm.Enabled:=false;
end;
end;



procedure InitializeWizard;
begin

ExtractTemporaryFile('1.rtf');
  LoadStringFromFile(ExpandConstant('{tmp}')+'\1.rtf', ReadMeRu);
  Info:=tbutton.create(WizardForm);
  with Info do begin
  Parent:=WizardForm;
  SetBounds(ScaleX(80),ScaleY(325),ScaleX(45),ScaleY(30));
  Caption:='x';
  OnClick:=@InfoClick;
end;

end;
 
Последнее редактирование:

Carlos

Участник
Модератор
Nemko,
Не могу назначить действие на созданную кнопку.

BtnSetEvent(InfoBtn,1,WrapBtnCallback(@Info,1));
BtnSetEvent(InfoBtn,BtnClickEventID,WrapBtnCallback(@Info,1));


Что бы в этом месте не прописал, выдаёт ошибку.
 

vint56

Ветеран
Проверенный
Carlos,
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Files]
Source: "1.rtf"; DestDir: "{tmp}"; Flags: ignoreversion
Source: Files\*; Flags: dontcopy

Код:
#include "Modules\botva2.iss"
var
InfoForm: TSetupForm;
Info, Ok: TButton;
InfoBefore: TRichEditViewer;
ReadmeRu: AnsiString;
InfoBtn: HWND;

procedure Okclick(Sender: TObject);
begin
  InfoForm.Close;
  WizardForm.Enabled:=True;
end;

procedure FormClose(Sender: TObject; var Action: TCloseAction);
begin
  WizardForm.Enabled:=true;
end;

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');
  if not FileExists(ExpandConstant('{tmp}\CallbackCtrl.dll')) then
    ExtractTemporaryFile('CallbackCtrl.dll');
Result := True;
end;

procedure InfoCheck(hBtn:HWND);
var
ResultCode: Integer;
begin
InfoForm:= CreateCustomForm();
with InfoForm do begin
  ClientWidth := ScaleX(350);
  ClientHeight := ScaleY(250);
  CenterInsideControl(WizardForm, False);
  Caption:='';
  onClose:=@FormClose;
Ok:=tbutton.create(InfoForm)
with Ok do begin
  SetBounds(ScaleX(290),ScaleY(210),ScaleX(50),ScaleY(30));
  parent:=InfoForm;
  Caption:='OK';
  onclick:=@OKclick;
  end;
InfoBefore:= TRichEditViewer.Create(InfoForm);
with InfoBefore do begin
  SetBounds(ScaleX(10),ScaleY(10),ScaleX(330),ScaleY(180));
  Parent:= InfoForm;
  //    ParentColor := True;
  //    Color:= WizardForm.Color;
  //    BorderStyle:= bsNone;
  ScrollBars:= ssVertical;
  ReadOnly:= true;
  RTFText:= ReadmeRu
end;
  InfoForm.Show;
  WizardForm.Enabled:=false;
end;
end;

procedure InitializeWizard;
begin
  ExtractTemporaryFile('1.rtf');
  LoadStringFromFile(ExpandConstant('{tmp}')+'\1.rtf', ReadMeRu);
  InfoBtn:=BtnCreate(WizardForm.Handle,ScaleX(10),ScaleY(320),ScaleX(36),ScaleY(36),ExpandConstant('{tmp}\Info.png'),0,True);
  BtnSetEvent(InfoBtn,1,WrapBtnCallback(@InfoCheck,1));
  BtnSetEvent(InfoBtn,BtnClickEventID,WrapBtnCallback(@InfoCheck,1));
  ImgApplyChanges(WizardForm.Handle);
end;

procedure DeinitializeSetup;
begin
  gdipShutdown;
end;
[/SPOILER]
 

Carlos

Участник
Модератор
vint56, Низкий Вам поклон!

Чем может быть вызвана данная ошибка?
Если скрипт, который Вы дали, компилировать отдельно, то всё работает.
Если вставить в мой скрипт, то выходит следующая ошибка.
 

Вложения

Последнее редактирование:
Сверху