Создание RadioButton средствами WinAPI
Создание RadioButton средствами WinAPI
Создание RadioButton средствами WinAPI Источник: http://decoding.narod.ru/api/radiobutton/radiobutton.html Сегодня поговорим о том, как работать с RadioButton. RadioButton представляют собой кнопки, автоматически объединяемые в группы. В каждой группе, одновременно может быть включена только одна кнопка. Главное отличие этих кнопок от CheckBox?ов в том, что если повторно щелкнуть на радио-кнопке, то ее состояние не изменится. Кнопки RadioButton могут быть двух стилей - BS_AUTORADIOBUTTON и BS_RADIOBUTTON. Как и в случае с CheckBox?ами, стиль BS_AUTORADIOBUTTON означает, что Windows сама будет менять состояние кнопки (включена/выключена). А если у кнопки стиль BS_RADIOBUTTON, то состояние кнопки устанавливает программист. const IDRBtn1 = 1; IDRBtn2 = 2; IDRBtn3 = 3; var RBtn1: HWND; RBtn2: HWND; RBtn3: HWND; Static1: HWND; Static2: HWND; Static3: HWND; Сейчас мы рассмотрим самый простой случай. Мы создадим одну группу радио-кнопок, состояние которых будет отслеживать Windows. RBtn1 := CreateWindowEx( 0, ?Button?, ?Опция 1?, WS_CHILD or WS_VISIBLE or BS_AUTORADIOBUTTON, 20, 15, 80, 20, Wnd, IDRBtn1, hInstance, nil ); SendMessage( RBtn1, WM_SETFONT, GetStockObject( ANSI_VAR_FONT ), 0 ); RBtn2 := CreateWindowEx( 0, ?Button?, ?Опция 2?, WS_CHILD or WS_VISIBLE or BS_AUTORADIOBUTTON, 110, 15, 80, 20, Wnd, IDRBtn2, hInstance, nil ); SendMessage( RBtn2, WM_SETFONT, GetStockObject( ANSI_VAR_FONT ), 0 ); RBtn3 := CreateWindowEx( 0, ?Button?, ?Опция 3?, WS_CHILD or WS_VISIBLE or BS_AUTORADIOBUTTON, 200, 15, 80, 20, Wnd, IDRBtn3, hInstance, nil ); SendMessage( RBtn3, WM_SETFONT, GetStockObject( ANSI_VAR_FONT ), 0 ); Обрабатывать будем следующим образом. Получив сообщение от одной из радио-кнопок, в соответствующей метке напишем, что она включена. function WindowProc( Wnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM ): LRESULT; stdcall; begin case Msg of WM_DESTROY: begin PostQuitMessage( 0 ); Result := 0; Exit; end; WM_COMMAND: begin case LoWord( wParam ) of IDRBtn1: begin SetWindowText( Static1, ?Включена? ); SetWindowText( Static2, ?Выключена? ); SetWindowText( Static3, ?Выключена? ); end; IDRBtn2: begin SetWindowText( Static1, ?Выключена? ); SetWindowText( Static2, ?Включена? ); SetWindowText( Static3, ?Выключена? ); end; IDRBtn3: begin SetWindowText( Static1, ?Выключена? ); SetWindowText( Static2, ?Выключена? ); SetWindowText( Static3, ?Включена? ); end; end; end; else Result := DefWindowProc( Wnd, Msg, wParam, lParam ); end; end; И в заключении сделаем следующее. Когда форма отобразится на экране, одна из радио-кнопок должна быть включена (например первая). Для этого ей надо послать сообщение BM_CLICK. // Показываем окно ShowWindow( Wnd, SW_SHOWNORMAL ); SendMessage( RBtn1, BM_CLICK, 0, 0 );