Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit (https://www.delphipraxis.net/162986-internet-browser-mit-delphi-unbegrenzt-viele-registerkarten-zur-laufzeit.html)

entwickler 12. Sep 2011 09:49

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:

Union 12. Sep 2011 09:52

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.

Bernhard Geyer 12. Sep 2011 09:58

AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
 
Zitat:

Zitat von Union (Beitrag 1123478)
Natürlich ist das möglich, wenn Du genug Zeit hast. Das wäre übrigens ein wunderbares Testobjekt für 64bit.

Ich Tipp darauf das auch für 64-Bit Prozesse die "üblichen" GDI-Ressourcengrenzen geben die wohl hier auch als erstes zuschlagen werden.

entwickler 12. Sep 2011 10:00

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:

"genug Zeit"
:?::?::?:

entwickler 12. Sep 2011 10:01

AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
 
Und was meinst du, Bernhard Geyer? Ich verstehe nicht, worauf du hinaus willst.

Union 12. Sep 2011 10:02

AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
 
Na deswegen:
Zitat:

ich wollte einen Internet-Browser programmieren
Da wird die optimierte Ressourcenverwaltung nicht der Schwerpunkt werden.

Neutral General 12. Sep 2011 10:03

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?

mquadrat 12. Sep 2011 10:04

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?!

s.h.a.r.k 12. Sep 2011 10:05

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.

entwickler 12. Sep 2011 10:06

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?

himitsu 12. Sep 2011 10:08

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.

entwickler 12. Sep 2011 10:10

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.

Neutral General 12. Sep 2011 10:11

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?

s.h.a.r.k 12. Sep 2011 10:13

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.

Daniel 12. Sep 2011 10:19

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.

entwickler 12. Sep 2011 10:24

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.

Luckie 12. Sep 2011 10:30

AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
 
Zitat:

Zitat von entwickler (Beitrag 1123513)
himitsu: Kannst du mir den Teil ab TPageControl bitte nochmal erklären?

Na genauso wie man jedes andere Steuerelement zur Laufzeit erzeugen kann, kann man das auch mit den Seitenreiteren eine PageControllsmachen.

s.h.a.r.k 12. Sep 2011 10:36

AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
 
Zitat:

Zitat von entwickler (Beitrag 1123513)
Leute, meine Tastatur ist kaputt; Wie soll ich so schnell stellung nehmen?! Jetzt ma langsam:

Wer bremst verliert :mrgreen:

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:
TMyBrowserTab = class(TTabSheet)
private
  FBrowser : TWebBrowser;
public
  procedure LoadPage(const Url: string);
end;
Und so kannst du beliebig viele Tabs öffnen -- was natürlich Käse ist! TBrowserForm ist eine Form, die ein PageControl beinhaltet.
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;

entwickler 12. Sep 2011 10:39

AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
 
Also:

Delphi-Quellcode:
procedure Form1.Button1Click(Sender:Object);
var
  Registerkarte: TPageControl;
begin
  Registerkarte:= TPageControl.Create(Application);
  Registerkarte.Parent:= Form1;
  try
  //........Anweisung
  finally
   Registerkarte.Free;
  end;
end;
Ach so, wo finde ich diese Grundlagen ( OOP )?

OKAY, ich komm nachher wieder, muss jetzt weg...

entwickler 12. Sep 2011 10:41

AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
 
oh, als der letzte Beitrag kam, habe ich noch geschrieben...
Danke!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!

s.h.a.r.k 12. Sep 2011 10:45

AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
 
Zitat:

Zitat von entwickler (Beitrag 1123531)
Also:

Delphi-Quellcode:
procedure Form1.Button1Click(Sender:Object);
var
  Registerkarte: TPageControl;
begin
  Registerkarte:= TPageControl.Create(Application);
  Registerkarte.Parent:= Form1;
  try
  //........Anweisung
  finally
   Registerkarte.Free;
  end;
end;

Dir ist schon klar, dass wenn du ein Objekt wieder freigibst, es verschwindet? Ich glaube nicht, dass du ein PageControl erzeugen und danach gleich wieder aus dem Speicher entfernen willst.

Zitat:

Zitat von entwickler (Beitrag 1123531)
Ach so, wo finde ich diese Grundlagen ( OOP )?

Man findet über Google sehr viel darüber :roll: Ein wenig Eigenleistung wird hier schon verlangt.

himitsu 12. Sep 2011 10:50

AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
 
Delphi-Quellcode:
X := TTabSheet.Create; // Tab erstellen
...
X.SetPageControl(PageControl1); // Tab ins PageControl
Und zu dem was Daniel sagte, macht sich ein TabControl ganz gut, a man dort ja nur die Tabs und keine Pages benötigt.
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.

Luckie 12. Sep 2011 10:56

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;

entwickler 12. Sep 2011 14:02

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:

s.h.a.r.k 12. Sep 2011 15:14

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:

entwickler 12. Sep 2011 15:17

AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
 
Oops :oops: Sorry, s.h.a.r.k. OOP, so besser?

rollstuhlfahrer 12. Sep 2011 19:56

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

Sir Rufo 12. Sep 2011 21:02

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:
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;
Was man dann in dem Formular selber macht ist dabei schon wieder egal :)
In diesem Falle ist dort halt ein WebBrowser

WM_CLOSE 12. Sep 2011 21:15

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

Sir Rufo 12. Sep 2011 21:27

AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
 
Zitat:

Zitat von WM_CLOSE (Beitrag 1123847)
ist die zip kaputt? Das meldet mir 7zip: Es eurde versucht den Dateizeiger vor den Anfang der Datei zu setzten

Da haben die Browser in meiner VM doch irgendwie rumgehackt ... nun ja, jetzt sollte die ZIP funktionieren :)

rollstuhlfahrer 12. Sep 2011 21:29

AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
 
Zitat:

Zitat von Sir Rufo (Beitrag 1123843)
Hier mal eine auf die Schnelle zusammengeklickte Anwendung (s. Anhang).

Benutzt wird ein TPageControl und eine Form mit dem eigentlichen Browser.

Muss es denn wirklich eine Form sein? - Reicht nicht ein Frame oder eine Ableitung von TTabSheet?

Bernhard

Sir Rufo 12. Sep 2011 21:36

AW: Internet Browser mit Delphi: unbegrenzt viele Registerkarten zur Laufzeit
 
Zitat:

Zitat von rollstuhlfahrer (Beitrag 1123855)
Zitat:

Zitat von Sir Rufo (Beitrag 1123843)
Hier mal eine auf die Schnelle zusammengeklickte Anwendung (s. Anhang).

Benutzt wird ein TPageControl und eine Form mit dem eigentlichen Browser.

Muss es denn wirklich eine Form sein? - Reicht nicht ein Frame oder eine Ableitung von TTabSheet?

Bernhard

Da es sich hier um die Frage eines Anfängers handelt, sollte die Umsetzung doch auch den Kenntnisstands des TE berücksichtigen und diesen nicht überfordern.

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 03:53 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