AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ocx ActiveForm und Frames

Ein Thema von Sergej_Molotov · begonnen am 30. Jun 2009 · letzter Beitrag vom 30. Jun 2009
Antwort Antwort
Sergej_Molotov

Registriert seit: 18. Jul 2006
61 Beiträge
 
Delphi 11 Alexandria
 
#1

ocx ActiveForm und Frames

  Alt 30. Jun 2009, 08:15
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
...
Thomas
  Mit Zitat antworten Zitat
Sergej_Molotov

Registriert seit: 18. Jul 2006
61 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: ocx ActiveForm und Frames

  Alt 30. Jun 2009, 13:35
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 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
Thomas
  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 18:59 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