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
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.142 Beiträge
 
Delphi 10.3 Rio
 
#11

AW: Formular modal öffnen

  Alt 7. Sep 2015, 16:48
Man könnte auch auf die saudumme Idee kommen und dem blöden FMX modal beizubringen?
FMX ist nicht blöde... Sondern Cross-Plattform compatible...

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...
  Mit Zitat antworten Zitat
Sankt Rochus

Registriert seit: 30. Nov 2012
15 Beiträge
 
#12

AW: Formular modal öffnen

  Alt 8. Sep 2015, 11:18
Danke euren Beiträgen.

Zitat:
Man könnte auch auf die saudumme Idee kommen und dem blöden FMX modal beizubringen?
Das dachte ich mir auch schon. War mir dann aber wirklich zu dreckig diese Lösung
Ich weiß auch nicht, wie sich das von der Performance her verhalten würde.

Zitat:
"ShowModal" ist jedenfalls ein voll bescheuerter Name, denn eigentlich ist es doch ein xxx.Show(OnClose: TCloseEvent);
Meine Rede...

Zitat:
Um mit berühmten Worten zu Antworten : "Kaum macht man's richtig - schon funktioniert's"
Ja, wie denn?

Zitat:
Aber daher Funktioniert ein ShowModal unter Windows auch wie gewohnt...
Unter FMX? Wirklich? Dann sage mir bitte, wo bei mir der Fehler lag, oder wie du ein einfaches Fenster unter Nur-Windows-FMX auf und zu machen und anschließend freigeben würdest, ohne dass es mir danach an ganz anderen Stellen scheppert. Ich probiere das gerne aus.

Vielen Dank schon einmal.
  Mit Zitat antworten Zitat
Sankt Rochus

Registriert seit: 30. Nov 2012
15 Beiträge
 
#13

AW: Formular modal öffnen

  Alt 8. Sep 2015, 15:01
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

Delphi-Quellcode:
procedure TfMain.btn1Click(Sender: TObject);
var
  l_TestFormular: TTestFormular;
begin
  l_TestFormular := TTestFormular.Create(nil);
  l_TestFormular.ShowModal;
  l_TestFormular.Release;
end;
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?

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 Action := TCloseAction.caFree; ? Alles ausprobiert, doch ohne Erfolg.

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.

Geändert von Sankt Rochus ( 8. Sep 2015 um 15:33 Uhr)
  Mit Zitat antworten Zitat
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, 15: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
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.019 Beiträge
 
Delphi 12 Athens
 
#15

AW: Formular modal öffnen

  Alt 9. Sep 2015, 10:36
FMX ist nicht blöde... Sondern Cross-Plattform compatible...

Um mit berühmten Worten zu Antworten : "Kaum macht man's richtig - schon funktioniert's"
Doch?

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   

 

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 12:44 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