2 Stimmen

Umwandlung eines TWebBrowser in ein TWinControl

Kann mir jemand sagen, warum die zweite Besetzung nicht in Delphi 7 kompilieren?

var
  WebBrowser: TWebBrowser;
begin
  WebBrowser := TWebBrowser.Create(Self);
  TWinControl(WebBrowser).Parent := Self;
  (WebBrowser as TWinControl).Parent := Self; // fail here
end

Parent in TWebBrowser ist eine schreibgeschützte IDispatch-Eigenschaft, aber warum sieht der erste Cast die TWinControl-Eltern-Eigenschaft gut, der zweite aber nicht?

Gracias

7voto

Toon Krijthe Punkte 51819

Der erste Wurf wird nicht überprüft, er geht davon aus, dass der Programmierer Recht hat und macht weiter. Der zweite Cast verwendet eine Plausibilitätsprüfung. (Verursacht eine Ausnahme, wenn der Cast ungültig ist). Ich denke, dass der Compiler in diesem Fall wegen der gleichnamigen Eigenschaften verwirrt wurde. Es könnte sich auch um einen übermäßig tüchtigen Optimierer handeln.

Zumindest,

var
  wc : TWinControl;
begin
  wc := (WebBrowser as TWinControl);
  wc.Parent := Self;
end;

Werke. Es gibt also eine Umgehung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X