Entwickler-Ecke

Internet / Netzwerk - twebbrowser mit tstring füllen?


mithandril - Sa 15.10.05 15:05
Titel: twebbrowser mit tstring füllen?
hiho ...

ich versuche den aus einer idmessage geladenen seite im twebbrowser darzustellen ... nur wenn ich das mit .navigate mache sagt der mir er kann keine tstrings in einem string darstellen ... kann jmd helfe?


MSCH - Sa 15.10.05 17:35

Navigate brauch eine URL oder eine Datei!
Also vorher den Text in eine File und dann navigate(Dateiname)

grez
Msch


mithandril - Sa 15.10.05 17:48

mh ich habs jetzt erst in ein memo geschrieben und dann versucht das mit navigate auszulesen ... nur da sagt der immer seite nich gefunden ... das mit dem file versuch ich jetzt mal ...


MSCH - Sa 15.10.05 17:54

hallo,
DATEI!!
also

Delphi-Quelltext
1:
2:
Memo.Lines.SaveToFile('Neu.html');
WebBrowser.Navigate('Neu.html');


grez
msch


retnyg - Sa 15.10.05 17:55

ich glaube mich erinnern zu können dass man auch direkt ins .innerhtml reinschreiben kann, oder täusche ich mich da :gruebel:


MSCH - Sa 15.10.05 18:04

das geht via DOM
also TWebBrowser.Document...
aber siehe OH:

zitat aus OH/D2005:
Mit Document können Sie auf eine IDispatch-Schnittstelle zugreifen, um unter Verwendung des COM-Objektmodells den Inhalt des HTML-Dokuments zu bearbeiten. Wenn kein Dokument aktiv ist, gibt die Eigenschaft Document den Wert nil zurück. Sie müssen dann erst mit der Methode Navigate oder Navigate2 ein Dokument laden, um die Bearbeitung durchführen zu können.

Weitere Informationen über diese Schnittstelle finden Sie im Abschnitt über Dokumentobjekte in der Microsoft-Referenz zu Dynamic HTML.

grez
MSCH


mithandril - Sa 15.10.05 18:05

user profile iconMSCH hat folgendes geschrieben:
hallo,
DATEI!!
also


nich gleich pissig werden ... ich sagt so habe ich es eben versucht und jetzt mach ich es mit einer datei .... trotzdem danke es funktioniert so ....


Lannes - Sa 15.10.05 18:40

Hallo,

etwas :mrgreen: einfacher und ohne den Umweg über eine Datei: :wink:

Delphi-Quelltext
1:
  WebBrowser1.Navigate('about:' + Memo1.Text);                    


mithandril - Mo 17.10.05 09:39

das hatte ich ja so auch am anfang .. das prob dabei is der navigae nur nen string nimmt der body von idmessage aber tstring is .... habs jetzt mit der xtra html datei gemacht ....


Lannes - Mo 17.10.05 14:27

Hallo,

hast Du es getestet :gruebel:
user profile iconmithandril hat folgendes geschrieben:
... ich habs jetzt erst in ein memo geschrieben und dann versucht das mit navigate auszulesen ...

user profile iconLannes hat folgendes geschrieben:


Delphi-Quelltext
1:
  WebBrowser1.Navigate('about:' + Memo1.Text);                    

Die Text-Eigenschaft des Memo ist ein String also geht das,
wahrscheinlich hast Du WebBrowser1.Navigate('about:'+Memo1.Lines); genutzt
und Lines ist vom Typ TStrings.:wink:

Hier jetzt noch Code ohne eine Memo verwenden zu müssen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.ButtonLoadClick(Sender: TObject);
var sL : TStringList;
begin
  sL := TstringList.Create;
  try
    sL.Add('<HTML><BODY><H1>Testseite</H1>');
    sL.Add('Hallo</HTML></BODY>');
    WebBrowser1.Navigate('about:'+sL.Text);
  finally
    sL.Free;
  end;
end;


retnyg - Mo 17.10.05 17:49

user profile iconLannes hat folgendes geschrieben:

Hier jetzt noch Code ohne eine Memo verwenden zu müssen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.ButtonLoadClick(Sender: TObject);
var sL : TStringList;
begin
  sL := TstringList.Create;
  try
    sL.Add('<HTML><BODY><H1>Testseite</H1>');
    sL.Add('Hallo</HTML></BODY>');
    WebBrowser1.Navigate('about:'+sL.Text);
  finally
    sL.Free;
  end;
end;

Hier jetzt noch Code ohne Memo oder Stringlist :roll: verwenden zu müssen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.ButtonLoadClick(Sender: TObject);
const HTML = '<HTML><BODY><H1>Testseite</H1>'#13#10'Hallo</HTML></BODY>';
// oder ne ne normale stringvariable o.0
begin
    WebBrowser1.Navigate('about:'+HTML);
end;


Lannes - Mo 17.10.05 23:19

Hallo,

@retnyg:
Hier jetzt noch Code ohne Memo, Stringlist, Konstante oder Variable :wink:

Delphi-Quelltext
1:
2:
3:
  WebBrowser1.Navigate('about:'+'<HTML><BODY>'
                       +'<H1>Testseite</H1>'
                       +'Hallo</HTML></BODY>');


Nun hab ich aber festgestellt,
das bei dieser Art der Übergabe nur 408(???) Zeichen im String möglich sind. :?

Damit größere HTML-Codes zugewiesen werden können muss mit einem Stream gearbeitet werden:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure LoadHTML(WebBrowser: TWebBrowser;sHTML: TStrings);
var ms: TMemoryStream;
begin
  WebBrowser.Navigate('about:blank');  
  while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do
    Application.ProcessMessages;

  if Assigned(WebBrowser.Document) then
  begin
      ms := TMemoryStream.Create;
      try
        sHTML.SaveToStream(ms);
        ms.Seek(00);
        (WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms));
      finally
        ms.Free;
      end;
  end;
end;

Aufruf:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.ButtonClick(Sender: TObject);
begin
  LoadHTML(WebBrowser,Memo.Lines);
  //oder
  //LoadHTML(WebBrowser,MyStringList);
  //LoadHTML(WebBrowser,ListBox.Items);
  //LoadHTML(WebBrowser,RichEdit.Lines);
  //...
end;


Hat man einen String der größer 408 Zeichen ist, dann diesen erst in eine Stringliste schreiben
und anschließend mit LoadHTML in den Webbrowser laden.


raiha - Mo 20.03.06 10:03

Hi,

versuche auch über LoadHTML HTML-Quelltext in den Browser zu bekommen. Leider funktioniert das nicht mit MHTML. Kann ich den Browser dazu überreden, dass er mir die Seiten richtig darstellt?

Danke Rainer


Lannes - Mo 20.03.06 10:22

Hallo,

was ist MHTML :gruebel:


raiha - Mo 20.03.06 10:37

da stehts ganz genau ;-)

http://de.wikipedia.org/wiki/MHTML


Lannes - Mo 20.03.06 11:05

Hallo,

mit LoadHTML kannst Du Quelltext, der als TStrings vorliegt, direkt in den Webbrowser laden.

Eine *.mht-Datei(MHTML) kann man wie eine *.html-Datei mit

Delphi-Quelltext
1:
WebBrowser.Navigate('c:\temp\EineMHTML.mht');                    

in den Browser laden.


raiha - Mo 20.03.06 11:10

Ja stimmt schon ... aber das meine ich nicht.

Ich will MHTML-Quelltext (richtig interpretiert) im Browser anzeigen, ohne erst das MHTML-File auf die Platte schreiben zu müssen. (mit Festplattenumweg geht das auch ganz toll aber das will ich ja umgehen).

Scheinbar braucht der Browser die Dateiendung *.MHTML und den Text richtig zu interpretieren. Wie schaffe ich das nun aber ohne erst die Datei zu erzeugen?

Danke Rainer


raiha - Mo 20.03.06 11:21

Gibt es vielleicht eine Möglichkeit das MHTML-File (mit Dateiendung) nur im Speicher zu erzeugen und dieses den Browser laden zu lassen?


Lannes - Mo 20.03.06 12:25

Hallo,

in welcher Form liegen denn die Daten vor?
Als String, StringList, Recource ...


raiha - Mo 20.03.06 12:37

als String/StringList je nachdem wie ich es brauche ...


Lannes - Mo 20.03.06 13:05

Hallo,

hab gerade mal ein paar Versuche unternommen aus String, StringList oder einer Recource(mit res://-Protokoll) MHTML-Daten in den WebBrowser zu laden.
Das Ergebnis ist bei allen gleich negativ :?

Erstellst(codierst) du die Daten selbst?