tihiy_don
Старожил

VCL Styles for Inno Setup
Introduction As part of the VCL Styles Utils project, I made a plugin (dll) to skin the installers created by Inno setup. The current size of the plugin is about 1.6 mb, but when is included (and c…
Смотрите видео ниже, чтобы узнать, как установить наш сайт в качестве веб-приложения на домашнем экране.
Примечание: Эта возможность может быть недоступна в некоторых браузерах.
Все есть в папке
А то что версии Inno отличаются, вам ни о чем не говорит?Сравните две картинки пожалуйста, левая картна была скомпилирована в Ультра версии, правая в обычной. Обе версии естественно Юникод. Так вот, почему-то ИнноСетапУльтра портит существенно качество картинки... (код идентичный, если что компилировал, естественно картинки тоже). Можете помочь как исправить?
А то что версии Inno отличаются, вам ни о чем не говорит?
Там без приглядывания видно)К вашей картинке никто не будет приглядываться.
та особо не нужно, я добавил всего лишь 3 Wizard картинки (вначало и в конец + маленькую), единственное почему я использую версию Ультра - это то что в ней мой код читается, на 5.6.1 он к сожалению не пашет( то бишь часть кода не пашет, так правильнее будет сказать, ибо очень многие кодЫ брал с инета и они заточены под версию Ультра, в том то и дело... Но спасибо за то что скинули, я завтра посмотрю что там. Я просто не могу переделать рабочий код (который работает на Ультра) в тот, который будет работать на 5.6.1 (u)...Если вам нужно вставлять картинки[/URL]
Так договоритесь с тем кто может с этим помочь.Я просто не могу переделать рабочий код (который работает на Ультра) в тот, который будет работать на 5.6.1 (u)...
[Code]
const
WM_NCLBUTTONDOWN = $00A1; // нажатие левой кнопки мыши по неклиентской области окна
HTCAPTION = 2; // константа определяет заголовок окна
GWL_WNDPROC = -4;
function SetLayeredWindowAttributes(hwnd: HWND; crKey: TColor; bAlpha: BYTE; dwFlags: DWORD): Boolean; external 'SetLayeredWindowAttributes@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint; external 'CallWindowProcA@user32.dll stdcall';
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 ReleaseCapture(): Longint; external 'ReleaseCapture@user32.dll stdcall';
var
OldProc: Longint;
function MyProc(h: HWND; Msg, wParam, lParam: longint): Longint;
begin
if (Msg = WM_NCLBUTTONDOWN) and (wParam = HTCAPTION) then begin
SetWindowLong(h, (-20), GetWindowLong(h, (-20)) or $80000);
SetLayeredWindowAttributes(h, 0, 150, 2); // делаем окно полупрозрачным изменяя bAlpha - у меня 150
ReleaseCapture;
SendMessage(WizardForm.Handle,$0112,$F012,0);
SetWindowLong(h, (-20), GetWindowLong(h, (-20)) or $80000);
SetLayeredWindowAttributes(h, 0, 255, 2); // делаем окно снова непрозрачным bAlpha = 255
Result:= 0;
Exit;
end;
Result:= CallWindowProc(OldProc, h, Msg, wParam, lParam);
end;
procedure InitializeWizard();
begin
OldProc:= SetWindowLong(WizardForm.Handle, GWL_WNDPROC, CallbackAddr('MyProc')); { для стекла }
end;
procedure DeinitializeSetup();
begin
SetWindowlong(WizardForm.Handle, GWL_WNDPROC, OldProc);
end;
@Vlad302002, вам нужно добавить себе в установщик библиотеку CallbackCtrl.dll с вызываемой функцией тогда появится аналогичный функционал, при котором нужно будет сменить только одну строчку представленного кода тогда и на 5.6.1 заработает.
а не надо просто тупо заменой заниматься.замена CallbackAddr на CallbackCtrl в строчке OldProc:
[Code]
const
WM_NCLBUTTONDOWN = $00A1; // нажатие левой кнопки мыши по неклиентской области окна
HTCAPTION = 2; // константа определяет заголовок окна
GWL_WNDPROC = -4;
function SetLayeredWindowAttributes(hwnd: HWND; crKey: TColor; bAlpha: BYTE; dwFlags: DWORD): Boolean; external 'SetLayeredWindowAttributes@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint; external 'CallWindowProcA@user32.dll stdcall';
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 ReleaseCapture(): Longint; external 'ReleaseCapture@user32.dll stdcall';
var
OldProc: Longint;
function MyProc(h: HWND; Msg, wParam, lParam: longint): Longint;
begin
if (Msg = WM_NCLBUTTONDOWN) and (wParam = HTCAPTION) then begin
SetWindowLong(h, (-20), GetWindowLong(h, (-20)) or $80000);
SetLayeredWindowAttributes(h, 0, 150, 2); // делаем окно полупрозрачным изменяя bAlpha - у меня 150
ReleaseCapture;
SendMessage(WizardForm.Handle,$0112,$F012,0);
SetWindowLong(h, (-20), GetWindowLong(h, (-20)) or $80000);
SetLayeredWindowAttributes(h, 0, 255, 2); // делаем окно снова непрозрачным bAlpha = 255
Result:= 0;
Exit;
end;
Result:= CallWindowProc(OldProc, h, Msg, wParam, lParam);
end;
procedure InitializeWizard();
begin
OldProc:= SetWindowLong(WizardForm.Handle, GWL_WNDPROC, CallbackAddr('MyProc')); { для стекла }
end;
procedure DeinitializeSetup();
begin
SetWindowlong(WizardForm.Handle, GWL_WNDPROC, OldProc);
end;
[Code]
//--Действие с CallBackCtrl-----
type
TCallbackProcI = function(h:hWnd;Msg,wParam,lParam:Longint):Longint;
//----------------------------------------------
const
WM_NCLBUTTONDOWN = $00A1; // нажатие левой кнопки мыши по неклиентской области окна
HTCAPTION = 2; // константа определяет заголовок окна
GWL_WNDPROC = -4;
//--Действие с CallBackCtrl-----
function WndProcCallBackI(Callback:TCallbackProcI;ParamCount:Integer):LongWord; external 'wrapcallbackaddr@files:CallBackCtrl.dll stdcall';
//----------------------------------------------
function SetLayeredWindowAttributes(hwnd: HWND; crKey: TColor; bAlpha: BYTE; dwFlags: DWORD): Boolean; external 'SetLayeredWindowAttributes@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint; external 'CallWindowProcA@user32.dll stdcall';
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 ReleaseCapture(): Longint; external 'ReleaseCapture@user32.dll stdcall';
var
OldProc: Longint;
function MyProc(h: HWND; Msg, wParam, lParam: longint): Longint;
begin
if (Msg = WM_NCLBUTTONDOWN) and (wParam = HTCAPTION) then begin
SetWindowLong(h, (-20), GetWindowLong(h, (-20)) or $80000);
SetLayeredWindowAttributes(h, 0, 150, 2); // делаем окно полупрозрачным изменяя bAlpha - у меня 150
ReleaseCapture;
SendMessage(WizardForm.Handle,$0112,$F012,0);
SetWindowLong(h, (-20), GetWindowLong(h, (-20)) or $80000);
SetLayeredWindowAttributes(h, 0, 255, 2); // делаем окно снова непрозрачным bAlpha = 255
Result:= 0;
Exit;
end;
Result:= CallWindowProc(OldProc, h, Msg, wParam, lParam);
end;
procedure InitializeWizard();
begin
OldProc:= SetWindowLong(WizardForm.Handle, GWL_WNDPROC, WndProcCallBackI(@MyProc,4)); { для стекла }
end;
procedure DeinitializeSetup();
begin
SetWindowlong(WizardForm.Handle, GWL_WNDPROC, OldProc);
end;
и флаг - ignoreversion при указание DestDir: {tmp} не имеет смысла использовать.Source: CallbackCtrl.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
для таких вопросов есть Справка, если не понимаете английский на форуме есть русифицированная версия.просто было б интересно узнать что это вообще за флаг такой и с чего его едят
для таких вопросов есть Справка, если не понимаете английский на форуме есть русифицированная версия.
procedure LogoOnClick(Sender: TObject);
var ResCode: Integer;
begin
ShellExec('', 'https://discord.com/invite/GUJXYhFjyu', '' , '', SW_SHOW, ewNoWait, ResCode)
end;
procedure Logo();
var
BtnPanel: TPanel;
BtnImage: TBitmapImage;
begin
ExtractTemporaryFile('logo.bmp')
BtnPanel:=TPanel.Create(WizardForm)
with BtnPanel do begin
Left:=20
Top:=325
Width:=132
Height:=27
Cursor:=crHand
OnClick:=@logoOnClick
Parent:=WizardForm
end
BtnImage:=TBitmapImage.Create(WizardForm)
with BtnImage do begin
AutoSize:=True;
Enabled:=False;
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\logo.bmp')
Parent:=BtnPanel
end
end;
procedure InitializeWizard();
begin
Logo();
end;[/SPOILER]
Работает на всех версиях. Для unicode версии вам надо научится раставлять символ ;этот код (работает только на Ansi версии)