В прошлый раз мы сделали несколько радио-кнопок, которые автоматически объединялись в одну группу. Сейчас рассмотрим, как создавать несколько независимых групп радио-кнопок. Создадим две группы, по три радио-кнопки в каждой. Состояние кнопок в группе будем отображать в поле "Static". Code 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, а их состояние нужно обрабатывать вручную. Code 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 нашего окна, идентификаторы первой и последней кнопок в группе, и идентификатор радио-кнопки, которую нужно "включить". Code 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; Как видите, все просто. Определяем, к какой группе относится радио-кнопка, после чего "включаем" ее. На сегодня все, удачи в программировании.
Источник: http://nemo-chat.3dn.ru |