Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Klasse von TForm ableiten und Constructor um Parameter erweitern (https://www.delphipraxis.net/155366-klasse-von-tform-ableiten-und-constructor-um-parameter-erweitern.html)

JonnyGuitar 20. Okt 2010 14:29

Delphi-Version: 2007

Klasse von TForm ableiten und Constructor um Parameter erweitern
 
Hallo,

ich versuche eine Klasse von TForm abzuleiten. Diese Klasse müsste
aber beim Constructor aber mehr Parameter als AOwner haben, in diesem Fall Caption.
Ich habe bis jetzt folgendes, was aber nicht funktioniert:

Delphi-Quellcode:
unit InfoWindow;

interface

uses
  Windows,
  Forms,
  Classes,
  Dialogs;

type
  TInfoWindow = class(TForm)
  private
    FCaption: string;
  public
    constructor Create(AOwner: TComponent; Caption: string); reintroduce; overload; virtual;
    destructor Destroy; override;
  end;

implementation


constructor TInfoWindow.Create(AOwner: TComponent; Caption: string);
begin
  inherited Create(AOwner);
  self.Caption := Caption;
end;

destructor TInfoWindow.Destroy;
begin
  inherited Destroy;
end;

end.
Beim inherited Create(AOwner) kommt die Fehlermeldung "Ressource TInfowindow wurde nicht gefunden"

Kann mir einer weiterhelfen?


Gruss Jonny

himitsu 20. Okt 2010 14:33

AW: Klasse von TForm ableiten und Constructor um Parameter erweitern
 
Die VCL versucht für Alles, welches von TForm abgeleitet ist und was nicht selber TForm ist, die DFM-Resource zu laden.

Du wirst wohl keine solche Resource im Programm eingebunden haben und daher der Fehler.
Irgendwo gibt es schon einige Threads dazu und da wurde auch erklärt, wie man dieses Verhalten abstellen kann, so daß keine DFM mehr versucht wird zu laden.

Edit


[add] Hier der Grund:
Delphi-Quellcode:
constructor TCustomForm.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ...
    InitializeNewForm;
    if (ClassType <> TForm) and not (csDesigning in ComponentState) then
    begin
      Include(FFormState, fsCreating);
      try
        if not InitInheritedComponent(Self, TForm) then
          raise EResNotFound.CreateFmt(SResNotFound, [ClassName]);

mkinzler 20. Okt 2010 14:35

AW: Klasse von TForm ableiten und Constructor um Parameter erweitern
 
Man kann aber gefahrlos einen 2. Konstruktor erzeugen, der weitere Parameter besitzt und der dann den Standardkonstruktor aufruft.

himitsu 20. Okt 2010 14:45

AW: Klasse von TForm ableiten und Constructor um Parameter erweitern
 
Zitat:

Zitat von mkinzler (Beitrag 1056732)
Man kann aber gefahrlos einen 2. Konstruktor erzeugen, der weitere Parameter besitzt und der dann den Standardkonstruktor aufruft.

Das macht er ja schon, aber der Standardkonstruktor versucht eben die zugehörige DFM zu laden und wenn keine vorhanden ist, dann knallt es eben.

Es sei denn man schaltet dieses Verhalten ab oder man ruft den Standardkonstruktor nicht auf, aber Letzeres ist nicht zu empfehlen, da sonst viele und wichtige Initialisierungen des Formulars fehlen.


PS: Das
Delphi-Quellcode:
FCaption: string;
ist wohl etwas unnütze/zuviel, dazumal die Form selber schon ein Caption (siehe Self.Caption) besitzt.

JonnyGuitar 20. Okt 2010 14:55

AW: Klasse von TForm ableiten und Constructor um Parameter erweitern
 
Also ist das so wie ich es mache vom Grundprinzig richtig und ich versuche jetzt das Laden
der DFM zu unterbinden?

mkinzler 20. Okt 2010 15:11

AW: Klasse von TForm ableiten und Constructor um Parameter erweitern
 
Warum das?

JonnyGuitar 21. Okt 2010 09:50

AW: Klasse von TForm ableiten und Constructor um Parameter erweitern
 
Das hatte ich jetzt so aus den Antworten geschlossen,
wenn es falsch ist korrigier mich bitte.

DeddyH 21. Okt 2010 10:33

AW: Klasse von TForm ableiten und Constructor um Parameter erweitern
 
Kannst Du nicht einfach das Formular ganz herkömmlich samt DFM anlegen, erweitern und dann der Objektablage hinzufügen? Oder hab ich mal wieder was falsch verstanden?


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