Autor Beitrag
CABALxx
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 174


D7 Ent
BeitragVerfasst: Fr 20.02.04 14:16 
Hallo
und ich bins mal wieder....mit einem problem ( ich weiss langsam nervts ) :oops:

alsooooo

mit diesem code hier

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
WebBrowser1.Document.QueryInterface(IHTMLDocument2, iDoc1); 
if iDoc1 <> nil then 
begin 
  Memo1.Lines.Add(iDoc1.Body.InnerHTML); 
end;


liest man ja den quelltext einer aktuell im TWebBrowser angezeigten Seite aus.....

WICHTIG: hier geht es drum ohne erneutes Aufrufen einer Seite, den Quelltext einer seite die aktuell im TWebBrowser angezeigt wird auszulesen.
( weil das andere ist ja nicht alzu schwer mit idHTTP.get und anderen funktionen........ )

soo das alles schön und gut, nun möchte ich aber den Quelltext eines ganz bestimmten frames einer aktuell im TWebBrowser angezeigten seite auslesen ohne diese neu aufzurufen / aufrufen zu lassen bzw zu laden etc....
eben auf ähnlich weisse...


wie mach ich das ? :?:

wäre cool wenn jemand ne antwort wüsste
danke schon mal :D


Zuletzt bearbeitet von CABALxx am Di 02.03.04 19:56, insgesamt 1-mal bearbeitet
Styler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 58

WinXP Home
Delphi 7 Studio Enterprise german
BeitragVerfasst: Fr 20.02.04 14:20 
also sorry aber ich versteh nicht unbedingt was du damit sagen willst ... :shock:

_________________
Die Rechtschreibfehler habe ich extra gemacht und dienen zur allgemeinen Belustigung.
CABALxx Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 174


D7 Ent
BeitragVerfasst: Fr 20.02.04 16:07 
ganz einfach

wenn man den quelltext einer seite z.B.
mit

ausblenden Delphi-Quelltext
1:
idHTTP.get('seite.html');					


ausliest
dann wird die seite komplett neu aufgerufen und ihr quelltext ausgelesen

nun will ich aber nur den quelltext auslesen lassen von einer seite die aktuell im TWebBrowser dargestellt wird OHNE die seite neu aufrufen zu lassen....

das geht so

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
WebBrowser1.Document.QueryInterface(IHTMLDocument2, iDoc1);  
if iDoc1 <> nil then  
begin  
  Memo1.Lines.Add(iDoc1.Body.InnerHTML);  
end;


gut das ja kein problem

und nun würde ich eben gerne wissen wie man das macht
das auf gleiche weisse ( also ohne das die seite erneut aufgerufen wird bzw. ausgelesen wird ) der quelltext eines frames , einer aktuell in TWebBrowser dargestellten seite , ausgelesen wird

denn wenn man eine seite mit frames mit der oben genannten variante ausliest bekommt man nur den quelltext für das reine framegerüst....


