![]() |
EExternal Exception beim Schließen eines Formulars
Hallo alle :)
mein Problem ist wahrscheinlich ganz einfach und schnell zu lösen, aber ich komme einfach nicht zur Lösung und zerbreche mir den Kopf darüber: Ich habe ein Hauptformular, auf dem unter anderem ein Button ist der ein neues Formular "f_about" erstellt. Diese neue Form hat dann drauf noch einen Button und ein Label bt_end & l_about.
Delphi-Quellcode:
so und dann hab ich noch die procedure BtCklick1:
procedure TForm1.ber1Click(Sender: TObject);
var BtClick1:TNotifyEvent; begin f_about:=TForm.Create(Application); ... f_about.ParentWindow:=0; bt_end:=TButton.Create(f_about); bt_end.Parent:=f_about; ... bt_end.OnClick:=BtClick1; l_about:=TLabel.Create(f_about); l_about.Parent:=f_about; ... f_about.Show; end;
Delphi-Quellcode:
eigentlich ja ganz einfach... wenn ich das Programm jetzt aber ausführe kommt folgender Fehler: "Project test.exe raised exception class EExternalException with message 'External Exception C000001D'. Process stopped. Use Step or run to continue."
procedure BtClick1 (Sender: TObject);
begin f_about.Release; end; danach springt das programm in die dpr:
Delphi-Quellcode:
bei "end." ist der "debug-pfeil"...
program Ptest;
uses Forms, test in 'test.pas' {Form1}; {$R *.RES} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. ich habe leider keinen Plan, wieso der Button nicht die form f_about schließt. Ich habe schon probiert die procedure "procedure f_about.BtClick1(Sender: TObject);" zu nennen, dann kommt aber der Fehler "identifier redeclared: f_about". ich hoffe jemand kann mir da helfen :) lg |
Re: EExternal Exception beim Schließen eines Formulars
Zitat:
Zitat:
In dem Fall ist f_about.BtClick ja auch ganz klar ein syntaktischer Fehler, vor den Methodennamen muss eine Klasse / ein Object / ein Record. Versuchs mal mit TForm1.BtClick :wink: |
Re: EExternal Exception beim Schließen eines Formulars
wie soll ich mir die proc genau vorstellen??
procedure BtClick1(Sender: TObject) of [??] ; wenn ich
Delphi-Quellcode:
schreibe und sie in Tform1 registriere, kommt der selbe Fehler...
procedure TForm1.BtClick1(Sender: TObject);
oder wie genau? f_about ist der TForm name von der Form die erstellt wird. |
Re: EExternal Exception beim Schließen eines Formulars
so... ich hab mich jetzt mal nach einer längeren Pause hingesetzt und hab mir nochmal alles angeschaut und ganz schnell das Problem gefunden :)
Die procedure, die das neue Formular schließen soll sieht so aus:
Delphi-Quellcode:
dh sie muss deklariert werden, genau wie du es geschrieben hast, im Hauptformular TForm1:
procedure TForm1.BtClick1(Sender: TObject);
begin f_about.Free; end;
Delphi-Quellcode:
und was ich dann vergessen hab und ich bekam ja die Warnung: "BtCklick1 might not have been initialized"
private
{ Private-Deklarationen } procedure BtClick1(Sender: TObject); Die Variable muss natürlich global sein:
Delphi-Quellcode:
also ich hab den Fehler gemacht, alles lokal zu deklarieren, jetzt funzt alles - danke dir :)
var
Form1: TForm1; ... //forms var ---------------- //f_about vars f_about:TForm; bt_end:TButton; l_about:TLabel; [u]BtClick1:TNotifyEvent;[/u] |
Re: EExternal Exception beim Schließen eines Formulars
Sehr unschön, was du da machst.
Der erste Schritt zur Besserung wäre, wenn du eine eigene Klasse von TForm ableiten würdest:
Delphi-Quellcode:
In einem weiteren Schritt kannst du den Button und das Label auch
TDynamicAboutForm = class(TForm)
public bt_end:TButton; l_about:TLabel; constructor Create(AOwner:TComponent);override; end; ![]() |
Re: EExternal Exception beim Schließen eines Formulars
danke, ich habe mir fast gedacht, dass ich da ziemlich viel misch masch programmiere, da ich nur sehr wenig in der Schule gelernt habe...
soll ich jetzt für jede neue Form die ich machen will eine eigene Klasse machen? die wären dann TDynamic"name"Form? und bezüglich "privat machen", ich probier das mal...danke :) |
Re: EExternal Exception beim Schließen eines Formulars
Formulare kannst du mit Hilfe der IDE erzeugen oder aber auch zur Laufzeit erzeugen.
Mit der IDE ist das natürlich wesentlich einfacher. Einfach im Menue Datei -> Neues Formular aufrufen und die IDE legt ein leeres Formular in einer neuen Unit an. Namen des Fomulars ändern und am Besten gleich speichern. Und dann per "Klickedi-Klick" mit Inhalt füllen. Wenn man Formulare zur Laufzeit mit Buttons, Labels usw. bestückt ist das natürlich wesentlich aufwändiger. Manchmal tut man das trotzdem um spezielle Effekte (Grössenanpassung, offene Anzahl von Buttons,...) zu erreichen. Ich dachte, du würdest dein Formular mit Absicht zur Laufzeit zusammenbauen. Aber mir scheint du hast dir andere Programmiersprachen zum Vorbild genommen, bei denen man in der Tat jeden einzelnen Button von Hand erzeugen muss. |
Re: EExternal Exception beim Schließen eines Formulars
ja ich habe eig alles in Laufzeit erstellt... und jetzt funktioniert auch alles, obwohl es "unschön" ist das weiß ich, aber es ist nur wichtig, dass es läuft :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz