Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Turbo Delphi - Přístup ke komponentám

Dobrý den,
na formuláři je PageControl. Na každém jeho TabSheetu se dynamicky vytváří buď jedna komponenta (TWebBrowser) nebo devatenáct komponent (9xTImage,9xTLabel,TWebBrowser). Často k TWebBrowseru přistupuji (Navigate, Visible). Jak přistupovat? (TWebBrowser je vždy poslední)

Přistupuji přes vlastní funkci:

GetBrowser(Index);

Index udává, na kterém TabSheetu je onen WebBrowser (který TabSheet je jeho parent). Samotná funkce vypadá takto:

Result:=PageControl1.Pages[Index].Controls[PageControl1.Pagec[Index].ControlCount];

S touto funkcí s WebBrowserem pracuji jako s TComponent a ne jako s TWebBrowser. Jak mám funkci změnit, abych pracoval rovnou s TWebBrowser?

Moje snahy byly doposud marné:

Result:=TWebBrowser(PageControl1.Pages[Index].Controls[PageControl1.Pagec[Index].ControlCount]);
Result:=PageControl1.Pages[Index].Controls[PageControl1.Pagec[Index].ControlCount] as TWebBrowser;

Děkuji

Předmět Autor Datum
Pokud je ten webbrowser pouze jeden, bude mnohem jednodussi si v ramci formulare v private nadeklaro…
Jan Fiala 24.02.2012 11:34
Jan Fiala
Nie je to najlepšie/najuniverzálnejšie riešenie ale asi takto (narýchlo): function mainForm.GetWB:…
pme 24.02.2012 11:45
pme
Form1 = Class(TForm) ... private wb: TWebBrowser; ... public ... Kdyz budu webBrowser vytvaret, ne…
Jan Fiala 24.02.2012 13:27
Jan Fiala
S tou premennou deklarovanou vo vnútri triedy ako private to nepôjde...(musíš pozrieť jeho staršie p… poslední
pme 24.02.2012 13:44
pme

Nie je to najlepšie/najuniverzálnejšie riešenie ale asi takto (narýchlo):

function mainForm.GetWB: TWebBrowser;
begin
  result := TWebbrowser(PageControl.ActivePage.Controls[0]);  //ak je tam iba 1 komponenta, čiže je prvá [0]
  result := TWebbrowser(PageControl.ActivePage.Controls[2]); //ak sú tam 3 a Webrowser je posledný, čiže [2]
end;
Form1 = Class(TForm)
...
private
  wb: TWebBrowser;
...
public 
...

Kdyz budu webBrowser vytvaret, nebudu si deklarovat lokalni promennou, ale pouziju promennou WB.
Pak budu pres tu promennou k WebBrowseru pristupovat, nemusim nic pretypovavat a spolehat se na to, ze je WebBrowser posledni kompoennta.

Jinak ten tvuj kod bych opravil na:

  result := TWebbrowser(PageControl.ActivePage.Controls[PageControl.ActivePage.ControlCount-1]); 

S tou premennou deklarovanou vo vnútri triedy ako private to nepôjde...(musíš pozrieť jeho staršie predchádzajúce príspevky, čo ako vytvára/ruší za behu programu)
a za druhé: aj tak by si nemohol pristupovať ku jednotlivým wb cez jednu premennú, keď práve neukazuje na konkrétnu inštanciu (fuj aké slovo...:-)).

Ja by som môj kód ešte poupravil:

var
  i: Integer;
begin
  with PageControl.ActivePage do
  for i = 0 to ControlCount -1 do
  begin
    if Controls[i] is TWebBrowser then 
     begin
       Result := TWebbrowser(PageControl.ActivePage.Controls[i];
       Exit;  
     end;
  end; 
end;

Zpět do poradny Odpovědět na původní otázku Nahoru