Win API
Создание группы RadioButton средствами Win API

:: Меню ::
:: На главную ::
:: FAQ ::
:: Заметки ::
:: Практика ::
:: Win API ::
:: Проекты ::
:: Скачать ::
:: Секреты ::
:: Ссылки ::

:: Сервис ::
:: Написать ::

:: MVP ::

:: RSS ::

Яндекс.Метрика


В прошлый раз мы сделали несколько радио-кнопок, которые автоматически объединялись в одну группу. Сейчас рассмотрим, как создавать несколько независимых групп радио-кнопок.

Создадим две группы, по три радио-кнопки в каждой. Состояние кнопок в группе будем отображать в поле "Static".

const
  IDRBtn1 = 1;
  IDRBtn2 = 2;
  IDRBtn3 = 3;
  IDRBtn4 = 4;
  IDRBtn5 = 5;
  IDRBtn6 = 6;

var
  RBtn1: HWND;
  RBtn2: HWND;
  RBtn3: HWND;
  RBtn4: HWND;
  RBtn5: HWND;
  RBtn6: HWND;
  Static1: HWND;
  Static2: HWND;

Чтобы создать независимые группы, радио-кнопки должны иметь стиль BS_RADIOBUTTON, а их состояние нужно обрабатывать вручную.

RBtn1 := CreateWindowEx( 0, 'Button', 'Опция 1 (гр.1)',
                         WS_CHILD or WS_VISIBLE or BS_RADIOBUTTON,
                         10, 15, 90, 20, Wnd, IDRBtn1, hInstance, nil );
SendMessage( RBtn1, WM_SETFONT, GetStockObject( ANSI_VAR_FONT ), 0 );

{...}

RBtn4 := CreateWindowEx( 0, 'Button', 'Опция 1 (гр.2)',
                         WS_CHILD or WS_VISIBLE or BS_RADIOBUTTON,
                         10, 45, 90, 20, Wnd, IDRBtn4, hInstance, nil );
SendMessage( RBtn4, WM_SETFONT, GetStockObject( ANSI_VAR_FONT ), 0 );

{...}

Для изменения состояния радио-кнопок используется процедура CheckRadioButton. Ей передаются следующие аргументы: Handle нашего окна, идентификаторы первой и последней кнопок в группе, и идентификатор радио-кнопки, которую нужно "включить".

function WindowProc( Wnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM ): LRESULT; stdcall;
var
  p: PChar;
  n: integer;
begin
   case Msg of
      WM_DESTROY: begin
         PostQuitMessage( 0 );
         Result := 0;
         Exit;
      end;
      WM_COMMAND: begin
         n := GetWindowTextLength( lParam ) + 1;
         GetMem( p, n );
         GetWindowText( lParam, p, n );
         if ( LoWord( wParam ) >= IDRBtn1 ) and ( LoWord( wParam ) <= IDRBtn3 ) then
         begin
            SetWindowText( Static1, p );
            CheckRadioButton( Wnd, IDRBtn1, IDRBtn3, LoWord( wParam ) );
         end;
         if ( LoWord( wParam ) >= IDRBtn4 ) and ( LoWord( wParam ) <= IDRBtn6 ) then
         begin
            SetWindowText( Static2, p );
            CheckRadioButton( Wnd, IDRBtn4, IDRBtn6, LoWord( wParam ) );
         end;
         FreeMem( p, n );
      end;
      else
         Result := DefWindowProc( Wnd, Msg, wParam, lParam );
   end;
end;

Как видите, все просто. Определяем, к какой группе относится радио-кнопка, после чего "включаем" ее. На сегодня все, удачи в программировании.

.: Пример к данной статье :.


При использовании материала - ссылка на сайт обязательна