Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Browserkompo mit Scrollbox (https://www.delphipraxis.net/2103-browserkompo-mit-scrollbox.html)

CalganX 7. Jan 2003 10:22


Browserkompo mit Scrollbox
 
Hi,
wäre es nicht theoretisch möglich einen Webbrowser mit einer Scrollbox zu programmieren???

Chris

Christian Seehase 7. Jan 2003 13:54

Moin Chris,

könntest Du die Frage vielleicht etwas präzisieren?
Ich hab' irgendwie nicht so ganz verstanden, was Du meinst.

CalganX 7. Jan 2003 15:05

Mann nimmt eine ScrollBox und platziert dynamisch einfach immer die Komponenten... Problem: Das parsen des Sources...

Chris

Christian Seehase 7. Jan 2003 15:17

Moin Chris,

mal sehen, ob ich das jetzt verstanden habe:

Du willst eine HTML Seite auf einer Scrollbox darstellen, und das Ganze ohne TWebBrowser, also ohne IE.

CalganX 7. Jan 2003 15:39

Jau, du hast es begriffen. Und nun war meine Frage, ob es nicht theoretisch möglich wäre so was zu machen...

Chris

Christian Seehase 7. Jan 2003 16:00

Moin Chris,

klar sollte das möglich sein, ist halt nur eine Frage des Aufwandes.

Wie Du schon festgestellt hattest wäre da z.B. das Parsen des Codes.
Da bleiben Dir genau genommen zwei Möglichkeiten:
  1. Du versuchst das ganze Zeile für Zeile abzuarbeiten
  2. Du prüfst erst einmal die ganze Seite

Ich würde ja die zweite Variante bevorzugen, ist aber wohl auch Geschmackssache.

Die folgende Schritt wären dann wohl folgende:
  1. Lexikalische Analyse (schlichte Überprüfung der gültigen Zeichen, wobei man sich, der Einfachheit halber, darauf einstellen sollte Kommentare zu erkennen)
    Ausserdem sollte diese Analyse auch gleich das Erzeugen eines Tokenstromes (Token Sprachelement) um sich das weitere Vorgehen zu erleichtern
    Man könnte, sinnvoller Weise, auch gleich auf komplette Tags prüfen.
  2. Syntaxanalyse: Hier kannst Du dann den Tokenstrom prüfen. Hast Du beispielsweise ein Token, dass < repräsentiert, kannst Du prüfen, ob das folgende Token möglich ist. Kommt als nächstes z.B. ein > kann das nicht sein. irgendetwas muss ja dazwischen stehen.
    Hierbei könntest Du auch gleich eventuell vorhandene Links prüfen.
  3. Die einzelnen Befehle ausführen, und damit dann die Seite auf den Canvas der Scrollbox Zeichnen.

Das jetzt nur mal so grob als Vorgehensweise, die so oder ähnlich wohl für die Auswertung jeder Sprache gilt.

Was dann wohl noch zu berücksichtigen wäre, wäre die Unterstützung (oder auch nicht) für CSS, JavaScript (Standard oder MS spezifisch), Java.
Auch die HTML Version wäre zu berücksichtigen.

CalganX 7. Jan 2003 16:18

Hi, erstmal wären, denke ich grundlegende Sachen, wie HTML (Links, Text, etc.) dran. Als nächstes kämen Teile von CSS1 dann mal weiter sehen...
Aber wie parsen. Hättest du da vielleicht kleine Snippets?

Chris

Christian Seehase 7. Jan 2003 16:50

Moin Chris,

aller Anfang dürfte in so einem Falle mal die lexikalische Analyse sein.

Ich versuch' mal kurz zu beschreiben, was man dafür so braucht.
  • Zeichenweises durchlesen der Datei
  • Aufbau einer Tokenliste, wobei ein Token üblicher Weise aus aus einer Kennung (was ist es denn) und einem Attribut besteht. Das Attribut enthält dann den Wert. Hast Du z.B. einen String gefunden, wäre der gefundene Text das Attribut und die Kennung könnte toHTMLString sein (die Kennungen aufgebaut als Aufzählungstyp)
    Ob man hierbei z.B. die Sonderzeichen &xxxx als ein Token mit unterschiedlichen Attributen betrachtet oder jedem ein eigenes Token spendiert (wäre wohl nicht unbedingt sinnvoll für das weitere Vorgehen) musst Du dann selber entscheiden.
  • Um die Zeichen gleich ein wenig sinnvoll auszuwerten kannst Du auch Flags verwenden, um z.B. anzuzeigen, das Du gerade ein Zeichen gefunden hast, dass ein Tag öffnet (<) um die weitere Auswertungen zu steuern, z.B., dass jetzt entweder ein / oder ein Tagname kommen muss. Man könnte natürlich /tagname als eigenes Token ansehen.
  • Wurde auf diesem Wege dann eine Tokentabelle aufgebaut (dynamisches Array) kann es "schon" mit der Syntaxprüfung losgehen
  • Hierbei muss dann der Tokenstrom der Reihe nach durchgegangen werden, und, anhand des jeweils gefundenen Tokens entschieden werden, ob dieses an dieser Stelle sein kann. Ein </tagname> kann z.B. keine weiteren Werte enthalten. Ist das doch der Fall kannst Du entweder mit einem Fehler abbrechen, oder Dir den Fehler merken und versuchen bis zu nächsten verarbeitbaren Wert zu gehen.

Das nur mal so in Kürze. Oft läuft das auch so ab, das der eigentliche Parser ein Token nach dem anderen abfordert, und erst zu diesem Zeitpunkt die lexikalische Analyse versucht das nächste Token zu liefern.

Ich finde es von Vorteil die Schritte, zumindest zu Anfang, komplett zu trennen. Für meinen Geschmack erleichtert das den Test, ob die einzelnen Bestandteile auch wie erwartet arbeiten.

Lass Dir doch als erstes mal eine sinnvolle Tokenliste (Aufzählungstyp) einfallen zu lassen. Ich hatte das mal als Objekt erstellt, so dass ich dann nur noch jeweils TokenList.Add(TokenTyp,Attribut) gebraucht habe, um der Liste ein Element hinzuzufügen.

Ach so:
Für die lexikalische Analyse braucht man i.d.R.:
Eine Liste der Bezeichner, Operatoren, Trennzeichen usw.
Wahrscheinlich wirst Du ja SelfHTML haben. Dort ist das glaube ich auch einzeln aufgeschlüsselt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:23 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