Скрипты Inno Setup. Помощь и советы [часть 5]

Ответить
 • Просмотры: 28
Аватара пользователя
R.i.m.s.k.y.

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение R.i.m.s.k.y. »

SARATOVSKY, Gnom_aka_Lexander,

Есть антибаг: к строчке с Check вычисление места не применяется



Код:

Код: Выделить всё

[Files]
Source: ..\SVP.Distr\ffdshow\; DestDir: {tmp}; Check: (True_function);
[CODE]
function True_function(): Boolean;
begin
Result := True;
end;
Аватара пользователя
Gnom_aka_Lexander

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение Gnom_aka_Lexander »

Цитата Johny777:



поздравьте меня! Тк сделал свой вариант "выкатов и закатов"
Скрипты Inno Setup. Помощь и советы [часть 5]




Johny777, респект, только SleepEx не по назначению используешь, достаточно простого Sleep.


Цитата Johny777:



и где мне на будущее смотреть эти значения
»




Johny777, в MSDN нередко при описании какой-либо функции указывают значения используемых констант. Если нет, то в гугел я даю запрос типа const QS_KEY =, первые же результаты дают искомое, даже не нужно по ссылкам переходить.


Цитата Johny777:



но есть один недостаток - после завершения таймера не выгружается оперативка

те после каждого выката прибавляется по 4кб при закате по 4 = 8кб на один закат/выкат
Скрипты Inno Setup. Помощь и советы [часть 5]




Это не утечка, борландовский менеджер памяти для своих нужд выделяет квант памяти, равный размеру страницы памяти.
Аватара пользователя
R.i.m.s.k.y.

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение R.i.m.s.k.y. »

Цитата El Sanchez:



в MSDN нередко при описании какой-либо функции
Скрипты Inno Setup. Помощь и советы [часть 5]





Цитата El Sanchez:



в гугел я даю запрос типа const QS_KEY
Скрипты Inno Setup. Помощь и советы [часть 5]




самый быстрый вариант - в модулях дельфи - я просто ввожу константу и потом на ней правой кнопкой - "Find declaration". все что потом нужно - собрать остальные значения, если она составная.
Аватара пользователя
Gnom_aka_Lexander

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение Gnom_aka_Lexander »

Приветствую, подскажите пожалуйста, существует ли возможность запуска программы из папки {app} (программы которая туда уже распаковалась), а после её завершения продолжалась распаковка других файлов в эту папку.
Аватара пользователя
SARATOVSKY

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение SARATOVSKY »

Цитата El Sanchez:



Это не утечка, борландовский менеджер памяти для своих нужд выделяет квант памяти, равный размеру страницы памяти.
Скрипты Inno Setup. Помощь и советы [часть 5]




Это именно утечка, вот только не понятно почему...

Попробуйте написать используя TTimer, такого не будет, хотя при вызове TTimer.Enabled := True, происходит вызов функции SetTimer, а при TTimer.Enabled := False, происходит вызов функции KillTimer и при этом такой утечки не происходит.




Цитата Gnom_aka_Lexander:



и потом на ней правой кнопкой - "Find declaration"
Скрипты Inno Setup. Помощь и советы [часть 5]




Так же можно нажать Ctrl+клик мышкой
Аватара пользователя
Johny777

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение Johny777 »

JHeavy, посмотри в справке BeforeInstall и AflerInstall, с их помощью можно до или после распаковки нужного файла вызвать встроенную функцию Exec, и поскольку она подвешивает инсталл, то при использвоании флага ewNoWait есть большие шансы, что распаковка продолжится только после отработки Exec.
Аватара пользователя
SatHan

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение SatHan »

привет. при установке извлекаются некоторые файлы. из них exe bmp итд. скажите. можно сделать чтоб они работали внутри инсталятора. или хотяб брались из файла x.tmp который извлекается в %temp% а не в чистом виде?
Аватара пользователя
El Sanchez

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение El Sanchez »

Цитата El Sanchez:



SleepEx не по назначению используешь, достаточно простого Sleep.
Скрипты Inno Setup. Помощь и советы [часть 5]




уже поправил.

Теперь это функция: function Roll(Ctrl: TControl; RollDelay: Byte; InputRollInfo: DWORD): DWORD;

упростил вызов

в выкатах справа и снизу иногда нужно учитывать ширину границы формы

например $6: ... until (RollInfo $6) or (Ctrl.Top = Ctrl.Parent.Height-Ctrl.Height-ScaleY(28));


читать дальше »




Код:

Код: Выделить всё

[Setup]
AppName=The_Best_RollDemo_Ever
AppVerName=The_Best_RollDemo_Ever v 777
DefaultDirName={pf}\The_Best_RollDemo_Ever
DefaultGroupName=The_Best_RollDemo_Ever
OutputDir=.
Uninstallable=no
[code]
var
  PanelUp, PanelDown, PanelLeft, PanelRight: TPanel;
  RollInfo: DWORD;
