Autor Beitrag
Wathlon
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 23.08.04 13:57 
Hallo,

ich verwende die TWebBrowser-Komponente und möchte verhindern, dass ein Hyperlink oder Formular in einem anderen Fenster geöffnet wird. Ich will aber, dass ich den Hyperlink selbst in einem anderen Fenster von meiner Anwendung öffnen kann.

Delphi 7 Professional
Windows 2000


Kann mir jemand bitte helfen?

Vielen Dank!

Gruß Walter
Wathlon Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Di 24.08.04 08:05 
Titel: Problem ist jetzt etwas konkreter geworden:
Hallo,

kann mir bitte jemand helfen, die 3 Fragezeichen zu ersetzen?

ausblenden Quelltext
1:
WebBrowser1.Document.QueryInterface( ???, ???);					


Ich weiß jetzt, dass der Quelltext einer HTML-Seite dort drin "versteckt" ist, jedoch habe ich keine Ahnung, wie ich das auslesen soll.

Auch in der Delphi-Hilfe steht hierzu nichts :(

Vielen Dank!

Gruß Walter
opfer.der.genauigkeit
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754
Erhaltene Danke: 1



BeitragVerfasst: Di 24.08.04 13:08 
Hi,

Es gibt ein Ereignis: OnNewBrowers2 oder sowas,
damit kannst du die meisten Fenster abfangen.

Leider funktioniert das bei manchen Chats nicht, wenn diese selber ihr
Fenster erstellen.

Bin auch derzeit damit beschäftigt einen Browser zu basteln, wenn ich
das gelöst haben sollte, dann sag ich bescheid.
Aber man weiß ja wie das ist. :shock:

_________________
Stellen Sie sich bitte Zirkusmusik vor.
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: Di 24.08.04 20:20 
schau dir mal IHMTLDocument2 (MSDN) an.
Nimm dazu statt TWebBrowser, den TDHTMLEdit (importiere die Datei:C:\Programme\Gemeinsame Dateien\Microsoft Shared\Triedit\dhtmlocx)
und dann kannst du via Dom relativ einfach auf das Dokument zugreifen.
Ist quasi ein vollwertiger HTML-Editor, den man aber in den Read-Only Modus setzen kann, dann benimmt er sich
wie ein TWebBrowser. Hat aber einige nette Features mehr.
z.b. auf die Meta-Tags zugreifen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure MetaTag(S:String);
var I:Integer;
  Item: IHTMLElement;
  M:IHTMLMetaElement;
begin
  for I:= 0 to WebEdit.DOM.all.length-1 do begin
    Item := WebEdit.Dom.All.Item(i,varempty) as IHTMLElement;
    if (item<>nil)and(Item.Tagname='META') then
    begin
      M:= WebEdit.Dom.All.Item(i,varEmpty)as IHTMLMetaElement;
      if M.content=S then
        M.content:= '"text/html; charset=iso-8859-1"';
    end;
  end;
end;


such einfach statt Meta , HRef und fertig ist's.

oder hier noch so'n Teil:

ausblenden 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:
function TBTW.GetActiveElement: IHTMLElement;
var
  V: OleVariant;
  S: OleVariant;
  i:Integer;
  Felement:IHTMLElementCollection;
  Len:Integer;
  Item: OleVariant;
  Item2: IHTMLElement;
  L:String;
begin
  while WebEdit.Busy do
    Application.ProcessMessages;

  Felement:=WebEdit.DOM.all;
  Len := FElement.Length;

  for i := 0 to Len - 1 do begin
    Item := FElement.Item(i, varEmpty);
    if (Item.TagName = 'P')or(Item.TagName = 'p') then begin
      Item2:=  FElement.Item(i, varEmpty) as IHtmlElement;
    end;
  end;
end;



oder
umbennen und/oder hinzufügen von ID=xxxx für <p> Tags:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
  while WebEdit.Busy do
    Application.ProcessMessages;
    Felement:=WebEdit.DOM.all;
    Len := FElement.Length;
    lauf:=1;
    for i := 0 to Len - 1 do begin
      Item := FElement.Item(i, varEmpty);
      if (Item.TagName = 'P')or(Item.TagName = 'p') then begin
        Item2:=  FElement.Item(i, varEmpty) as IHtmlElement;
        Item2._AddRef;
        Item2.removeAttribute('ID',0);
        item2.setAttribute('ID','"'+trim('blablaba')+'-'+trim(L)+'-p'+IntToStr(Lauf)+'"',0);
        Item2._Release;
        inc(Lauf);
      end;
    end;
  end;


vielleicht hilfs dir, ist aus meinen Projekten rausgeschnippselt.

grez
msch

_________________
ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
Wathlon Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mi 25.08.04 06:51 
Vielen Dank,

war eine super Antwort, habe leider inzwischen schon eine andere Lösung für mein Problem gefunden.

Fürs nächste Mal weiß ich jedoch schon viel mehr!

Die Komponente ist echt cool, gefällt mir sehr gut :D

Gruß Walter
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mi 25.08.04 08:40 
Wathlon hat folgendes geschrieben:
habe leider inzwischen schon eine andere Lösung für mein Problem gefunden.

Wäre schön wenn Du uns Deinen Lösungsweg auch sagen würdest... dann haben andere auch etwas davon. Danke!

Gruß
Tino
Wathlon Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mi 25.08.04 09:45 
Bitte:

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:
WebBrowser1: TWebBrowser;

procedure TForm1.WebBrowser1DownloadComplete(Sender: TObject);
var
 Doc: IHtmlDocument2;
  El : IHTMLElementCollection;
  El1, El4 : IDispatch;
  El2 : IHTMLElementCollection;
  El3 : IHTMLElement;
  J : integer;
begin
  WebBrowser1.Document.QueryInterface(IID_IHTMLDocument2, Doc);
  El := Doc.all;
  El1 := El.tags('a');
  El1.QueryInterface(IID_IHTMLElementCollection, El2);
  if El2 <> nil then
  begin
    for J := 0 to (El2.length-1) do
    begin
      El4 := El2.item(J,0);
      El4.QueryInterface(IID_IHTMLElement, El3);
      El3.setAttribute('target', '_self', 0);
    end;
  end;
  El1 := El.tags('form');
  El1.QueryInterface(IID_IHTMLElementCollection, El2);
  if El2 <> nil then
  begin
    for J := 0 to (El2.length-1) do
    begin
      El4 := El2.item(J,0);
      El4.QueryInterface(IID_IHTMLElement, El3);
      El3.setAttribute('target', '_self', 0);
    end;
  end;
end;


Kein Problem :D

Moderiert von user profile iconUGrohne: Code- durch Delphi-Tags ersetzt.