AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Zur Laufzeit erstellte Form nur einmal öffnen
Thema durchsuchen
Ansicht
Themen-Optionen

Zur Laufzeit erstellte Form nur einmal öffnen

Ein Thema von Matze · begonnen am 23. Aug 2003 · letzter Beitrag vom 23. Aug 2003
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: Zur Laufzeit erstellte Form nur einmal öffnen

  Alt 23. Aug 2003, 13:48
Okay, gehen wir mal von der Annahme aus, daß Du zwei Formulare hast. HauptForm: THauptForm1 ist Dein, klar, Hauptformular. OnOffForm: TOnOffForm ist jenes Formular, welches immer mal wieder zu sehen sein soll.

Wenn Du mal in die Units Deiner beiden Formulare schaust, dann sieht Du direkt vor der Anweisung implementation folgende Zeilen (entsprechend der Benennung der Formulare).

Delphi-Quellcode:
var
  Form1: TForm1;

implementation
Damit ist schon einmal eine Variable für Dein zweites Formular (im Beispiel: OnOffForm: TOnOffForm) definiert.

Jetzt aber ans Eingemachte

Es sind nur zwei Dinge, die Du jetzt tun musst

Der erste Teil

In Deinem Hauptformular empfehle ich Dir eine Methode zu erstellen, welche sich um die Darstellung des OnOffForm kümmert. In Grün der einzufüllende Code.

Code:
type
  THauptForm = class(TForm)
    ...
  private
    ...
  public
    ...
    [color=#008000]procedure ShowOnOffForm;[/color]
    ...
  end;

[color=#008000]procedure THauptForm.ShowOnOffForm;
begin
  if OnOffForm = nil then
    OnOffForm := TOnOffForm.Create(Application);
  OnOffForm.Show;
  OnOffForm.BringToFront;
end;[/color]
Diese Methode (ShowOnOffForm) rufst Du immer auf, wenn Du das OnOffForm anzeigen möchtest.

Der zweite Teil

Im Design-Editor gehst Du jetzt zum zweiten Form, dem OnOffForm und wählst für dieses im Objekt Inspektor das Ereignis OnClose aus.

Im Code Editor musst Du jetzt nur ein oder zwei Zeilen - je nach Aufgabe eingeben. In Blau siehst Du Option 1 (Daten werden wieder angezeigt, wenn das Form das nächste Mal aufgerufen wird. In Rot Option 2, das Form kommt im Originalzustand wieder zurück.

Code:
procedure TOnOffForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  [color=#0000ff]// Das Form nur verstecken (Daten bleiben erhalten)
  Action := caHide;[/color]

  [color=#e30000]// Das Form zerstören (Daten bleiben nicht erhalten)
  Action := caFree;
  OnOffForm := nil;[/color]
end;
So, das waren Theorie und Praxis

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Zur Laufzeit erstellte Form nur einmal öffnen

  Alt 23. Aug 2003, 13:52
Vieln Dank sakura für deine Mühe!

Ich werde jetzt mal mein Glück damit versuchen.

Gruß Matze
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Zur Laufzeit erstellte Form nur einmal öffnen

  Alt 23. Aug 2003, 14:34
@Sakura: Im Design-Editor kann ich nicht auf meine zur Laufzeit erstellten Form klicken. Ist ja eigentlich logisch.

Ich möchte dann, dass die zur Laufzeit erstellte Form nur einmal geöffnet werden kann (siehe Bixi400). Jedoch sollte WinOpen wieder auf false gesetzt werden, sobald ich die zur Laufzeit erzeugte Form schließe.

Ich hoffe, ich hab's verständlich erklärt.

[Edit]Sorry! Hat sich erledigt Sakura, nochmal Danke.[/Edit]

Gruß Matze
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#14

Re: Zur Laufzeit erstellte Form nur einmal öffnen

  Alt 23. Aug 2003, 14:38
Okay. Den Teil habe ich wohl übersehen Dann ändere Dein Hauptform wie folgt:

Delphi-Quellcode:
type
  THauptForm = class(TForm)
    ...
  private
    FOnOffForm: TForm;
    procedure OnOffFormClose(Sender: TObject; var Action: TCloseAction);
    ...
  public
    ...
    procedure ShowOnOffForm;
    ...
  end;

procedure THauptForm.ShowOnOffForm;
begin
  if FOnOffForm = nil then
  begin
    FOnOffForm := TOnOffForm.Create(Application);
    FOnOffForm.OnClose := OnOffFormClose;
  end;
  FOnOffForm.Show;
  FOnOffForm.BringToFront;
end;

procedure THauptForm.OnOffFormClose(Sender: TObject; var Action: TCloseAction);
begin
  // Das Form nur verstecken (Daten bleiben erhalten)
  Action := caHide;

  // BEZIEHUNGSWEISE

  // Das Form zerstören (Daten bleiben nicht erhalten)
  Action := caFree;
  FOnOffForm := nil;
end;
.....
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: Zur Laufzeit erstellte Form nur einmal öffnen

  Alt 23. Aug 2003, 14:39
Zitat von Matze:
[Edit]Sorry! Hat sich erledigt Sakura, nochmal Danke.[/Edit]
Jetzt wo ich fertig bin Egal, vielleicht hilft es mal jemand anders

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: Zur Laufzeit erstellte Form nur einmal öffnen

  Alt 23. Aug 2003, 14:42
@Sakura: Ich meinte, ich habe es mit deinem Code doch geschafft.
Ich habe nur vergessen gehabt, ShowOnOffForm aufzurufen.

Ich nehme deinen Code, du hast es also nicht umsonst gemacht. *dankt sakura*

Gruß matze
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#17

Re: Zur Laufzeit erstellte Form nur einmal öffnen

  Alt 23. Aug 2003, 14:45
Zitat von Matze:
Ich habe nur vergessen gehabt, ShowOnOffForm aufzurufen.
Der ist gut.

Freut mich, dass es funktioniert hat für Dich

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#18

Re: Zur Laufzeit erstellte Form nur einmal öffnen

  Alt 23. Aug 2003, 14:48
Aber wie bekomme ich das hier hin?:

Zitat:
procedure TOnOffForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// Das Form nur verstecken (Daten bleiben erhalten)
Action := caHide;

// Das Form zerstören (Daten bleiben nicht erhalten)
Action := caFree;
OnOffForm := nil;
end;
Ich kann die zur Laufzeit erzeugte Form ja nicht anklicken.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#19

Re: Zur Laufzeit erstellte Form nur einmal öffnen

  Alt 23. Aug 2003, 14:50
Zitat von Matze:
Ich kann die zur Laufzeit erzeugte Form ja nicht anklicken.
Mal doof frag: Wieso denn nicht

Ansonsten einfach

OnOffForm.Close; aufrufen.

.....
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#20

Re: Zur Laufzeit erstellte Form nur einmal öffnen

  Alt 23. Aug 2003, 14:53
Ich meine, wie soll ich denn in Delphi diese Form anklicken und dann im OI bei Ereignisse was einstellen??
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 09:07 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