Menu i wykonanie

0

Witam.

Mam program i w nim jest np 10 guzikow i 10 framesow. Do kazdego guzika przypisalem cos takiego:

procedure TForm1.Button2Click(Sender: TObject);
begin
Frame21.visible:=True;
Frame31.visible:=False;
Frame41.visible:=False;
Frame51.visible:=False;
...
Frame111.visible:=False;
end;

Dziala to na tej zasadzie, ze jak klikne jakis button to w programie zamykaja sie wszystkie Framesy, a otwiera ten wybrany przeze mnie, ale czy to jest dobre rozwiazanie?

Szukalem troche po sieci i patrzylem jak wygladaja programy, ale sam juz nie wiem jak to dobrze zrobic.
Jak Wy to robicie?

Pozdrawiam,
Łukasz

0

Zamiast frame'sów - o ile wszystkie są w tym samym miejscu, proponuję PageControl z zakładkami typu FlatButtons oraz TabVisible dla każdej strony ustawionym na FALSE. Łatwiej tym zarządzać.

Możesz potem zrobić coś takiego, że w guzikach ustawiasz wartość pola Tag na odpowiadającą numerowi zakładki, którą przycisk ma pokazywać. Wszystkim przyciskom przypisujesz wspólną akcję o treści mniej więcej takiej:

PageControl1.ActivePageIndex:=TButton(sender).Tag;

Powinno działać i powinno dać się tym bardzo łatwo zarządzać.

0

Nie wiem czy o to chodziło, ale pokaże jak ja to bym zrobił na przykładzie komponentu TPanel.

  1. Wiem że chcesz, aby komponenty o numerach 11, 21, 31, ...., 111 miały wartość Visible := False, a komponent nr 1 miał wartość Visible := True;
  2. Sprawdzasz w pętli zaczynając od Panelu z nr 11 (tzn.: Panel11) do Panelu nr 111 (tzn.: Panel111) czy istnieje, jeśli tak to przypisujesz mu wartość Visible := False;
  3. Panele o numerach innych niż 11, 21, 31, 41, 51, 61, 71, 81, 91, 101, 111 w zakresie 11 - 111 nie są brane pod uwagę.
  4. Musisz zauważyć, że zmienna i ma zakres od 0 do 255.
var
 i: byte;
 K: TComponent;
begin
 Panel1.Visible := True;
 for i := 11 to 111 do
   if i in [11,21,31,41,51,61,71,81,91,101,111] then
     begin
      K := Form1.FindComponent('Panel' + inttostr(i));
      if Assigned(K) then TPanel(FindComponent('Panel' + inttostr(i))).Visible := False;
     end;
end;
0

Szczawik:
Wielkie dzieki, teraz jest mi o wiele latwiej wszystko konfigurowac :-)
Najlatwiej jest z tym, ze kazde 'podmenu' bedzie w tej samej pozycji :-)

Uzylem takiego wywolania dla pierwszego guzika:

PageControl1.ActivePageIndex:=0;

Dla drugiego bedzie :=1; dla trzeciego :=2; itd.

Pozdrawiam,
Łukasz

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