Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прозрачность WinAPI checkbox 'a 
V
    Опции темы
djman2006
Дата 29.6.2009, 23:15 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 10.6.2007

Репутация: нет
Всего: 1



Здравствуйте!

Как сделать checkbox прозрачным (разумеется не сам чекбокс а область где текст к нему) ?

Например:
Код

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_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.



Выдает:
user posted image
PM MAIL   Вверх
V0LT
Дата 30.6.2009, 02:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 16.6.2009

Репутация: 1
Всего: 2



Ваша проблема решена ... и я иду спать  smile 
Добавил лишь обработку WM_CTLCOLORSTATIC  
а ещё добавлю от себя - это можно сказать мой самый любимый метод создания небольших приложений на Delphi  smile 
Код
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.


user posted image

Это сообщение отредактировал(а) V0LT - 30.6.2009, 02:20
PM MAIL ICQ   Вверх
djman2006
Дата 30.6.2009, 05:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 10.6.2007

Репутация: нет
Всего: 1



V0LT
Спасибо большое  smile 
Цитата(V0LT)
Добавил лишь обработку WM_CTLCOLORSTATIC  

Буду теперь знать smile 
Цитата(V0LT)
а ещё добавлю от себя - это можно сказать мой самый любимый метод создания небольших приложений на Delphi   

Полностью поддерживаю!  smile 
Еще раз спасибо smile 

Это сообщение отредактировал(а) djman2006 - 30.6.2009, 06:00
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1220 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.