Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Browser programmieren (https://www.delphipraxis.net/101832-browser-programmieren.html)

djpaull 18. Okt 2007 21:34


Browser programmieren
 
Servus allerseits.

Ich hab mir vorgenommen einen einfachen, primitiven Browser zu erstellen, bestehend aus:
- 5 buttons (vor, zurück, stop, refresh und go)
- 1 editfeld (ardresse)
- 1 TWebBrowser

Es funzt so halbwegs - wenn ich die adresse eingebe, geht er auch dorthin. Nur... Wie kann ich es so machen, dass die KOMPLETTE adresse der aktuellen seite im editfeld angezeigt wird, wie in jedem Browser. Oder wenn ich auf einen Link gehe, soll diese Adresse auch angezeigt werden.


Danke schon mal im Voraus!

quendolineDD 18. Okt 2007 22:47

Re: Browser programmieren
 
Willkommen in der DP :)

Zitat:

Die Eigenschaft LocationURL gibt die URL oder den Pfad des aktuell angezeigten Dokuments oder Ordners an.

Delphi-Syntax:

property LocationURL: WideString;

Beschreibung

Mit LocationURL können Sie den Namen der aktuell in der WebBrowser-Komponente angezeigten Ressource abrufen. Bei einer HTML-Seite aus dem Web enthält die Eigenschaft die URL. Bei einem Verzeichnis oder einer Datei im Netzwerk bzw. auf der Festplatte gibt LocationName den vollständigen UNC-Namen an.

Hinweis: Der Wert von LocationURL kann nur gelesen werden. Um eine bestimmte Ressource im Browser anzuzeigen, verwenden Sie die Methoden Navigate oder Navigate2.

djpaull 18. Okt 2007 22:57

Re: Browser programmieren
 
Mit LocationURL zeigt er mir den Pfad meines Projekt, also da, wo mein Browser liegt. Aber ich will den Pfad der aktuellen Seite angezeigt haben. Bitte ein beispiel.

Im Moment sieht es so aus

Delphi-Quellcode:
procedure TForm1.btnGoClick(Sender: TObject);
begin
 edit1.text:=(webBrowser1.LocationURL);
end;
Was mach ich falsch oder was fehlt da?

djpaull 18. Okt 2007 23:03

Re: Browser programmieren
 
Hey Sorry, es geht doch!!!??? Ich habs jetzt auf nen anderen Button verlegt und es geht!!!

Hey, Danke!

Falls jemand weiss, wie ich "Favoriten" programieren kann, dem geb ich ein Kuss :wink:

quendolineDD 18. Okt 2007 23:07

Re: Browser programmieren
 
Einfach die aktuellen URLs einspeichern und bei einem Klick auf das ausgewehlte Element in den Favouriten wird diese Seite aufgerufen.

Edit. Auf den Kuss verzichte ich gerne :)

djpaull 18. Okt 2007 23:19

Re: Browser programmieren
 
:-D jaja..

Zitat:

Einfach die aktuellen URLs einspeichern und bei einem Klick auf das ausgewehlte Element in den Favouriten wird diese Seite aufgerufen.
Is schon klar. Ich mach das über TMainMenu. Nur ich weiss nicht, wie ich die aktuelle Seite(Adresse) als ein Item speichern kann. Ich hab schon zwar ein Item "Freenet" (nur so als Beispiel) manuell erstellt und ihm mit webBrowser1.Navigate('www.freenet.de'); zugewiesen. Die Frage ist wie könnte man das etwas automatisieren? Dass er beim Click auf Item "Hinzufügen" einen neuen Item anlegt und ihm webBrowser1.Navigate(blabla) zuweisst.

quendolineDD 18. Okt 2007 23:45

Re: Browser programmieren
 
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, OleCtrls, SHDocVw, StdCtrls;

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    MainMenu1: TMainMenu;
    Hinzufuegen1: TMenuItem;
    Edit1: TEdit;
    procedure Hinzufuegen1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);

  private
    StringList: TStringList;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Hinzufuegen1Click(Sender: TObject);
begin
StringList.Add(WebBrowser1.LocationURL);
Edit1.Text := StringList.Strings[0];
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
StringList := TStringList.Create;
WebBrowser1.Navigate('http://www.google.de');
end;

