Ветеран
Сообщения: 1264
Благодарности: 1024
|
Профиль
|
Отправить PM
| Цитировать
Цитата insombia:
как убрать белую обводку вокруг кнопок? »
|
insombia, в данном случае родитель кнопки имеет сплошной цвет, поэтому верни для кнопки кисть нужного цвета, например, WizardForm.Brush.Color := clRed. В случае, если на родителе картинка, нужно создать на ее основе узорчастую кисть, сабклассить кнопку или ее родителя и в сообщении CN_CTLCOLORBTN (если сабклассить кнопку) или WM_CTLCOLORBTN (если сабклассить родителя) вернуть кисть с необходимым смещением. Пример:
читать дальше »
Код:
[Setup]
AppName=test
AppVerName=test
CreateAppDir=false
DefaultDirName={tmp}
Uninstallable=false
BitmapResource=bgnd:{app}\robots.bmp
[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl
[code]
#define A = (Defined UNICODE) ? "W" : "A"
const
CN_CTLCOLORBTN = $BD35;
GA_ROOT = 2;
GWL_WNDPROC = (-4);
GWL_USERDATA = (-21);
function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLong{#A}@user32.dll stdcall';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function CreatePatternBrush(hbmp: HBITMAP): Longint; external 'CreatePatternBrush@gdi32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam: Longint; lParam: Longint): Longint; external 'CallWindowProc{#A}@user32.dll stdcall';
function MapWindowPoints(hWndFrom, hWndTo: HWND; var lpPoints: TPoint; cPoints: UINT): Integer; external 'MapWindowPoints@user32.dll stdcall';
function SetBrushOrgEx(hdc: Longint; nXOrg, nYOrg: Integer; var lppt: TPoint): BOOL; external 'SetBrushOrgEx@gdi32.dll stdcall';
function GetAncestor(hwnd: HWND; gaFlags: UINT): HWND; external 'GetAncestor@user32.dll stdcall';
var
g_Bgnd: TBitmapImage;
g_hBrush: Longint;
/////////////////////////////////////////////////////////////////////////////
function ButtonProc(hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint;
var
pt: TPoint;
begin
case Msg of
CN_CTLCOLORBTN: begin
MapWindowPoints(hWnd, GetAncestor(hWnd, GA_ROOT), pt, 1);
SetBrushOrgEx(wParam, -pt.x, -pt.y, pt);
Result := g_hBrush;
end;
else
Result := CallWindowProc(GetWindowLong(hWnd, GWL_USERDATA), hWnd, Msg, wParam, lParam);
end;
end;
/////////////////////////////
procedure InitializeWizard();
begin
with WizardForm do
begin
WizardBitmapImage.Hide;
Bevel.Hide;
OuterNotebook.Hide;
end;
// background
g_Bgnd := TBitmapImage.Create(WizardForm);
with g_Bgnd do
begin
Parent := WizardForm;
Align := alClient;
Bitmap.LoadFromResourceName(HInstance, '_IS_BGND');
g_hBrush := CreatePatternBrush(Bitmap.Handle);
end;
// subclass button
with WizardForm.NextButton do SetWindowLong(Handle, GWL_USERDATA, SetWindowLong(Handle, GWL_WNDPROC, CallbackAddr('ButtonProc')));
end;
procedure DeinitializeSetup();
begin
with WizardForm.NextButton do if GetWindowLong(Handle, GWL_USERDATA) > 0 then SetWindowLong(Handle, GWL_WNDPROC, GetWindowLong(Handle, GWL_USERDATA));
end;
|
Отправлено: 11:42, 14-07-2013
| #770
|