Inno Setup (создание инсталяционных пакетов). Часть 3

  • Автор темы Автор темы YURSHAT
  • Дата начала Дата начала
Статус
В этой теме нельзя размещать новые ответы.
y_thelastknight, hi!
Most likely you use Unicode the InnoSetup version. At Ansi of the version works correctly. Here the corrected example on Unicode. The truth sysAutomaticDraw.iss example all the same works at Unicode not correctly. It needs to be compiled on Ansi. The example of sysManualDraw.iss works both at Unicode and at Ansi. Excuse for my bad English.

Yours faithfully nik1967
 
im using same script as you give also im using Ansi version of innosetup and my pc runs windows 7 32bit..it says Runtime Error...Line 126:...ExceptionExtrenal Exception EEDFADE...if i remove the vga part of the script it works, on my other pc it works fine. it run windows 8. Excuse for My Bad English :D
 
Последнее редактирование:
Всем привет.

Помогите сделать, чтобы при распаковке файлов прогрес бар работал (Распаковка файлов, которые собраны компилятором)
 

Вложения


[SOURCE="iss"]WizardForm.ProgressGauge.Parent:=WizardForm;[/SOURCE]потом в нужных местах, где нужен - покажешь, где не нужен - скроешь.

К автору перевода справки по Inno Setup. Необходимо исправить, часть ссылок в содержании ведет не туда, куда должно.
 
Последнее редактирование:
Скажите пожалйуста:

Например: есть процедура для кнопки

Код:
procedure BackCompBtnClick(h:HWND);
begin
POLabel.Show;
DesktopLabel.Show;
NoIconsLabel.Show;
end;

Можно ли сделать так чтобы к примеру DesktopLabel.Show выполнилась с задержкой скажем в 5 сек.
 
AntiAngel, попробуйте так
[SOURCE="iss"]
procedure BackCompBtnClick(h:HWND);
begin
POLabel.Show;
NoIconsLabel.Show;
Sleep(500);
DesktopLabel.Show;
end;
[/SOURCE]
 
YURSHAT, sleep(500) - это полсекунды. Тут лучше через таймер. Скажем поставить на таймер действие с интервалом 5 сек. Показ лейбла и завершение таймера. (надо же чтобы один раз произошла данная процедура)
Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
 
[Files]
Source: Files\CallbackCtrl.dll; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system; 

[Code_]
var 
  Button: TButton;
  DesktopLabel: TLabel;

type 
  TTimerProc = procedure (h: Longword; msg: Longword; idevent: Longword; dwTime: Longword); 

function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';
function WrapTimerProc(callback:TTimerProc; paramcount:integer):LongWord; external 'wrapcallbackaddr@{tmp}\CallbackCtrl.dll stdcall delayload';

procedure MyOnTimer(h: Longword; msg: Longword; idevent: Longword; dwTime: Longword);
begin
  DesktopLabel.Show;
  KillTimer(WizardForm.Handle,1);
end;

procedure BackCompBtnClick(Sender: TObject);
begin
  SetTimer(WizardForm.Handle,1,5000,WrapTimerProc(@MyOnTimer,4));
end;

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

procedure InitializeWizard();
begin
  WizardForm.OuterNotebook.Hide;

  DesktopLabel := TLabel.Create(WizardForm);
with DesktopLabel do
begin
  Parent := WizardForm;
  Caption := 'Че-то там...';
  SetBounds(ScaleX(70), ScaleY(270), ScaleX(363), ScaleY(14));
  Transparent := True;
  Hide;
end;

  Button:= TButton.Create(WizardForm);
with Button do
begin
  Parent:= WizardForm;
  SetBounds(ScaleX(70), WizardForm.BackButton.Top, WizardForm.BackButton.Width, WizardForm.BackButton.Height);
  OnClick:= @BackCompBtnClick;
  Caption:= 'Show';
end;
end;
 
Последнее редактирование:
Если какой-нибудь другой способ скрывать иконку с панели задач windows, кроме этого
ShowWindow(Application.Handle, SW_HIDE); ?
 
sergey3695, так можно:
Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[B][[/B]Code]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif
const
 GWL_EXSTYLE = -20;
 WS_EX_APPWINDOW = $40000;
 WS_EX_TOOLWINDOW = $80;

function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint;
 external 'SetWindowLong{#A}@user32.dll stdcall';

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint;
 external 'GetWindowLong{#A}@user32.dll stdcall';

procedure InitializeWizard;
var
 CurStyle: Integer;
 begin
  CurStyle := GetWindowLong(Application.Handle, GWL_EXSTYLE);
  CurStyle := (CurStyle or WS_EX_TOOLWINDOW) and (not WS_EX_APPWINDOW);
  SetWindowLong(Application.Handle, GWL_EXSTYLE, CurStyle);
end;
 
Mailchik, так инсталлятор скрывается при нажатие alt-tab, но с панели иконка не скрывается.
 
sergey3695,
Да это понятно, код работает рандомно) проверка видимо какая-то нужна.
 
Последнее редактирование:
sergey3695, я не выкладываю код, не проверив его. лично у меня всё прекрасно скрывается.
на системах выше ХР, код сработает в зависимости от настроек безопасности системы.
 
Mailchik, я и не говорил что код не рабочий.. Ладно не буду загоняться, я просто думал есть какое-то решение кроме showwindow. Просто иконка скрывается не молниеностно как хотелось. Ну чтож спасибо за то что ответели. :)
 
Подскажите как панель Tasks перенести на другую страницу чтоб чекбоксы создавались
т.е перенести то я могу WizardForm.TasksList но почему то чекбоксы созданные при [Tasks] не появляются
 
Подскажите как панель Tasks перенести на другую страницу чтоб чекбоксы создавались
т.е перенести то я могу WizardForm.TasksList но почему то чекбоксы созданные при [Tasks] не появляются
В данном случае никак, т.к TasksList заполняется на TasksPage.
Можно только вручную создать все чекбоксы/новый тасклист на нужной странице и привязать их к необходимым действиям.
 
Добрый день. Хотелось бы узнать, не найдется ли ни у кого исходников ботвы и iswin7.dll? Хотелось бы исследовать изнутри. Любопытство мучает :-[ Буду премного благодарен
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху