Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 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