Wiele osób na forum pyta się o sprawy związane z obsługą PageControl. Postanowiłem napisać krótki artykuł przedstawiający możliwości tego komponentu.
Zacznijmy od podstaw – PageControl jest komponentem pozwalającym na tworzenie zakładek, takich jak np. palety komponentów w Delphi czy zakładki w FireFoxie. Na każdej zakładce możemy umieścić dowolne komponenty. Same zakładki tworzymy klikając prawym przyciskiem myszy na komponent i wybierając z menu opcję New Page.
Często nie będziemy chcieli tworzyć stron PageControl podczas pisania programu, tylko w razie potrzeby tworzyć i zamykać zakładki w czasie działania aplikacji. Dynamiczną stronę tworzymy tak jak wszystkie dynamiczne komponenty. Umieść na formie jeden Button i PageControl. W OnClick przycisku umieść kod:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
procedure TForm1.Button1Click(Sender: TObject); var zakladka : TTabSheet; begin zakladka := TTabSheet.Create(Self); zakladka.Caption := 'Nowa zakładka'; zakladka.PageControl := PageControl1; zakladka.Show; end; |
Objaśnienie:
1 |
zakladka := TTabSheet.Create(Self); |
– tworzy nową zakładkę
1 |
zakladka.Caption := 'Nowa zakładka'; |
– przypisuje tytuł zakładki
1 |
zakladka.PageControl := PageControl1; |
– określa komponent PageControl, na którym zakładka się pojawi
1 |
zakladka.Show; |
– przechodzi do utworzonej zakładki
Aby usunąć zakładkę postępujemy następująco:
1 |
PageControl1.ActivePage.Free; |
Właściwość ActivePage zwraca aktualnie pokazaną stronę, a metoda Free usuwa ją.
Teraz pomówimy o komponentach na zakładkach. Załóżmy, że piszemy prosty edytor tekstowy z wieloma zakładkami. Jak zrobić, aby po wybraniu z menu opcji Nowy plik została utworzona nowa strona z komponentem Memo? Umieść na formie komponent MainMenu i utwórz w nim opcję Nowy.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
procedure TForm1.NowyClick(Sender: TObject); var zakladka : TTabSheet; memo : TMemo; begin zakladka := TTabSheet.Create(Self); zakladka.Caption := 'Nowa'; zakladka.PageControl := PageControl1; memo := TMemo.Create(Self); memo.Align := alClient; memo.Parent := zakladka; zakladka.Show; end; |
Objaśnienie:
1 |
memo := TMemo.Create(Self); |
– tworzy komponent Memo
1 |
memo.Align := alClient; |
– ustawia rozmiar Memo na całą zakładkę
1 |
memo.Parent := zakladka; |
– ustala Memo na zakładce (nowa strona jest rodzicem Memo)
W porządku, mamy już tworzenie nowych elementów edytora. Użytkownik programu pisze swój tekst, następnie chce go zapisać do pliku. Aby to zrobić, użyjemy metody
1 |
Memo.Lines.SaveToFile |
Jak jednak dostać się do niej nie znając nazwy komponentu Memo? Do każdego komponentu na zakładce możemy się odwołać poprzez właściwość Controls. Jeżeli mamy na stronie tylko komponent Memo wystarczy napisać:
1 |
(PageControl1.ActivePage.Controls[0] as TMemo).Lines.SaveToFile('c:\plik.txt'); |
Jeżeli na zakładce jest więcej komponentów musimy sprawdzić w pętli wszystkie elementy tablicy Controls i sprawdzić, czy są one typu TMemo:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
with PageControl1.ActivePage do begin for i := 0 to ControlCount-1 do begin if (Controls is TMemo) then (Controls as TMemo).Lines.SaveToFile('c:\plik.txt'); end; end; |
I to by było na tyle. Mam nadzieję, że przydał się Wam mój pierwszy artykuł na Unit1. Może będą następne :D.
Autor: Stark