Jak skrócić kod źródłowy formy Radiogroup

0

Witam,

Chciałbym się dowiedzieć czy ( i ewentualnie jak ) można skrócić taki kod?

Już piszę o co chodzi.

Mam formę na której jest dużo przycisków. Stworzyłem Radiogroup w którym mam kilka elementów. Po wybraniu konkretnego chcę aby pojawiał się odpowiadający mu przycisk. Napisałem to w taki sposób:

 

   if kropki.Items.Strings[kropki.ItemIndex] = '1' then ButtonPrzycisk1.Visible:=TRUE;
   if kropki.Items.Strings[kropki.ItemIndex] = '2' then ButtonPrzycisk2.Visible:=FALSE;
   if kropki.Items.Strings[kropki.ItemIndex] = '3' then ButtonPrzycisk3.Visible:=FALSE;

   if kropki.Items.Strings[kropki.ItemIndex] = '1' then ButtonPrzycisk1.Visible:=FALSE;
   if kropki.Items.Strings[kropki.ItemIndex] = '2' then ButtonPrzycisk2.Visible:=TRUE;
   if kropki.Items.Strings[kropki.ItemIndex] = '3' then ButtonPrzycisk3.Visible:=FALSE;

   if kropki.Items.Strings[kropki.ItemIndex] = '1' then ButtonPrzycisk1.Visible:=FALSE;
   if kropki.Items.Strings[kropki.ItemIndex] = '2' then ButtonPrzycisk2.Visible:=FALSE;
   if kropki.Items.Strings[kropki.ItemIndex] = '3' then ButtonPrzycisk3.Visible:=TRUE;

Wszystko działa tak jak powinno ale nie wiem czy istnieje prostszy sposób zapisu, bo przy 3 elementach to nie problem ale mam zamiar dodać więcej elementów i przycisków.

Czy można zapisać to bardziej "profesionalnie?" ;)

0

hmm, zamieńmy kolejność warunków:

   if kropki.Items.Strings[kropki.ItemIndex] = '1' then ButtonPrzycisk1.Visible:=TRUE;
   if kropki.Items.Strings[kropki.ItemIndex] = '1' then ButtonPrzycisk1.Visible:=FALSE;
   if kropki.Items.Strings[kropki.ItemIndex] = '1' then ButtonPrzycisk1.Visible:=FALSE;

   if kropki.Items.Strings[kropki.ItemIndex] = '2' then ButtonPrzycisk2.Visible:=FALSE;
   if kropki.Items.Strings[kropki.ItemIndex] = '2' then ButtonPrzycisk2.Visible:=TRUE;
   if kropki.Items.Strings[kropki.ItemIndex] = '2' then ButtonPrzycisk2.Visible:=FALSE;

   if kropki.Items.Strings[kropki.ItemIndex] = '3' then ButtonPrzycisk3.Visible:=FALSE;
   if kropki.Items.Strings[kropki.ItemIndex] = '3' then ButtonPrzycisk3.Visible:=FALSE;
   if kropki.Items.Strings[kropki.ItemIndex] = '3' then ButtonPrzycisk3.Visible:=TRUE;

co to miałoby robić? ile ma wynosić ButtonPrzycisk1.Visible dla kropki... równe '1'?

0

kropka 1 - pojawia się przycisk 1, znika 2, 3...
kropka 2 - pojawia się przycisk 2, znika 1,3...
kropka 3 - pojawia się przycisk 3, znika 1,2...

wszystkie możliwości po prostu ;) a linijek kodu przybywa wykładniczo :P
n = k*k gdzie n to liczba linijek a k to liczba przycisków :P

   if kropki.Items.Strings[kropki.ItemIndex] = '1' then ButtonPrzycisk1.Visible:=TRUE;
   if kropki.Items.Strings[kropki.ItemIndex] = '1' then ButtonPrzycisk1.Visible:=FALSE;
   if kropki.Items.Strings[kropki.ItemIndex] = '1' then ButtonPrzycisk1.Visible:=FALSE; 

troche to się mija z celem

0
 procedure TForm1.kropkiClick(Sender: TObject);
var
component_count:integer;
i:integer;
BtnName:  String;
begin
component_count := Form1.ComponentCount;
 BtnName :=   'ButtonPrzycisk'+ kropki.Items.Strings[kropki.ItemIndex];

for i:=0 to    component_count -1 do
begin
if Form1.Components[i] is TButton
  then
  begin
  if (Components[i] as TButton).Name   = BtnName then (Form1.Components[i] as TButton).Visible :=true 
else if(strpos( pchar((Components[i] as TButton).Name),'ButtonPrzycisk')<>nil) then  (Form1.Components[i] as TButton).Visible :=false;
  end;
end;
end;
0

'ButtonPrzycisk' to name przycisku ale którego? pierwszego ? bo jest kilka przycisków! hmm...

p.s robie na TCanvasButton - zmieniłem w odpowiednich miejscach, ale to chyba nie robi problemu ;)

0

Demko

0
Piotrekdp napisał(a)

Strings kropki musi być listą liczb 1,2,3,4,5

to było to!!
teraz hula aż miło popatrzeć!
szacun! /

ps. a ewentualnie może nie być taka lista? :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1