Jump to content
Korean Random

Создание инсталляторов для модпаков на базе Inno Setup


Recommended Posts

как удалить стр создания иконки в меню пуск или отключить ее если даже будет строка [icons]?

[Setup]
DisableProgramGroupPage=yes

А в справке трудно посмотреть?

Edited by Kotyarko_O
Link to comment
Short link
Share on other sites

Почему так распаковывает

Filename: "{app}\DeSeRtod ModPack\tmpmods\7z.exe"; Parameters: "x *.7z -o..\..\res_mods\0.9.5 -y"

А так нет?

Filename: "{app}\DeSeRtod ModPack\tmpmods\7z.exe"; Parameters: "x *.7z -o..\..\res_mods\0.9.5 Common Test -y"

Есть подозрения из-за добавления Common Test

Link to comment
Short link
Share on other sites

Вот код из модпака джова , он делает вот такие кнопки

 

dll:CallbackCtrl.dll isxdl.dll,,

 

Прочие файлы :dotnetfx35setup.exe, russian.ini

 

 

 

скрипт : 

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"

[setup]
WizardImageFile=WizardImageExt.eng.bmp
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{3B6788C3-AC78-472A-BFB0-E9F4DE400C39}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

  [Files]
Source: "D:\Jove's Mod Pack Extended 0_9_1 (1)\{tmp}\btn1.png"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Jove's Mod Pack Extended 0_9_1 (1)\{tmp}\btn2.png"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Jove's Mod Pack Extended 0_9_1 (1)\{tmp}\btn3.png"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Jove's Mod Pack Extended 0_9_1 (1)\{tmp}\btn4.png"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Jove's Mod Pack Extended 0_9_1 (1)\{tmp}\btn5.png"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Jove's Mod Pack Extended 0_9_1 (1)\{tmp}\WizardImageExt.eng.bmp"; DestDir: "{app}"; Flags: ignoreversion

Source: "D:\Jove's Mod Pack Extended 0_9_1 (1)\{tmp}\botva2.dll"; DestDir: "{app}"; Flags: ignoreversion

Source: "D:\Jove's Mod Pack Extended 0_9_1 (1)\{tmp}\CallbackCtrl.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Jove's Mod Pack Extended 0_9_1 (1)\{tmp}\isxdl.dll"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

//модуль для работы с библиотекой botva2.dll версии  0.9.5
//Created by South.Tver 02.2011

const
  BTN_MAX_PATH = 1024; //не изменять !!!

  //идентификаторы событий для кнопок
  BtnClickEventID      = 1;
  BtnMouseEnterEventID = 2;
  BtnMouseLeaveEventID = 3;
  BtnMouseMoveEventID  = 4;
  BtnMouseDownEventID  = 5;
  BtnMouseUpEventID    = 6;

  //выравнивание текста на кнопках
  balLeft    = 0;  //выравнивание текста по левому краю
  balCenter  = 1;  //горизонтальное выравнивание текста по центру
  balRight   = 2;  //выравнивание текста по правому краю
  balVCenter = 4;  //вертикальное выравнивание текста по центру

type
  #ifndef UNICODE
  AnsiChar = Char;
  #endif

  TBtnEventProc = procedure(h:HWND);

  TTextBuf      = array [0..BTN_MAX_PATH-1] of AnsiChar; //не менять размерность массива !!!

//для выполнения нажатий на кнопки нужен innocallback
function WrapBtnCallback(Callback: TBtnEventProc; ParamCount: Integer): Longword; external 'wrapcallbackaddr@{tmp}\CallbackCtrl.dll stdcall delayload';

function ImgLoad(Wnd :HWND; FileName :PAnsiChar; Left, Top, Width, Height :integer; Stretch, IsBkg :boolean) :Longint; external 'ImgLoad@{tmp}\botva2.dll stdcall delayload';
//загружает изображение в память, сохраняет переданные параметры
//Wnd          - хэндл окна, в котором будет выведено изображение
//FileName     - файл изображения
//Left,Top     - координаты верхнего левого угла вывода изображения (в координатах клиентской области Wnd)
//Width,Height - ширина, высота изображения
//               если Stretch=True, то изображение будет растянуто/сжато в прямоугольной области
//               Rect.Left:=Left;
//               Rect.Top:=Top;
//               Rect.Right:=Left+Width;
//               Rect.Bottom:=Top+Height;
//               если Stretch=False, то параметры Width,Height игнорируются и вычисляются самой ImgLoad, т.е. можно передать 0
//Stretch      - масштабировать изображение или нет
//IsBkg        - если IsBkg=True, изображение будет выведено на фоне формы,
//               поверх него будут отрисованы графические объекты (TLabel, TBitmapImage и т.д.),
//               затем поверх всего будут выведены изображения с флагом IsBkg=False
//возвращаемое значение - указатель на структуру, хранящей изображение и его парметры, приведенный к типу Longint
//изображения будут выведены в той последовательности, в которой вызывается ImgLoad

procedure ImgSetVisiblePart(img:Longint; NewLeft, NewTop, NewWidth, NewHeight : integer); external 'ImgSetVisiblePart@{tmp}\botva2.dll stdcall delayload';
//сохраняет новые координаты видимой части изображения, новую ширину и высоту. в координатах оригинального изображения
//img                - значение полученное при вызове ImgLoad.
//NewLeft,NewTop     - новый левый верхний угол видимой области.
//NewWidth,NewHeight - новая ширина, высота видимой области.
//PS изначально (при вызове ImgLoad) изображение считается полностью видимым.
//   если возникла необходимость отображать только часть картинки, то используем эту процедуру