end.
Alles nur test-Quellcode. Also funktioniert wunderbar bei mir :)

Nur müsstest du die Daten dann noch abspeichern und wiederum beim erneuten aufruf deines Programmes laden und im MainMenu irgendwo anzeigen :)

Grüße

EDIT:

Um dann aus der Auswahl heraus auf die Seiten zu gelangen musst du ganz einfach dann bloß die gespeicherte URL dem Browser zuweisen.

djpaull 19. Okt 2007 00:02

Re: Browser programmieren
 
Hey danke, funzt tatsächlich!

Ich geh jetzt mal ins Bett, werde morgen weitermachen. Dann poste ich mal den "kompletten" Quelltext von der Lösung. Vielleicht wird es jemand noch irgendwann brauchen.

Nochmal Danke für deine Hife trotz der späten Stunde! :)

djpaull 19. Okt 2007 11:37

Re: Browser programmieren
 
Servuz nochmal.

Also, im Moment klemmts nur noch am folgendem Punkt - Favoriten. Es soll beim click auf z.B. MenuItem1 der Inhalt des Ordners "XY" (in meinem Fall "./Favoriten") angezeigt werden. Überhaupt, wie kann man denn den inhalt eines Ordners anzeigen lassen. Bei der ActionList wurde ich nicht fündig, mein MainMenu hab ich schon von oben bis unten "durchgenommen", aber leider kein passendes Befehl gefunden. :wall:
Habt ihr Vorschläge?

djpaull 19. Okt 2007 11:40

Re: Browser programmieren
 
Zitat:

Nur müsstest du die Daten dann noch abspeichern und wiederum beim erneuten aufruf deines Programmes laden und im MainMenu irgendwo anzeigen
Hmmm... jaaa.. wie z.B. genau das ist ja mein Problem.

djpaull 19. Okt 2007 17:26

Re: Browser programmieren
 
Also ich hab bisi rumgesearcht und folgendes gefindet:

Hier wurde das Problem irgendwie gelöst, bloss es ist für mich etwas zu hoch.

1. Ich kenne keine Komponente, die TBrowser heisst, nur TWebBrowser (vielleicht sind ja beide gleich?)
2. Was ist "Seitehinzufgen1Click" - ein Button, MenuItem oder...
3. Und vor allem - was zum Geier ist "TBrowser.spSkinListBox1ListBoxDblClick", wie erstellt man sowas?

Ne ListBox hab ich schon. Daten aus dem Adressen Feld können dort abgelegt werden und werden beim FormCreate geladen.

Vielleicht kann mir jemand sagen wie ich zu Laufzeit die MenuItems zur MainMenu hinzufügen kann - wäre auch hilfreich. Ich bin für alles offen.

Danke!

quendolineDD 19. Okt 2007 17:43

Re: Browser programmieren
 
Also ich kann dein Problem nicht ganz nachvollziehen. Du kannst doch alle Favouriten in einer Datei hinterlegen und aus dieser laden und schreiben.

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Button1: TButton;
    moep1: TMenuItem;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
NewItem : TMenuItem;
begin
NewItem := TMenuItem.Create(MainMenu1); //Zuweisung des Parents und erstellen des MenuItems
NewItem.Caption := 'foobar'; //Name des MenuItems
NewItem.Tag := 1; //Glaube hier wird die Position des MenuItems zugewiesen
newItem.onClick := ClickMe; //damit wird die Prozedur ClickMe ausgeführt, wenn auf das Item geklickt wird
moep1.Add(newItem); //Hinzufügen zum Menupunkt "moep"
end;

end.
Klappt wunderbar, müsstest du nur noch auf deine Verhältnise einstellen ;)

Und bitte : Editiere deine Einträge, solang diese nicht älter als 24 Tage sind.
Und dann noch was: Eigentlich bloß eine Frage pro Thread *g

Grüße aus Dresden

Edit1: Kommentare zum besseren Verständnis hinzugefügt

Edit2: Ich rate dir, alle Favouriten in einer Datei zu speichern.
Diese kannst du mit einer StringList laden und somit auch bearbeiten und wieder speichern.
Delphi-Quellcode:
StringList.LoadFromFile(filename);
Delphi-Quellcode:
StringList.SaveToFile(filename);

djpaull 19. Okt 2007 18:14

