AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein MDI Client form visible=false bleibt nicht
Thema durchsuchen
Ansicht
Themen-Optionen

MDI Client form visible=false bleibt nicht

Ein Thema von Kostas · begonnen am 27. Mär 2013 · letzter Beitrag vom 28. Mär 2013
Antwort Antwort
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.095 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

MDI Client form visible=false bleibt nicht

  Alt 27. Mär 2013, 14:55
Hallo Zusammen,

sorry für den blöden Titel.
Es ist etwa kompliziert das Problem zu beschreiben und muss deshalb leider etwas ausholen.

[Edit] Das Problem vorab: Wenn ein MDI child Form das Property visible=false gesetzt wird, bleibt false nur solange das Form
nicht erneu geöffnet wird. Wird es neu geöffnet, ist visible wieder auf true.



Ich habe eine MDI Anwendung mit XE2 geschrieben. Mir ist bekannt dass MDI Client forms visible=true sind. Ich habe einen Fall indem ich die gleiche Form als MDI child oder als modale form benötige. Als Beispiel das Adressenform. Unter Stammdaten öffne ich die Form als MDI child. Wenn ich jedoch eine Rechnung erstelle und möchte auf das Adressenform zugreifen um eine Adresse auszuwählen bzw. eine neue anlegen und Übernehmen, wir die AdressenForm modal geöffnet. Die gleiche Form also einmal MDI und einmal als modales Fenster.
Dieses Scenario funktionierte mit Delphi5 einwandfrei.
Unter Delphi XE2 nicht mehr so einfach. Das Problem ist, wenn das AdressenForm.visible=true oder false ist, kann ich die Form als MDI child öffnen. Wenn ich eine neue Instanz erzeugen und das Form direkt nach dem erzeugen auf visible=false Setze, wird das Form nach dem erzeugen erzeugt, angezeigt, wieder unsichbar gemacht und durch ShowModal erneut angezeigt. Somit flackert die Form. Ich muss das Form auf visible=false setzen damit ShowModal funktioniert. ShowModal erwartet visible=false.
Wenn ich die Form über den Inspektor auf visible=False setze und das Form so speichere funktioniert alles einwandfrei. Sobald ich das Form in Delphi öffne, wird das Property automatisch auf visible=True gesetzt. Wenn ich es bemerke, ist alles gut. Denke ich nicht daran, und stelle visible=false flackert die Form beim Öffnen.

Das könnte ein Delphi Bug oder sogar auch so gewollt sein.
Wie gesagt, unter Delphi5 ist dieses Verhalten nicht zu beobachten.

Kennt jemand dieses Problem?

Gruß Kostas

Geändert von Kostas (27. Mär 2013 um 16:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: MDI Client form visible=false bleibt nicht

  Alt 27. Mär 2013, 16:28
Delphi-Quellcode:
unit MDI_Auch_Fuer_Modal;

interface

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

type
  TMDIForm_Auch_Fuer_Modal = class(TForm)
    Button1: TButton;
  private
    { Private-Deklarationen }
  protected
    procedure DoCreate; override;
  public
    { Public-Deklarationen }
    Constructor Create(Aowner:TComponent;aFormStyle:TFormStyle);overload;
  end;

var
  MDIForm_Auch_Fuer_Modal: TMDIForm_Auch_Fuer_Modal;

implementation

{$R *.dfm}

{ TForm2 }

constructor TMDIForm_Auch_Fuer_Modal.Create(Aowner: TComponent; aFormStyle: TFormStyle);
begin
   inherited Create(Aowner);
   Formstyle := aFormStyle;
end;

procedure TMDIForm_Auch_Fuer_Modal.DoCreate;
begin
  inherited;
  if Formstyle <> fsMDIChild then visible := false;
end;


{
Aufrufbeispiele

procedure TForm1.ShowAsMDIClick(Sender: TObject);
begin
  TMDIForm_Auch_Fuer_Modal.Create(self);
end;

procedure TForm1.ShowModalClick(Sender: TObject);
begin
  with  TMDIForm_Auch_Fuer_Modal.Create(self,fsNormal) do
    begin
      Showmodal;
      Free;
    end;
end;


}


end.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.095 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: MDI Client form visible=false bleibt nicht

  Alt 27. Mär 2013, 16:36
Besten Dank Thomas, werde ich gleich mal ausprobieren.

vom Gefühl her würde ich vermuten dass bei inherited Create(Aowner); das Form wieder erzeugt und gleich angezeigt wird.
Ich bin gespannt.

Gruß Kostas.
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.095 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: MDI Client form visible=false bleibt nicht

  Alt 28. Mär 2013, 10:10
Hallo Thomas,

ich habe deine Variante eingebaut mit dem überscheiben des Constructors weil es besser ist als meine Variante.
Das Flackern ist jedoch geblieben. Damit meine ich folgendes:
Ich setze ein Brakpoint bei FormCreate und einen unter FormShow. Wenn das Form mit fsNormal erzeugt wird,
wird aufgerufen: FormCreate, FormShow, FormShow. Setze ich beim Form das Property Visible:=false
wird aufgerufen: FormCreate, FormShow. Aktuell ist es nur ein Schönheitsfehler. Es kann jedoch zum Problem werden wenn
ich in FormShow Anweisungen stehen habe. Hast du eine Idee wie ich das in den Griff bekomme?

[EDIT] HALT hat sich erledigt. So gehts:
Delphi-Quellcode:
procedure TfrmBaseChild.DoCreate;
begin
  if Formstyle <> fsMDIChild
  then visible := false
  else inherited;

end;
Setzt ist es perfekt. Besten Dank Thomas.

Gruß Kostas

Geändert von Kostas (28. Mär 2013 um 10:15 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:42 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