procedure ImgGetVisiblePart(img:Longint; var Left, Top, Width, Height : integer); external 'ImgGetVisiblePart@{tmp}\botva2.dll stdcall delayload';
//возвращает координаты видимой части изображения, ширину и высоту
//img                - значение полученное при вызове ImgLoad
//NewLeft,NewTop     - левый верхний угол видимой области
//NewWidth,NewHeight - ширина, высота видимой области.

procedure ImgSetPosition(img :Longint; NewLeft, NewTop, NewWidth, NewHeight :integer); external 'ImgSetPosition@{tmp}\botva2.dll stdcall delayload';
//сохраняет новые координаты для вывода изображения, новую ширину и высоту. в координатах родительского окна
//img                - значение полученное при вызове ImgLoad
//NewLeft,NewTop     - новый левый верхний угол
//NewWidth,NewHeight - новая ширина, высота. если в ImgLoad был передан Stretch=False, то NewWidth,NewHeight игнорируются

procedure ImgGetPosition(img:Longint; var Left, Top, Width, Height:integer); external 'ImgGetPosition@{tmp}\botva2.dll stdcall delayload';
//возвращает координаты вывода изображения, ширину и высоту
//img          - значение полученное при вызове ImgLoad
//Left,Top     - левый верхний угол
//Width,Height - ширина, высота.

procedure ImgSetVisibility(img :Longint; Visible :boolean); external 'ImgSetVisibility@{tmp}\botva2.dll stdcall delayload';
//сохраняет параметр видимости изображения
//img     - значение полученное при вызове ImgLoad
//Visible - видимость

function ImgGetVisibility(img:Longint):boolean; external 'ImgGetVisibility@{tmp}\botva2.dll stdcall delayload';
//img - значение полученное при вызове ImgLoad
//возвращаемое значение - видимость изображения

procedure ImgSetTransparent(img:Longint; Value:integer); external 'ImgSetTransparent@{tmp}\botva2.dll stdcall delayload';
//устанавливает прозрачность изображения
//img   - значение полученное при вызове ImgLoad
//Value - прозрачность (0-255)

function ImgGetTransparent(img:Longint):integer; external 'ImgGetTransparent@{tmp}\botva2.dll stdcall delayload';
//получить значение прозрачности
//img   - значение полученное при вызове ImgLoad
//возвращаемое значение - текущая прозрачность изображения

procedure ImgRelease(img :Longint); external 'ImgRelease@{tmp}\botva2.dll stdcall delayload';
//удаляет изображение из памяти
//img - значение полученное при вызове ImgLoad

procedure ImgApplyChanges(h:HWND); external 'ImgApplyChanges@{tmp}\botva2.dll stdcall delayload';
//формирует окончательное изображение для вывода экран,
//учитывая все изменения внесенные вызовами ImgLoad, ImgSetPosition, ImgSetVisibility, ImgRelease и обновляет окно
//h - хэндл окна, для которого необходимо сформировать новое изображение

 

function BtnCreate(hParent :HWND; Left, Top, Width, Height :integer; FileName :PAnsiChar; ShadowWidth :integer; IsCheckBtn :boolean) :HWND; external 'BtnCreate@{tmp}\botva2.dll stdcall delayload';
//hParent           - хэндл окна-родителя, на котором будет создана кнопка
//Left,Top,
//Width,Height      - без комментариев. то же что и для обычных кнопок
//FileName          - файл с изображением состояний кнопки
//                    для обычной кнопки нужно 4 состояния кнопки (соответственно 4 изображения)
//                    для кнопки с IsCheckBtn=True нужно 8 изображений (как для чекбокса)
//                    изображения состояний должны располагаться вертикально
//ShadowWidth       - кол-во пикселей от края рисунка кнопки, до реальной ее границы на рисунке.
//                    нужно чтобы состояние кнопки и курсор на ней менялись как положено
//IsCheckBtn        - если True, то будет создана кнопка (аналог CheckBox) имеющая включенное и выключенное состояние
//                    если False, то создастся обычная кнопка
//возвращаемое значение - хэндл созданной кнопки

procedure BtnSetText(h :HWND; Text :PAnsiChar); external 'BtnSetText@{tmp}\botva2.dll stdcall delayload';
//устанавливает текст на кнопке (аналог Button.Caption:='bla-bla-bla')
//h    - хэндл кнопки (результат возвращенный BtnCreate)
//Text - текст, который мы хотим увидеть на кнопке

function BtnGetText_(h:HWND; var Text:TTextBuf):integer; external 'BtnGetText@{tmp}\botva2.dll stdcall delayload';
//получает текст кнопки
//h    - хэндл кнопки (результат возвращенный BtnCreate)
//Text - буфер принимающий текст кнопки
//возвращаемое значение - длина текста

procedure BtnSetTextAlignment(h :HWND; HorIndent, VertIndent :integer; Alignment :DWORD); external 'BtnSetTextAlignment@{tmp}\botva2.dll stdcall delayload';
//устанавливает выравнивание текста на кнопке
//h          - хэндл кнопки (результат возвращенный BtnCreate)
//HorIndent  - горизонтальный отступ текста от края кнопки
//VertIndent - вертикальный отступ текста от края кнопки
//Alignment  - выравнивание текста. задается константами balLeft, balCenter, balRight, balVCenter,
//             или комбинацией balVCenter с остальными. например, balVCenter or balRight

