:: MVP ::
|
|
:: RSS ::
|
|
|
Сегодня поговорим о том, как работать с 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 );
|
В следующий раз мы посмотрим, как работать с несколькими гркппами радио-кнопок.
А на сегодня все. Удачи в программировании.
.: Пример к данной статье :.
|
При использовании материала - ссылка на сайт обязательна
|
|