Zakładki w przeglądarce - problemy z kodem

0

Męczę się, żeby do mojej przeglądarki wstawić zakładki. Użyłem: http://www.forumpc.pl/index.php?showtopic=143810 jednak niestety mam problemy. Wersja Delphi: 7 Personal.
Kod:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls, OleCtrls, SHDocVw_TLB, ComCtrls,
  Gauges, Menus, Unit2;

type
  TTajfun = class(TForm)
    WebBrowser1: TWebBrowser_V1;
    Panel1: TPanel;
    WsteczPrzycisk: TSpeedButton;
    DalejPrzycisk: TSpeedButton;
    ZatrzymajPrzycisk: TSpeedButton;
    OdswiezPrzycisk: TSpeedButton;
    Pasekadr: TEdit;
    IdzPrzycisk: TSpeedButton;
    Panel2: TPanel;
    Pasekpost: TProgressBar;
    StronadomPrzycisk: TSpeedButton;
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    Exit1: TMenuItem;
    N1: TMenuItem;
    Print1: TMenuItem;
    N2: TMenuItem;
    SaveAs1: TMenuItem;
    Edit2: TMenuItem;
    Find1: TMenuItem;
    N4: TMenuItem;
    Paste1: TMenuItem;
    Copy1: TMenuItem;
    Cut1: TMenuItem;
    N5: TMenuItem;
    Undo1: TMenuItem;
    Help1: TMenuItem;
    Aktualizacje: TMenuItem;
    SzukajPole: TEdit;
    SzukajPrzycisk: TSpeedButton;
    Stronadomowa1: TMenuItem;
    Oprogramie1: TMenuItem;
    PageControl1: TPageControl;
    NowakartaPrzycisk: TSpeedButton;
    procedure IdzPrzyciskClick(Sender: TObject);
    procedure WsteczPrzyciskClick(Sender: TObject);
    procedure DalejPrzyciskClick(Sender: TObject);
    procedure ZatrzymajPrzyciskClick(Sender: TObject);
    procedure OdswiezPrzyciskClick(Sender: TObject);
    procedure WebBrowser1TitleChange(ASender: TObject;
      const Text: WideString);

    procedure FormCreate(Sender: TObject);
    procedure WebBrowser1ProgressChange(ASender: TObject; Progress,
      ProgressMax: Integer);
    procedure PasekadrKeyPress(Sender: TObject; var Key: Char);
    procedure SzukajPoleKeyPress(Sender: TObject; var Key: Char);
    procedure SzukajPrzyciskClick(Sender: TObject);
    procedure Exit1Click(Sender: TObject);
    procedure Stronadomowa1Click(Sender: TObject);
    procedure Oprogramie1Click(Sender: TObject);
    procedure PasekadrClick(Sender: TObject);
    procedure AktualizacjeClick(Sender: TObject);
    procedure SzukajPoleClick(Sender: TObject);
    procedure NowakartaPrzyciskClick(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Tajfun: TTajfun;

implementation

{$R *.dfm}

procedure TTajfun.IdzPrzyciskClick(Sender: TObject);
begin
WebBrowser1.Navigate(Pasekadr.Text);
end;

procedure TTajfun.WsteczPrzyciskClick(Sender: TObject);
begin
WebBrowser1.GoBack;
end;

procedure TTajfun.DalejPrzyciskClick(Sender: TObject);
begin
WebBrowser1.GoForward;
end;

procedure TTajfun.ZatrzymajPrzyciskClick(Sender: TObject);
begin
WebBrowser1.Stop;
end;

procedure TTajfun.OdswiezPrzyciskClick(Sender: TObject);
begin
WebBrowser1.Refresh;
end;



procedure TTajfun.WebBrowser1TitleChange(ASender: TObject;
  const Text: WideString);
begin
Tajfun.Caption := text;
end;



procedure TTajfun.FormCreate(Sender: TObject);
begin
  WebBrowser1.GoHome;
  licz := 0;
end;

procedure TTajfun.WebBrowser1ProgressChange(ASender: TObject; Progress,
  ProgressMax: Integer);
begin
  Pasekpost.Max := ProgressMax; Pasekpost.Position := Progress;
end;

procedure TTajfun.PasekadrKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
  begin
    Key := #0;
    WebBrowser1.Navigate(Pasekadr.Text);
  end;
end;


procedure TTajfun.SzukajPoleKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
  begin
    Key := #0;
    WebBrowser1.Navigate('http://google.pl/search?q=' + SzukajPole.Text);
  end;
end;

procedure TTajfun.SzukajPrzyciskClick(Sender: TObject);
begin
   WebBrowser1.Navigate('http://google.pl/search?q=' + SzukajPole.Text);
end;

procedure TTajfun.Exit1Click(Sender: TObject);
begin
   Close;
end;



procedure TTajfun.Stronadomowa1Click(Sender: TObject);
begin
  WebBrowser1.Navigate('http://programy-oldshaterhana.yoyo.pl/')
end;

procedure TTajfun.Oprogramie1Click(Sender: TObject);
begin
  Oprogramie.Show;
end;

procedure TTajfun.PasekadrClick(Sender: TObject);
begin
  Pasekadr.SelectAll;
end;

procedure TTajfun.AktualizacjeClick(Sender: TObject);
begin
  WebBrowser1.Navigate('http://programy-oldshaterhana.yoyo.pl/20a4.html')
end;

procedure TTajfun.SzukajPoleClick(Sender: TObject);
begin
  SzukajPole.SelectAll;
end;

procedure TTajfun.NowakartaPrzyciskClick(Sender: TObject);
var zakladka : TTabSheet;
begin
  zakladka[licz]:=TTabSheet.Create(PageControl1);
  zakladka[licz].Caption:='Zakładka'+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;

  if PageControl1.ActivePageIndex=0 then
  WebBrowser1.Navigate(Edit1.Text)
  else
  web[PageControl1.ActivePageIndex].Navigate(Edit1.Text);

  Inc(licz);
end;

end.

Błędy:

[Error] Unit1.pas(119): Undeclared identifier: 'licz'
[Error] Unit1.pas(187): Class does not have a default property
[Error] Unit1.pas(188): Class does not have a default property
[Error] Unit1.pas(189): Class does not have a default property
[Error] Unit1.pas(190): Class does not have a default property
[Error] Unit1.pas(191): Class does not have a default property
[Error] Unit1.pas(192): Undeclared identifier: 'web'
[Error] Unit1.pas(192): Class does not have a default property
[Error] Unit1.pas(193): Class does not have a default property
[Error] Unit1.pas(194): Missing operator or semicolon
[Error] Unit1.pas(199): Missing operator or semicolon
[Fatal Error] Tajfun1.dpr(6): Could not compile used unit 'Unit1.pas'

Wie ktoś z Was co jest nie tak?

2

No to bawimy się w tłumacza:

j. angielski: [Error] Unit1.pas(119): Undeclared identifier: 'licz'
j. angielski: [Error] Unit1.pas(192): Undeclared identifier: 'web'
   j. polski: [Błąd] Unit1.pas(119): Niezadeklarowany identyfikator: 'licz'
   j. polski: [Błąd] Unit1.pas(192): Niezadeklarowany identyfikator: 'web'

A błąd jest, rzecz jasna, bo te zmienne są, uwaga, niezadeklarowane!

0

W uses to nie zadziała(deklaracja), więc gdzie trzeba to zrobić?

0

@madmike poddaję się. Ale to jest dział "Newbie", zgadza się?
Widzę coś o deklaracji w type, ale po prostu nie wiem jak...

0

Po pierwsze zacząłbym może od podstaw, a nie od pisania przeglądarki :]