procedure BtnSetFont(h :HWND; Font :Cardinal); external 'BtnSetFont@{tmp}\botva2.dll stdcall delayload';
//устанавливает шрифт для кнопки
//h    - хэндл кнопки (результат возвращенный BtnCreate)
//Font - дескриптор устанавливаемого шрифта
//       чтобы не мучаться с WinAPI-шными функциями можно создать шрифт стандартными средствами инно и передать его хэндл
//       например,
//       var
//         Font:TFont;
//         . . .
//       begin
//         . . .
//         Font:=TFont.Create;
//         все свойства можно не устанавливать, при создании свойства заполняются значениями по умолчанию. меняем только то что нам нужно
//         with Font do begin
//           Name:='Tahoma';
//           Size:=10;
//           . . .
//         end;
//         BtnSetFont(hBtn,Font.Handle);
//         . . .
//       end;
//       ну и при выходе из программы (или когда он станет не нужен) не забываем уничтожить свой шрифт Font.Free;

procedure BtnSetFontColor(h :HWND; NormalFontColor, FocusedFontColor, PressedFontColor, DisabledFontColor :Cardinal); external 'BtnSetFontColor@{tmp}\botva2.dll stdcall delayload';
//устанавливает цвет шрифта для кнопки во включенном и выключенном сосотоянии
//h                 - хэндл кнопки (результат возвращенный BtnCreate)
//NormalFontColor   - цвет текста на кнопе в нормальном состоянии
//FocusedFontColor  - цвет текста на кнопе в подсвеченном состоянии
//PressedFontColor  - цвет текста на кнопе в нажатом состоянии
//DisabledFontColor - цвет текста на кнопе в отключенном состоянии

function BtnGetVisibility(h :HWND) :boolean; external 'BtnGetVisibility@{tmp}\botva2.dll stdcall delayload';
//получает видимость кнопки (аналог f:=Button.Visible)
//h - хэндл кнопки (результат возвращенный BtnCreate)
//возвращаемое значение - видимость кнопки

procedure BtnSetVisibility(h :HWND; Value :boolean); external 'BtnSetVisibility@{tmp}\botva2.dll stdcall delayload';
//устанавливает видимость кнопки (аналог Button.Visible:=True / Button.Visible:=False)
//h     - хэндл кнопки (результат возвращенный BtnCreate)
//Value - значение видимости

function BtnGetEnabled(h :HWND) :boolean; external 'BtnGetEnabled@{tmp}\botva2.dll stdcall delayload';
//получает доступность кнопки (аналог f:=Button.Enabled)
//h - хэндл кнопки (результат возвращенный BtnCreate)
//возвращаемое значение - доступность кнопки

procedure BtnSetEnabled(h :HWND; Value :boolean); external 'BtnSetEnabled@{tmp}\botva2.dll stdcall delayload';
//устанвливает доступность кнопки (аналог Button.Enabled:=True / Button.Enabled:=False)
//h - хэндл кнопки (результат возвращенный BtnCreate)
//Value - значение доступности кнопки

function BtnGetChecked(h :HWND) :boolean; external 'BtnGetChecked@{tmp}\botva2.dll stdcall delayload';
//получает состояние (включена/выключена) кнопки (аналог f:=Checkbox.Checked)
//h - хэндл кнопки (результат возвращенный BtnCreate)

procedure BtnSetChecked(h :HWND; Value :boolean); external 'BtnSetChecked@{tmp}\botva2.dll stdcall delayload';
//устанвливает состояние (включена/выключена) кнопки (аналог Сheckbox.Checked:=True / Сheckbox.Checked:=False)
//h - хэндл кнопки (результат возвращенный BtnCreate)
//Value - значение состояния кнопки

procedure BtnSetEvent(h :HWND; EventID :integer; Event :Longword); external 'BtnSetEvent@{tmp}\botva2.dll stdcall delayload';
//устанавливает событие для кнопки
//h       - хэндл кнопки (результат возвращенный BtnCreate)
//EventID - идентификатор события, заданный константами   BtnClickEventID, BtnMouseEnterEventID, BtnMouseLeaveEventID, BtnMouseMoveEventID
//Event   - адрес процедуры выполняемой при наступлении указанного события
//пример использования - BtnSetEvent(hBtn, BtnClickEventID, WrapBtnCallback(@BtnClick,1));

procedure BtnGetPosition(h:HWND; var Left, Top, Width, Height: integer);  external 'BtnGetPosition@{tmp}\botva2.dll stdcall delayload';
//получает координаты левого верхнего угла и размер кнопки
//h             - хэндл кнопки (результат возвращенный BtnCreate)
//Left, Top     - координаты верхнего левого угла (в координатах родительского окна)
//Width, Height - ширина, высота кнопки

procedure BtnSetPosition(h:HWND; NewLeft, NewTop, NewWidth, NewHeight: integer);  external 'BtnSetPosition@{tmp}\botva2.dll stdcall delayload';
//устанавливает координаты левого верхнего угла и размер кнопки
//h                   - хэндл кнопки (результат возвращенный BtnCreate)
//NewLeft, NewTop     - новые координаты верхнего левого угла (в координатах родительского окна)
//NewWidth, NewHeight - новые ширина, высота кнопки

