Ваша проблема решена ... и я иду спать Добавил лишь обработку WM_CTLCOLORSTATIC а ещё добавлю от себя - это можно сказать мой самый любимый метод создания небольших приложений на Delphi
| Код | program Project1;
uses windows, messages, SysUtils;
const id_Checkbox = 101; id_Image = 103; var window:TWndClassEx; Mwindow: HWND; Mmsg: MSG;
// XP Style Procedure InitCommonControls; External 'comctl32.dll' Name 'InitCommonControls';
// Процедура обработки сообщений function WindowProc (wnd: HWND; msg: integer; wparam: WPARAM; lparam: LPARAM):LRESULT;STDCALL; var hCheckBox : HWND; hImageStatic : HWND; hImage : HBITMAP; begin case msg of WM_Destroy: begin PostQuitMessage (0); Result := 0; Exit; end; wm_Create: begin hImageStatic:=CreateWindowEx(0, 'Static', nil, WS_CHILD or WS_VISIBLE {or WS_BORDER} or SS_BITMAP or SS_CENTERIMAGE, 0, 0, 434, 162, wnd, id_Image, hInstance, nil); hImage := LoadImage(hInstance,'C:\Windows\winnt.bmp', IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE or LR_LOADMAP3DCOLORS); SendMessage(hImageStatic, STM_SETIMAGE, IMAGE_BITMAP, hImage); // checkbox hCheckBox:=CreateWindowEx (0, // extended styles 'BUTTON', // predefined class PChar('click me'), // caption ws_Child or ws_Visible or BS_CHECKBOX, // styles 14, 128, // position 200, 20, // size wnd, // parent id_Checkbox, hInstance, nil); end; WM_CTLCOLORSTATIC: begin SetTextColor(WParam, $00ff00); // !!! Для наглядности !!! SetBkMode(WParam, TRANSPARENT); Result := GetStockObject(NULL_BRUSH); end; wm_Command: begin // if it comes from the checkbox if ((LoWord (wparam) = id_Checkbox) AND (HiWord (wparam) = bn_Clicked)) then if IsDlgButtonChecked(wnd, id_Checkbox) = BST_CHECKED then CheckDlgButton(wnd, id_Checkbox, BST_UNCHECKED) else CheckDlgButton(wnd, id_Checkbox, BST_CHECKED); end; else Result := DefWindowProc(wnd,msg,wparam,lparam); end; end;
begin
InitCommonControls; // Ристрация класса окна window.cbSize := sizeof (window); window.style := CS_HREDRAW or CS_VREDRAW; window.lpfnWndProc := @WindowProc; window.cbClsExtra := 0; window.cbWndExtra := 0; window.hInstance := HInstance; window.hIcon := LoadIcon (0,IDI_APPLICATION); window.hCursor := LoadCursor (0,IDC_ARROW); window.hbrBackground:=COLOR_WINDOW; window.lpszMenuName := nil; window.lpszClassName := 'Main_Window'; RegisterClassEx (window); // Создание окна на основе созданного класса Mwindow := CreateWindowEx(0,'Main_Window',PChar('WinAPI window'), WS_OVERLAPPED or WS_CAPTION or WS_SYSMENU,100,100,440,188,0,0,Hinstance,nil); // Показать созданное окно SHOWWINDOW (Mwindow,SW_Show); // Цикл обработки сообщений while GetMessage (Mmsg,0,0,0) do begin TranslateMessage (Mmsg); DispatchMessage (Mmsg); end; end. |
 |