Re: Browser programmieren
 
Danke für die Hinweise, bin erst kurz im Forum. Werde sie zu beachten.

Nun zum Code.
Ja ma kann es auch mit StringList machen, ich habs eben mit ListBox probiert. Aber egal. Mir geht es darum, die einträge aus der StringList (bzw. ListBox) als die Menupunkte darzustellen. Sie werden ja bereits abgespeichert in fav.ini und von dort gelanden. Aber eben in die STRINGLIST und Nicht in MAINMENU - das ist mein Problem.

Sorry, dass ich dich mit meinem Unwissen nerve, aber ich komme einfach nicht weiter und bin etwas verzweifelt.

Edit1: Warte mal ich glaub, ich habs. Einen Moment noch...

quendolineDD 19. Okt 2007 18:47

Re: Browser programmieren
 
Die Daten müssen vorerst in ein StringList, um von dort aus in das MainMenu geschrieben werden.

Dabei gehst du wie folgt vor.

Delphi-Quellcode:
StringList.Create;
StringList.LoadFromFile(filename);
for i:= 0 to StringList.Count - 1 do
 begin
   newItem := TMenuItem.Create(MainMenu);
   newItem.Caption := StringList.Strings[i];
   newItem.Tag := i;
   newItem.onClick := GoToFavURL; //oder sonstewie
   MenuItem.Add(newItem);
 end;
So ungefähr (code ungetestet)

djpaull 19. Okt 2007 19:29

Re: Browser programmieren
 
Ich habs! Und so Funzt es:

Laden der Favoriten:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  NewItem : TMenuItem;
  begin
    StringList := TStringList.Create;
    StringList.LoadFromFile('./Favoriten/fav.ini');
    for i:= 0 to StringList.Count - 1 do
      begin
      newItem:=TMenuItem.Create(favoriten1); // favoriten1 ist mein menupunkt Favoriten
      newItem.Caption := StringList.Strings[i];
      newItem.Tag := i;
      newItem.onClick := clickme; //ClickMe soll der Link des jeweiligen Favoritseintrages sein
      favoriten1.Add(newItem);
      end;
  end;
Hinzufügen einer Adresse zu den Favoriten:

Delphi-Quellcode:
procedure TForm1.Hinzufgen1Click(Sender: TObject); // Hinzufgen1 ist mein menupunkt im Menu Favoriten

var
NewItem : TMenuItem;
begin
  NewItem := TMenuItem.Create(mm1); //Zuweisung des Parents und erstellen des MenuItems
  NewItem.Caption := edtadresse.Text; //Name des MenuItems
  NewItem.Tag := 0; //Glaube hier wird die Position des MenuItems zugewiesen
  newItem.onClick := ClickMe; //damit wird die Prozedur ClickMe ausgeführt, wenn auf das Item geklickt wird
  favoriten1.Add(newItem); //Hinzufügen zum Menupunkt "favoriten"

  StringList.Add(edtadresse.Text);
  StringList.SaveToFile('./Favoriten/Fav.ini');
end;
Was noch fehlt, ist die Verlinkung der Favoriten mit z.B. Procedure Clickme
Meine Idee:
Delphi-Quellcode:
Procedure TForm1.ClickMe(Sender: TObject);
begin
  WebBrowser1.Navigate(newitem.caption);
end;
Oder so änlich. Bei mir spuckt er nen Fehler raus: Zugriffsverletzung blablabla...
Weiss jemand wie das Verlinken der Menupunkte geht?

quendolineDD 19. Okt 2007 20:04

Re: Browser programmieren
 
Die Zugriffsverletzung wird wohl kommen, weil du die StringListe nirgends deklariert hast?

Delphi-Quellcode:
procedure TForm1.clickMe(sender: TObject);
begin
WebBrowser1.Navigate(MainMenu.Items[0].Items[0].Caption);
end;

end.
Hiermit übergibst du aus dem MainMenu das erste item und davon wiederum das erste Unteritem.
Eventuell solltest du noch die passende ID übergeben und die Procedure somit erweitern :)

Grüße

djpaull 19. Okt 2007 20:32

Re: Browser programmieren
 
