![]() |
AW: Formular modal öffnen
Zitat:
Um mit berühmten Worten zu Antworten : "Kaum macht man's richtig - schon funktioniert's" Ein Repeat Processmessage Construct geht natürlich rein technisch gesehen... Aber wenn man so etwas braucht ist es einfach ein Designfehler! Vielleicht nicht unter Windows, aber auf jeden Fall um iOS/Android Umfeld. Aber daher Funktioniert ein ShowModal unter Windows auch wie gewohnt... |
AW: Formular modal öffnen
Danke euren Beiträgen.
Zitat:
Ich weiß auch nicht, wie sich das von der Performance her verhalten würde. Zitat:
Zitat:
Zitat:
Vielen Dank schon einmal. |
AW: Formular modal öffnen
Ich habe das mit dem reinen ShowModal() ohne Parameter jetzt nochmals ausprobiert. Dazu habe ich auf mein Hauptformular einen Button btn1 gelegt das ein Testformular öffnet. Ich bekomme es nicht hin :cry:
Delphi-Quellcode:
Das Testformular selbst enthält wirklich NUR einen Label mit dem Text "Dies ist ein Testformular" und einen Button, bei dessen Klick Close() aufgerufen wird. Das Fenster öffnet auch und schließt sich wieder, doch dann bekomme ich plötzlich herbe Style-Fehler in meinem Hauptformular. Kann das so schwer sein?
procedure TfMain.btn1Click(Sender: TObject);
var l_TestFormular: TTestFormular; begin l_TestFormular := TTestFormular.Create(nil); l_TestFormular.ShowModal; l_TestFormular.Release; end; Muss ich vlt. einen Owner mit angeben? Das war so weit ich weiß in der VCL nicht nötig. Muss ich etwa statt Release Free oder FreeAndNil verwenden oder gar das Formular an dieser Stelle gar nicht freigeben, sondern stattdessen im FormClose-Event ein
Delphi-Quellcode:
? Alles ausprobiert, doch ohne Erfolg.
Action := TCloseAction.caFree;
Edit: Okay, ich habe nun einen sicheren Verdacht. Wir verwenden auf dem Hauptformular ein StyleBook als Non-visible-Component, die ich bisher immer im Designer auf neue Formulare kopiert habe. Jedoch scheinen die Kopien keine echten Kopien zu sein, sondern Referenzen, sodass beim Free das Stylebook mit freigegeben wird. Wie mache ich so etwas denn richtig? Es mag sein, dass das Stylebook-Copy-Past nicht der beste Weg ist. |
AW: Formular modal öffnen
Also es gibt im Prinzip erst einmal kein Problem mit dem ShowModal:
Delphi-Quellcode:
und
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.
Delphi-Quellcode:
Sowohl Variante1 als auch Variante2 funktionieren erstmal ohne Auffälligkeiten.
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. Aber bei Variante2 (unter Windows/OSX)
|
AW: Formular modal öffnen
Zitat:
FMX hat einen Befehl der ShowModal heißt, aber nicht Modal ist. Entweder umbenennen/weglassen oder irgendwie dafür sorgen, daß er "wie" modal arbeitet, also auf das Schließen des Dialogs wartet. Somit stimmt der Satz ... würde jemand (Emba) es richtig machen, dann würde es bestimmt auch funktionieren. :zwinker: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:16 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 by Thomas Breitkreuz