Dynamiczna tablica i kłopot

0

Witam,

Mam taki kod:

licz:integer;    
    zakladka:array [1..30] of TTabSheet;  
    web:array [1..30] of TWebBrowser; 
/..../

zakladka[licz]:=TTabSheet.Create(PageControl1);    
 zakladka[licz].Caption:='Zakladka '+IntToStr(licz); 
 zakladka[licz].PageControl:=PageControl1;  
 zakladka[licz].Show;  
 web[licz]:=TWebBrowser.Create(zakladka[licz]); 
 web[licz].ParentWindow:=zakladka[licz].Handle; 
 Inc(licz);

Jak widzicie dalej jest do tworzenia nowej zakładki WebBrowser. Jest jednak problem z wielkością :( Tworzy się bardzo małe. Gdy wpiszę zakładka[licz].Align:=alClient lub web to po utworzeniu nowej zakładki nie jest na Algin na takim jakim powinno być :D

0
 zakladka[licz]:=TTabSheet.Create(PageControl1);
 zakladka[licz].Parent := PageControl1; //mnie tu tego brakuje
 zakladka[licz].Caption:='Zakladka '+IntToStr(licz); 
 zakladka[licz].PageControl:=PageControl1;  
 zakladka[licz].Show;  
 web[licz]:=TWebBrowser.Create(zakladka[licz]); 
 web[licz].ParentWindow:=zakladka[licz].Handle;
 Inc(licz);

A gdzie tu jest dynamiczna tablica?

0

Niestety - nadal to samo :)
user image

0

</delphi>licz:integer;
zakladka:array [1..90] of TTabSheet;
web:array [1..90] of TWebBrowser;
/..../

zakladka[licz]:=TTabSheet.Create(PageControl1);
zakladka[licz].Caption:='Zakładka '+IntToStr(licz);
zakladka[licz].PageControl:=PageControl1;
zakladka[licz].Show;
web[licz]:=TWebBrowser.Create(zakladka[licz]);
web[licz].ParentWindow:=zakladka[licz].Handle;
Inc(licz);

Nie jestem pewien ale nie da się rozciągnąc na formatce?
0

A nie można pobrać obszaru klienta rodzica i bezczelnie przypisać owy rozmiar do potomka?

0

Ok. Już zrobiłem i działa.

A takie pytanko mam :) Zresztą dwa:

  • jak zrobić dla przycisku żeby wyłączyło wszystkie zakładki zrobione oprócz aktywnej :)
  • jak dla każdej nowej zakładki zrobić taki mały wyłącznik ? Żeby tworzył się button i jak się naciśnie go to usunie właśnie tą zakładkę na której kliknęliśmy button :)

Dwa pytania i zmykam ;)

0
LooB napisał(a)

Ok. Już zrobiłem i działa.

A takie pytanko mam :) Zresztą dwa:

  • jak zrobić dla przycisku żeby wyłączyło wszystkie zakładki zrobione oprócz aktywnej :)
  • jak dla każdej nowej zakładki zrobić taki mały wyłącznik ? Żeby tworzył się button i jak się naciśnie go to usunie właśnie tą zakładkę na której kliknęliśmy button :)

Dwa pytania i zmykam ;)

To się tym pochwal jak. Może się komuś przyda.

Ad 1. Pętla po zakładkach z warunkiem aktywności. Jak nieaktywna to usuwasz.
Ad 2. Dodaj tablicę buttonów i jak tworzysz zakładkę tworzysz button. Elementem wspólnym jest indeks tablicy.

0
zakladka[licz]:=TTabSheet.Create(PageControl1);
 zakladka[licz].Caption:='Internet'+IntToStr(licz);
 zakladka[licz].PageControl:=PageControl1;
 zakladka[licz].Parent := PageControl1;
 PageControl1.ActivePage :=zakladka[licz];
 web[licz]:=TWebBrowser.Create(zakladka[licz]);
 TWinControl(web[licz]).Parent := zakladka[licz];
 web[licz].Align:=alClient;
 Inc(licz);

Oleksy_Adam a mogę cię prosić o to żebyś do tego pierwszego mi pomógł ?.?

0

IMO to to rzutowanie na TWinControl troche bez sensu.

Co do pierwszego, wywalasz wszystkie procz aktywnej, czyli sprawdzasz PageIndex.

Co do drugiego, ja bym tutaj zmodyfikowal komponent PageControl, tak, zeby sam tworzyl takie buttony z odpowiednim zdarzeniem.

0

Ogólny szkielet na szybko. Dostosuj sobie do potrzeb.

unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls;

type
  TForm3 = class(TForm)
    PageControl1: TPageControl;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    TabSheet :array of TTabSheet;
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
var
  i :Word;
begin
  for i := 0 to PageControl1.PageCount-1 do
  begin
    if PageControl1.Pages[i].Tag <> PageControl1.ActivePage.Tag then
       begin
         // tutaj wykonaj akcję jaką potrzebujesz
         TabSheet[i].TabVisible := false;
       end;
  end;
end;

procedure TForm3.FormCreate(Sender: TObject);
var
  i :Word;
begin
  SetLength(TabSheet, 30);

  for i := 0 to 29 do
  begin
    TabSheet[i] := TTabSheet.Create(PageControl1);
    with TabSheet[i] do
    begin
      Parent := PageControl1;
      PageControl := PageControl1;
      Tag := i; // ID zakładki. Wykorzystane w celu określenia aktywnej zakładki
    end;
  end;
end;

procedure TForm3.FormDestroy(Sender: TObject);
var
  i :Word;
begin
  for i := 0 to 29 do
  begin
    TabSheet[i].Free();
  end;
end;

end.
0

Bardzo dziękuje ale mam jedno ale. Ze startem programu tworzy prze ogromie dużo zakładek i gdy nacisnę na button usuwania program usuwa i się zawiesza :)

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