Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Inhalt eines ID-Elementes in einem bestimmten Frame ändern (https://www.delphipraxis.net/65410-inhalt-eines-id-elementes-einem-bestimmten-frame-aendern.html)

torud 16. Mär 2006 10:34


Inhalt eines ID-Elementes in einem bestimmten Frame ändern
 
Hallo Wissende,

dank des Codes von Marabu habe ich lernen dürfen, dass man im Webrowser auch automatisiert Inhalte ersetzen kann. Da ich mein Layout in 3 Frames aufteilen musste, habe ich das Problem, dass folgender Code nicht mehr funktioniert, wie er es vorher in einem Frame tat.

Delphi-Quellcode:
//gibt in einem label die zeit sekündlich aus
procedure TForm1.clockTimer(Sender: TObject);
var
  doc: IHTMLDocument2;
  e: IHTMLElement;
begin
  doc := web_cis.Document as IHTMLDocument2;
  e := doc.all.item('str_Uhr', 0) as IHTMLElement;
  if e<>nil then
    e.innerText := TimeToStr(now)
end;
Das Label mit der ID str_Uhr befindet sich aber nun in einem Frame namens "bottom". Kann man dies auch explizit ansprechen, denn mit obigem Code findet er dieses item nicht...!?

Danke Tom

marabu 16. Mär 2006 12:00

Re: Inhalt eines ID-Elementes in einem bestimmten Frame ände
 
Hallo Tom,

die folgende Funktion verschafft dir über den Index Zugang zu einem Frame:

Delphi-Quellcode:
function GetFrameDoc(doc: IHTMLDocument2; v: OleVariant): IHTMLDocument2;
var
  win: IHTMLWindow2;
  u: IUnknown;
  ec: IHTMLElementCollection;
begin
  u := doc.frames.item(v);
  if Assigned(u)
  and Succeeded(u.QueryInterface(IHTMLWindow2, win))
    then Result := win.Document
    else Result := nil;
end;
Und ungefähr so könntest du es benutzen:

Delphi-Quellcode:
var
  doc, fdoc: IHTMLDocument2;
  e: IHTMLElement;
begin
  doc := web_cis.Document as IHTMLDocument2;
  fdoc := GetFrameDoc(doc, 2); // letzter von drei frames ?
  e := fdoc.all.item('str_Uhr', 0) as IHTMLElement;
  if Assigned(e) then
    e.innerText := TimeToStr(now)
end;
Grüße vom marabu

torud 16. Mär 2006 12:05

Re: Inhalt eines ID-Elementes in einem bestimmten Frame ände
 
Volltreffer!

akr 2. Okt 2007 13:34

Re: Inhalt eines ID-Elementes in einem bestimmten Frame ände
 
Hallo Marabu. Vielen Dank für Deine Beiträge hier. Die haben mir sehr geholfen.

Jetzt bleiben mir noch 2 Fragen

a) Wenn ich mit mshtml arbeite kommen manchmal Popup Windows hoch. Wie kann ich das verhindernß
b) Wenn ich mit IHMTLElementCollection.item durch einen Baum gehe und irgend eine Node erwische. Woher weiss
ich was es alles für Interfaces unterstützt bzw auf was ich casten kann?

Thx Andreas

marabu 16. Okt 2007 18:37

Re: Inhalt eines ID-Elementes in einem bestimmten Frame ände
 
Hallo Andreas,

herzlich willkommen in der Delphi-PRAXiS - und vielen Dank für die Blumen.

Leider habe ich deinen Beitrag erst heute entdeckt - und das auch noch eher zufällig. Wahrscheinlich hast du dir deine Fragen inzwischen selbst beantworten können.

Für den Fall, dass dem nicht so ist:
  • Popups kannst du in der Ereignisbehandlung für OnNewWindow2() eliminieren
  • Eine vollständige Beschreibung der Schnittstellen und ihrer Eigenschaften und Methoden findest du bei Microsoft.
Im Internet-Forum der DP findest du viele Code-Beispiele rund um das Microsoft WebBrowser Control. Besonders hinweisen möchte ich dich auf die Mini WebBrowser Demo und auf die Embedded WebBrowser Component Suite.

Wenn du in der DP binnen 24 Stunden keine Antwort auf einen Beitrag erhältst, darfst du gerne nachhaken. Da der Thread für mich abgeschlossen war, habe ich ihn nicht weiter beobachtet. Da du mich persönlich adressiert hast, haben sich alle anderen Mitglieder zurück gelehnt und gedacht: Der marabu wird es schon richten. Du hättest einen neuen Thread aufmachen sollen oder eine PN an mich schicken, dass du einen alten Thread aktiviert hast.

Freundliche Grüße


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