Danke. Es funzt zwar, nur die Verlinkung ist ist auf den ItemXY beschränkt. Ich Überleg grad folgendes: die caption vom jeweiligem Item ist gleich die Adresse, auf die der Browser gehen soll (sonst würde es ja nicht gehen). Könnte man vielleicht sowas in der Art machen:

var
i: TMenuItem;
begin
i:=mainmenu1.selectedItem; //keine Ahnung ob es sowas gibt
wbb.Navigate(mainmenu1.Items[0].Items[i].Caption);
end;

Ist nur n Beispiel(ungetestet)

quendolineDD 19. Okt 2007 21:12

Re: Browser programmieren
 
Vergiss nicht am TMainMenu die AutoHotkeys auf maManual umzustellen!
Wenn du mehrere Items hast kannst du das so machen:

Delphi-Quellcode:
procedure TForm1.ClickMe(Sender: TObject);
begin
WebBrowser.Navigate(self.httpwwwgooglede1.Caption);
end;
Die Verwendung der Delphi-Hilfe würde dich sehr viel weiter bringen ;)
(F1).

Grüße

djpaull 20. Okt 2007 15:43

Re: Browser programmieren
 
Hi @ alle.

@ quendolineDD

Also ich hab Delphi Online Hilfe benutzt. Ich habe versucht noch örgentwas sinvolles zu "navigate" oder zu "self" rauszufinden. Er spuckt mir dann örgentein Krempel, vonwegen oleVariant und Automatisierte Abläufe, von dem ich sowieso kein Peil hab. Dazu ist auch schön im Delphi-Fach-Timbuktisch geschrieben. Ich bin ein einfacher Mensch und verstehe diesen Fach-esimpel nicht. Deswegen wende ich mich an die aus dem Forum. Die Leute hier können mir das Gleiche, was in der Hilfe steht, in normaler "Umgangssprache sagen", oder direkt den Code schreiben. Ich bastelle damit rum und so verstehe ich, wie der oder der Befehl funktioniert. Ich habe angefangen Delphi zu lernen erst in diesem Schuljahr und bin mittlerweile dabei ein Browser zu estellen. Ich persönlich bin der Meinung, dass das schon immerhin ein Fortschritt ist. Statt Delphi-Hilfe benutze ich Google, dort findet man auch jede Menge. Ich bin nicht faul zu suchen. Es ist nur so. Ich stelle hier eine Frage, auf die ich eine Antwort von den Leuten, die davon Ahnung haben, erwarte.

Zum Code.
Beim oben genannten Möglichkeit wird "httpwwwgooglede1" rot unterstrichen - was ist damit gemeint? Und was bedeutet "self"?

Folgendes fehlt mir im Moment: Beim Click auf den MenuItemXY soll der Browser zu dessen Caption oder Name navigieren.

Bitte um Verständnis für mein Unwissen.

WordsBG 20. Okt 2007 16:22

Re: Browser programmieren
 
Zitat:

Zitat von djpaull
Und was bedeutet "self"?

Das ist ein Bezug auf das Objekt der Klasse in der die Funktion steht. Im Falle dies wäre TForm1 wäre Self das selbe wie Form1 für Delphi.

Zitat:

Zitat von djpaull
Folgendes fehlt mir im Moment: Beim Click auf den MenuItemXY soll der Browser zu dessen Caption oder Name navigieren.

Delphi-Quellcode:
procedure TForm1.MenuClick(Sender: TObject);
begin
  WebBrowser1.Navigate((Sender as TMenuItem).Caption);
end;

quendolineDD 20. Okt 2007 16:24

Re: Browser programmieren
 
Hallo :)

Das was bei mir steht, ist der Caption des MenuItems gewesen, welcher eigentlich http://www.google.de lautete ;)

self ist in diesem Fall die Form.

Da du ja allgemein für jedes angelegte MenuItem die Procedur ClickMe zugewiesen hast, müsstest du dort auch über den Sender herausfinden, von welchem MenuItem aus diese aufgerufen wurde.

Delphi-Quellcode:
procedure TForm1.ClickMe(Sender: TObject);
var
MenuItem : TMenuItem;
begin
MenuItem := foobar;
if Sender is TMenuItem then
  begin
        ShowMessage(MenuItem.Items[MenuItem.MenuIndex].Caption);
  end;
