Форум: "Начинающим";
Текущий архив: 2008.02.17;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.04 c