AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Browser programmieren

Browser programmieren

Ein Thema von djpaull · begonnen am 18. Okt 2007 · letzter Beitrag vom 18. Apr 2008
Antwort Antwort
Seite 3 von 3     123
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#21

Re: Browser programmieren

  Alt 20. Okt 2007, 17:24
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
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
djpaull
(Gast)

n/a Beiträge
 
#22

Re: Browser programmieren

  Alt 20. Okt 2007, 18:08
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 .

mfG. NGL aka DJPaull
Angehängte Dateien
Dateityp: exe ngls_browser_265.exe (886,5 KB, 31x aufgerufen)
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#23

Re: Browser programmieren

  Alt 20. Okt 2007, 20:18
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;
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
djpaull
(Gast)

n/a Beiträge
 
#24

Re: Browser programmieren

  Alt 20. Okt 2007, 20:48
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.
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#25

Re: Browser programmieren

  Alt 20. Okt 2007, 21:07
Naja, ist in dem Sinne wohl das gleiche Resultat. bei meiner Schleife wird einfach gewartet, bis der Browser fertig navigiert hat.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Benutzerbild von WordsBG
WordsBG

Registriert seit: 17. Sep 2005
63 Beiträge
 
Delphi 7 Professional
 
#26

Re: Browser programmieren

  Alt 20. Okt 2007, 22:47
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.
  Mit Zitat antworten Zitat
djpaull
(Gast)

n/a Beiträge
 
#27

Re: Browser programmieren

  Alt 20. Okt 2007, 23:46
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 .

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.
  Mit Zitat antworten Zitat
djpaull
(Gast)

n/a Beiträge
 
#28

Re: Browser programmieren

  Alt 18. Apr 2008, 02:36
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.
Angehängte Dateien
Dateityp: zip test1_131.zip (244,6 KB, 25x aufgerufen)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 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