| Autor |
Beitrag |
florida
      
Beiträge: 137
Windows 7 Home Premium, Windows XP Professional, Windows 2000
Delphi 2010 Architect
|
Verfasst: Sa 02.05.09 08:03
Wie kann man einen WebBrowser programmieren, bei den ich ganz von 0 anfangen will, also ohne ActiveX- Komponente
Vorgestellt habe ich es mir so:
Wenn in der HTML- Datei z.B. folgendes steht:
<input type="button" name="Button1" value="Text">
muss in meinem WebBrowser ein Button angezeigt werden mit dem Caption "Text".
Nun gut, aber unter Delphi gibt es leider nicht diese Möglichkeit:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var i: integer; anystring: string;
for i:= 0 to Memo1.Lines.Count do begin if Memo1.Lines.Strings[i] = '<input type="' + anystring ... then begin ... end; end; |
Gibt es eine Möglichkeit, dass diese Möglichkeit funktioniert?
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: Sa 02.05.09 09:12
das geht mit pos und posex.
Da hilft die Hilfe.
Es empfiehlt sich aber, den String Zeichenweise mit einer Schleife durchzugehen und auf ein < zu warten.
|
|
Andreas L.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: Sa 02.05.09 10:50
Du kannst dir ja ein paar Anregungen vom SourceCode von THTMLViewer holen: pbear.com/htmlviewers.html
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Sa 02.05.09 11:33
Vielleicht hilft dir auch die RegExp-Klasse: regexpstudio.com/
Das sollte so ziemlich genau dein Problem lösen. Ich bin auch nicht mehr ganz fit in Regular Expressions, aber meistens reicht es, wenn du ne kleine Tabelle vor dir liegen hast. Du solltest aber beachten, dass der Code genauso gut so aussehen kann:
XML-Daten 1: 2: 3: 4: 5:
| <INPUT type=button value="Text" name="Button1" /> |
Ist nicht ganz sauber, aber auf vielen Websites geschieht so eine Ferkelei. Hast du dir das mit dem Webbrowser auch gut überlegt? Ich denke, du solltest zuerst so eine Art allgemeinen XML-Parser basteln.
|
|
Andreas L.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: Sa 02.05.09 12:36
Ein DOM-Parser ist der Grundstein eines Browsers aber auch der leichtere Teil. Hast du dir schon Gedanken gemacht wie du die Webseiten rendern willst? Und dann sind da noch Sachen wie CSS, JavaScript, Cookies, etc.
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Sa 02.05.09 12:47
MathML wäre dann natürlich auch noch toll. 
|
|
Bernhard Geyer
      
Beiträge: 721
Erhaltene Danke: 3
|
Verfasst: Sa 02.05.09 16:28
florida hat folgendes geschrieben : | | Wie kann man einen WebBrowser programmieren, bei den ich ganz von 0 anfangen will, ... |
Wieviel Mannmonate/-jahre hast du dafür eingeplant? Wie gut kennst du dich mit DOM, XML, CSS, XHTML, ... aus?
|
|
florida 
      
Beiträge: 137
Windows 7 Home Premium, Windows XP Professional, Windows 2000
Delphi 2010 Architect
|
Verfasst: Sa 09.05.09 19:38
Ich will zuerst einen ganz einfachen Browser programmieren.
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Sa 09.05.09 21:37
florida hat folgendes geschrieben : | | Ich will zuerst einen ganz einfachen Browser programmieren. |
Kommt drauf an, was du unter einfach verstehst. Sowas, wie der Demo-Browser bei den THTMLLite-Demos, der Indy benutzt (wohlbemerkt ohne CSS)? Viel Spaß.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 09.05.09 22:49
Wenn du einfach nur irgendwo auf dem Bildschirm Text und ein paar Controls von der Webseite anzeigen willst, dann kannst du das in ein paar Tagen hinbekommen. Wenn auch nicht bei jeder Seite und nie in annähernd korrekter Darstellung und Positionierung.
Aber wenn die Darstellung auch nur annähernd an die eines richtigen Browsers herankommen willst, dann überlege dir einmal wie lange die Entwicklung von aktuellen Browsern gedauert hat...
Da wirst du aber mit deinem Ansatz von oben nicht weit kommen...
|
|
florida 
      
Beiträge: 137
Windows 7 Home Premium, Windows XP Professional, Windows 2000
Delphi 2010 Architect
|
Verfasst: So 10.05.09 06:13
Gut! Das Problem in der Fragestellung habe ich fast hinbekommen.
z.B so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| if copy(Memo1.Lines.Text, 1, 5) = 'createbutton=' + stra then begin ctrlBTN := Tbutton.Create(self); with ctrlBTN do begin name := stra; parent := scrollbox1; enabled := true; end; end; |
Wenn ich jetzt in mein Memo createbutton=irgendwas hinschreibe funktioniert es, nur hat stra immer noch keinen Wert.
Das ist das konkrete Problem, was ich beim WebBrowser habe.
Moderiert von Gausi: Delphi-Tags hinzugefügt
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 10.05.09 07:12
Du weist stra ja auch keinen Wert zu, jedenfalls nicht im geposteten Quelltext.  Delphi-Quelltext 1:
| if copy(Memo1.Lines.Text, 1, 5) = 'createbutton=' + stra then | Du vergleichst die ersten 5 Zeichen des Inhalts des Memos mit 'createbutton=' plus dem Inhalt von stra.
Aber schon 'createbutton=' ist länger als die 5 Zeichen, das kann also unmöglich übereinstimmen.
Wenn du schauen willst, ob die ersten 13 Zeichen im Memo 'createbutton=' sind, dann musst du das auch abfragen: Delphi-Quelltext 1:
| if copy(Memo1.Lines.Text, 1, 13) = 'createbutton=' then | Und wenn du dann den Rest dahinter haben möchtest, dann musst du den auch auslesen: Delphi-Quelltext 1:
| stra := Copy(Memo1.Lines.Text, 14, Length(Memo1.Lines.Text) - 13); | Ich sehe allerdings nicht was das mit einem Webbrowser zu tun hat. Und um einen längeren Text zu analysieren ist das auch zu langsam. Insbesondere dürftest du nicht mit Memo1.Lines.Text arbeiten, weil dieser Zugriff sehr langsam ist, sondern müsstest das in eine Stringvariable legen.
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: So 10.05.09 08:06
florida: Bitte setze deine Quellcodes in Delphi-Tags ( [ Quelltext ]dein Code[/delphi]).
|
|
|