Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.043 c
1-1188308666
readline();
2007-08-28 17:44
2008.02.17
Unicode, UTF8


2-1201105865
SamProf
2008-01-23 19:31
2008.02.17
Как правильно сделать работу с TAdvNavBar


15-1200497580
ProgRAMmer Dimonych
2008-01-16 18:33
2008.02.17
Я чего-то недопёр


15-1200315233
asdf
2008-01-14 15:53
2008.02.17
разбор строки


15-1200331759
oldman
2008-01-14 20:29
2008.02.17
Поздравляю всех со старыи новым годом...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский