Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   FreePascal Formular neu createn? (https://www.delphipraxis.net/192455-formular-neu-createn.html)

Maurooon 19. Apr 2017 18:40

Delphi-Version: 5

Formular neu createn?
 
Guten Abend,

gibt es eine Möglichkeit, per Buttonclick oder Ähnlichem eine Form zu löschen und wieder neu zu createn? Also dass man quasi nur diese eine Form neu startet als würde man neu kompilieren.

Ich hoffe ihr könnt mir weiterhelfen.

LG

a.def 19. Apr 2017 18:57

AW: Formular neu createn?
 
Ehrlich gesagt verstehe ich nur Bahnhof.
Du willst ein neues Formular haben oder ein bestehendes löschen das habe ich verstanden. Aber was hat das mit Kompilieren zu tun?

Maurooon 19. Apr 2017 19:04

AW: Formular neu createn?
 
zum Beispiel: Ich habe zwei Formen. Auf der einen habe ich einen Button über den ich zur zweiten komme. Dort bewege ich über einen weiteren Button ein Objekt von der linken oberen Ecke in die untere rechte. Wenn ich die zweite Form schließe und erneut über den ersten Button die zweite öffne, ist das Image immer noch in der unteren rechten Ecke. Ich suche jetzt nach einer Möglichkeit, eine Form zu schließen, um sie bei erneutem Öffnen so vorzufinden, wie ich sie createt habe also wie sie nach dem Kompilieren aussah.

Ich hoffe jetzt ist es etwas verständlicher :D

LG

bnreimer42 19. Apr 2017 19:05

AW: Formular neu createn?
 
Bist Du im Editor oder geht es um eine Frage zur Runtime?

a.def 19. Apr 2017 19:17

AW: Formular neu createn?
 
Wieso dann mit Kanonen auf Spatzen schießen?

Speichere doch einfach die Originalposition des Objekts und setze es im FormShow des Formulars #2 an die Originalposition zurück.

EWeiss 19. Apr 2017 19:30

AW: Formular neu createn?
 
Zitat:

Zitat von a.def (Beitrag 1368315)
Wieso dann mit Kanonen auf Spatzen schießen?

Speichere doch einfach die Originalposition des Objekts und setze es im FormShow des Formulars #2 an die Originalposition zurück.

Wenn es für ihn so einfach wäre würde er nicht fragen.
Bitte tue hier nicht so überheblich, nicht vergessen du hast auch mal angefangen.
Dein Ton wird immer rauer habe ich den Eindruck.

gruss

Darlo 19. Apr 2017 19:31

AW: Formular neu createn?
 
Ja, klar geht das. Ungefähr so:
Delphi-Quellcode:
var
myform2: TForm2;
begin
form2.close;
form2.free;
myform2 := TForm2.Create(self);
myform2.show;
end;

hoika 19. Apr 2017 19:43

AW: Formular neu createn?
 
Hallo,

1. Es geht nicht um MDI?

2.
Zitat:

Ich suche jetzt nach einer Möglichkeit, eine Form zu schließen, um sie bei erneutem Öffnen so vorzufinden, wie ich sie createt habe also wie sie nach dem Kompilieren aussah.
eine Form zu schließen
(Form2) OnButton1Click
Self.Close;

erneut öffnen
Form2 := TForm2.Create;
Form2.ShowModal;

wie ich sie createt habe
das sollte genauso sein


Es sei denn:
Du erzeugst Form2 gar nicht bei jedem (Form1)-Button-Klick,
sondern zeigst sie nur mit Form2.Show an.
Dann musst du dir die Positionen im FormCreate merken und im OnShow wiederherstellen


Ansonsten:
Ein bisschen mehr Code wäre schön,
am besten das ganze (Minimal-)Projekt als Zip.

a.def 19. Apr 2017 19:56

AW: Formular neu createn?
 
Zitat:

Dein Ton wird immer rauer habe ich den Eindruck.
:roll: :roll:

t.roller 19. Apr 2017 20:31

AW: Formular neu createn?
 
Das geht so:
Delphi-Quellcode:
program Project1;

uses
  Vcl.Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
//  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.
----------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.CreateForm(TForm2, Form2);
Form2.Show;
end;
----------------------
procedure TForm2.Button1Click(Sender: TObject);
begin
Close;
Self.Free;
end;
----------------------

Olli73 19. Apr 2017 20:54

AW: Formular neu createn?
 
In den Beiträgen #8 und #10 sehe ich ein Speicherleck.

Close gibt standardmäßig das Formular nicht frei, sondern versteckt es nur => Entweder im OnClose des Formulars ein
Delphi-Quellcode:
Action := caFree;
einbauen oder das Formualar mit
Delphi-Quellcode:
.Free
(oder
Delphi-Quellcode:
.Release
) freigeben.

Darlo 19. Apr 2017 20:55

AW: Formular neu createn?
 
Zitat:

Zitat von t.roller (Beitrag 1368322)
Das geht so:

Da fehlt das ungefähr 😉
Nach dem Schließen des form sollte dieses freigegeben werden und vor dem Erzeugen besser noch Prüfen ob bereits vorhanden.

t.roller 19. Apr 2017 21:28

AW: Formular neu createn?
 
Zitat:

Zitat von Darlo (Beitrag 1368324)
Zitat:

Zitat von t.roller (Beitrag 1368322)
Das geht so:

Da fehlt das ungefähr 😉
Nach dem Schließen des form sollte dieses freigegeben werden und vor dem Erzeugen besser noch Prüfen ob bereits vorhanden.

zu 1: Self.Free; angefügt nach Close;
zu 2: doppelt gemoppelt:
procedure TApplication.CreateForm(InstanceClass: TComponentClass; var Reference); prüft das selbst.

Jasocul 20. Apr 2017 08:00

AW: Formular neu createn?
 
Also, wenn ich Anfänger wäre, wäre ich möglicherweise verwirrter, als vorher.

Einige Dinge sind hier richtig aufgeschrieben worden, aber ich denke, die Zusammenhänge sind evtl. schwer verständlich.

Wenn du die Form schließt (Form2.Close) ist sie nur unsichtbar. Du bist nicht der Erste, den das irritiert.
Ein Form2.Show zeigt sie dann wieder an, wie sie zuletzt verlassen wurde. das ist genau das, was dir passiert ist.

Natürlich gilt das nur, wenn innerhalb der Form nicht irgendwelche Aktionen beim OnShow (oder anderen Ereignissen) durchgeführt werden.
Der Hinweis, dass im OnClose die Anweisung
Delphi-Quellcode:
Action := caFree;
gemacht werden kann, stimmt natürlich. Man sollte sich dann aber sicher sein, dass das wirklich so gewollt ist. Der nächste Aufruf
Delphi-Quellcode:
Form2.Show
geht sonst nämlich mit einer Zugriffsverletzung in die Hose.

Als Anfänger hast du sicher alle Forms zum Programmstart erzeugt (ist die Standard-Vorgabe).
Das heißt die Form2-Variable ist schon mit Inhalt gefüllt. Das solltest du ändern, damit du im Source einheitlich vorgehen kannst.
In den Projekt-Optionen (dort der Bereich Formulare) kannst du festlegen, welche Formen schon bei Programmstart erzeugt werden.
Es gibt auch andere Möglichkeiten, aber das lasse ich jetzt mal weg, um nicht noch mehr Verwirrung zu stiften (Auch wenn es schon einen Beitrag gibt, wo das gezeigt wird. Allerdings ohne Erläuterung).

Wenn du die Form2 mit ShowModal aufrufst, ist es relativ einfach. Da die Form2 dann den Focus nicht an Form1 zurückgibt, bis Form2 geschlossen wird, kannst du direkt danach ein
Delphi-Quellcode:
Form2.Free
machen.
Delphi-Quellcode:
Application.CreateForm(TForm2, Form2);
Form2.ShowModal;
Form2.Free;
Solltest du die Form2 mit einem
Delphi-Quellcode:
Show
aufrufen, solltest du der Empfehlung mit dem
Delphi-Quellcode:
Action := caFree;
nachkommen.

In dem von dir erwähnten Button der Form1 machst du ein
Delphi-Quellcode:
Form2.Show
. Das änderst du nun wie folgt:
Delphi-Quellcode:
Application.CreateForm(TForm2, Form2);
Form2.Show;
Da du im OnClose der Form2 ein
Delphi-Quellcode:
Action := caFree
eingebaut hast, sollte dann alles wie gewünscht funktionieren.
Diese Vorgehensweise würde übrigens auch mit ShowModal funktionieren.

An ein paar Kommentatoren:
  • Es ist mir neu, dass Application.CreateForm prüft, ob die Form schon existiert.
  • Eine Prüfung, ob die Form schon existiert ist nicht trivial (für einen Anfänger). Ja, ich weiß, wie es geht, will aber die Verwirrung in Grenzen halten.
  • Kotzt doch bitte für einen Anfänger nicht einfach Source hin, ohne ihn zu erläutern.

Darlo 20. Apr 2017 08:07

AW: Formular neu createn?
 
Zitat:

Zitat von Jasocul (Beitrag 1368346)
[*]Kotzt doch bitte für einen Anfänger nicht einfach Source hin, ohne ihn zu erläutern.

Hinkotzen tut hier glaube ich keiner etwas, da jeder hier i.d.R. helfen möchte. Die Befehle
Delphi-Quellcode:
create, free, assigned
sind sicherlich nicht das unterste Einsteigerniveau, jedoch auch kein Hexenwerk. Mit bisschen F1 und google sollte ein Grundverständnis möglich sein. Wenns es dann noch Probleme gibt sind wir ja weiterhin da. Auch wenn es nicht immer der angenehmste Weg ist, aber mit einer Hilfe zur Selbsthilfe lernt man in meinen Augen am schnellsten und meisten...

sko1 20. Apr 2017 08:21

AW: Formular neu createn?
 
Ich klinke mich hier mal kurz ein:

wo liegt der wesentliche Unterschied, ob man zur Laufzeit ein Formular erzeugt mit

Delphi-Quellcode:
    Application.CreateForm(TFormMain, FormMain);

oder mit

    FormMain := TFormMain.Create(Nil);
Ciao
Stefan

Jasocul 20. Apr 2017 08:25

AW: Formular neu createn?
 
@sko1:
Ich verwende normalerweise die zweite Variante.
Die erste Variante macht noch ein paar Prüfungen und setzt z.B. gegebenenfalls die MainForm der Anwendung.

sko1 20. Apr 2017 08:39

AW: Formular neu createn?
 
Danke, ich habe im Prinzip auch immer die zweite Variante verwendet, außer die automatisch erzeugte Form in der dfm.

Da es scheinbar keine Nachteile gibt lass ich das auch so, hatte mich nur gewundert dass die Experten hier dem OP die erste Variante vorgeschlagen hatten.

Ciao
Stefan

Darlo 20. Apr 2017 08:41

AW: Formular neu createn?
 
Zitat:

Zitat von sko1 (Beitrag 1368348)
Ich klinke mich hier mal kurz ein:

wo liegt der wesentliche Unterschied, ob man zur Laufzeit ein Formular erzeugt mit

Delphi-Quellcode:
    Application.CreateForm(TFormMain, FormMain);

oder mit

    FormMain := TFormMain.Create(Nil);
Ciao
Stefan

Soweit ich das im Kopf habe wird mit dem Konstruktor in Variante #2 auch das OnCreate ausgelöst, jedoch ist im onCreate dann FormMain noch nicht bekannt sondern = nil -> crash wenn man statt self.xy FormMain.xy aufruft.

Jasocul 20. Apr 2017 08:45

AW: Formular neu createn?
 
Zitat:

Zitat von Darlo (Beitrag 1368352)
...crash wenn man statt self.xy FormMain.xy aufruft.

Richtig. Ein absolutes NoGo. Leider machen das trotzdem einige Programmierer.

hoika 20. Apr 2017 08:55

AW: Formular neu createn?
 
Hallo,
warum wird hier immer Form.Show benutzt *wunder ?

An den Thread-Ersteller:
Ist Form2 modal, d.h. erst wenn Form2 geschlossen wird, kann mit Form1 weitergearbeitet werden?

Maurooon 20. Apr 2017 14:38

AW: Formular neu createn?
 
Zitat:

Zitat von Jasocul (Beitrag 1368346)
Also, wenn ich Anfänger wäre, wäre ich möglicherweise verwirrter, als vorher.

Einige Dinge sind hier richtig aufgeschrieben worden, aber ich denke, die Zusammenhänge sind evtl. schwer verständlich.

Wenn du die Form schließt (Form2.Close) ist sie nur unsichtbar. Du bist nicht der Erste, den das irritiert.
Ein Form2.Show zeigt sie dann wieder an, wie sie zuletzt verlassen wurde. das ist genau das, was dir passiert ist.

Natürlich gilt das nur, wenn innerhalb der Form nicht irgendwelche Aktionen beim OnShow (oder anderen Ereignissen) durchgeführt werden.
Der Hinweis, dass im OnClose die Anweisung
Delphi-Quellcode:
Action := caFree;
gemacht werden kann, stimmt natürlich. Man sollte sich dann aber sicher sein, dass das wirklich so gewollt ist. Der nächste Aufruf
Delphi-Quellcode:
Form2.Show
geht sonst nämlich mit einer Zugriffsverletzung in die Hose.

Als Anfänger hast du sicher alle Forms zum Programmstart erzeugt (ist die Standard-Vorgabe).
Das heißt die Form2-Variable ist schon mit Inhalt gefüllt. Das solltest du ändern, damit du im Source einheitlich vorgehen kannst.
In den Projekt-Optionen (dort der Bereich Formulare) kannst du festlegen, welche Formen schon bei Programmstart erzeugt werden.
Es gibt auch andere Möglichkeiten, aber das lasse ich jetzt mal weg, um nicht noch mehr Verwirrung zu stiften (Auch wenn es schon einen Beitrag gibt, wo das gezeigt wird. Allerdings ohne Erläuterung).

Wenn du die Form2 mit ShowModal aufrufst, ist es relativ einfach. Da die Form2 dann den Focus nicht an Form1 zurückgibt, bis Form2 geschlossen wird, kannst du direkt danach ein
Delphi-Quellcode:
Form2.Free
machen.
Delphi-Quellcode:
Application.CreateForm(TForm2, Form2);
Form2.ShowModal;
Form2.Free;
Solltest du die Form2 mit einem
Delphi-Quellcode:
Show
aufrufen, solltest du der Empfehlung mit dem
Delphi-Quellcode:
Action := caFree;
nachkommen.

In dem von dir erwähnten Button der Form1 machst du ein
Delphi-Quellcode:
Form2.Show
. Das änderst du nun wie folgt:
Delphi-Quellcode:
Application.CreateForm(TForm2, Form2);
Form2.Show;
Da du im OnClose der Form2 ein
Delphi-Quellcode:
Action := caFree
eingebaut hast, sollte dann alles wie gewünscht funktionieren.
Diese Vorgehensweise würde übrigens auch mit ShowModal funktionieren.

An ein paar Kommentatoren:
  • Es ist mir neu, dass Application.CreateForm prüft, ob die Form schon existiert.
  • Eine Prüfung, ob die Form schon existiert ist nicht trivial (für einen Anfänger). Ja, ich weiß, wie es geht, will aber die Verwirrung in Grenzen halten.
  • Kotzt doch bitte für einen Anfänger nicht einfach Source hin, ohne ihn zu erläutern.

Es ist richtig, dass ich alle Formulare bei Programmstart erzeuge und dann immer nur noch "showe" und "hide" bzw sie zeige und verstecke. Und du hast recht, dass ich nun noch verwirrter bin als vorher. Ich bedanke mich aber an dieser Stelle für alle Antworten und vorallem für deine hier.

Um ein bisschen konkreter zu werden: es geht um ein Spiel. Mit dem Button auf der ersten Form starte ich das Spiel und wechsele zu einer anderen Form indem ich diese nur zeige nicht erzeuge (wurde sie ja schon). Nachdem man das Spiel jetzt gespielt hat, die Form schließt (bzw. versteckt) und dann aber nochmal das Spiel spielen will, findet man es vor wie am Ende. Das soll so aber nicht sein. Deshalb suche ich nach einer Möglichkeit, entweder die Form nach Schließung bzw. nach verstecken wieder zurückzusetzen oder über einen Neustart-Button die Form direkt neu zu erzeugen. Irgendwie muss das doch gehen :/
Hab auch schon viel gesucht im Internet aber man findet überall (wie auch hier jetzt) unterschiedliche Möglichkeiten und deshalb ist es schwer für mich als Anbfänger herauszufilter, was jetzt genau DAS ist was funktioniert und was das richtige ist für mich.

Wenn also jemand so lieb wäre und mir für meinen Fall eine funktionierende Lösungung nicht einfach nur zu schreiben sondern auch zu erklären (ich verwende sehr ungern Code den ich nicht verstehe - macht ja auch keinen Sinn), wäre ich demjenigen sehr verbunden. Am besten erklärt ihr mir ob und wenn ja was ich zu den uses hinzufügen muss, und in welche Form ich jetzt was in welches Event schreiben muss. Ich habe denke ich schon einiges verstanden, nur muss man die Unordnung in meinem Kopf noch ein kleinwenig ordnen.

Trotzdem schonmal wie gesagt ein herzliches Dankeschön an jeden Antworter. Ich weiß, dass es jeder nur gut meint. Habt trotzdem ein bisschen Verständnis, dass ich eben noch ein sogenannter Noob bin.

Liebe Grüße

Maurooon 20. Apr 2017 14:39

AW: Formular neu createn?
 
Zitat:

Zitat von hoika (Beitrag 1368354)
Hallo,
warum wird hier immer Form.Show benutzt *wunder ?

An den Thread-Ersteller:
Ist Form2 modal, d.h. erst wenn Form2 geschlossen wird, kann mit Form1 weitergearbeitet werden?

Ehm also wie gesagt wenn ich zurück zum Hauptmenü gehe mache ich nur
Code:
Form2.hide;
und wenn ich wieder spielen will
Code:
Form1.hide;
und
Code:
Form2.show;
was jetzt modal bedeutet weiß ich leider nicht :cry:

Maurooon 20. Apr 2017 14:47

AW: Formular neu createn?
 
Zitat:

Zitat von Jasocul (Beitrag 1368346)
Also, wenn ich Anfänger wäre, wäre ich möglicherweise verwirrter, als vorher.

Einige Dinge sind hier richtig aufgeschrieben worden, aber ich denke, die Zusammenhänge sind evtl. schwer verständlich.

Wenn du die Form schließt (Form2.Close) ist sie nur unsichtbar. Du bist nicht der Erste, den das irritiert.
Ein Form2.Show zeigt sie dann wieder an, wie sie zuletzt verlassen wurde. das ist genau das, was dir passiert ist.

Natürlich gilt das nur, wenn innerhalb der Form nicht irgendwelche Aktionen beim OnShow (oder anderen Ereignissen) durchgeführt werden.
Der Hinweis, dass im OnClose die Anweisung
Delphi-Quellcode:
Action := caFree;
gemacht werden kann, stimmt natürlich. Man sollte sich dann aber sicher sein, dass das wirklich so gewollt ist. Der nächste Aufruf
Delphi-Quellcode:
Form2.Show
geht sonst nämlich mit einer Zugriffsverletzung in die Hose.

Als Anfänger hast du sicher alle Forms zum Programmstart erzeugt (ist die Standard-Vorgabe).
Das heißt die Form2-Variable ist schon mit Inhalt gefüllt. Das solltest du ändern, damit du im Source einheitlich vorgehen kannst.
In den Projekt-Optionen (dort der Bereich Formulare) kannst du festlegen, welche Formen schon bei Programmstart erzeugt werden.
Es gibt auch andere Möglichkeiten, aber das lasse ich jetzt mal weg, um nicht noch mehr Verwirrung zu stiften (Auch wenn es schon einen Beitrag gibt, wo das gezeigt wird. Allerdings ohne Erläuterung).

Wenn du die Form2 mit ShowModal aufrufst, ist es relativ einfach. Da die Form2 dann den Focus nicht an Form1 zurückgibt, bis Form2 geschlossen wird, kannst du direkt danach ein
Delphi-Quellcode:
Form2.Free
machen.
Delphi-Quellcode:
Application.CreateForm(TForm2, Form2);
Form2.ShowModal;
Form2.Free;
Solltest du die Form2 mit einem
Delphi-Quellcode:
Show
aufrufen, solltest du der Empfehlung mit dem
Delphi-Quellcode:
Action := caFree;
nachkommen.

In dem von dir erwähnten Button der Form1 machst du ein
Delphi-Quellcode:
Form2.Show
. Das änderst du nun wie folgt:
Delphi-Quellcode:
Application.CreateForm(TForm2, Form2);
Form2.Show;
Da du im OnClose der Form2 ein
Delphi-Quellcode:
Action := caFree
eingebaut hast, sollte dann alles wie gewünscht funktionieren.
Diese Vorgehensweise würde übrigens auch mit ShowModal funktionieren.

An ein paar Kommentatoren:
  • Es ist mir neu, dass Application.CreateForm prüft, ob die Form schon existiert.
  • Eine Prüfung, ob die Form schon existiert ist nicht trivial (für einen Anfänger). Ja, ich weiß, wie es geht, will aber die Verwirrung in Grenzen halten.
  • Kotzt doch bitte für einen Anfänger nicht einfach Source hin, ohne ihn zu erläutern.

Nach dreimaligem durchlesen habe ich es glaube ich tatsächlich verstanden. In den Projektoptionen stelle ich ein, dass Form2 nicht von Anfang an erzeugt wird und schreibe dann in den Button auf der ersten Form nicht nur
Delphi-Quellcode:
Form2.show;
sondern
Delphi-Quellcode:
Application.CreateForm(TForm2, Form2);
Form2.Show;
und in den Code von der zweiten Form welche ich über eine Messagebox schließen kann folgendes:
Delphi-Quellcode:
if Application.MessageBox('Zurück zum Hauptmenü?', 'Meldung', MB_ICONWARNING or MB_OKCANCEL) = IDOK then begin
   Form2.Hide;
   Action := caFree; //ist Action eine Variable die ich vorher irgendwo initalisieren muss?
end;
Ich bitte um Bestätigung oder Anweisungen wie es wirklich geht:D

Olli73 20. Apr 2017 14:54

AW: Formular neu createn?
 
Zitat:

Zitat von Maurooon (Beitrag 1368454)
und in den Code von der zweiten Form welche ich über eine Messagebox schließen kann folgendes:
Delphi-Quellcode:
if Application.MessageBox('Zurück zum Hauptmenü?', 'Meldung', MB_ICONWARNING or MB_OKCANCEL) = IDOK then begin
   Form2.Hide;
   Action := caFree; //ist Action eine Variable die ich vorher irgendwo initalisieren muss?
end;
Ich bitte um Bestätigung oder Anweisungen wie es wirklich geht:D

Anstatt Hide, verwendest du Close. Und das Action := caFree kommt in das Ereignis onClose des Formulars (Action ist dort schon als var Parameter deklariert).

Maurooon 20. Apr 2017 15:04

AW: Formular neu createn?
 
Zitat:

Zitat von Olli73 (Beitrag 1368456)
Zitat:

Zitat von Maurooon (Beitrag 1368454)
und in den Code von der zweiten Form welche ich über eine Messagebox schließen kann folgendes:
Delphi-Quellcode:
if Application.MessageBox('Zurück zum Hauptmenü?', 'Meldung', MB_ICONWARNING or MB_OKCANCEL) = IDOK then begin
   Form2.Hide;
   Action := caFree; //ist Action eine Variable die ich vorher irgendwo initalisieren muss?
end;
Ich bitte um Bestätigung oder Anweisungen wie es wirklich geht:D

Anstatt Hide, verwendest du Close. Und das Action := caFree kommt in das Ereignis onClose des Formulars (Action ist dort schon als var Parameter deklariert).

ich bekomme folgenden Fehler:
Error: Incompatible type for arg no. 1: Got "TCloseAction", expected "TBasicAction"

Olli73 20. Apr 2017 15:10

AW: Formular neu createn?
 
Zitat:

Zitat von Maurooon (Beitrag 1368458)
ich bekomme folgenden Fehler:
Error: Incompatible type for arg no. 1: Got "TCloseAction", expected "TBasicAction"

Zeig mal deinen Code.

Maurooon 20. Apr 2017 15:13

AW: Formular neu createn?
 
Zitat:

Zitat von Olli73 (Beitrag 1368461)
Zitat:

Zitat von Maurooon (Beitrag 1368458)
ich bekomme folgenden Fehler:
Error: Incompatible type for arg no. 1: Got "TCloseAction", expected "TBasicAction"

Zeig mal deinen Code.

Code:
procedure TForm2.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  Action := caFree;
end;

Olli73 20. Apr 2017 15:16

AW: Formular neu createn?
 
Zitat:

Zitat von Maurooon (Beitrag 1368463)
Code:
procedure TForm2.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  CloseAction := caFree;
end;

Bei dir (deiner Delphi-Version) heißt es wohl CloseAction.

Maurooon 20. Apr 2017 15:54

AW: Formular neu createn?
 
Ich habe ein Problem.

Wenn ich die zweite Form schließe über die Messagebox wie bereits erwähnt, stürzt das Programm ab und zeigt mir einen Error in einer Zeile, in der ich eine simple if-Anweisung abfrage über die Position eines Images auf der Form. An dieser Zeile dürfte nichts falsch sein weil sie vorher ohne Probleme funktioniert hat. Nur seit ich die Form schließe und etwas in OnClose habe stürzt das Programm immer ab. Weiß jemand wieso?

Olli73 20. Apr 2017 16:11

AW: Formular neu createn?
 
Zitat:

Zitat von Maurooon (Beitrag 1368474)
Ich habe ein Problem.

Wenn ich die zweite Form schließe über die Messagebox wie bereits erwähnt, stürzt das Programm ab und zeigt mir einen Error in einer Zeile, in der ich eine simple if-Anweisung abfrage über die Position eines Images auf der Form. An dieser Zeile dürfte nichts falsch sein weil sie vorher ohne Probleme funktioniert hat. Nur seit ich die Form schließe und etwas in OnClose habe stürzt das Programm immer ab. Weiß jemand wieso?

Etwas Code und/oder eine genauere Beschreibung wäre hilfreich...

Maurooon 20. Apr 2017 16:12

AW: Formular neu createn?
 
Hab das Problem gelöst. Trotzdem danke!

a.def 20. Apr 2017 16:14

AW: Formular neu createn?
 
Zitat:

Wenn ich die zweite Form schließe (...) stürzt das Programm ab (...) in der ich eine simple if-Anweisung abfrage über die Position eines Images auf der Form.
Wahrscheinlich greifst du auf ein Objekt zu, auf welches nicht mehr zugegriffen werden kann.


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