end;
Edit: Ok er hats kürzer und schneller *g
Musste selber erstmal schauen, wie ich auf die Caption eigenschaft über Sender komme :wall: :oops:

djpaull 20. Okt 2007 17:08

Re: Browser programmieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke euch beiden. Jetzt funktioniert alles, wie es soll. Mein Browser ist soweit fertig. Ich muss nur noch den Quellcode ordentlich kommentieren und strukturieren. Werde bald den Code + Browser (zum Download) posten, für die, die sich dafür interessieren (voraussichtlich noch bis 21:00 wenn nix dazwischen kommt).
Bis denn!

Edit

So, hier ist der Code für meinen Browser. Ich hoffe, das bringt jemanden weiter.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, jpeg, StdCtrls, ExtDlgs,URLMon, ExtCtrls, DBCtrls, ComCtrls,
  OleCtrls, SHDocVw, ddeman, ActiveX, shellapi, Menus, FileCtrl, ToolWin,
  ActnMan, ActnCtrls, ActnList, StdActns, ListActns;

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    tabBrowser: TTabSheet;
    wbb: TWebBrowser;
    Label1: TLabel;
    edtAdresse: TEdit;
    btnWeiter: TButton;
    btnBack: TButton;
    btnGo: TButton;
    btnHome: TButton;
    btnRefresh: TButton;
    btnStop: TButton;
    mm1: TMainMenu;
    Favoriten1: TMenuItem;
    Hinzufgen1: TMenuItem;
    N8: TMenuItem;
 
    procedure FormCreate(Sender: TObject);
    procedure btnGoClick(Sender: TObject);
    procedure btnWeiterClick(Sender: TObject);
    procedure btnBackClick(Sender: TObject);
    procedure btnRefreshClick(Sender: TObject);
    procedure btnStopClick(Sender: TObject);
    procedure Hinzufgen1Click(Sender: TObject);
    Procedure ClickMe(Sender: TObject);
    procedure btnHomeClick(Sender: TObject);

  private
    StringList: TStringList;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  i: integer;

implementation


{$R *.dfm}

// Folgendes geschieht beim Erstellen der Form ---------------------------

procedure TForm1.FormCreate(Sender: TObject);
var
NewItem : TMenuItem;
  begin
    wbb.GoHome; // Zur Startseite gehen
    CreateDir('./'+'Favoriten'); // Ornder "Favoriten" für fav.ini erstellen
    StringList := TStringList.Create; // Erstellen der StrinList
    StringList.LoadFromFile('./Favoriten/fav.ini'); // fav.ini laden
    // Favoriten laden
    for i:= 0 to StringList.Count - 1 do
    begin
    newItem:=TMenuItem.Create(favoriten1);
    newItem.Caption := StringList.Strings[i];
    newItem.Tag := i;
    newItem.onClick := clickme; //oder sonstewie
    favoriten1.Add(newItem);
    end;
    // Aktuelle Adresse im Adressenfeld anzeigen
    edtadresse.Text:=(wbb.LocationURL);
  end;


// Zu Favoriten hinzufügen -----------------------------------------------

procedure TForm1.Hinzufgen1Click(Sender: TObject);

var
NewItem : TMenuItem;
begin
  NewItem := TMenuItem.Create(mm1); //Zuweisung des Parents und erstellen des MenuItems
  NewItem.Caption := edtadresse.Text; //Name des MenuItems
  NewItem.Tag := 0; //Glaube hier wird die Position des MenuItems zugewiesen
  newItem.onClick := ClickMe; //damit wird die Prozedur ClickMe ausgeführt, wenn auf das Item geklickt wird
  favoriten1.Add(newItem); //Hinzufügen zum Menupunkt "favoriten1"
  StringList.Add(edtadresse.Text);
  StringList.SaveToFile('./Favoriten/Fav.ini');
end;

// Zum Favorit gehen--------------------------------

Procedure tForm1.ClickMe(Sender: TObject);
begin
  wbb.Navigate((Sender as TMenuItem).Caption);
end;

// Zu der Aresse gehen (im IE als Goto bekannt)---------------------------

procedure TForm1.btnGoClick(Sender: TObject);
begin
  wbb.Navigate(edtadresse.Text);
  edtadresse.text:=(wbb.LocationURL);
end;

// Zur Startseite gehen --------------------------------------------------

