Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi ermitteln ob Fenster geöffnet wurde? (https://www.delphipraxis.net/36717-ermitteln-ob-fenster-geoeffnet-wurde.html)

smart 24. Dez 2004 08:59


ermitteln ob Fenster geöffnet wurde?
 
Wie kann man ermitteln, ob ein Fenster (Form) geöffnet wurde und darauf reagieren?

Helmi 24. Dez 2004 09:08

Re: ermitteln ob Fenster geöffnet wurde?
 
Hallo,

warum nicht so:

Code:
If Form1.Visible then
  begin
    //mach was
  end;
Wenns sichtbar ist, ist es doch geöffnet, oder?

mfg
Helmi

Harald 24. Dez 2004 09:10

Re: ermitteln ob Fenster geöffnet wurde?
 
Guten Morgen,

indem Du das Ereignis "OnShow" des Forms auswertest.

Gruß und schöne Tage
Harald

smart 24. Dez 2004 10:33

Re: ermitteln ob Fenster geöffnet wurde?
 
Vielen Dank für die Antworten.
Aber so einfach ist es wohl doch nicht. Wenn ich so abfrage, kommt eine Fehlemeldung, da das Fenster vileicht noch nicht auf ist. Mit OnShow kann ich erst reagieren wenn das Fenster bereits auf ist. Ich möchte von einer Hauptform aus ein weiteres Fenster öffnen und zuvor abfragen ob bereits ein Fenster auf ist und wenn ja ein anderes öffnen.

Helmi 24. Dez 2004 10:48

Re: ermitteln ob Fenster geöffnet wurde?
 
Hallo,

wieso machst du es nicht so:

Code:
If Form2.Visible then
 Form3.Show;
Oder versteh ich da was verkehrt?

mfg
Helmi

smart 24. Dez 2004 11:14

Re: ermitteln ob Fenster geöffnet wurde?
 
Wenn ich mit If Form2.Visible then Form3.Show; abfrage, kommt eine Fehlermeldung da die Form2 noch nicht offen ist.

Helmi 24. Dez 2004 11:30

Re: ermitteln ob Fenster geöffnet wurde?
 
was für eine Fehlermeldung?

Wann erzeugt du die Forms?

Neutral General 24. Dez 2004 12:21

Re: ermitteln ob Fenster geöffnet wurde?
 
Ich hab mir die Situation mal nachgebaut :

-3 Formulare.
-2 Buttons.

Wenn ich in den 1.Button das schreibe :

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender : TObject)
begin
  if Form2.Visible = true then
   Form3.Show;
end;
und in den 2.Button das :

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender : TObject)
begin
Form2.Show;
end;
dann passiert beim Klick auf Button1 erstmal nichts. Wenn ich dann auf den 2.Button Klicke erscheint Form2 und wenn ich dann wieder auf Button1 klicke dann erscheint Form3, und zwar ohen irgendwelche Fehler :gruebel:

[edit]Rechtschreibfehler korrigiert[/edit]

Helmi 24. Dez 2004 12:43

Re: ermitteln ob Fenster geöffnet wurde?
 
Ich hab die Vermutung dass er die Forms zur Laufzeit erzeugt
und dass er deshalb einen Fehler erhält

Da würde doch Assigned helfen oder?

smart 24. Dez 2004 13:20

Re: ermitteln ob Fenster geöffnet wurde?
 
Entschuldigung! Ich hatte vergessen zu schreiben, dass die Forms zur Laufzeit erzeugt werden! Ich habe zwar eine Lösung mit eine Variable, ist aber sehr umständlich und nicht so schön gelöst. Ich habe aber auch noch nicht so viel Erfahrung mit Delphi. Habe zuvor mit VB gearbeitet. Mir ist es sehr wichtig von Euch etwas zu lernen.

Helmi 24. Dez 2004 13:23

Re: ermitteln ob Fenster geöffnet wurde?
 
hallo smart,

lass mal etwas Code sprechen!

Da würden wir uns leichter tun.

mfg
Helmi

Helmi 24. Dez 2004 13:34

Re: ermitteln ob Fenster geöffnet wurde?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich hab dir mal ein Beispiel-Programm gemacht!

Wenn du auf Button1 drückst, dann wird die Form "TestForm" erst angezeigt wenn sich auch erzeugt wurde.
Button2 erzeugt eine Form.

mfg
Helmi

smart 24. Dez 2004 14:14

Re: ermitteln ob Fenster geöffnet wurde?
 
Hier habe ich mal den Code:

Code:
--------------------------------
program MeinProgramm;

uses
  Forms,
  Haupt in 'Haupt.pas' {Form1},
  Fenster1 in 'Fenster1.pas' {Form2},
  Fenster2 in 'Fenster2.pas' {Form3};

{$R *.RES}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
--------------------------------
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if Form2.Visible = true then
   Application.CreateForm(TForm2, Form2);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Application.CreateForm(TForm3, Form3);
end;

end.
Die Fenster müssen mit Application.CreateForm(TForm2, Form2); aufgerufen werden, da 2 Fenster zu gleich sichtbar sein sollen. Ähnlich wie meim Explorer, Auf der Hauptform soll beim klicken eines Buttons sich ein Fenster öffnen. Beim klicken auf einen zweiten Button soll sich ein weiters Fenster öffnen, aber erst wenn das erste schon offen ist.

Helmi 24. Dez 2004 14:26

Re: ermitteln ob Fenster geöffnet wurde?
 
Hallo,
probiers mal so:

Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
  If Assigned(Form3) then        //ich vermute du meinst Form3
    If Form3.Visible = true then
      Application.CreateForm(TForm2, Form2);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Application.CreateForm(TForm3, Form3);
end;
mfg
Helmi

smart 24. Dez 2004 15:02

Re: ermitteln ob Fenster geöffnet wurde?
 
Ahh... jetzt ja, es klappt. Also miss man mit Assigned immer abfragen wenn z.B. ein Fenster zur Laufzeit erzeugt wird.
Vielen Dank an Euch!

Helmi 24. Dez 2004 15:07

Re: ermitteln ob Fenster geöffnet wurde?
 
Zitat:

Zitat von smart
Vielen Dank an Euch!

Euch? - ich bin immer noch alleine :-)

Trotzdem gern geschehen :-)

mfg
Helmi


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