Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   WebBrowser.Parent nur lesend? (https://www.delphipraxis.net/196513-webbrowser-parent-nur-lesend.html)

e-gon 28. Mai 2018 08:45

WebBrowser.Parent nur lesend?
 
Hallo,

in meinem Adressprogramm nutze ich zur Darstellung der Personen derzeit pro Person jeweils ein Panel, auf dem links ein TImage das Foto der Person und rechts ein TRichEdit die Daten anzeigt. Da es schön wäre, diese Daten formatiert und evtl. mit kleinen Grafiken darzustellen, wollte ich das RichEdit auf jedem Panel durch ein TWebBrowser ersetzten.

Dabei stieß ich allerdings auf ein Problem: Laut Compiler kann auf WebBrowser.Parent nur lesend zugegriffen werden. Viele Einträge in diesem Forum besagen aber, dass es möglich sei Parent einen Wert zuzuweisen. Was mache ich also falsch?

Ein Beispiel:
Delphi-Quellcode:
uses
  ...
  SHDocVw;

var
  ...
  HTML: Array [0..5] of TWebBrowser;


procedure TForm1.FormCreate(Sender: TObject);
var x: Integer;
begin
  for x:= 0 to 5 do begin
    HTML[x]:= TWebBrowser.Create(Self);
    HTML[x].Parent:= Panel1; // Hier tritt der Fehler auf: "Einer Nur-Lesen Eigenschaft kann kein Wert zugewiesen werden"
  end;
end;
Das Problem konnte ich mit Delphi 6 und 2009 nachvollziehen.

Gruß
e-gon

Fritzew 28. Mai 2018 09:10

AW: WebBrowser.Parent nur lesend?
 
Parent is überschrieben von Twebbrowser und ist dort ein IDispatch.

Erzeuge Deine Webbrowser Instanzen gleich auf dem Panel :

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var x: Integer;
begin
  for x:= 0 to 5 do begin
//    HTML[x]:= TWebBrowser.Create(Self);
     HTML[x]:= TWebBrowser.Create(Panel[x]); // Wie auch immer Du diese verwaltest
  //  HTML[x].Parent:= Panel1; // Hier tritt der Fehler auf: "Einer Nur-Lesen Eigenschaft kann kein Wert zugewiesen werden"
  end;
end;

e-gon 28. Mai 2018 09:33

AW: WebBrowser.Parent nur lesend?
 
Hallo Fritzew,

danke für die schnelle Antwort! So einfach geht's natürlich auch. Da habe ich mal wieder zu kompliziert gedacht...

Gruß
e-gon

e-gon 28. Mai 2018 12:00

AW: WebBrowser.Parent nur lesend?
 
Leider funktioniert es immer noch nicht. :(

Trotz
Delphi-Quellcode:
HTML[x]:= TWebBrowser.Create(Panel[x]);
bleibt Panel[x].Parent auf "nil". Kann mir jemand sagen warum? Gibt es eine Möglichkeit dieses Parent noch irgendwie zu setzen?

himitsu 28. Mai 2018 12:02

AW: WebBrowser.Parent nur lesend?
 
Panel[x].Parent oder HTML[x].Parent ?

Fritzew 28. Mai 2018 12:03

AW: WebBrowser.Parent nur lesend?
 
Vielleicht würde es helfen, wenn Du uns erklärst was Du eigentlich erreichen willst.
Parent im TWebBrowser ist etwas total anderes als ein parent von zb einem Button.....

Trotz rot abgeschickt....

KodeZwerg 28. Mai 2018 12:03

AW: WebBrowser.Parent nur lesend?
 
Existiert denn überhaupt ein Panel[x] ? Das ist aus dem Code nicht ersichtlich.

e-gon 28. Mai 2018 12:13

AW: WebBrowser.Parent nur lesend?
 
Hallo,

sorry, es war das falsche Parent! HTML[x].Parent natürlich!

Wie anfangs schon beschrieben habe ich für die Übersicht in meinem Adressprogramm für jede Person ein Panel (Panel[x]). Und auf jedem Panel befinden sich zwei Komponenten. Links ein TImage, welches das Bild der Person anzeigt, und rechts hatte ich zunächst ein RichEdit für die Ausgabe der Daten. Nun wollte ich das jeweilige RichEdit auf dem Panel gegen ein WebBrowser ersetzen. Dabei stieß ich jedoch auf das Problem, dass ich bei TWebBrowser den Parameter Parent nicht setzen kann. Also hat Fritzew vorgeschlagen, gleich bei Create das Panel[x] als Parameter zu übergeben. Nun sollte WebBrowser.Parent ja eigentlich auf "Panel[x]" zeigen. Stattdessen ist es aber nil.

Ja, Panel[x] exisitert. Sonst würde es mir der Compiler ja gleich um die Ohren hauen.

Gruß
Heiko

Fritzew 28. Mai 2018 12:32

AW: WebBrowser.Parent nur lesend?
 
Du willst also von Deinem TWebbrowser den Panel finden?

Da das Property Parent in Twebbrowser aber neu eingeführt (Überschrieben) wird hilft ein Cast.

TOleControl(WebBrowser1).Parent ist das was Du suchst

e-gon 28. Mai 2018 12:41

AW: WebBrowser.Parent nur lesend?
 
Nein. Sorry für das Missverständnis.

Ich will eigentlich nur dass der jeweilige WebBrowser auf dem dazugehörendem Panel[x] angezeigt wird. Aber das funktioniert nicht. Also habe ich schon die verschiedensten Dinge ausprobiert und dabei festgestellt, dass Parent bei jedem WebBrowser auf nil steht und nicht - wie ich erwarte - auf des dazugehörge Panel[x] zeigt. Also gehe ich davon aus, dass deshalb keines der WebBrowser in der Übersicht auf dem Panel[x] zu sehen ist.

Gruß
e-gon

Fritzew 28. Mai 2018 12:45

AW: WebBrowser.Parent nur lesend?
 
Ich antworte noch mal aber irgendwie ist es mühsam....
Zeige den Code den Du verwendest um Deinen TWebBrowser zu erzeugen.
Wenn Du das nicht machst, antworte ich erst wieder wenn Du mir sagen kannst welcher Farbe mein Hemd heute hat.
Kennst Du den Spruch mit den Würmern und der Nase?

Fritzew 28. Mai 2018 13:21

AW: WebBrowser.Parent nur lesend?
 
Trotz der Würmer...

Delphi-Quellcode:
HTML[x]:= TWebBrowser.Create(Panel[x]);
TOleControl(HTML[x]).parent := Panel[x];
HTML[x].Align := alClient;
HTML[x].Visible := true;

e-gon 28. Mai 2018 13:48

AW: WebBrowser.Parent nur lesend?
 
Das war der Schlüssel!
Delphi-Quellcode:
TOleControl(HTML[x]).parent := Panel[x];


Jetzt tut's! Danke Euch!

Gruß
e-gon


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf