AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi 'Ressource X nicht gefunden' bei eigener Form-Klasse
Thema durchsuchen
Ansicht
Themen-Optionen

'Ressource X nicht gefunden' bei eigener Form-Klasse

Ein Thema von dizzy · begonnen am 18. Jun 2007 · letzter Beitrag vom 18. Jun 2007
Antwort Antwort
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#1

'Ressource X nicht gefunden' bei eigener Form-Klasse

  Alt 18. Jun 2007, 15:59
Moinmoin zum 2. heut!

Ich habe mir eine eigene Formularklasse von TCustomForm abgeleitet, die ich statt der automatisch erzeugten (bei Datei->Neu->Formular) nachher im Code setze. Funktioniert wunderbar. Diese neue Klasse wuselt OnCreate nun ein wenig in Datenbanken herum, und daher möchte ich gerne ein kleines Fenster anzeigen, dass Auskunft darüber gibt.
Folgende Variante klappte:
Delphi-Quellcode:
procedure TKATGraphForm.BuildKATComponentArray; // wird bei TKATGraphForm.OnCreate aufgerufen
var
  i : Integer;
  obj: TKATGraphObject;
  f : TForm;
begin
  f := TForm.Create(nil);
  Width := 300;
  Height := 80;
  Font.Name := 'Arial';
  Font.Size := 12;
  Font.Color := clBlack;
  Position := poScreenCenter;
  BorderStyle := bsToolWindow;
  FormStyle := fsStayOnTop;
  BorderIcons := [];
  Caption := 'blabla';
  OnPaint := PaintArrayBuild;
  f.Show;
  f.Refresh;
  // Datenbankkrams...
  f.Hide;
  f.Free;
end;

procedure TKATGraphForm.PaintArrayBuild(Sender: TObject);
var
  x, y: Integer;
  f: Form;
const
  s = 'Konfiguration wird geladen.';
begin
  f := TForm(Sender);
  x := (f.ClientWidth - f.Canvas.TextWidth(s)) div 2;
  y := (f.ClientHeight - f.Canvas.TextHeight(s)) div 2;
  f.Canvas.TextOut(x, y, s);
end;
Da allerdings unterschiedliche Aktionen vorkommen, wollte ich eine weitere Formularklasse machen, der ich eine Caption und eine Message übergebe, so dass das Setzen der Größe, Schrift, Position usw. nur ein mal Passieren.
Im "inherited Create" dieser neuen Klasse jedoch bekomm ich im Titel genannte Exception, wobei X dann der Name der neuen Formularklasse ist. Leider wird die Exception ausgelöst, aufgrund eines Funktionsaufrufs der False ergibt, der Code aber nie in diese Funktion springt . Haltepunkte innerhalb dieser Funktion werden sogar deaktiviert.
Der Code mit der neuen Fensterklasse:
Delphi-Quellcode:
  // Die neue Fensterklasse
  TLoadStatusForm = class(TCustomForm)
  private
    FMsg: String;
  protected
    procedure Paint; override;
  public
    constructor Create(ACaption: String; Msg: String); reintroduce;
  end;

implementation

{ TLoadStatusForm }

constructor TLoadStatusForm.Create(ACaption: String; Msg: String);
begin
  inherited Create(nil);
  Width := 300;
  Height := 80;
  Font.Name := 'Arial';
  Font.Size := 12;
  Font.Color := clBlack;
  Position := poScreenCenter;
  BorderStyle := bsToolWindow;
  FormStyle := fsStayOnTop;
  BorderIcons := [];
  Caption := ACaption;
  FMsg := Msg;
end;

procedure TLoadStatusForm.Paint;
var
  x, y: Integer;
begin
  inherited;
  x := (ClientWidth - Canvas.TextWidth(FMsg)) div 2;
  y := (ClientHeight - Canvas.TextHeight(FMsg)) div 2;
  Canvas.TextOut(x, y, FMsg);
end;
Und so wirds bislang aufgerufen:
Delphi-Quellcode:
procedure TKATGraphForm.BuildKATComponentArray;
var
  f: TLoadStatusForm;
