AGB  ·  Datenschutz  ·  Impressum  







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

Formular modal öffnen

Offene Frage von "himitsu"
Ein Thema von Sankt Rochus · begonnen am 4. Sep 2015 · letzter Beitrag vom 9. Sep 2015
 
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#14

AW: Formular modal öffnen

  Alt 8. Sep 2015, 14:28
Also es gibt im Prinzip erst einmal kein Problem mit dem ShowModal:
Delphi-Quellcode:
unit Dialogs.FooDialog;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.Controls.Presentation, FMX.StdCtrls;

type
  TFooDialog = class( TForm )
    Button1: TButton; { ModalResult := mrOK; }
    procedure FormDestroy( Sender: TObject );
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  FooDialog: TFooDialog;

implementation

{$R *.fmx}

procedure TFooDialog.FormDestroy( Sender: TObject );
begin
  ShowMessage( 'Going to Nirwana' );
end;

end.
und
Delphi-Quellcode:
unit Forms.MainForm;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.Controls.Presentation, FMX.StdCtrls;

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

var
  MainForm: TMainForm;

implementation

{$R *.fmx}

uses
  Dialogs.FooDialog;

{Variante 1}
procedure TMainForm.Button1Click( Sender: TObject );
var
  LDialog: TFooDialog;
begin
  LDialog := TFooDialog.Create( nil );
  try
    LDialog.ShowModal;
  finally
    LDialog.DisposeOf;
  end;
end;

{Variante 2}
procedure TMainForm.Button2Click( Sender: TObject );
var
  LOuter, LInner: TFooDialog;
begin
  LOuter := TFooDialog.Create( nil );
  try
    LInner := LOuter;
    LInner.ShowModal(
      procedure( r: TModalResult )
      begin
        LInner.Release;
      end );
    LOuter := nil;
  finally
    LOuter.DisposeOf;
  end;
end;

end.
Sowohl Variante1 als auch Variante2 funktionieren erstmal ohne Auffälligkeiten.

Aber bei Variante2 (unter Windows/OSX)
  • ist die Form nicht wirklich modal! Man kann zwischen den Formularen hin und her wechseln
  • ruft ein simples Close nicht die ResultProc auf
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  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 15:38 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