![]() |
Feststellen ob zweites Fenster geöffnet ist
Hallo zusammen.
Ich hab mir zum ausprobieren ein kleines Programm mit zwei Formularen geschrieben. Im zweiten Formular ist ein TMemo und ein Button, womit ich das TMemo leeren kann. Im ersten Formular sind zwei Buttons, eins um etwas in das TMemo von Formular zwei zu schreiben und eins um das zweite Formular zu öffnen. Nun habe ich folgendes Problem. Ich habe im Form2 eine Variable "Open" als Boolean angelegt, diese Variable soll beim onCreate auf True und beim onDestroy auf False gesetzt werden, zusätzlich soll beim onDestroy das Memo geslöscht werden, was er aber nicht macht. Zudem habe ich im Form.1 eine If-Abfrage, das er nur was in das Memo von Form.2 schreiben soll, wenn die Variable "Open" auf True gesetzt ist, aber auch das missachtet er einfach und schreibt munter drauf los. Eigentlich sollte er nur Dinge ins Memo schreiben, wenn das Form2 auch wirklich offen ist. Die beiden Codes sehen wie folgt aus:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Unit2; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public Open : Boolean; { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin if Form2.Open = True then Form2.Memo1.Lines.Add('Eine Textzeile'); end; procedure TForm1.Button2Click(Sender: TObject); begin Form2.Show; end; end.
Delphi-Quellcode:
Kann mir vielleicht jemand verraten was ich falsch gemacht habe ? :oops:
unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) Memo1: TMemo; Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public Open : Boolean; { Public-Deklarationen } end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.FormCreate(Sender: TObject); begin Open := True; end; procedure TForm2.FormDestroy(Sender: TObject); begin Open := False; Memo1.Clear; end; procedure TForm2.Button1Click(Sender: TObject); begin Memo1.Clear; end; end. Ich arbeite leider noch nicht solange mit Delphi und hab schon versucht das Problem zu finden aber komm auf keine Lösung. Gibt es eine leichtere Möglichkeit zu sehen ob das Form2 geöffnet ist ? Gruß Micha |
Re: Feststellen ob zweites Fenster geöffnet ist
Zitat:
Die Idee an sich ist nicht schlecht, aber wie willst du auf ein Feld zugreifen, wenn die Klasse noch gar nicht existiert/schon zerstört ist :wink: ? Da du die Form aber sowieso nicht erstellst, sondern nur Show aufrufst, würde ich zu TForm.Visible raten :zwinker: . |
Re: Feststellen ob zweites Fenster geöffnet ist
Standarmässig werden beide Formulare beim Start von Delphi erzeugt. Dass kannst Du unter Projekt->Optionen festlegen. d.h. Form2 ist bereits erzeugt, es wird nur beim Start noch nicht angezeigt. Deine Variable "Open" ist also immer True.
Überleg dir mal eine Alternativlösung :-) |
Re: Feststellen ob zweites Fenster geöffnet ist
Hallo Khabarakh :)
Wenn ich
Delphi-Quellcode:
in
if Form2.Open = True then
Delphi-Quellcode:
ändere, schreibt er schonmal nurnoch wenn das Fenster wirklich offen ist :-D
if Form2.Visible then
Danke ---------------------- Hallo Jelly :) Da ist was wahres dran :wall: Das onCreate und die Variable kann ich dank Khabarakh kicken und das onDestroy tausch ich am besten gegen ein onClose, dann dürfte es gehen :gruebel: Danke für die schnellen Antworten :-D Gruß Micha |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:56 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-2025 by Thomas Breitkreuz