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/)
-   -   Delphi ocx ActiveForm und Frames (https://www.delphipraxis.net/136430-ocx-activeform-und-frames.html)

Sergej_Molotov 30. Jun 2009 08:15


ocx ActiveForm und Frames
 
Hallo Zusammen,

ich hab da mal eine Frage bzgl. Frames in ActiveForms. Wenn ich ein Frame zur Laufzeit erzeuge, dann funktioniert das auch alles wunderbar, außer im Frame ist ein TMemo oder TRichedit enthalten. Wenn man dann nun das Projekt erzeugt / startet, erhält man eine Excpetion:

EInvalidOperation ... Element 'AvailSoftFrame' hat kein übergeordnetes Fenster.


Verwende ich den gleichen Frame ohne die TMemo-Komponente funktioniert dieser.

Hat von euch auch mal eines dieses Phänomen festgestellt?

Delphi-Quellcode:
procedure TdcUpdateX.LoadAvailSoftFrame;
var
  aFrame : TAvailSoftFrame;
begin
  aFrame := TAvailSoftFrame.Create(panel_client);
  aFrame.Parent := panel_client;
end;
panel_client ist ein TPanel, welches auf dem TActiveForm liegt.

Die Excpetion tritt hier auf:
Delphi-Quellcode:
procedure TWinControl.CreateWnd;
var
  Params: TCreateParams;
  TempClass: TWndClass;
  ClassRegistered: Boolean;
begin
  CreateParams(Params);
  with Params do
  begin
    if (WndParent = 0) and (Style and WS_CHILD <> 0) then
      if (Owner <> nil) and (csReading in Owner.ComponentState) and
        (Owner is TWinControl) then
        WndParent := TWinControl(Owner).Handle
      else
        raise EInvalidOperation.CreateFmt(SParentRequired, [Name]); <-- hier
...

Sergej_Molotov 30. Jun 2009 13:35

Re: ocx ActiveForm und Frames
 
Nach einigem Suchen hab ich doch noch was gefunden.

Man sollte in der Frame-Klasse die folgende Prozedur überschreiben

Delphi-Quellcode:
procedure TAvailSoftFrame.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.WndParent := dcUpdateImpl.MegaHandle;
end;
Das MegaHandle :wink: ist das Handle des Containers, in welchem der Frame angezeigt werden soll (z.B. von einem Panel)

Wenn jemanden noch ne alternative einfällt, kann er sie gerne kunt tun


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