Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Formularresource entfernt ... (https://www.delphipraxis.net/148042-formularresource-entfernt.html)

Shubit 21. Feb 2010 09:55


Formularresource entfernt ...
 
Hi,
ich hatte in meinem Projekt ein zusätzliches Formular und nachdem mir aufgefallen ist, dass ich eh alle Objekte zur Laufzeit erstellt und den Objektinspektor nicht brauche, habe ich kurzerhand der dfm Datei des Formulars und die Verlinkung "{$R *.dfm}" auf diese gelöscht. Jedoch scheint das Programm ohne diese nicht zu laufen, da beim Erstellen des Formulars eine Vermisstenmeldung der Resourcendatei kommt.
Hab ich irgendwo vergessen die Reourcenverlinkung rauszunehmen oder braucht ein TForm immer eine .pas und eine .dfm Datei?

DeddyH 21. Feb 2010 10:02

Re: Formularresource entfernt ...
 
Zitat:

Zitat von Shubit
oder braucht ein TForm immer eine .pas und eine .dfm Datei?

Nach meiner Kenntnis, ja.

himitsu 21. Feb 2010 10:10

Re: Formularresource entfernt ...
 
Wenn ein Nachfahre von TForm verwendet wird, dann wird immer eine gleichnamige Resource benötigt, da diese versucht wird automatisch zu laden.

Aber wenn du die Form manuell direkt von TForm erzeugst, dann wird dieses übersprgangen.

Also einfach auch noch deine Form ( TForm.Create ) selber erzeugen.

dataspider 21. Feb 2010 10:19

Re: Formularresource entfernt ...
 
IMHO muss ich das Formular dann mit CreateNew (anstatt Create) erstellen.

Frank

Shubit 21. Feb 2010 10:23

Re: Formularresource entfernt ...
 
na ja, ich hab ja einen eigenen Konstruktor

Delphi-Quellcode:
type
  TFm_Question = class(TForm)
  protected
    [...]
  public
    // constructor
    constructor Create(AOwner: TComponent); Virtual;

    [...]
  end;

implementation

//
// Constrcutors
//
constructor TFm_Question.Create(AOwner: TComponent);
begin
  Inherited Create(AOwner);

  [...]
end;

dataspider 21. Feb 2010 10:37

Re: Formularresource entfernt ...
 
Dann überschreib halt den Constructor CreateNew:

Delphi-Quellcode:
constructor CreateNew(AOwner: TComponent; Dummy: Integer = 0); override;
...
constructor TFm_Question.CreateNew(AOwner: TComponent; Dummy: Integer = 0);
begin
  inherited CreateNew(AOwner, Dummy);
  [...]
end;
IMHO funktioniert Create ohne res-Datei nicht.

Frank

Shubit 21. Feb 2010 10:48

Re: Formularresource entfernt ...
 
danke, funktioniert :)

himitsu 21. Feb 2010 10:56

Re: Formularresource entfernt ...
 
Wie gesagt, TForm selber prüft irgendwo etwa so
Delphi-Quellcode:
if Self.ClassType <> TForm then
  LoadResource(Self.ClassName)
Also entweder du nimmst TForm und keinen Nachfolger oder du mußt die Prozedur überschreiben, wo die Resource geladen wird.

Shubit 21. Feb 2010 11:12

Re: Formularresource entfernt ...
 
ja, aber jetzt funktioniert es ja mit dem CreateNew ... aber hab schon das nächste Problem :D

uligerhardt 23. Feb 2010 10:54

Re: Formularresource entfernt ...
 
Zitat:

Zitat von dataspider
Dann überschreib halt den Constructor CreateNew:

Delphi-Quellcode:
constructor CreateNew(AOwner: TComponent; Dummy: Integer = 0); override;
...
constructor TFm_Question.CreateNew(AOwner: TComponent; Dummy: Integer = 0);
begin
  inherited CreateNew(AOwner, Dummy);
  [...]
end;

Ich würde Create überschreiben, aber inherited CreateNew aufrufen:
Delphi-Quellcode:
    constructor Create(AOwner: TComponent); override;

constructor TFm_Question.Create(AOwner: TComponent);
begin
  inherited CreateNew(AOwner);
  [...]
end;
Sonst ruft man beim Anlegen der Formulare immer TFm_Question.Create auf (statt TFm_Question.CreateNew) und wundert sich, wenn's kracht.

Zitat:

Zitat von dataspider
IMHO funktioniert Create ohne res-Datei nicht.

Korrekt. (Außer, wenn man direkt TForm.Create aufruft.)


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