Nie analizowałem kodu, więc to będzie takie teoretyczne. [Error] Unit1.pas(119): Undeclared identifier: 'licz' - używasz w programie zmiennej licz ale nie zadeklarowałeś jej nigdzie. Nie pokazałeś jakiego jest typu. Więc? Używasz jej w całym "programie", więc powinna być "widoczna" wszędzie.

masz tak:

  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Tajfun: TTajfun;

deklarując zmienną, ten kod powinien wyglądać tak:

  private
    { Private declarations }
  public
    licz:integer;
  end;
 
var
  Tajfun: TTajfun;

I analogicznie z resztą... I naprawdę polecam rozpocząć od solidnych podstaw...

0

Dzięki. A co z resztą błędów(daję nowe, bo chyba są nowe)

[Error] Unit1.pas(191): Class does not have a default property
[Error] Unit1.pas(192): Class does not have a default property
[Error] Unit1.pas(193): Class does not have a default property
[Error] Unit1.pas(194): Class does not have a default property
[Error] Unit1.pas(195): Class does not have a default property
[Error] Unit1.pas(196): Array type required
[Error] Unit1.pas(196): Class does not have a default property
[Error] Unit1.pas(197): Array type required
[Error] Unit1.pas(197): Class does not have a default property
[Error] Unit1.pas(198): Array type required
[Error] Unit1.pas(203): Array type required
[Fatal Error] Tajfun1.dpr(6): Could not compile used unit 'Unit1.pas'

0

a nie widzisz różnicy? Twój kod:

var zakladka : TTabSheet;

kod na stronie:

zakladka:array [1..30] of TTabSheet;