procedure BtnRefresh(h :HWND); external 'BtnRefresh@{tmp}\botva2.dll stdcall delayload';
//немедленно перерисовывает кнопку, в обход очереди сообщений. вызывать, если кнопка не успевает перерисовываться
//h - хэндл кнопки (результат возвращенный BtnCreate)

procedure BtnSetCursor(h:HWND; hCur:Cardinal); external 'BtnSetCursor@{tmp}\botva2.dll stdcall delayload';
//устанавливает курсор для кнопки
//h    - хэндл кнопки (результат возвращенный BtnCreate)
//hCur - дескриптор устанавливаемого курсора
//DestroyCursor вызывать не обязательно, он будет уничтожен при вызове gdipShutDown;

function GetSysCursorHandle(id:integer):Cardinal; external 'GetSysCursorHandle@{tmp}\botva2.dll stdcall delayload';
//загружает стандартный курсор по его идентификатору
//id - идентификатор стандартного курсора. идентификаторы стандартных курсоров задаются константами OCR_... , значения которых ищем в инете
//возвращаемое значение  - дескриптор загруженного курсора

procedure gdipShutdown; external 'gdipShutdown@{tmp}\botva2.dll stdcall delayload';
//обязательно вызвать при завершении приложения

 

procedure CreateFormFromImage(h:HWND; FileName:PAnsiChar); external 'CreateFormFromImage@{tmp}\botva2.dll stdcall delayload';
//создать форму по PNG-рисунку (в принципе можно использовать другие форматы изображений)
//h        - хэндл окна
//FileName - путь к файлу изображения
//на такой форме не будут видны контролы (кнопки, чекбоксы, эдиты и т.д.) !!!

function CreateBitmapRgn(DC: LongWord; Bitmap: HBITMAP; TransClr: DWORD; dX:integer; dY:integer): LongWord; external 'CreateBitmapRgn@{tmp}\botva2.dll stdcall delayload';
//создать регион из битмапа
//DC       - контекст формы
//Bitmap   - битмап по которому будем строить регион
//TransClr - цвет пикселей, которые не будут включены в регион (прозрачный цвет)
//dX,dY    - смещение региона на форме

procedure SetMinimizeAnimation(Value: Boolean); external 'SetMinimizeAnimation@{tmp}\botva2.dll stdcall delayload';
//включить/выклюсить анимацию при сворачивании окон

function GetMinimizeAnimation: Boolean; external 'GetMinimizeAnimation@{tmp}\botva2.dll stdcall delayload';
//получить текущее состояние анимации сворачивания окон

function ArrayOfAnsiCharToAnsiString(a:TTextBuf):AnsiString;
var
  i:integer;
begin
  i:=0;
  Result:='';
  while a[i]<>#0 do begin
    Result:=Result+a[i];
    i:=i+1;
  end;
end;

function BtnGetText(hBtn:HWND):AnsiString;
var
  buf:TTextBuf;
begin
  BtnGetText_(hBtn,buf);
  Result:=ArrayOfAnsiCharToAnsiString(buf); //медленно работает, как по другому сделать хз
end;

post-28876-0-91292500-1417953680_thumb.jpg

post-28876-0-48343200-1417953732_thumb.png

post-28876-0-76989600-1417953732_thumb.png

post-28876-0-29141200-1417953733_thumb.png

post-28876-0-57989500-1417953733_thumb.png

post-28876-0-75013900-1417953733_thumb.png

Edited by Pokaritel_VBR
  • Downvote 1
Link to comment
Short link
Share on other sites

Вот код из модпака джова , он делает вот такие кнопки

 

dll:CallbackCtrl.dll isxdl.dll,,

 

Причие файлы :dotnetfx35setup.exe, russian.ini

 

 

 

скрипт : 

; Script generated by the Inno Setup Script Wizard.

; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "My Program"

#define MyAppVersion "1.5"

#define MyAppPublisher "My Company, Inc."

#define MyAppURL "http://www.example.com/"

#define MyAppExeName "MyProg.exe"

[setup]

WizardImageFile=WizardImageExt.eng.bmp

; NOTE: The value of AppId uniquely identifies this application.

; Do not use the same AppId value in installers for other applications.

; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)

