Tpagecontrol / Ttabsheet oraz Ttabcontrol

0

Jestem nowy na forum. WITAJCIE!

Mam problem: Na formie założyłem PageControl na nim kilka TabSheet. Na TabSheet1 wrzuciłem TabControl1. Chciałbym żeby zmieniając rozmiary okna (Form1) i PageControl1 zmieniała się wielkość TabControl1 tak żeby wypełniał zawsze całego TabSheet1. Użyłem: Position / Size / Grow to largest ale to coś nie działa niestety.

Druga sprawa: czy na każdej stronie / karcie mogę mieć inną zawartość WebBrowser-a? Wrzucam na TabControl1 WebBrowser1 i chciałbym załadować do nich różne strony (w różnych kartach). Tylko jak?

Ostatni problem: Jak zrobić znaczki (ikony) "X" pozwalające na zamknięcie kart/stron TabSheet lub kart/stron z TabControl? Coś na wzór przeglądarek IE, FF,.........

Dziekuje za pomoc!

0

Na formie wystarczy Ci Pagecontrol, któremu Anchorsy ustawiasz Right i Bottom na True. Wystarczy.
Jeśli chcesz stworzyć [x] do zamykania to przeczytaj to, bo widocznie nie szukałeś..
Close button w TabSheet/PageControl.

Webbrowser daj na alClient we właściwości Align.

0

Dzieki za podpowiedzi!

Ale "Webbrowser daj na alClient we właściwości Align." to chyba nie jest rozwiązanie drugiego problemu ? ;)

1
GROUPON napisał(a)

Dzieki za podpowiedzi!

Ale "Webbrowser daj na alClient we właściwości Align." to chyba nie jest rozwiązanie drugiego problemu ? ;)

Hehe no nie, bo na 2 problem nie odpowiedziałem. :)
Wrzuć pagecontrol, edit na formę i jeszcze 3 buttony, potem:

//tworzysz dynamicznie tabsheety i na nich webbrowsery
procedure TForm1.Button1Click(Sender: TObject);
var
  TabSheet: TTabSheet;
  WebBrowser: TWebBrowser;
  begin
    TabSheet:= TTabSheet.Create(PageControl1);
    TabSheet.Caption:= 'Nowa';
    TabSheet.PageControl := PageControl1;
    WebBrowser:= TWebBrowser.Create(TabSheet);
    TWinControl(WebBrowser).Parent:= TabSheet;
    WebBrowser.Align:= alClient;
  end;

//odpalamy stronke na aktywnej zakladce
procedure TForm1.Button2Click(Sender: TObject);
begin
TWebBrowser(PageControl1.ActivePage.Controls[0]).Navigate(Edit1.Text);
end;

//odswiezamy stronke na aktywnej zakladce
procedure TForm1.Button3Click(Sender: TObject);
begin
TWebBrowser(PageControl1.ActivePage.Controls[0]).Refresh;
end;
0

Dzięki za kod - na pewno skorzystam.

Wracając do mojego pytania, czy korzystając na TabControl można mieć WebBrowsery z różną treścią (na rożnych kartach TabControl). Do tej pory korzystałem tylko z PageControl, nigdy z TabControl. A tu (TabControl) widzę, że karty mają identyczny wygląd i zawartość.

0

Nie wiem jak jest z TabControl, bo nigdy tego nie używałem. Zawsze PageControl.

Powyższy kod daje to, że na każdej zakładce odpalasz sobie różne strony.

0
//tworzysz dynamicznie tabsheety i na nich webbrowsery
procedure TForm1.Button1Click(Sender: TObject);
var
  TabSheet: TTabSheet;
  WebBrowser: TWebBrowser;
  Button : TButton;
  begin
    TabSheet:= TTabSheet.Create(PageControl1);
    TabSheet.Caption:= 'Nowa';
    TabSheet.PageControl := PageControl1;
    WebBrowser:= TWebBrowser.Create(TabSheet);
    TWinControl(WebBrowser).Parent:= TabSheet;
   // WebBrowser.Align:= alClient;
  
    Button:= TButton.Create(TabSheet);
    TWinControl(Button).Parent:= TabSheet;
   
  end;

Jakbym chciał mieć jeszcze Button na każdym TabSheet? Lekko zmieniłem kod, ale jak obsłużyć zdarzenia typu OnClick, itp.? (w zasadzie wystarczy mi obsługa typu Button[n]Click....)

Znalazłem odpowiedź:

Button.OnClick := NazwaProcedury;

Nasunęło się kolejne pytanie:

Mam już gotowe, zaprojektowane przez siebie 4 TabSheety. Dynamicznie tworzone TabSheet są dodawane na końcu. Co jeśli chciałbym wrzucić dynamicznie tworzone TabSheet w środek Między TS1, TS2 a TS3 i TS4 ??

Mimo, że moim TS (tym które powinny być na końcu) daje wysoki TabIndex, to i tak dynamicznie powstające TS dołączane są na koniec. Jak rozwiązać ten problem?

1

Tak na szybko:

procedure TForm1.Button2Click(Sender: TObject);
var
  TabSheet: TTabSheet;
  begin
    TabSheet:= TTabSheet.Create(PageControl1);
    TabSheet.Caption:= 'Nowa2';
    TabSheet.PageControl := PageControl1;
    Tabsheet.PageIndex:=2; //pozycja nowej zakladki <--------------------------------------------
  end;

Jak chcesz wstawić zakładkę gdzieś w środek zamiast na końcu to musisz podać numer indexu nie Tabindex'a tylko Pageindex nowego Tabsheet'a.

Tabsheet.PageIndex:=2; //pozycja nowej zakladki, trzecia od lewej

Możesz zrobić sobie tak, że jak otwierasz jakiś link na stronce, która jest odpalona np. w Tabsheet4, to żeby ten link otworzył się w sąsiedniej następnej zakładce Tabsheet5, a resztę przesuwał i zmieniał indexy. :)

0

**Wielkie dzięki!!! **
Na pewno się przyda.

Zamykam TabSheety za pomocą:

PageControl1.ActivePage.Destroy;

Zastanawiam się czy nie powinienem zamknąć (zwolnić z pamięci) wcześniej WebBrowsera?

0
GROUPON napisał(a)

**Wielkie dzięki!!! **
Na pewno się przyda.

Zamykam TabSheety za pomocą:

PageControl1.ActivePage.Destroy;

Zastanawiam się czy nie powinienem zamknąć (zwolnić z pamięci) wcześniej WebBrowsera?

Tak.

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