AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Inhalt eines ID-Elementes in einem bestimmten Frame ändern
Thema durchsuchen
Ansicht
Themen-Optionen

Inhalt eines ID-Elementes in einem bestimmten Frame ändern

Ein Thema von torud · begonnen am 16. Mär 2006 · letzter Beitrag vom 16. Okt 2007
Antwort Antwort
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#1

Inhalt eines ID-Elementes in einem bestimmten Frame ändern

  Alt 16. Mär 2006, 10:34
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
Danke
Tom
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

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

  Alt 16. Mär 2006, 12:00
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
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#3

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

  Alt 16. Mär 2006, 12:05
Volltreffer!
Danke
Tom
  Mit Zitat antworten Zitat
akr

Registriert seit: 17. Okt 2005
1 Beiträge
 
#4

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

  Alt 2. Okt 2007, 13:34
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

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

  Alt 16. Okt 2007, 18:37
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:16 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