AppId={{3B6788C3-AC78-472A-BFB0-E9F4DE400C39}

AppName={#MyAppName}

AppVersion={#MyAppVersion}

;AppVerName={#MyAppName} {#MyAppVersion}

AppPublisher={#MyAppPublisher}

AppPublisherURL={#MyAppURL}

AppSupportURL={#MyAppURL}

AppUpdatesURL={#MyAppURL}

DefaultDirName={pf}\{#MyAppName}

DefaultGroupName={#MyAppName}

OutputBaseFilename=setup

Compression=lzma

SolidCompression=yes

[Languages]

Name: "english"; MessagesFile: "compiler:Default.isl"

  [Files]

Source: "D:\Jove's Mod Pack Extended 0_9_1 (1)\{tmp}\btn1.png"; DestDir: "{app}"; Flags: ignoreversion

Source: "D:\Jove's Mod Pack Extended 0_9_1 (1)\{tmp}\btn2.png"; DestDir: "{app}"; Flags: ignoreversion

Source: "D:\Jove's Mod Pack Extended 0_9_1 (1)\{tmp}\btn3.png"; DestDir: "{app}"; Flags: ignoreversion

Source: "D:\Jove's Mod Pack Extended 0_9_1 (1)\{tmp}\btn4.png"; DestDir: "{app}"; Flags: ignoreversion

Source: "D:\Jove's Mod Pack Extended 0_9_1 (1)\{tmp}\btn5.png"; DestDir: "{app}"; Flags: ignoreversion

Source: "D:\Jove's Mod Pack Extended 0_9_1 (1)\{tmp}\WizardImageExt.eng.bmp"; DestDir: "{app}"; Flags: ignoreversion

Source: "D:\Jove's Mod Pack Extended 0_9_1 (1)\{tmp}\botva2.dll"; DestDir: "{app}"; Flags: ignoreversion

Source: "D:\Jove's Mod Pack Extended 0_9_1 (1)\{tmp}\CallbackCtrl.dll"; DestDir: "{app}"; Flags: ignoreversion

Source: "D:\Jove's Mod Pack Extended 0_9_1 (1)\{tmp}\isxdl.dll"; DestDir: "{app}"; Flags: ignoreversion

; NOTE: Don't use "Flags: ignoreversion" on any shared system files

//модуль для работы с библиотекой botva2.dll версии  0.9.5

//Created by South.Tver 02.2011const

  BTN_MAX_PATH = 1024; //не изменять !!!  //идентификаторы событий для кнопок

  BtnClickEventID      = 1;

  BtnMouseEnterEventID = 2;

  BtnMouseLeaveEventID = 3;

  BtnMouseMoveEventID  = 4;

  BtnMouseDownEventID  = 5;

  BtnMouseUpEventID    = 6;  //выравнивание текста на кнопках

  balLeft    = 0;  //выравнивание текста по левому краю

  balCenter  = 1;  //горизонтальное выравнивание текста по центру

  balRight   = 2;  //выравнивание текста по правому краю

  balVCenter = 4;  //вертикальное выравнивание текста по центруtype

  #ifndef UNICODE

  AnsiChar = Char;

  #endif  TBtnEventProc = procedure(h:HWND);  TTextBuf      = array [0..BTN_MAX_PATH-1] of AnsiChar; //не менять размерность массива !!!//для выполнения нажатий на кнопки нужен innocallback

function WrapBtnCallback(Callback: TBtnEventProc; ParamCount: Integer): Longword; external 'wrapcallbackaddr@{tmp}\CallbackCtrl.dll stdcall delayload';function ImgLoad(Wnd :HWND; FileName :PAnsiChar; Left, Top, Width, Height :integer; Stretch, IsBkg :boolean) :Longint; external 'ImgLoad@{tmp}\botva2.dll stdcall delayload';

//загружает изображение в память, сохраняет переданные параметры

//Wnd          - хэндл окна, в котором будет выведено изображение

//FileName     - файл изображения

//Left,Top     - координаты верхнего левого угла вывода изображения (в координатах клиентской области Wnd)

//Width,Height - ширина, высота изображения

//               если Stretch=True, то изображение будет растянуто/сжато в прямоугольной области

//               Rect.Left:=Left;

//               Rect.Top:=Top;

//               Rect.Right:=Left+Width;

//               Rect.Bottom:=Top+Height;

//               если Stretch=False, то параметры Width,Height игнорируются и вычисляются самой ImgLoad, т.е. можно передать 0

//Stretch      - масштабировать изображение или нет

//IsBkg        - если IsBkg=True, изображение будет выведено на фоне формы,

//               поверх него будут отрисованы графические объекты (TLabel, TBitmapImage и т.д.),

//               затем поверх всего будут выведены изображения с флагом IsBkg=False

//возвращаемое значение - указатель на структуру, хранящей изображение и его парметры, приведенный к типу Longint

//изображения будут выведены в той последовательности, в которой вызывается ImgLoadprocedure ImgSetVisiblePart(img:Longint; NewLeft, NewTop, NewWidth, NewHeight : integer); external 'ImgSetVisiblePart@{tmp}\botva2.dll stdcall delayload';

//сохраняет новые координаты видимой части изображения, новую ширину и высоту. в координатах оригинального изображения

//img                - значение полученное при вызове ImgLoad.

//NewLeft,NewTop     - новый левый верхний угол видимой области.

//NewWidth,NewHeight - новая ширина, высота видимой области.

//PS изначально (при вызове ImgLoad) изображение считается полностью видимым.

//   если возникла необходимость отображать только часть картинки, то используем эту процедуруprocedure ImgGetVisiblePart(img:Longint; var Left, Top, Width, Height : integer); external 'ImgGetVisiblePart@{tmp}\botva2.dll stdcall delayload';

//возвращает координаты видимой части изображения, ширину и высоту

//img                - значение полученное при вызове ImgLoad

//NewLeft,NewTop     - левый верхний угол видимой области

//NewWidth,NewHeight - ширина, высота видимой области.procedure ImgSetPosition(img :Longint; NewLeft, NewTop, NewWidth, NewHeight :integer); external 'ImgSetPosition@{tmp}\botva2.dll stdcall delayload';

//сохраняет новые координаты для вывода изображения, новую ширину и высоту. в координатах родительского окна

//img                - значение полученное при вызове ImgLoad

//NewLeft,NewTop     - новый левый верхний угол

//NewWidth,NewHeight - новая ширина, высота. если в ImgLoad был передан Stretch=False, то NewWidth,NewHeight игнорируютсяprocedure ImgGetPosition(img:Longint; var Left, Top, Width, Height:integer); external 'ImgGetPosition@{tmp}\botva2.dll stdcall delayload';

//возвращает координаты вывода изображения, ширину и высоту

//img          - значение полученное при вызове ImgLoad

//Left,Top     - левый верхний угол

//Width,Height - ширина, высота.procedure ImgSetVisibility(img :Longint; Visible :boolean); external 'ImgSetVisibility@{tmp}\botva2.dll stdcall delayload';

//сохраняет параметр видимости изображения

//img     - значение полученное при вызове ImgLoad

//Visible - видимостьfunction ImgGetVisibility(img:Longint):boolean; external 'ImgGetVisibility@{tmp}\botva2.dll stdcall delayload';

//img - значение полученное при вызове ImgLoad

//возвращаемое значение - видимость изображенияprocedure ImgSetTransparent(img:Longint; Value:integer); external 'ImgSetTransparent@{tmp}\botva2.dll stdcall delayload';

//устанавливает прозрачность изображения

//img   - значение полученное при вызове ImgLoad

//Value - прозрачность (0-255)function ImgGetTransparent(img:Longint):integer; external 'ImgGetTransparent@{tmp}\botva2.dll stdcall delayload';

//получить значение прозрачности

//img   - значение полученное при вызове ImgLoad

//возвращаемое значение - текущая прозрачность изображенияprocedure ImgRelease(img :Longint); external 'ImgRelease@{tmp}\botva2.dll stdcall delayload';

//удаляет изображение из памяти

//img - значение полученное при вызове ImgLoadprocedure ImgApplyChanges(h:HWND); external 'ImgApplyChanges@{tmp}\botva2.dll stdcall delayload';

//формирует окончательное изображение для вывода экран,

//учитывая все изменения внесенные вызовами ImgLoad, ImgSetPosition, ImgSetVisibility, ImgRelease и обновляет окно

//h - хэндл окна, для которого необходимо сформировать новое изображение function BtnCreate(hParent :HWND; Left, Top, Width, Height :integer; FileName :PAnsiChar; ShadowWidth :integer; IsCheckBtn :boolean) :HWND; external 'BtnCreate@{tmp}\botva2.dll stdcall delayload';

//hParent           - хэндл окна-родителя, на котором будет создана кнопка

//Left,Top,

//Width,Height      - без комментариев. то же что и для обычных кнопок

//FileName          - файл с изображением состояний кнопки

//                    для обычной кнопки нужно 4 состояния кнопки (соответственно 4 изображения)

//                    для кнопки с IsCheckBtn=True нужно 8 изображений (как для чекбокса)

//                    изображения состояний должны располагаться вертикально

//ShadowWidth       - кол-во пикселей от края рисунка кнопки, до реальной ее границы на рисунке.

//                    нужно чтобы состояние кнопки и курсор на ней менялись как положено

//IsCheckBtn        - если True, то будет создана кнопка (аналог CheckBox) имеющая включенное и выключенное состояние

//                    если False, то создастся обычная кнопка

//возвращаемое значение - хэндл созданной кнопкиprocedure BtnSetText(h :HWND; Text :PAnsiChar); external 'BtnSetText@{tmp}\botva2.dll stdcall delayload';

//устанавливает текст на кнопке (аналог Button.Caption:='bla-bla-bla')

//h    - хэндл кнопки (результат возвращенный BtnCreate)

//Text - текст, который мы хотим увидеть на кнопкеfunction BtnGetText_(h:HWND; var Text:TTextBuf):integer; external 'BtnGetText@{tmp}\botva2.dll stdcall delayload';

//получает текст кнопки

//h    - хэндл кнопки (результат возвращенный BtnCreate)

//Text - буфер принимающий текст кнопки

//возвращаемое значение - длина текстаprocedure BtnSetTextAlignment(h :HWND; HorIndent, VertIndent :integer; Alignment :DWORD); external 'BtnSetTextAlignment@{tmp}\botva2.dll stdcall delayload';

//устанавливает выравнивание текста на кнопке

//h          - хэндл кнопки (результат возвращенный BtnCreate)

//HorIndent  - горизонтальный отступ текста от края кнопки

//VertIndent - вертикальный отступ текста от края кнопки

//Alignment  - выравнивание текста. задается константами balLeft, balCenter, balRight, balVCenter,

//             или комбинацией balVCenter с остальными. например, balVCenter or balRightprocedure BtnSetFont(h :HWND; Font :Cardinal); external 'BtnSetFont@{tmp}\botva2.dll stdcall delayload';

//устанавливает шрифт для кнопки

//h    - хэндл кнопки (результат возвращенный BtnCreate)

//Font - дескриптор устанавливаемого шрифта

//       чтобы не мучаться с WinAPI-шными функциями можно создать шрифт стандартными средствами инно и передать его хэндл

//       например,

//       var

//         Font:TFont;

//         . . .

//       begin

//         . . .

//         Font:=TFont.Create;

//         все свойства можно не устанавливать, при создании свойства заполняются значениями по умолчанию. меняем только то что нам нужно

//         with Font do begin

//           Name:='Tahoma';

//           Size:=10;

//           . . .

//         end;

//         BtnSetFont(hBtn,Font.Handle);

//         . . .

//       end;

//       ну и при выходе из программы (или когда он станет не нужен) не забываем уничтожить свой шрифт Font.Free;procedure BtnSetFontColor(h :HWND; NormalFontColor, FocusedFontColor, PressedFontColor, DisabledFontColor :Cardinal); external 'BtnSetFontColor@{tmp}\botva2.dll stdcall delayload';

//устанавливает цвет шрифта для кнопки во включенном и выключенном сосотоянии

//h                 - хэндл кнопки (результат возвращенный BtnCreate)

//NormalFontColor   - цвет текста на кнопе в нормальном состоянии

//FocusedFontColor  - цвет текста на кнопе в подсвеченном состоянии

//PressedFontColor  - цвет текста на кнопе в нажатом состоянии

//DisabledFontColor - цвет текста на кнопе в отключенном состоянииfunction BtnGetVisibility(h :HWND) :boolean; external 'BtnGetVisibility@{tmp}\botva2.dll stdcall delayload';

//получает видимость кнопки (аналог f:=Button.Visible)

//h - хэндл кнопки (результат возвращенный BtnCreate)

//возвращаемое значение - видимость кнопкиprocedure BtnSetVisibility(h :HWND; Value :boolean); external 'BtnSetVisibility@{tmp}\botva2.dll stdcall delayload';

//устанавливает видимость кнопки (аналог Button.Visible:=True / Button.Visible:=False)

//h     - хэндл кнопки (результат возвращенный BtnCreate)

//Value - значение видимостиfunction BtnGetEnabled(h :HWND) :boolean; external 'BtnGetEnabled@{tmp}\botva2.dll stdcall delayload';

//получает доступность кнопки (аналог f:=Button.Enabled)

//h - хэндл кнопки (результат возвращенный BtnCreate)

//возвращаемое значение - доступность кнопкиprocedure BtnSetEnabled(h :HWND; Value :boolean); external 'BtnSetEnabled@{tmp}\botva2.dll stdcall delayload';

//устанвливает доступность кнопки (аналог Button.Enabled:=True / Button.Enabled:=False)

//h - хэндл кнопки (результат возвращенный BtnCreate)

//Value - значение доступности кнопкиfunction BtnGetChecked(h :HWND) :boolean; external 'BtnGetChecked@{tmp}\botva2.dll stdcall delayload';

//получает состояние (включена/выключена) кнопки (аналог f:=Checkbox.Checked)

//h - хэндл кнопки (результат возвращенный BtnCreate)procedure BtnSetChecked(h :HWND; Value :boolean); external 'BtnSetChecked@{tmp}\botva2.dll stdcall delayload';

//устанвливает состояние (включена/выключена) кнопки (аналог Сheckbox.Checked:=True / Сheckbox.Checked:=False)

//h - хэндл кнопки (результат возвращенный BtnCreate)

//Value - значение состояния кнопкиprocedure BtnSetEvent(h :HWND; EventID :integer; Event :Longword); external 'BtnSetEvent@{tmp}\botva2.dll stdcall delayload';

//устанавливает событие для кнопки

//h       - хэндл кнопки (результат возвращенный BtnCreate)

//EventID - идентификатор события, заданный константами   BtnClickEventID, BtnMouseEnterEventID, BtnMouseLeaveEventID, BtnMouseMoveEventID

//Event   - адрес процедуры выполняемой при наступлении указанного события

//пример использования - BtnSetEvent(hBtn, BtnClickEventID, WrapBtnCallback(@BtnClick,1));procedure BtnGetPosition(h:HWND; var Left, Top, Width, Height: integer);  external 'BtnGetPosition@{tmp}\botva2.dll stdcall delayload';

//получает координаты левого верхнего угла и размер кнопки

//h             - хэндл кнопки (результат возвращенный BtnCreate)

//Left, Top     - координаты верхнего левого угла (в координатах родительского окна)

//Width, Height - ширина, высота кнопкиprocedure BtnSetPosition(h:HWND; NewLeft, NewTop, NewWidth, NewHeight: integer);  external 'BtnSetPosition@{tmp}\botva2.dll stdcall delayload';

//устанавливает координаты левого верхнего угла и размер кнопки

//h                   - хэндл кнопки (результат возвращенный BtnCreate)

//NewLeft, NewTop     - новые координаты верхнего левого угла (в координатах родительского окна)

//NewWidth, NewHeight - новые ширина, высота кнопкиprocedure BtnRefresh(h :HWND); external 'BtnRefresh@{tmp}\botva2.dll stdcall delayload';

//немедленно перерисовывает кнопку, в обход очереди сообщений. вызывать, если кнопка не успевает перерисовываться

//h - хэндл кнопки (результат возвращенный BtnCreate)procedure BtnSetCursor(h:HWND; hCur:Cardinal); external 'BtnSetCursor@{tmp}\botva2.dll stdcall delayload';

//устанавливает курсор для кнопки

//h    - хэндл кнопки (результат возвращенный BtnCreate)

//hCur - дескриптор устанавливаемого курсора

//DestroyCursor вызывать не обязательно, он будет уничтожен при вызове gdipShutDown;function GetSysCursorHandle(id:integer):Cardinal; external 'GetSysCursorHandle@{tmp}\botva2.dll stdcall delayload';

//загружает стандартный курсор по его идентификатору

//id - идентификатор стандартного курсора. идентификаторы стандартных курсоров задаются константами OCR_... , значения которых ищем в инете

//возвращаемое значение  - дескриптор загруженного курсора

procedure gdipShutdown; external 'gdipShutdown@{tmp}\botva2.dll stdcall delayload';

//обязательно вызвать при завершении приложения

 

procedure CreateFormFromImage(h:HWND; FileName:PAnsiChar); external 'CreateFormFromImage@{tmp}\botva2.dll stdcall delayload';

//создать форму по PNG-рисунку (в принципе можно использовать другие форматы изображений)

//h        - хэндл окна

//FileName - путь к файлу изображения

//на такой форме не будут видны контролы (кнопки, чекбоксы, эдиты и т.д.) !!!

function CreateBitmapRgn(DC: LongWord; Bitmap: HBITMAP; TransClr: DWORD; dX:integer; dY:integer): LongWord; external 'CreateBitmapRgn@{tmp}\botva2.dll stdcall delayload';

//создать регион из битмапа

//DC       - контекст формы

//Bitmap   - битмап по которому будем строить регион

//TransClr - цвет пикселей, которые не будут включены в регион (прозрачный цвет)

//dX,dY    - смещение региона на форме

procedure SetMinimizeAnimation(Value: Boolean); external 'SetMinimizeAnimation@{tmp}\botva2.dll stdcall delayload';

//включить/выклюсить анимацию при сворачивании окон

function GetMinimizeAnimation: Boolean; external 'GetMinimizeAnimation@{tmp}\botva2.dll stdcall delayload';

//получить текущее состояние анимации сворачивания окон

function ArrayOfAnsiCharToAnsiString(a:TTextBuf):AnsiString;

var

  i:integer;

begin

  i:=0;

  Result:='';

  while a[i]<>#0 do begin

    Result:=Result+a[i];

    i:=i+1;

  end;

end;

function BtnGetText(hBtn:HWND):AnsiString;

var

  buf:TTextBuf;

begin

  BtnGetText_(hBtn,buf);

  Result:=ArrayOfAnsiCharToAnsiString(buf); //медленно работает, как по другому сделать хз

end;

и что тебе надо? я не понял

Link to comment
Short link
Share on other sites

@Pokaritel_VBR, слушай, ты скинул обычный скрипт ботвы. Пример которого есть на всех сайтах, связанных с инно. В том числе, и в примерах, которые я скидывал (они есть в шапке).

И какой реакции ты ещё хотел?

Edited by Kotyarko_O
  • Upvote 1
Link to comment
Short link
Share on other sites

И вопрос абсолютно идентичен, ага.

Зачем тебе это?

attachicon.gifImScripts.rar

спасибо, а есть такие тупые которые поверх ставят так так что то не скачалось,вот и ищу 

а где весть текст редактировать,чет не найти 

Link to comment
Short link
Share on other sites

а есть такие тупые которые поверх ставят так так что то не скачалось,вот и ищу

Я ничего не понял.

 

а где весть текст редактировать,чет не найти

ShowMessageEx.iss.

И в файле локализации "SetupAppRunningError".

 

з.ы. легче использовать такой способ:

Procedure OneSetup();
begin
 If FindWindowByClassName('TWizardForm') <> 0 then
 begin
  MsgBoxEx(0, 'Одна из копий установщика уже запущена.',
   '', MB_OK or MB_ICONINFORMATION, 0, 0);
  Abort;
 end;
end;

Function InitializeSetup(): Boolean;
begin
 OneSetup();
 Result := True;
end;

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

 

з.з.ы. Ну а может это и плюс (нефиг несколько установщиков запускать).

 

з.з.з.ы. Ах, да, чуть не забыл: в этом варианте используется AppId. И лучше сгенерировать свой, который будет уникальным. Иначе будет принимать остальные запущенные установщики за копию твоего. Или просто сделать директиву своего, если уже имеется.

Edited by Kotyarko_O
Link to comment
Short link
Share on other sites

Я ничего не понял.

 

ShowMessageEx.iss.

И в файле локализации "SetupAppRunningError".

 

з.ы. легче использовать такой способ:

Procedure OneSetup();
begin
 If FindWindowByClassName('TWizardForm') <> 0 then
 begin
  MsgBoxEx(0, 'Одна из копий установщика уже запущена.',
   '', MB_OK or MB_ICONINFORMATION, 0, 0);
  Abort;
 end;
end;

Function InitializeSetup(): Boolean;
begin
 OneSetup();
 Result := True;
end;

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

 

з.з.ы. Ну а может это и плюс (нефиг несколько установщиков запускать).

 

з.з.з.ы. Ах, да, чуть не забыл: в этом варианте используется AppId. И лучше сгенерировать свой, который будет уникальным. Иначе будет принимать остальные запущенные установщики за копию твоего. Или просто сделать директиву своего, если уже имеется.

понял спасибо

как думаете стоит этот код добавлять или не надо?

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
AppId=wwwwwwwwwwwwww
[code]
function UninstallMyApp(): Boolean;
var
    Buff: String;
    i: Integer;
begin
    Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1', 'UninstallString', Buff );
    if not Result then Result := not FileExists(RemoveQuotes(Buff));
    if not Result then if MsgBox('Перед установкой необходимо удалить предыдущую версию приложения. Продолжить?', mbError, MB_YESNO) = IDYES then
    try
        Exec(RemoveQuotes(Buff), '', ExtractFilePath(RemoveQuotes(Buff)), SW_SHOW, ewWaitUntilTerminated, i);
    finally
        Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1', 'UninstallString', Buff );
        if not Result then MsgBox('Удаление завершилось неудачей, бывай!', mbError, MB_OK);
    end;
end;
function InitializeSetup(): Boolean;
begin
    Result := UninstallMyApp();
end;
Link to comment
Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...