AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Form soll sich selbst schließen und erneut anzeigen

Ein Thema von BlueStarHH · begonnen am 13. Nov 2016 · letzter Beitrag vom 14. Nov 2016
 
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
802 Beiträge
 
Delphi 11 Alexandria
 
#1

Form soll sich selbst schließen und erneut anzeigen

  Alt 13. Nov 2016, 13:11
Hallo,

ich habe ein Hauptformular und ein zweites Formular (SecondDlg). Wenn auf einem Schalter im Hauptformular gelickt werden soll, soll SecondDlg modal angezeigt werden. Im SecondDlg gibt es eine Schalter, der den SecondDlg schließen soll und eine neue Instanz vom SecondDlg anzeigen soll. Dabei habe ich das Problem, dass so gut wie immer (aber nicht immer) zwei Instanzen vom SecondDlg offen bleiben, wenn der Schalter im SecondDlg geklickt wird. Es soll aber immer nur die neue Instanz sichtbar sein. So sieht der Code aus:

Delphi-Quellcode:
unit Main;

interface

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

const
  SX_SHOW_EXERCISE = WM_USER + 1;

type
  TMainDlg = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    procedure ShowExercise;

  protected
    procedure SXSHOWEXERCISE(var Message: TMessage); message SX_SHOW_EXERCISE;
  public
    { Public-Deklarationen }
  end;

var
  MainDlg: TMainDlg;

implementation

uses Second;
{$R *.dfm}

procedure TMainDlg.SXSHOWEXERCISE(var Message: TMessage);
begin
  // hier Message.wParam behandeln

  ShowExercise;
end;

procedure TMainDlg.Button1Click(Sender: TObject);
begin
  ShowExercise;
end;

procedure TMainDlg.ShowExercise;
var
  ASecondDlg: TSecondDlg;
begin

  Application.CreateForm(TSecondDlg, ASecondDlg);
  try
    ASecondDlg.Execute;
  finally
    ASecondDlg.Release;
  end;
end;

end.
Delphi-Quellcode:
unit Second;

interface

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

type
  TSecondDlg = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    procedure Execute;
  end;

//var
// SecondDlg: TSecondDlg;

implementation

uses Main;
{$R *.dfm}

procedure TSecondDlg.Button1Click(Sender: TObject);
begin
  Close; //Hier sollte das Form geschlossen werden. Oft bleibt es aber offen und die neue Instanz, die durch die nächste Zeile geöffnet wird wird zusätzlich angezeigt.
  PostMessage(MainDlg.Handle, SX_SHOW_EXERCISE, 0, 0);
end;

procedure TSecondDlg.Execute;
begin
  caption := FormatDateTime('HHNNSS', Now);

  // hier Browser erzeugen und HTML-Seite laden

  ShowModal;
end;

end.

Geändert von TBx (13. Nov 2016 um 14:10 Uhr) Grund: Code-Tags durch Delphi-Tags ersetzt
  Mit Zitat antworten Zitat
 


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 10:28 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