AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Eigenen HTML-Code in TWebbrowser einfügen
Thema durchsuchen
Ansicht
Themen-Optionen

Eigenen HTML-Code in TWebbrowser einfügen

Ein Thema von Hilde · begonnen am 9. Jan 2010 · letzter Beitrag vom 10. Jan 2010
Antwort Antwort
Hilde

Registriert seit: 9. Jan 2010
2 Beiträge
 
Delphi 2007 Professional
 
#1

Eigenen HTML-Code in TWebbrowser einfügen

  Alt 9. Jan 2010, 15:07
Hallo Leute,

mit folgendem Code lese ich die Anzahl der Formulare einer Seite aus:

Delphi-Quellcode:
function WebFormGet(const formNumber: integer; const document: IHTMLDocument2): IHTMLFormElement;
var
  forms : IHTMLElementCollection;
begin
  forms := document.Forms as IHTMLElementCollection;
  result := forms.Item(formNumber,'') as IHTMLFormElement
end;
Damit der Anwender sofort sieht, welches Formular auszufüllen ist, möchte ich den HTML-Code der aufgerufenen Seite so verändern, dass die "Formularnummer" im Webbrowser angezeigt wird.

Der HTML-Code sollte wie folgt erweitert werden:

Bei form(0) sollte an der entsprechenden Stelle im HTML-Code statt bisher
"<form" nun neu
"<h1><span style="background-color: rgb(255, 255, 0); font-size: larger; font-family: Arial; color: rgb(0, 0, 0);">Formular 1</span></h1>
<form" stehen.
Bei form(1) --> alt: "<form" ersetzen mit: "<h1><span style="background-color: rgb(255, 255, 0); font-size: larger; font-family: Arial; color: rgb(0, 0, 0);">Formular 2</span></h1>
<form"
Bei form(2) --> alt: "<form" ersetzen mit: "<h1><span style="background-color: rgb(255, 255, 0); font-size: larger; font-family: Arial; color: rgb(0, 0, 0);">Formular 3</span></h1>
<form"
.. usw.

Wie kann jetzt ich den zusätzlichen HTML-Code an der richtigen Stelle einfügen?

Schönen Gruß
HS
  Mit Zitat antworten Zitat
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Eigenen HTML-Code in TWebbrowser einfügen

  Alt 9. Jan 2010, 15:34
Willkommen in der DP

Wo genau liegt denn dein Problem?

Handelt es sich um eine Seite, die du aus dem Internet lädst? Wenn ja, dann könnte es IMHO Schwierigkeiten geben.

Generell hätte ich vorgeschlagen, die Seite ersteinmal zu speichern und dann in eine StringList zu laden. Anschließend kannst du die Zeilen in einer Schleife durchgehen und die entsprechenden Stellen ersetzen. Dabei sollten dir die Stichwörter Delphi-Referenz durchsuchenPos, Delphi-Referenz durchsuchenPosEx oder Delphi-Referenz durchsuchenStringReplace schonmal weiterhelfen. Anschließend die Datei einfach wieder speichern.
Als nächstes musst du die neu erstellte Seite in der WebBrowser-Komponente laden, da sollte Navigate genügen.

Wenn es sich jedoch um eine Internet-Seite handelt, die dann sicherlich auch auf andere Inhalte im Internet (Grafiken, Stylesheets, JavaScript-Dateien, andere Seiten,...) verweist, dann könntest du meiner Meinung nach nur versuchen, per Base-Befehl im Head-Bereich der HTML-Datei das Basis-Verzeichnis auf die entsprechende URL zu setzen. Eine dabei auftretende Problematik findest du in meinem Thread von hier.

mfg
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  Mit Zitat antworten Zitat
Hilde

Registriert seit: 9. Jan 2010
2 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Eigenen HTML-Code in TWebbrowser einfügen

  Alt 9. Jan 2010, 18:26
Hallo Patti,

vielen Dank für Deine Antwort, die mir schon sehr weitergeholfen hat.

Ich lese nun also die aus dem Internet geladene Seite ein:

Delphi-Quellcode:
function WB_GetHTMLCode(WebBrowser: TWebBrowser; ACode: TStrings): Boolean;
var
  ps: IPersistStreamInit;
  ss: TStringStream;
  sa: IStream;
  s: string;
begin
  ps := WebBrowser.Document as IPersistStreamInit;
  s := '';
  ss := TStringStream.Create(s);
  try
    sa := TStreamAdapter.Create(ss, soReference) as IStream;
    Result := Succeeded(ps.Save(sa, True));
    if Result then ACode.Add(ss.Datastring);
  finally
    ss.Free;
  end;
end;
Dann bearbeite ich den HTML-Code mit PosEx und lade den geänderten Code wieder in den Browser:

Delphi-Quellcode:
procedure WBLoadHTML(WebBrowser: TWebBrowser; HTMLCode: string; Ziel: string);
var
   sl: TStringList;
   ms: TMemoryStream;

begin
   WebBrowser.Navigate(Ziel) ;
   while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do
    Application.ProcessMessages;

   if Assigned(WebBrowser.Document) then
   begin
     sl := TStringList.Create;
     try
       ms := TMemoryStream.Create;
       try
         sl.Text := HTMLCode;
         sl.SaveToStream(ms) ;
         ms.Seek(0, 0) ;
         (WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms)) ;
       finally
         ms.Free;
       end;
     finally
       sl.Free;
     end;
   end;
end;
Dabei gehen natürlich die Verweise zu den anderen Dateien verloren. Die von Dir vorgeschlagene Variante das Basis-Verzeichnis zu ändern, habe ich jetzt noch nicht probiert, aber das ist für mein Vorhaben auch nicht wirklich praktikabel. Hast Du die Problematik mit den internen Links lösen können (Sicherheitseinstellung IE)?

Und eine andere Möglichkeit statischen HTML-Code einzubetten existiert nicht?

Schönen Gruß
HS
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

Re: Eigenen HTML-Code in TWebbrowser einfügen

  Alt 9. Jan 2010, 18:30
Doch, mit einem proxy-server
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Eigenen HTML-Code in TWebbrowser einfügen

  Alt 10. Jan 2010, 11:54
Zitat von Hilde:
Dabei gehen natürlich die Verweise zu den anderen Dateien verloren. Die von Dir vorgeschlagene Variante das Basis-Verzeichnis zu ändern, habe ich jetzt noch nicht probiert, aber das ist für mein Vorhaben auch nicht wirklich praktikabel. Hast Du die Problematik mit den internen Links lösen können (Sicherheitseinstellung IE)?
Warum ist es denn nicht "praktikabel"? Du kennst doch das Basis-Verzeichnis der Datei, die du aus dem Internet lädst. Wenn du dieses dann im Head-Bereich mit Hilfe des Base-Befehls setzt, solltest du den von dir gewünschten Effekt erzielen können Grafiken und Skripte sollten alle richtig geladen werden...
Das in meinem anderen Thread beschriebene Problem entsteht soweit ich weiß nur, wenn das Base-Verzeichnis mit einer FILE-Angabe gesetzt wird, nicht jedoch, wenn du eine HTTP-Angabe machst. Die Problematik mit den internen Links habe ich leider noch nicht lösen können, hoffe noch immer auf eine Antwort in dem anderen Thread.

Probiere doch einfach mal aus, das Basis-Verzeichnis zu setzen (mit einer HTTP-Angabe).

mfg
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:36 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