procedure TForm1.btnHomeClick(Sender: TObject);
begin
  wbb.GoHome;
  edtadresse.text:=(wbb.LocationURL);
end;

// Seite erneut laden ----------------------------------------------------

procedure TForm1.btnRefreshClick(Sender: TObject);
begin
  wbb.Refresh;
  edtadresse.text:=(wbb.LocationURL);
end;

// Eine Seite weiter gehen -----------------------------------------------

procedure TForm1.btnWeiterClick(Sender: TObject);
begin
  wbb.GoForward;
end;

// Eine Seite zurück gehen -----------------------------------------------

procedure TForm1.btnBackClick(Sender: TObject);
begin
  wbb.GoBack;
end;

// Laden der Seite abbrechen ---------------------------------------------

procedure TForm1.btnStopClick(Sender: TObject);
begin
  wbb.Stop;
end;

end.
Der Browser hat noch Bugs:
- fav.ini wird erst beim Erstellen des ersten Favoriten kreiert. Folge - Fehlermeldung beim ersten Start.
- wenn man auf eine Seite geht, wird die Adresse im Adressenfeld erst bei der nächsten Seite, bzw. beim Refresh angezeigt.

Hauptfunktionen: Goto, Seite Vor und Zurück, Refresh, Stop, Home, Favoriten

Es war ein kleiner Schritt für die Menschheit, aber ein grosser Schritt für mich!

Danke nochmal an alle, die mir dabei geholfen haben!

Für weitere Verbesserungen/Vorschläge bin ich selbstverständlich offen. Da das Thema "Browser Programmieren" heisst, denke ich, dass es geht hier weiter zu posten.

Edit2
Hier kann man auch einen Mini-Browser herunterladen, nur so nebenbei. Hab grad durch Zufall gefunden. Er ist ein Stück besser als meiner :lol: .

mfG. NGL aka DJPaull

quendolineDD 20. Okt 2007 19:18

Re: Browser programmieren
 
Kontrollier einfach ob der Ordner schon existiert.

Eventuell solltest du auch folgende Procedur so erweitern:

Delphi-Quellcode:
procedure TForm1.btnGoClick(Sender: TObject);
begin
  wbb.Navigate(edtadresse.Text);
  repeat
    Sleep(50);
    Application.ProcessMessages;
  until wbb.ReadyState >= READYSTATE_COMPLETE;
  edtadresse.text:=(wbb.LocationURL);
end;

djpaull 20. Okt 2007 19:48

Re: Browser programmieren
 
Ja danke, es funktioniert. Nur ich hab an "OnNavigateComplete2"-Event gedacht. Damit sollte es besser eleganter gelöst werden. Weiss aber leider nicht, wie ich es anwenden soll.

