Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.02.17;
Скачать: CL | DM;

Вниз

RadioButton   Найти похожие ветки 

 
NeiL   (2008-01-22 20:28) [0]

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

[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;


 
Virgo_Style ©   (2008-01-22 20:45) [1]

Я бы тэгами воспользовался, пожалуй. Или же назвал их так, чтобы по названию можно было определить их положение. Если задача позволяет.


 
iiiymaxep ©   (2008-01-22 23:27) [2]

Да уж, куда легче (если так можно будет сделать) будет просто каждому компоненту присвоить свое значение tag, или дать название, например

tag = $00 $01 $02
       $10 $11 $12
       $20 $21 $22

Каждой кнопке дать один обработчик, где вычисление будет начинаца например со строки

position := (sender as tradiogroup).tag;
row := position shr 4;
coll := position and $f;

А если через имя, то примерно также

name = n0, n2, n3 ,..., n8.

Также в одном обработчике событий позицию вычислять например так

postion := strtoint((sender as tradiogroup).name[2]);
row := position div 3;
coll := position mod 3;

В общем, как говорит Virgo_Style, пожалуй так буит легче...


 
iiiymaxep ©   (2008-01-22 23:31) [3]

А чтобы зачекить какой нить батон (по известным именами или тэгам) надо искать компонент - Findcomponent - есть такая функция.

Например, TRadiobutton(findcomponent("n"+inttostr(tag))).checked := 1=1;



Страницы: 1 вся ветка

Текущий архив: 2008.02.17;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
3-1191419305
312kbps
2007-10-03 17:48
2008.02.17
Создание dbf , не првильный формат.


15-1200572963
Ученик
2008-01-17 15:29
2008.02.17
Действия над матрицами


6-1180434983
G_M_S
2007-05-29 14:36
2008.02.17
Компонент для чтения RSS


2-1201083610
Alexandr Malygin
2008-01-23 13:20
2008.02.17
string


2-1201508491
HITMAN
2008-01-28 11:21
2008.02.17
Работа с таблицей (баз данных)