Четверг, 03.07.2025, 03:00
Приветствую Вас Гость

Soft by Warik

NEMO_CHAT
Категории раздела
Анекдот
Случайный анекдот:

Наши часики
Опрос
Какой из Антивирусов стоит на вашем PC?
Всего ответов: 86
Статистика
Rambler's Top100




Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » Статьи » Win API [ Добавить статью ]

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

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

Создадим две группы, по три радио-кнопки в каждой. Состояние кнопок в группе будем отображать в поле "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

Категория: Win API | Добавил: Warik (23.02.2010)
Просмотров: 663 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Мини-профиль

Гость !



Гость, мы рады вас видеть. Пожалуйста зарегистрируйтесь или авторизуйтесь!
Друзья сайта