Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Выбрать RadioButton


NeiL ©   (2008-01-29 20:43:00) 

Господа мастера. Проблема в том что нижеописанное необходимо сделать используя tag (некогда не приходилось использовать раньше, просьба поделитесь советами). Имеется 9 RadioButton следующего вида, где [выравнивание по горизонтали; выравнивание по вертикали]. Необходимо ввести два числа (допустимыми значениями являются 0..2). На основании введенных чисел ЗаCheckedить Radiobutton, которому соответствуют координаты в [*;*].

[0;0] [1;0] [2;0]
 O     O     O

[0;1] [1;1] [2;1]
 O     O     O

[0;2] [1;2] [2;2]
 O     O     O

Я как новичок в этом деле сделал так:

Объявил property

property param_AlignHorz: Integer read GetAlignHorz write SetAlignHorz;
property param_AlignVert: Integer read GetAlignHorz write SetAlignVert


Обработчики

function Tform_SetupImage.GetAlignHorz: Integer;
begin
if rb_LeftTop.Checked or rb_LeftCenter.Checked or rb_LeftBottom.Checked then
  Result := 0
else
  if rb_CenterTop.Checked or rb_CenterCenter.Checked or rb_CenterBottom.Checked then
    Result := 1
  else
    if rb_RightTop.Checked or rb_RightCenter.Checked or rb_RightBottom.Checked then
      Result := 2;
end;

function Tform_SetupImage.GetStampAlignVert: Integer;
begin
if rb_LeftTop.Checked or rb_CenterTop.Checked or rb_RightTop.Checked then
  Result := 0
else
  if rb_LeftCenter.Checked or rb_CenterCenter.Checked or rb_RightCenter.Checked then
    Result := 1
  else
    if rb_LeftBottom.Checked or rb_CenterBottom.Checked or rb_RightBottom.Checked then
      Result := 2;
end;

// *************************

procedure Tform_SetupImage.SetAlignHorz(const Value: Integer);
var
OldValue, NewValue: Integer;
begin
NewValue := Max(0, Min(2, Value));
if param_StampAlignHorz <> NewValue then
begin
  OldValue := param_StampAlignHorz;
  case NewValue of
    0: rb_LeftTop.Checked := True;
    1: rb_CenterTop.Checked := True;
    2: rb_RightTop.Checked := True;
  end;
  StampAlignHorzChanged(OldValue);
end;
end;

procedure Tform_SetupImage.SetAlignVert(const Value: Integer);
var
OldValue, NewValue: Integer;
begin
NewValue := Max(0, Min(2, Value));
if param_StampAlignVert <> NewValue then
begin
  OldValue := param_StampAlignVert;
  case param_StampAlignHorz of
    0:
      case NewValue of
        0: rb_LeftTop.Checked := True;
        1: rb_LeftCenter.checked := True;
        2: rb_LeftBottom.Checked := True;
      end;
    1:
      case NewValue of
        0: rb_CenterTop.Checked := True;
        1: rb_CenterCenter.Checked := True;
        2: rb_CenterBottom.Checked := True;
      end;
    2:
      case NewValue of
        0: rb_RightTop.Checked := True;
        1: rb_RightCenter.Checked := True;
        2: rb_RightBottom.Checked :=True;
      end;
  end;
  StampAlignVertChanged(OldValue);
end;
end;


Семеныч   (2008-01-30 10:16:00) [1]

> NeiL   (29.01.08 20:43)  

> нижеописанное необходимо сделать используя tag

Tag имеет тип integer. Значит, занимает 4 байта. Никто не запрещает нам использовать эти 2 байта не целиком, а как 2 двухбайтовых значения. Вот они, Ваши координаты, упакованные в Tag.

Сама упаковка и распаковка, судя по коду, для Вас не проблема, но на всякий случай:

var
 X, Y: word;
Tag := (Y shl 16) or X;
Y := Tag shr 16;
X := Tag and $FFFF;


ketmar   (2008-01-30 01:17:00) [2]

>[3] fics ©(29.01.08 23:45)
новичок, новичок. куча избыточного кода.


fics   (2008-01-29 23:45:00) [3]


> NeiL  


> Я как новичок в этом деле сделал так:


Да какой же нафиг новичок, ты настоящий профи:)


Virgo_Style   (2008-01-29 21:19:00) [4]

Где-то я это уже видел...


EvS   (2008-01-29 21:18:00) [5]

> Проблема в том что нижеописанное необходимо сделать используя
> tag (некогда не приходилось использовать раньше, просьба
> поделитесь советами).

Выясни сначала для себя, что такое  tag, а потом уже будешь думать как его использовать.


Наверх

Титульная страница Поиск, карта сайта Написать письмо