AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi EExternal Exception beim Schließen eines Formulars
Thema durchsuchen
Ansicht
Themen-Optionen

EExternal Exception beim Schließen eines Formulars

Ein Thema von schweindi · begonnen am 4. Feb 2010 · letzter Beitrag vom 6. Feb 2010
Antwort Antwort
schweindi

Registriert seit: 4. Feb 2010
60 Beiträge
 
#1

EExternal Exception beim Schließen eines Formulars

  Alt 4. Feb 2010, 18:01
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:
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;
so und dann hab ich noch die procedure BtCklick1:
Delphi-Quellcode:
procedure BtClick1 (Sender: TObject);
begin
f_about.Release;
end;
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."
danach springt das programm in die dpr:

Delphi-Quellcode:
program Ptest;

uses
  Forms,
  test in 'test.pas{Form1};

{$R *.RES}
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
bei "end." ist der "debug-pfeil"...

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
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#2

Re: EExternal Exception beim Schließen eines Formulars

  Alt 4. Feb 2010, 18:12
Zitat von schweindi:
Delphi-Quellcode:
procedure TForm1.ber1Click(Sender: TObject);
var BtClick1:TNotifyEvent;
begin
...
end
...
procedure BtClick1 (Sender: TObject);
begin
f_about.Release;
end;
TNotifyObject erwartet eine "procedure(Sender:TObject) of object", also eine passende Methode. Deine Prozedur BtClick1 ist aber keine Methode.
Zitat von schweini:
Ich habe schon probiert die procedure "procedure f_about.BtClick1(Sender: TObject);" zu nennen, dann kommt aber der Fehler "identifier redeclared: f_about".
Ich nehme an, f_about ist der Variablenbezeichner, oder?
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
  Mit Zitat antworten Zitat
schweindi

Registriert seit: 4. Feb 2010
60 Beiträge
 
#3

Re: EExternal Exception beim Schließen eines Formulars

  Alt 4. Feb 2010, 18:32
wie soll ich mir die proc genau vorstellen??

procedure BtClick1(Sender: TObject) of [??] ;

wenn ich
procedure TForm1.BtClick1(Sender: TObject); schreibe und sie in Tform1 registriere, kommt der selbe Fehler...

oder wie genau?

f_about ist der TForm name von der Form die erstellt wird.
  Mit Zitat antworten Zitat
schweindi

Registriert seit: 4. Feb 2010
60 Beiträge
 
#4

Re: EExternal Exception beim Schließen eines Formulars

  Alt 4. Feb 2010, 23:44
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:
procedure TForm1.BtClick1(Sender: TObject);
begin
f_about.Free;
end;
dh sie muss deklariert werden, genau wie du es geschrieben hast, im Hauptformular TForm1:
Delphi-Quellcode:
  private
    { Private-Deklarationen }
    procedure BtClick1(Sender: TObject);
und was ich dann vergessen hab und ich bekam ja die Warnung: "BtCklick1 might not have been initialized"
Die Variable muss natürlich global sein:
Delphi-Quellcode:
var
  Form1: TForm1;
...
//forms var ----------------
//f_about vars
f_about:TForm;
bt_end:TButton;
l_about:TLabel;
[u]BtClick1:TNotifyEvent;[/u]
also ich hab den Fehler gemacht, alles lokal zu deklarieren, jetzt funzt alles - danke dir
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

Re: EExternal Exception beim Schließen eines Formulars

  Alt 5. Feb 2010, 06:53
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:
TDynamicAboutForm = class(TForm)
public
  bt_end:TButton;
  l_about:TLabel;
  constructor Create(AOwner:TComponent);override;
end;
In einem weiteren Schritt kannst du den Button und das Label auch private machen.
  Mit Zitat antworten Zitat
schweindi

Registriert seit: 4. Feb 2010
60 Beiträge
 
#6

Re: EExternal Exception beim Schließen eines Formulars

  Alt 5. Feb 2010, 09:46
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
  Mit Zitat antworten Zitat
shmia

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

Re: EExternal Exception beim Schließen eines Formulars

  Alt 5. Feb 2010, 16:21
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.
Andreas
  Mit Zitat antworten Zitat
schweindi

Registriert seit: 4. Feb 2010
60 Beiträge
 
#8

Re: EExternal Exception beim Schließen eines Formulars

  Alt 6. Feb 2010, 10:03
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
  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 15:05 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