Inna sprawa, że ta deklaracja też powinna się znaleźć gdzie indziej :]

Podstawą programowania jest znajomość podstaw :/

0

Ok, poprawiłem kod i teraz mam jeden błąd:

[Error] Unit1.pas(75): Identifier redeclared: 'web'
[Fatal Error] Tajfun1.dpr(6): Could not compile used unit 'Unit1.pas'

Wiem na czym polega błąd, jednak jak dołożyć kolejną deklarację do tej samej rzeczy?
@#EDIT: jednak nie trzeba zmieniać, ale mam inny problem - debugger wywala buga przy korzystaniu z zakładek.
user image
Błąd podaje na linijce:

WebBrowser1.Navigate(Pasekadr.Text)
0

Proste. Jeżeli błąd jest na pewno w tej linijce co napisałeś to albo WebBrowser1 albo Pasekadr nie istnieją (wskazują na nil). Coś musi być nie tak w tworzeniu zakładaki albo może w jej odczytaniu przy zmianie.

0

Zaczęło działać, jednak nie wiadomo czemu 1 strona działa na wszystkich zakładkach...
A kod był...

0

I coś ciekawego jest?
Próbuję też użyć kodu:

procedure TTajfun.NowakartaPrzyciskClick(Sender: TObject);
var
   TabSheet: TTabSheet;
   WebBrowser: TWebBrowser;
begin
   TabSheet:= TTabSheet.Create(PageControl1);

   TabSheet.PageControl := PageControl1;
   WebBrowser:= TWebBrowser.Create(TabSheet);
   TWinControl(WebBrowser).Parent:= TabSheet;
   WebBrowser.Align:= alClient;
end;

Ten sam skutek...
W ogóle to na początku - przy tworzeniu formy powinna się karta tworzyć z przyporządkowanym WB... Chyba, że się mylę...

0

No kod wygląda ok, jak nowa - pierwsza karta w OnCreate generuje AV z jakiś powodów to spróbuj dać kod do zdarzenia OnShow.

0

Wygląda ok, ale nie działa...
A chodzi o to, że karta powinna się od razu na starcie przeglądarki pojawiać. Mnie już ten kod zaczyna drażnić...

0

Teraz się tym bawiłem i wpadłem na pomysł czy czasem nie trzeba tego nawigować dla konkretnych kart... I spróbowałem zrobić prostego klienta o takim kodzie:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    Panel1: TPanel;
    Button1: TButton;
    Edit1: TEdit;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  PAgeControl1.ActivePage.Navigate(Edit1.Text);
  
end;

procedure TForm1.Button2Click(Sender: TObject);
var
   TabSheet: TTabSheet;
   WebBrowser: TWebBrowser;
begin
   TabSheet:= TTabSheet.Create(PageControl1);

   TabSheet.PageControl := PageControl1;
   WebBrowser:= TWebBrowser.Create(TabSheet);
   TWinControl(WebBrowser).Parent:= TabSheet;
   WebBrowser.Align:= alClient;
end;

end.

Niestety błędy:

[Error] Unit1.pas(33): Undeclared identifier: 'Navigate'
[Error] Unit1.pas(40): Undeclared identifier: 'TWebBrowser'
[Error] Unit1.pas(45): Missing operator or semicolon
[Error] Unit1.pas(47): Missing operator or semicolon
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

@Edit:
Nowy kod:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    Edit1: TEdit;
    Button2: TButton;
    PageControl1: TPageControl;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
var
   TabSheet: TTabSheet;
   WebBrowser: TWebBrowser;
begin
   TabSheet:= TTabSheet.Create(PageControl1);

   TabSheet.PageControl := PageControl1;
   WebBrowser:= TWebBrowser.Create(TabSheet);
   TWinControl(WebBrowser).Parent:= TabSheet;
   WebBrowser.Align:= alClient;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  PageControl1.ActivePage.Navigate(Edit1.Text);

end;

end.

Błędy:
</quote>[Error] Unit1.pas(46): Undeclared identifier: 'Navigate'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'</quote>

Więc tylko z tym jest już problem...

0

Kolego, zanim zaczniesz pisać przeglądarkę, naucz się podstaw, bo póki co to tylko czekasz aż inni zrobią coś za ciebie, mimo że ten kod w ogóle jest w totalnej rozsypce. Nie szkodzi że to dział newbie, ale Ty po prostu zakładasz masę tematów i liczysz że dając byle co oni Ci to przerobią na przeglądarke. Nie o to chodzi, naucz się podstaw. Wtedy pomożemy Ci jeśli będziesz mieć problem, ale nie sądzę aby ktokolwiek miał zamiar przerabiać to co Ty nazywasz kodem na kod.

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