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