![]() |
Re: Browser programmieren
Hallo :)
Das was bei mir steht, ist der Caption des MenuItems gewesen, welcher eigentlich ![]() 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:
Edit: Ok er hats kürzer und schneller *g
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; Musste selber erstmal schauen, wie ich auf die Caption eigenschaft über Sender komme :wall: :oops: |
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:
Der Browser hat noch Bugs:
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. - 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 ![]() mfG. NGL aka DJPaull |
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; |
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:
Ich fand das hier beim googeln, aber weiss nicht wie ich das auf mein Browser umsetzen soll.
procedure TfrmMyBrowser.WebBrowser1NavigateComplete2(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant); begin AddEventLog('OnNavigateComplete2 ' + URL); edURL.Text := TWebbrowser(Sender).LocationURL; end; |
Re: Browser programmieren
Naja, ist in dem Sinne wohl das gleiche Resultat. bei meiner Schleife wird einfach gewartet, bis der Browser fertig navigiert hat.
|
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.
|
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: |
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:
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?
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; EDIT
Delphi-Quellcode:
EDIT 2
// 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; 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 10:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz