Сегодня поговорим о том, как работать с RadioButton. RadioButton представляют собой кнопки, автоматически объеденяемые в группы. В каждой группе, одновременно может быть включена только одна кнопка. Главное отличие этих кнопок от CheckBox'ов в том, что если повторно щелкнуть на радио-кнопке, то ее состояние не изменится. Кнопки RadioButton могут быть двух стилей - BS_AUTORADIOBUTTON и BS_RADIOBUTTON. Как и в случае с CheckBox'ами, стиль BS_AUTORADIOBUTTON означает, что Windows сама будет менять состояние кнопки (включена/выключена). А если у кнопки стиль BS_RADIOBUTTON, то состояние кнопки устанавливает программист. Code const IDRBtn1 = 1; IDRBtn2 = 2; IDRBtn3 = 3;
var RBtn1: HWND; RBtn2: HWND; RBtn3: HWND; Static1: HWND; Static2: HWND; Static3: HWND; Сейчас мы рассмотрим самый простой случай. Мы создадим одну группу радио-кнопок, состояние которых будет отслеживать Windows. Code 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 ); Обрабатывать будем следующим образом. Получив сообщение от одной из радио-кнопок, в соответствующей метке напишем, что она включена. Code 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. Code // Показываем окно ShowWindow( Wnd, SW_SHOWNORMAL );
SendMessage( RBtn1, BM_CLICK, 0, 0 ); В следующий раз мы посмотрим, как работать с несколькими гркппами радио-кнопок. А на сегодня все. Удачи в программировании.
Источник: http://nemo-chat.3dn.ru |