begin
  f := TLoadStatusForm.Create('bla', 'blubb'); // Hier gibts die Exception, bzw. beim inherited Create in TLoadStatusForm.Create
  f.Show;
  f.Refresh;
  // Datendankkrams...
  f.Hide;
  f.Free;
end;

Da mein Durchsteppen ja wie gesagt leider in einer Funktion endete, die nie durchlaufen wird*, und trotzdem ein Ergebnis liefert (), bin ich recht ratlos, und für jede Hilfe im Höchstmaß empfänglich, und sogar dankbar
(Vor allem: Warum klappt das mit der einen eigenen Formularklasse, mit der anderen in dieser aber nicht mehr?)

*besagt Funktion ist "Classes.InitInheritedComponent(Instance: TComponent; RootAncestor: TClass): Boolean;"

Gruss,
Fabian

PS: Ich weiss, dass jegliche Ressourcenschutzblöcke fehlen. Erstmal bin ich froh wenn es überhaupt tut
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#2

Re: 'Ressource X nicht gefunden' bei eigener Form-Klasse

  Alt 18. Jun 2007, 16:24
Hallo,

ein Nachfahre von TCustomForm möchte immer eine *.dfm Datei, um die Form-Eigenschaften zu laden. Fehlt diese Ressource, kommt die Fehlermeldung.
Also einfach ein leeres Formular anlegen und dieses verwenden.

Übrigens kannst Du die ganzen Einstellungen noch besser verpacken, indem Du eine class function verwendest:
Delphi-Quellcode:
type
  TLoadStatusForm = class(TForm)
  private
    FMsg: String;
  protected
    procedure Paint; override;
  public
    class function ShowStatus(const ACaption, Msg: String): TLoadStatusForm;
  end;

var
  LoadStatusForm: TLoadStatusForm;

implementation

{$R *.dfm}

{ TLoadStatusForm }

procedure TLoadStatusForm.Paint;
var
  x, y: Integer;
begin
  inherited;
  x := (ClientWidth - Canvas.TextWidth(FMsg)) div 2;
  y := (ClientHeight - Canvas.TextHeight(FMsg)) div 2;
  Canvas.TextOut(x, y, FMsg);
end;

class function TLoadStatusForm.ShowStatus(const ACaption, Msg: String): TLoadStatusForm;
var
  f: TLoadStatusForm;
begin
  f := TLoadStatusForm.Create(nil);
  f.Width := 300;
  f.Height := 80;
  f.Font.Name := 'Arial';
  f.Font.Size := 12;
  f.Font.Color := clBlack;
  f.Position := poScreenCenter;
  f.BorderStyle := bsToolWindow;
  f.FormStyle := fsStayOnTop;
  f.BorderIcons := [];
  f.Caption := ACaption;
  f.FMsg := Msg;

  f.Show;
  f.Refresh;
  Result := f;
end;
Aufruf:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  f: TLoadStatusForm;
begin
  f := TLoadStatusForm.ShowStatus('bla', 'blubb'); // Hier gibts die Exception, bzw. beim inherited Create in TLoadStatusForm.Create
  // Datendankkrams...
  f.Hide;
  f.Free;
end;
Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: 'Ressource X nicht gefunden' bei eigener Form-Klasse

  Alt 18. Jun 2007, 16:31
Das ist allerdings etwas, worauf man erst kommen muss. Klar, dass es bei dem anderen Formular dann geht, da dafür ja gleichnamige .dfm da sind. Unschönes Verhalten, aber wenn man es weiss, immerhin lösbar . Danke dir!

Die Sache mit der class Function wäre dann nach Factory Pattern. Bin ich prinzipiell ein Freund von, in diesem Fall werd ich es aber denke ich nicht so machen. Letztlich kommts ja auf das selbe raus.

Danke nochmals!
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: 'Ressource X nicht gefunden' bei eigener Form-Klasse

  Alt 18. Jun 2007, 16:40
Zitat von xaromz:
ein Nachfahre von TCustomForm möchte immer eine *.dfm Datei, um die Form-Eigenschaften zu laden. Fehlt diese Ressource, kommt die Fehlermeldung.
Oder man verwendet der Konstruktor CreateNew.
Andreas
  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 02:35 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