![]() |
Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Hallo,
ich wollte einen Internet-Browser programmieren, mit dem man unbegrenzt viele Registerkarten zur Laufzeit erstellen kann, welche hinterher aber auch wieder Freigegeben werden. Ich habe keine Ahnung ob das möglich ist mit Delphi, wobei Delphi selbst Tausende von Komponenten auf eine Form packen kann. Ich hoffe, Ihr versteht, was ich meine. Thx im vorraus. :spin: |
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Natürlich ist das möglich, wenn Du genug Zeit hast. Das wäre übrigens ein wunderbares Testobjekt für 64bit.
|
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Zitat:
|
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Wie denn, Union?
Muss ich die Registerkarten doch einzeln erstellen? Oder was meinst du mit Zitat:
|
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Und was meinst du, Bernhard Geyer? Ich verstehe nicht, worauf du hinaus willst.
|
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Na deswegen:
Zitat:
|
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Er hat sich wohl prinzipiell auf das Projekt "Webbrowser" bezogen.
Registerkarten kannst du solange erzeugen bis Windows oder dein Arbeitsspeicher streikt. Wo ist das Problem? |
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Wo liegt der Sinn? Für die einzelnen Tabs wirst du entweder auf Trident (IE) oder Gecko (FF) zurückgreifen. Ergo wird deine Anwendung auch genau so viel Speicher wie die beiden verbrauchen (je nach Komplexität der anzuzeigenden Seiten) und somit wirst du auch an ähnliche Grenzen stoßen was Performance und Speicherverbrauch angeht. Eine eigene Engine zu schreiben dürfte jenseits von Gut und Böse sein.
Oder steh ich gerade auf dem Schlauch?! |
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Naja, möglich ist das ganze auf jedenfall schon mal. Nur wirst du halt irgendwann mal an dies Grenzen deines Speichers gelangen -- unendlich viel Speicher gibt es im Moment nun mal eben nicht. Zudem sollte man sich die Frage stellen, wie viel Sinn sowas denn überhaupt macht!? Hast du schon mal 1000 Tabs im Feuerfuchs geöffnet gehabt? Weißt du dann noch, was im Tab an Stelle 438 war? Oder allein schon die Performance-Einbußen, wenn jeder Tab auch noch JavaScript unterstützt und ausführen muss... Praktisch würde ich sowas nie umsetzen, da es nichts bringt.
|
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Das Problem liegt darin, dass ich nicht weis, wie ich den Code schreiben muss. Kannst du vielleicht ein Beispiel nennen?
|
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Und wo genau ist nun dein Problem?
Ja, Registerkarten kann man zur Laufzeit erstellen. für TPageControl: ein TTabSheet erstellen und dann via InsertPage dem PageControl zuordnen. |
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
s.h.a.r.k, eigentlich hast du recht, aber es geht mir mehr ums Prinzip. Achso, ich schließe mal aus deiner Aussage, dass Standardwebbrowser wie der Internetexplorer und Firefox nur eine begrenzte Anzahl von Registerkarten zur Verfügung stellen.
|
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Jain. Die Frage war eher, ob man überhaupt unbegrenzte Tabsheets will/braucht!
Was bringen dir 1000 Tabsheets? Die Performance und der Speicherverbrauch werden im Erdboden verschwinden und der Benutzer wird auch keinen Durchblick mehr haben. Also wofür? |
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Es muss keine Grenze im Browser existieren. Allein der Mensch und der zur Verfügung stehende Speicher erledigen "vollautomatisch".
Bzgl. deinem Problem: du solltest dir glaub mal ein paar Tutorials bzgl. dem Thema Objektorientiertes Programmieren zur Gemüte führen. Denn das scheint dein Problem zu sein. Leite, wie himitsu angedeutet hat, von TTabSheet ab und kapsle einfach ein TWeBrowser-Objekt etc. In deiner Anwendung kannst du dann beliebig viele Tabs erstellen und darstellen. |
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Vielleicht kurz der Vollständigkeit halber: Du willst keinen eigenen Browser programmieren, sondern die fertige Browser-Komponente in Deiner Anwendung nutzen (kein Problem, dafür ist sie da).
Die in meinen Augen "billige" Lösung wäre es, x Registerkarten zu nutzen mit je einer Browser-Komponente. Alternativ kümmerst Du Dich selbst um die Speicherverwaltung und legst Dir eine Liste an Streams an, die Du zur Not auf die Platte auslagerst. Dann könntest Du mit einem Browser-Control auskommen und mit den Tabs würdest Du nur auswählen, mit welchem Deiner Streams Du das Control fütterst. Ein Tab-Wechsel wäre dann aber mit einem Neu-Laden der Seite (nicht aus dem Netz, sondern aus Deinem Datenspeicher) verbunden. |
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Leute, meine Tastatur ist kaputt; Wie soll ich so schnell stellung nehmen?! Jetzt ma langsam:
himitsu: Kannst du mir den Teil ab TPageControl bitte nochmal erklären? Neutral General: Jetzt übertreib bitte nicht so :!: Ich meine für anspruchsvolle Benutzer, wenn du von dieser Ebene sprichst. Ich möchte nur wissen, wie man (NAHEZU) unbegrenzt viele Komponenten zur Laufzeit zur Verfügung stellen kann. s.h.a.r.k: Ich benutze Delphi noch nicht sonderlich lange (ca. 1Jahr) und das ist das erste mal, dass ich soetwas versuche. by Daniel: Mit Streams habe ich noch nie gearbeitet. wie funktionieren die? Ganz ehrlich, Leute, so langsam bekomme ich das Gefühl, als würde ich das 1. Mal mit Delphi arbeiten. |
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Zitat:
|
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Zitat:
Nein, Spass bei Seite und mal mit etwas mehr ernst :) Du musst dir glaub erst mal die Grundlagen von OOP anschauen, denn genau das Prinzip ist hier sehr wichtig. Hast du das verstanden, dann verstehst du auch himitsus Aussage. Du musst dir dies bzgl. eben die Schnittstellen (Eigenschaften und Methoden) von der PageControl-Komponente anschauen. Nochmals mit ein wenig Code -- das hier kann ein Tab sein:
Delphi-Quellcode:
Und so kannst du beliebig viele Tabs öffnen -- was natürlich Käse ist! TBrowserForm ist eine Form, die ein PageControl beinhaltet.
TMyBrowserTab = class(TTabSheet)
private FBrowser : TWebBrowser; public procedure LoadPage(const Url: string); end;
Delphi-Quellcode:
procedure TBrowserForm.CreateNewTab(const Url: string);
var NewTab : TMyBrowserTab; begin NewTab := TMyBrowserTab.Create(); NewTab.LoadPage(Url); TabPageControl.InsertPage(NewTab); // Keine Ahnung ob der Aufruf so stimmt! end; procedure TBrowserForm.DoNoUseMe(); const TAB_COUNT = 100000; var i : Integer; begin for i := 0 to TAB_COUNT do CreateNewTab('http://www.google.de'); end; |
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Also:
Delphi-Quellcode:
Ach so, wo finde ich diese Grundlagen ( OOP )?
procedure Form1.Button1Click(Sender:Object);
var Registerkarte: TPageControl; begin Registerkarte:= TPageControl.Create(Application); Registerkarte.Parent:= Form1; try //........Anweisung finally Registerkarte.Free; end; end; OKAY, ich komm nachher wieder, muss jetzt weg... |
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
oh, als der letzte Beitrag kam, habe ich noch geschrieben...
Danke!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!! |
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Zitat:
Zitat:
|
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Delphi-Quellcode:
Und zu dem was Daniel sagte, macht sich ein TabControl ganz gut, a man dort ja nur die Tabs und keine Pages benötigt.
X := TTabSheet.Create; // Tab erstellen
... X.SetPageControl(PageControl1); // Tab ins PageControl
Delphi-Quellcode:
.
TabControl1.Tabs.Add('name des Tabs');
An die "Objekte" der einzelnen Strings/Tabs könnte man die Daten der jeweiligen Pages dranhängen. InsertTab und IntertPage sind interne Methoden des TPageControl (sman sollte genauer hingucken :oops:), welche dann aber z.B. von TTabSheet.SetPageControl verwendet werden. |
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Jetzt habe ich mir die Mühe gemacht, jetzt will ich auch noch mal:
Delphi-Quellcode:
procedure TForm1.btnAddTabClick(Sender: TObject);
var ts: TTabSheet; begin ts := TTabSheet.Create(nil); ts.Caption := IntToStr(pgcTest.PageCount) + '. Sheet'; ts.PageControl := pgcTest; pgcTest.ActivePageIndex := pgcTest.PageCount - 1; end; procedure TForm1.btnRemoveTabClick(Sender: TObject); var ts: TTabSheet; begin ts := pgcTest.ActivePage; ts.Free; end; |
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Wow, da kam in den letzten Stzunden einiges zusammen. Danke für den Code, und ja, ich werde mich über google oder so über die OOB informieren; dass ich Eigenleistung einbringen muss, ist mir klar.
Es funzt sogar bei meiner Delphi-Version :thumb:. Danke für all die Hinweise, Tipps, etc. :hi: |
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Will nicht kleinlich sein, aber das "Ding" schimpft sich nicht Objekt-orientierte Brogrammierung, sondern OOP -> Programmierung :stupid:
|
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Oops :oops: Sorry, s.h.a.r.k. OOP, so besser?
|
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Leute, macht es doch dem armen Jungen nicht so schwer.
@entwickler: Nimm mal ein Form, klatsche da ein TPageControl drauf, erstelle ein TTabSheet darin (wenn du nicht weißt, wie das geht: GIDF. Dann setze da mal ein TWebbrowser-Control drauf und versuche mal, dass du das ans Laufen bekommst. Allerdings vorweg: Einen IE in seiner vollen Funktion wirst du trotz IE-ActiveX-Komponente (TWebbrowser, Trident) nicht hinbekommen, also schlag dir den Gedanken gleich mal aus dem Kopf. Bernhard |
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Liste der Anhänge anzeigen (Anzahl: 1)
Hier mal eine auf die Schnelle zusammengeklickte Anwendung (s. Anhang).
Benutzt wird ein TPageControl und eine Form mit dem eigentlichen Browser. Das Geheimnis liegt dann hier:
Delphi-Quellcode:
Was man dann in dem Formular selber macht ist dabei schon wieder egal :)
procedure TFMain.btnNewTabClick( Sender : TObject );
begin // Eine Form mit dem Browser erzeugen with TFBrowser.Create( pgc1 ) do begin // Andocken des Browser-Formulars an das Page-Control ManualDock( pgc1, nil, alClient ); // Anzeigen des Formulars Show; end; end; In diesem Falle ist dort halt ein WebBrowser |
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
ist die zip kaputt? Das meldet mir 7zip: Es eurde versucht den Dateizeiger vor den Anfang der Datei zu setzten
|
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Zitat:
|
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Zitat:
Bernhard |
AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
Zitat:
Somit die Lösung direkt und ohne Schnörkel einfach auf den Punkt. Für den TE sollte eigentlich nur das ManualDock neu sein. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:21 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