( kann ja mal nebenbei auf einen ähnlichen beitrag von mir in einem andern delphi forum verweissen
wer sich das mal durchliest versteht um was es geht bzw wozu es dienen wird / soll / könnte

www.swissdelphicente...66f6e5f0b5dcdffa8e28
CABALxx Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 174


D7 Ent
BeitragVerfasst: So 22.02.04 17:31 
keiner ne idee? :(
Chris1308
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 220

Win XP Prof.
D2005 Prof, D7 Prof, D7 Pers
BeitragVerfasst: Mo 23.02.04 22:53 
Hi,
soweit ich weiß, gibt es eine Eigenschaft Frames bei der Eigenschaft Documents. Da müsstest du mal nachgucken...

Chris
CABALxx Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 174


D7 Ent
BeitragVerfasst: Di 24.02.04 10:31 
ja die idee ist sehr gut
:D

aber nach dem framenamen im unten angegebenen code weiss ich nicht mehr weiter :oops:



ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button1Click(Sender: TObject);
var iDoc1 : IHTMLDocument2;
begin
WebBrowser1.Document.QueryInterface(IHTMLDocument2, iDoc1);
if iDoc1 <> nil then
begin
  Memo1.Lines.Add(WebBrowser1.OleObject.document.item('mainframe').........); // und an der stelle weiss ich nicht mehr weiter
end;
end;


hmm...
den ansatz hab ich aus nem andern projekt aber ich hab keine ahnung obs stimmt....
Chris1308
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 220

Win XP Prof.
D2005 Prof, D7 Prof, D7 Pers
BeitragVerfasst: Di 24.02.04 11:55 
Hi,
ich hab jetzt mal reinlogisch folgenden Source zusammengewürfelt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
WebBrowser1.Document.Frames.item('FrameName').QueryInterface(IHTMLDocument2, iDoc1);   
if iDoc1 <> nil then   
begin   
  Memo1.Lines.Add(iDoc1.Body.InnerHTML);   
end;


Wenn das nicht funktionieren sollte, muss ich auch nochmal schauen, allerdings funktioniert mein Delphi im Moment nicht so, wie es sein sollte, deswegen kann ich das jetzt nicht überprüfen. :(

Chris
CABALxx Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 174


D7 Ent
BeitragVerfasst: Di 24.02.04 13:21 
also das geht nur mit nem OleObject
und dann hab ich das folgender massen gemacht

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button1Click(Sender: TObject);
var iDoc1 : IHTMLDocument2;
begin
WebBrowser1.OleObject.document.frames.item('mainframe').QueryInterface(iDoc1);
if iDoc1 <> nil then
begin
  Memo1.Lines.Add(iDoc1.Body.InnerHTML);
end;
end;



bei den andern methoden hat der debugger gleich alarm geschlagen

wenn ich das so mache dann lässt sich das programm ohne probleme compilieren
nur wenn ich dann den button drücke
kommt ne fehlermeldung
das QueryInterface da irgendwie nicht mitspielen würde :(

aber warn sehr guter ansatz :D
CABALxx Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 174


D7 Ent
BeitragVerfasst: Do 26.02.04 20:40 
niemand ne idee die funktioniert oder ne gute idee oder so ?

:?: :?: :?:


würde mich freuen

:)
CABALxx Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 174


D7 Ent
BeitragVerfasst: So 29.02.04 15:26 
hat keiner eine idee, wie man den code hier

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
WebBrowser1.Document.QueryInterface(IHTMLDocument2, iDoc1);   
if iDoc1 <> nil then   
begin   
  Memo1.Lines.Add(iDoc1.Body.InnerHTML);   
end;


so umschreibt
das er den quelltext eines bestimmten Frames ausliesst , von einer seite die aktuell in TWebBrowser angezeigt wird, OHNE die seite neu zu laden oder aufzurufen ??

könnt ja mal das ganze thema durchlesen, vielleicht kommt dann ne gute idee :)
toms
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: So 29.02.04 15:38 
Hi,

Vielleicht hilft dir das:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
uses
  ActiveX;

function TForm1.GetFrame(FrameNo: Integer): IWebbrowser2;
var
  OleContainer: IOleContainer;
  enum: IEnumUnknown;
  unk: IUnknown;
  Fetched: PLongint;
begin
  while Webbrowser1.ReadyState <> READYSTATE_COMPLETE do
    Application.ProcessMessages;
  if Assigned(Webbrowser1.document) then
  begin
    Fetched := nil;
    OleContainer := Webbrowser1.Document as IOleContainer;
    OleContainer.EnumObjects(OLECONTF_EMBEDDINGS, Enum);
    Enum.Skip(FrameNo);
    Enum.Next(1, Unk, Fetched);
    Result := Unk as IWebbrowser2;
  end 
  else 
    Result := nil;
end;

// Testseite laden
procedure TForm1.Button1Click(Sender: TObject);
begin
  Webbrowser1.Navigate('http://www.warebizprogramming.com/tutorials/html/framesEx1.htm');
end;

// Alle Frameseiten in einzelne Dateien speichern
procedure TForm1.Button2Click(Sender: TObject);
var
  IpStream: IPersistStreamInit;
  AStream: TMemoryStream;
  iw: IWebbrowser2;
  i: Integer;
  sl: TStringList;
begin
  for i := 0 to Webbrowser1.OleObject.Document.frames.Length - 1 do
  begin
    iw := GetFrame(i);
    AStream := TMemoryStream.Create;
    try
      IpStream := iw.document as IPersistStreamInit;
      if Succeeded(IpStream.save(TStreamadapter.Create(AStream), True)) then 
      begin
        AStream.Seek(0, 0);
        sl := TStringList.Create;
        sl.LoadFromStream(AStream);
        sl.SaveToFile('c:\frame' + IntToStr(i) + '.txt');
        //  memo1.Lines.LoadFromStream(AStream);
        sl.Free;
      end;
    except
    end;
    AStream.Free;
  end;
end;

end.
CABALxx Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 174


D7 Ent
BeitragVerfasst: So 29.02.04 19:58 
ehmm
bin sehr froh das mal wieder jemand geantwortet hat


///EDIT:


OK
kacke
war mein fehler

funktioniert einwandtfrei muss nachher mal testen ob ich damit weiter komme


vielen danke schon mal :D :D
CABALxx Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 174


D7 Ent
BeitragVerfasst: Mo 01.03.04 23:02 
KLASSE das ist ABSOLUT GENAU DAS WAS MIR WEITER HILFT
VIELEN VIELEN DANK @ toms

das is ganz genau das was ich schon seit wochen suche

:D :D :D :D :D :D :D :D

du bist ein genie

vielen vielen vielen dank =) :D :D :D

echt klasse =) :D