Delphi-Quellcode:
procedure TfrmMyBrowser.WebBrowser1NavigateComplete2(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  AddEventLog('OnNavigateComplete2 ' + URL);
  edURL.Text := TWebbrowser(Sender).LocationURL;
end;
Ich fand das hier beim googeln, aber weiss nicht wie ich das auf mein Browser umsetzen soll.

quendolineDD 20. Okt 2007 20:07

Re: Browser programmieren
 
Naja, ist in dem Sinne wohl das gleiche Resultat. bei meiner Schleife wird einfach gewartet, bis der Browser fertig navigiert hat.

WordsBG 20. Okt 2007 21:47

Re: Browser programmieren
 
Wenn du beim OnCreate noch Paramter abfragst kannst du per OnNewWindow per ShellExecute deinen Browser statt dem IE einbauen. Außerdem gehört das aktualisieren der URL in OnNavigateComplete. Die Titelzeile hast du btw. auch vergessen. Vielleicht schaust du dir mal den Browser der Delphi-Demos an.

djpaull 20. Okt 2007 22:46

Re: Browser programmieren
 
Ich habs jetzt mit "OnNewWindow" ergänzt. Sorry wegen der "OnNavigateComlete" - ich war einfach blind. Ich habs als gesucht, und dabei war es vor meiner Nase - bei den Events vom TBrowser :wall: .

Mein Primärziehl ist erfüllt - ein "primitiver" Browser ist fertig. Ich denke mittlerweile schon an Status anzeige sämtliche ToolBars. Nach ner Zeit krig ich auch das eingebaut. Ist nicht dringend, aber wenn jemand Lust, kann mal hier auch was zu den ToolBars & Co. schreiben.

P.S. Bin echt froh, dass das Ding jetzt funtz. Und bin froh, dass es noch genug schlaue Leute gibt, wie euch. :zwinker:

djpaull 18. Apr 2008 01:36

Re: Browser programmieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin, Moin!

Aaaalso... Hab ein Browser mit Tabing-Funktion. Momentan hab ich folgende Probleme:
1. Meine StatusBar reagiert nicht mehr und
2. Adressen Feld zeigt die Adresse erst an, wenn man auf "Aktualisieren" clickt (, also erst nachdem die Seite komplett geladen worden ist). Geht komischer weise bei allen Tabs

Code

"wbb: TWebBrowser" und "stb: TStatusBar" sind global deklariert

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
ts: TTabSheet;

  begin
    stb:= TStatusBar.Create(Form1); // StatusBar wird vom Programm erstellt
    form1.InsertControl(stb);

    wbb:= twebbrowser.Create(form1); // Browser wird vom Programm erstellt
    wbb.GoHome;

    ts := TTabsheet.Create(PageControl2);
    ts.Caption := wbb.LocationName; // Funzt nicht
    ts.PageControl := PageControl2;
    PageControl2.ActivePage := ts;
    wbb := TWebBrowser.Create(ts);
    ts.InsertControl(wbb);
    wbb.Align := alClient;
    wbb:=GetCurrentWB;
    wbb.GoHome;
    wbb.OnNewWindow2 := wbbNewWindow2;

...

procedure TForm1.wbbNavigateComplete2(ASender: TObject; const pDisp: IDispatch;
  var URL: OleVariant);
Begin
  wbb:=GetCurrentWB; // Aktiven Browser ermitteln
  edtAdresse.Text:=wbb.LocationURL;

...

procedure TForm1.btnNewTabClick(Sender: TObject); // Neuen Tab öffnen
  var
  ts1: TTabsheet;
begin
  ts1 := TTabsheet.Create(PageControl2);

  ts1.PageControl := PageControl2;
  PageControl2.ActivePage := ts1;
  wbb := TWebBrowser.Create(ts1);
  ts1.InsertControl(wbb);
  wbb.Align := alClient;
  wbb:=GetCurrentWB;
  wbb.GoHome;
  edtAdresse.Text:=wbb.LocationURL;
  ts1.Caption := wbb.LocationName; // Funzt nicht
  pagecontrol2.ActivePage:=(ts1);
  wbb.OnNewWindow2 := wbbNewWindow2;
end;

...

// Make TStatusbar to be the parent of any controls - Funzt nicht bei mehreren Tabs !!!

constructor TStatusBar.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ControlStyle := ControlStyle + [csAcceptsControls];
end;

...

procedure TForm1.wbbProgressChange(ASender: TObject; Progress,
  ProgressMax: Integer);
  begin

  if progressmax>0 then
    stb.Panels[0].Text:=inttostr(round(Progress/progressmax*100));
  end;


procedure TForm1.wbbStatusTextChange(ASender: TObject; const Text: WideString);
begin

  stb.Panels[1].Text:=Text;
end;
Als der Browser und StatusBarnoch von mir erstellt wurden, also in der Tool Palette, ging NUR der erste Tab mit wbb drin, auf weitere Tabs gabs keine Reaktion weder im Adressen Feld, noch in der StatusBar. Hat Jemand eine Idee was da falsch ist?

EDIT

Delphi-Quellcode:
// Aktiven Browser ermitteln ---------------------------------------------

function Tform1.GetCurrentWB: TWebbrowser;
begin
  Result := nil;
  with PageControl2 do
    if ActivePage.ControlCount > 0 then
    begin
      if ActivePage.Controls[0] is TWebbrowser then
      begin
        Result := (TWebbrowser(ActivePage.Controls[0]));
      end else
        Result := wbb;

    end;
end;
EDIT 2

Also meine Theorie: Bei den vom Programm erstellten Objekten gibt es keine Ereignisse, wie OnNavigateComlplelte2. Zumindest Keine Reaktion.

EDIT 3
Kleines Beispiel was ich meine zum Downloaden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz