VCL Styles for Inno Setup

DLL VCL Styles for Inno Setup 1.5.4.1

Нет прав для скачивания

YURSHAT

Тех. админ
Администратор
Пользователь YURSHAT разместил новый ресурс:

VCL Styles for Inno Setup - VCL стили для Inno Setup

Описание:
VCL стили для Inno Setup - это бесплатный плагин (dll) с открытым исходным кодом, который позволит Вам добавлять скины в инсталляторы созданные при помощи Inno Setup.
Возможности:
- Плагин поддерживает все контроллы Inno:
  • TNewEdit
  • TPasswordEdit
  • TNewMemo...
Узнать больше об этом ресурсе...
 

sergey3695

Ветеран
Модератор
поспешил я написать что все работает. у созданных форм рамку не рисует. :nea:
 

sergey3695

Ветеран
Модератор
YURSHAT,
Код:
var
//  TestForm: TSetupForm;
  TestForm: TForm;

procedure CreateTestForm(Sender: TObject);
begin
  TestForm := TForm.Create(WizardForm);
  with TestForm do
  begin
    ClientWidth := ScaleX(400);
    ClientHeight := ScaleY(80);
    Position:= poScreenCenter;
    Caption := 'Test Form';
    ShowModal;
    Free;
  end;
end;
я ж про это. // спасибо. можно и TSetupForm везде задействовать.
Код:
#define AW = (Defined UNICODE) ? "W" : "A"

[Setup]
AppName=VCL Styles
AppVersion=1.5
DefaultDirName={pf}\VCL Styles
Compression=none
OutputDir=.

[Languages]
Name: "RU"; MessagesFile: "compiler:Languages\Russian.isl"

[Files]
Source: "VclStylesinno.dll"; Flags: dontcopy
Source: "Amakrits.vsf"; Flags: dontcopy

[Code]
var
  TestForm: TSetupForm;
  Timer: TTimer;
  OldProc: Longint;

procedure LoadVCLStyle(VClStyleFile: String); external 'LoadVCLStyle{#AW}@files:VclStylesinno.dll stdcall';
procedure UnLoadVCLStyles; external 'UnLoadVCLStyles@files:VclStylesinno.dll stdcall';

function GetDC(hWnd: HWND): LongWord; external 'GetDC@user32 stdcall';
function BitBlt(DestDC: LongWord; X, Y, Width, Height: Integer; SrcDC: LongWord; XSrc, YSrc: Integer; Rop: DWORD): BOOL; external 'BitBlt@gdi32 stdcall';
function ReleaseDC(hWnd: HWND; hDC: LongWord): Integer; external 'ReleaseDC@user32.dll stdcall';
function DwmIsCompositionEnabled(var pfEnabled: BOOL): Longint; external 'DwmIsCompositionEnabled@dwmapi.dll stdcall delayload';

function isWin6: boolean;var ver: TWindowsVersion;
begin
  GetWindowsVersionEx(ver);
if (ver.Major >= 6) then result:=true
else result:=false;
end;

function CompositionEnabled: boolean;var r: bool;
begin
if isWin6 then
if DwmIsCompositionEnabled(r) = 0 then
  result:=r else result:=false;
end;

procedure FormT(Sender: TObject);
var
  FormDC, DC: LongWord;
begin
  DC:= GetDC(TestForm.Handle);
  FormDC := GetDC(WizardForm.Handle);
  BitBlt(DC, 0, 0, WizardForm.ClientWidth, WizardForm.ClientHeight, FormDC, 0, 0, $00CC0020);
  ReleaseDC(TestForm.Handle, DC);
  ReleaseDC(WizardForm.Handle, FormDC);
end;

procedure FormM(Sender: TObject);
begin
if CompositionEnabled then
  Timer.Enabled:= false;
end;

procedure FormR(Sender: TObject);
begin
if CompositionEnabled then
  Timer.Enabled:= True;
end;

const
  GWL_STYLE = -16;
  WS_MAXIMIZEBOX = $10000;
  GWL_WNDPROC = -4;
  WM_MOVE = $3;

function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
function GetWindowLong(Wnd: HWnd; Index: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint; external 'CallWindowProcA@user32.dll stdcall';

procedure OnCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  Timer.Free;
  SetWindowlong(TestForm.Handle, GWL_WNDPROC, OldProc);
  TestForm.Free;
  CanClose:= True;
end;

function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFile('Amakrits.vsf');
  LoadVCLStyle(ExpandConstant('{tmp}\Amakrits.vsf'));

if CompositionEnabled then begin
  TestForm := CreateCustomForm;
  with TestForm do
  begin
    BorderStyle:= bsSingle;
    SetWindowLong(handle, GWL_STYLE, GetWindowLong(handle, GWL_STYLE)and(not WS_MAXIMIZEBOX));
    Left:= -1000;
    ClientWidth:= ScaleX(497);
    ClientHeight:= ScaleY(363);
    Caption := 'Test Form';
    OnCloseQuery:= @OnCloseQuery;
    Show;
  end;
end;
  Result := True;
end;

function MyProc(h: HWND; Msg, wParam, lParam: longint): Longint;
begin
if Msg=WM_MOVE then
begin
  TestForm.Left:= WizardForm.Left;
  TestForm.Top:= WizardForm.Top;
end;
  Result:= CallWindowProc(OldProc, h, Msg, wParam, lParam);
end;

procedure InitializeWizard();
begin
with WizardForm do
begin
  ClientWidth:= ScaleX(497);
  ClientHeight:= ScaleY(363);
end;
if CompositionEnabled then begin
  TestForm.Caption:= WizardForm.Caption;
  TestForm.Left:= WizardForm.Left;
  TestForm.Top:= WizardForm.Top;
  OldProc:= SetWindowLong(WizardForm.Handle, GWL_WNDPROC, CallbackAddr('MyProc'));
  Timer := TTimer.Create(MainForm);
with Timer do
begin
  Interval:= 1;
  OnTimer:=  @FormT;
end;
  Application.OnMinimize:= @FormM;
  Application.OnRestore:= @FormR;
end;
end;

procedure DeinitializeSetup();
begin
  UnLoadVCLStyles;
end;
Круто, с ботвой дружит, стили окна поддерживает :clapping:
 
Последнее редактирование:

sergey3695

Ветеран
Модератор
На XP кнопка свернуть не всегда сворачивает форму. Добавив это будет норм.
Код:
 procedure FormM(Sender: TObject);
begin
  WizardForm.Left:= WizardForm.Left-10000;
end;

procedure FormR(Sender: TObject);
begin
  WizardForm.Left:= WizardForm.Left+10000;
end;

//
Application.OnMinimize:= @FormM;
  Application.OnRestore:= @FormR;
У SelectLanguageForm и UninstallProgressForm рамку не рисует.
А в остальном все супер :happy:Попрошу протестить что получилось.
 
Последнее редактирование:

YURSHAT

Тех. админ
Администратор

sergey3695

Ветеран
Модератор
Amakrits.vsf такого не заметил
на нем смотрел. У меня Windows XP Professional SP3 VL build 2600 [Ru] UPD 18.10.2013 [Clear Чистая] (nnm) на VirtualBox стоит. Там и глядел. Сейчас возможно, ну это же виртуальная машина... но и на ней все должно быть в порядке, хотя кто его знает. Ошибка сворачивания раз из шести. Как бы установщик свернулся но форма осталась и минимизация больше не работает. Даже если я ошибся, то добавив на
Код:
Application.OnMinimize:= @FormM;
Application.OnRestore:= @FormR;
убирание за экран формы ничего страшного вроде.
Есть такое. Нужно писать разрабам
твитнул.
 

sergey3695

Ветеран
Модератор
YURSHAT, может не ядро, а "incorrect TEdit background color in some styles" - Исправлено некорректное отображение заднего фона TEdit'а в некоторых стилях.
 

sergey3695

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

YURSHAT

Тех. админ
Администратор
в твиттере а там ссылочка в твите
Ну по ссылочке issue тоже по Delphi версии вроде. А по инновскому плагину там всего одна новая ревизия (r54) с текстом коммита про общее обновление либы. Потому не стал писать еще что-то, так как точно непонятно, что конкретно сделано.
 
Последнее редактирование:
Сверху