Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Eigenen HTML-Code in TWebbrowser einfügen (https://www.delphipraxis.net/145855-eigenen-html-code-twebbrowser-einfuegen.html)

Hilde 9. Jan 2010 14:07


Eigenen HTML-Code in TWebbrowser einfügen
 
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

patti 9. Jan 2010 14:34

Re: Eigenen HTML-Code in TWebbrowser einfügen
 
Willkommen in der DP :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

Hilde 9. Jan 2010 17:26

Re: Eigenen HTML-Code in TWebbrowser einfügen
 
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

Sir Rufo 9. Jan 2010 17:30

Re: Eigenen HTML-Code in TWebbrowser einfügen
 
Doch, mit einem proxy-server

patti 10. Jan 2010 10:54

Re: Eigenen HTML-Code in TWebbrowser einfügen
 
Zitat:

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 :gruebel: 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


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