Optymalizacja wyboru obiektu

Odpowiedz Nowy wątek
Opi
2006-12-03 23:13
Opi

Rejestracja: 15 lat temu

Ostatnio: 1 miesiąc temu

0

Z punktu widzenia programisty ;-) , chciałbym wiedzieć, czy jest możliwość zoptymalizowania poniższego przykładu, w którym każda ze stron (PanelTutorialPage) jest kolejno przełączana i zachodzi pętla, która pozwala na oglądanie kart od nowa.


procedure TForm.TutorialClick(Sender: TObject);
begin
  if PanelTutorialPage1.Visible = True then
   begin
    PanelTutorialPage1.Visible := False;
    PanelTutorialPage2.Visible := True;
    PanelTutorialPage3.Visible := False;
   end
 else
 if PanelTutorialPage2.Visible = True then
   begin
    PanelTutorialPage1.Visible := False;
    PanelTutorialPage2.Visible := False;
    PanelTutorialPage3.Visible := True;
   end
 else
 if PanelTutorialPage3.Visible = True then
   begin
    PanelTutorialPage1.Visible := True;
    PanelTutorialPage2.Visible := False;
    PanelTutorialPage3.Visible := False;
   end;
end;

Pozostało 580 znaków

2006-12-04 00:08

Rejestracja: 13 lat temu

Ostatnio: 8 lat temu

0

Wydaje mi się że dałoby się to zrobić przy pomocy tablicy wskaźników.
Na przykład:

var panele:array[1..3] of ^TPanelTutorialPage;
i,j:integer;
begin;
panele[1]:[email protected];
panele[2]:[email protected];
panele[3]:[email protected];
for i:=1 to 3 do
   begin
   if panele[i].visible=true then
       begin;
          for j:=1 to 3 do panele[j].visible:=false;
          if i<3 then panele[i+1].visible:=true
          else panele[1].visible:=true;
          break;
       end;

Pozostało 580 znaków

kurc66
2006-12-04 00:21
kurc66
0

Ja chyba napisałbym to tak:


private
  Panels : TList;
...

procedure TForm1.TutorialClick(Sender: TObject);
var Index: Integer;
begin
  Index := Panels.IndexOf(Sender);
  if (Index >= 0) and (Panels.Count > 1) then
    begin
      if Index = Panels.Count-1 then
           Index := 0
         else
           Inc(Index);
      TPanel(Panels[Index]).BringToFront;
    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Panels := TList.Create;
  Panels.Add(PanelTutorialPage1);
  Panels.Add(PanelTutorialPage2);
  Panels.Add(PanelTutorialPage3);
  Panels.Add(PanelTutorialPage4);
  Panels.Add(PanelTutorialPage5);
  Panels.Add(PanelTutorialPage6);
  Panels.Add(PanelTutorialPage7);
  Panels.Add(PanelTutorialPage8);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Panels.Clear;
  Panels.Free;
end;

Pozostało 580 znaków

Odpowiedz

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