// function SleepEx(dwMilliseconds: DWORD; bAlertable: BOOL): DWORD; external 'SleepEx@Kernel32.dll stdcall';
//  сдвиг статичный в один пиксель (не менять)
//  плюсы такого сдвига:
//  1. плавность
//  2. точность выполнения (что будет если панель высотой 70 двигать по 3 пикселя до -70)
//  3. настройка скорости задержкой (диапазон от 0 до 100 = 101 скоростей)
///////// Roll(переменная_контрола(например панель или скроллбокс или мемо), задержка(максимум 100 т.к. дальше будет некрасиво), индикатор выката)
function Roll(Ctrl: TControl; RollDelay: Byte; InputRollInfo: DWORD): DWORD;
begin
  Result := InputRollInfo;
  case Result of
    $0: repeat
          Ctrl.Top := Ctrl.Top + ScaleY(1);      /// сверху вниз и назад
          Sleep(RollDelay);
          Application.ProcessMessages;
        until (RollInfo  $0) or (Ctrl.Top = 0);
    $1: repeat  /// снизу вверх
          Ctrl.Top := Ctrl.Top - ScaleY(1);
          Sleep(RollDelay);
          Application.ProcessMessages;
        until (RollInfo  $1) or (Ctrl.Top = - Ctrl.Height);
        //////////////////////////////////////////////////////////////////
    $2: repeat
          Ctrl.Left := Ctrl.Left + ScaleX(1);    /// слева направо и назад
          Sleep(RollDelay);
          Application.ProcessMessages;
        until (RollInfo  $2) or (Ctrl.Left = 0);
    $3: repeat
          Ctrl.Left := Ctrl.Left - ScaleX(1);
          Sleep(RollDelay);
          Application.ProcessMessages;
        until (RollInfo  $3) or (Ctrl.Left = - Ctrl.Width);
        ///////////////////////////////////////////////////////////////////
    $4: repeat
          Ctrl.Left := Ctrl.Left - ScaleX(1);   /// справа налево  и назад
          Sleep(RollDelay);
          Application.ProcessMessages;
        until (RollInfo  $4) or (Ctrl.Left = Ctrl.Parent.Width-Ctrl.Width);
    $5: repeat
          Ctrl.Left := Ctrl.Left + ScaleX(1);
          Sleep(RollDelay);
          Application.ProcessMessages;
        until (RollInfo  $5) or (Ctrl.Left = Ctrl.Parent.Width);
        ////////////////////////////////////////////////////////////////////
    $6: repeat
          Ctrl.Top := Ctrl.Top - ScaleY(1);    /// снизу вверх и назад
          Sleep(RollDelay);
          Application.ProcessMessages;
        until (RollInfo  $6) or (Ctrl.Top = Ctrl.Parent.Height-Ctrl.Height);
    $7: repeat
          Ctrl.Top := Ctrl.Top + ScaleY(1);
          Sleep(RollDelay);
          Application.ProcessMessages;
        until (RollInfo  $7) or (Ctrl.Top = Ctrl.Parent.Top + Ctrl.Height);
    end;
end;
procedure UpDown(Sender: TObject);
begin
  case TButton(Sender).Caption of
   'Roll1':
    begin
      TButton(Sender).Caption:='Roll0';
//      RollInfo := Roll(PanelDown, 2, $0); // A
      RollInfo := Roll(PanelLeft, 0, $2); // B
//      RollInfo := Roll(PanelRight, 0, $4); // C
//      RollInfo := Roll(PanelUp, 0, $6);  // D
    end;
    'Roll0':
    begin
      TButton(Sender).Caption:='Roll1';
//      RollInfo := Roll(PanelDown, 2, $1); // A
      RollInfo := Roll(PanelLeft, 0, $3);  // B
//      RollInfo := Roll(PanelRight, 0, $5); // C
//      RollInfo := Roll(PanelUp, 0, $7);
        //////////// d
    end;
  end;
end;
procedure InitializeWizard();
begin
  PanelUp := TPanel.Create(WizardForm);
  with PanelUp do
  begin
    Parent := WizardForm;
    SetBounds(ScaleX(0),Parent.Top + Parent.Height,ScaleX(497),ScaleY(200));
    ParentBackground := False;
    Color := clBlue;
  end;
  PanelDown := TPanel.Create(WizardForm);
  with PanelDown do
  begin
    Parent := WizardForm;
    SetBounds(ScaleX(0),ScaleY(-200),ScaleX(497),ScaleY(200));
    ParentBackground := False;
    Color := clYellow;
  end;
  PanelLeft := TPanel.Create(WizardForm);
  with PanelLeft do
  begin
    Parent := WizardForm;
    SetBounds(ScaleX(-390),ScaleY(0),ScaleX(390),ScaleY(314));
    ParentBackground := False;
    Color := clGreen;
  end;
  PanelRight := TPanel.Create(WizardForm);
  with PanelRight do
  begin
    Parent := WizardForm;
    SetBounds(Parent.Width + ScaleX(200),ScaleY(0),ScaleX(200),ScaleY(314));
    ParentBackground := False;
    Color := clRed;
  end;
  with TButton.Create(WizardForm) do
  begin
    OnClick:= @UpDown;
    SetBounds(ScaleX(40),ScaleY(327),ScaleX(75),ScaleY(25))
    Caption:='Roll1';
    Parent:= WizardForm;
  end;
end;








Цитата LinkOFF:



как убрать ... иконку в левом верхнем углу?
Скрипты Inno Setup. Помощь и советы [часть 5]




кто-то уже спрашивал. Смотрел на форумах. это жуткий геморрой. как вариант используй скин и иконку однотонную по цвету скина

это не обязательно иконка экзешника инсталла

http://forum.ru-board.com/topic.cgi?...07&limit=1&m=1
Аватара пользователя
Mailchik

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение Mailchik »

SatHan,
читать дальше »




Код:

Код: Выделить всё

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
BitmapResource=Test:compiler:WizModernImage-IS.bmp
[Code]
procedure InitializeWizard;
 begin
  WizardForm.WizardBitmapImage.Bitmap.LoadFromResourceName(HInstance, '_IS_Test');
end;
Аватара пользователя
El Sanchez

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение El Sanchez »

Mailchik, что-то я вставить не могу. у меня InitializeWizard разделен на 4 части, создаю 5, компилирую и кнопка не уберается. не могли бы вставить?
http://rghost.ru/download/40879331/3...dishonored.iss




Mailchik, уже не нужно. я вставил.
Ответить

Вернуться в «Автоматическая установка приложений»