AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Lazarus (IDE) Wie ShowModal Form aus dem HauptForm schließen?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie ShowModal Form aus dem HauptForm schließen?

Ein Thema von AlexII · begonnen am 22. Mai 2015 · letzter Beitrag vom 22. Mai 2015
Antwort Antwort
Seite 1 von 2  1 2      
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#1

Wie ShowModal Form aus dem HauptForm schließen?

  Alt 22. Mai 2015, 18:29
Hallo,

ich versuche wie folgt ein modales Fenster zu schließen:

Delphi-Quellcode:
procedure TMainForm.SetAppOnline();
begin
  OfflineForm.Visible := False;
  //oder
  OfflineForm.ModalResult := mrCancel;
  //oder
  OfflineForm.ModalResult := mrOK;
end;
bekomme aber immer diese Fehlermeldung, siehe Anhang. Wie bekomme ich das modale Fenster aus dem Hauptfenster zu?

Danke!
Angehängte Grafiken
Dateityp: png Screenshot.png (26,7 KB, 52x aufgerufen)
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Wie ShowModal Form aus dem HauptForm schließen?

  Alt 22. Mai 2015, 19:08
Wo kommt der Fehler, bei allem zusammen, oder wirklich nur bei einem der Oder?

OfflineForm.ModalResult := irgendwas_ungleich_mrNone; oder OfflineForm.Close; sind die offiziellen Wege, eine modale Form zu schließen. (Close setzt intern auch nur das ModalResult auf mrAbort oder vermutlich eher auf mrCancel ... weiß grade nicht genau was)


* Du hast die QuellCodes der FCL rumliegen
* Du hast den Fehlertext
* Du könntest eventuell auf die Idee kommen und da drin z.B. nach dem Fehlertext (oder Teilen davon) zu suchen, nachzuschauen warum Dieses angezeigt wird und schon weißt du auch das Warum.
(oder Pause drücken und hoffen man erkennt im Stacktrace wo der Aufruf her kommt und so dort hinzufinden, bzw. man debuggt sich vor dem Knall zu der Stelle)

PS: Auch Lazarus wird bestimmt Strg+C kennen, mit dem man Dialoge als "Text" kopieren kann. (meist hört man ein liebevolles Beep, als Bestätigung)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (22. Mai 2015 um 19:16 Uhr)
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Wie ShowModal Form aus dem HauptForm schließen?

  Alt 22. Mai 2015, 19:20
Alle oben genannten Versuche führen zu dem Fehler, OfflineForm.Close; auch.
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#4

AW: Wie ShowModal Form aus dem HauptForm schließen?

  Alt 22. Mai 2015, 19:29
Ich bin mir nicht sicher, ob du verstehst, was ein modales Fenster ist, und wie Perlsau es erklärt hat. Versuchen wir es mal mit einem (zum Teil sinnfreien) Beispiel:
Delphi-Quellcode:
function TForm1.PluginShowForm(const AhParent: HWND): Boolean;
var fmStartupProperties: TfmStartupProperties;
begin
    fmStartupProperties:= TfmStartupProperties.Create(nil, AhParent);
    try
      fmStartupProperties.ShowModal;
      ShowMessage('blub');
    finally
      fmStartupProperties.Free;
    end;
end;
Wann taucht deiner Meinung nach die Meldung 'blub' auf? Wenn du das ggf. mal ausprobierst, wird dir vielleicht klar, wie der Programmablauf ist und warum eine Zuweisung an ModalResult in diesem Kontext - im Code oben innerhalb der Klasse TForm1 - keinerlei Sinn hat, innerhalb der Klasse TfmStartupProperties (=blockierendes Kindfenster von TForm1) hingegen schon.

MfG Dalai
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: Wie ShowModal Form aus dem HauptForm schließen?

  Alt 22. Mai 2015, 19:36
Ich bin mir nicht sicher, ob du verstehst, was ein modales Fenster ist, und wie Perlsau es erklärt hat.
Ich glaube fast, er hat das gar nicht gelesen ... da gibt man sich mal so richtig Mühe und versucht das ordentlich zu erklären ...

Egal, ich guck jetzt meinen Film weiter, das ist entspannender

Natürlich kann man eine modale Form auch von ausserhalb schliessen, dazu benötigt man aber z.B. einen Timer.
Aber wozu soll das gut sein? Vielleicht: "Wenn du, Anwender, jetzt nicht innerhalb von 10 Sekunden einen Button drückst, dann nehm ich dir den Dialog wieder weg und du kannst gucken, wo du bleibst!"

Die Fehlermeldung sagt aber aus, dass schon der Aufruf von OfflineForm.ShowModal fehlschlägt und somit dieser bisher gezeigte Code für den Fehler nicht aber auch absolut gar nicht verantwortlich ist.
Er ruft doch gar nicht ShowModal auf, sondern versucht, ModalResult on OfflineForm von der MainForm aus aufzurufen. Also wenn ich jetzt auf die mainform einen Button setze und dort den Code von AlexII reinkopiere, das Programm starte und diesen Button klicke, passiert da in allen drei Fällen absolut gar nix.
Delphi-Quellcode:
procedure TFormMain.Button1Click(Sender: TObject);
begin
  //OfflineForm.Visible := False;
  //OfflineForm.ModalResult := mrCancel;
  OfflineForm.ModalResult := mrOK;
end;
Ist OfflineForm modal sichtbar, komme ich an diesen Button auf dem Mainform ja gar nicht ran. Ein OnIdle hab ich nicht gefunden, und einen Timer laufen zu lassen, ist mir jetzt zu viel Streß.

Geändert von Perlsau (22. Mai 2015 um 20:18 Uhr)
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Wie ShowModal Form aus dem HauptForm schließen?

  Alt 22. Mai 2015, 20:12
Ich bin mir nicht sicher, ob du verstehst, was ein modales Fenster ist, und wie Perlsau es erklärt hat.
Ich glaube fast, er hat das gar nicht gelesen ... da gibt man sich mal so richtig Mühe und versucht das ordentlich zu erklären ...
Ne, ich hatte es noch nicht gelesen... aber danke, ist besser erklärt als in der Hilfe!
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Wie ShowModal Form aus dem HauptForm schließen?

  Alt 22. Mai 2015, 19:37
OfflineForm wird auch wirklich modal angezeigt?

Um das zu prüfen, was die Perlsau meint:
Eine Methode in die Form, da drin Close aufrufen und dann rufst du diese Methode auf.


Ich bin was essen, hab keine Lust mir die LCL runterzuladen und das zu machen, was der TE auch selber machen kann.
> nachsehen, warum es diese Meldung gibt (da findet man garantiert ein paar IFs und die sagen Einem, was sie nicht mögen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (22. Mai 2015 um 19:40 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
 
#8

AW: Wie ShowModal Form aus dem HauptForm schließen?

  Alt 22. Mai 2015, 19:44
Nur um mal mit dieser Mär mit den modalen Forms, die sich angeblich nicht von aussen schliessen lassen, aufzuräumen habe ich hier ein Beispiel-Code
Delphi-Quellcode:
unit Form.Main;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls,

  Form.Dialog;

type
  TMainForm = class( TForm )
    Button1: TButton;
    Timer1: TTimer; { Enabled = False, Interval = 5000 }
    procedure Timer1Timer( Sender: TObject );
    procedure Button1Click( Sender: TObject );
  private
    FDialogForm: TDialogForm;
  public
    { Public-Deklarationen }
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

procedure TMainForm.Button1Click( Sender: TObject );
begin
  FDialogForm := TDialogForm.Create( nil );
  try
    Timer1.Enabled := True;
    FDialogForm.ShowModal;
    Timer1.Enabled := False;
  finally
    FreeAndNil( FDialogForm );
  end;
end;

procedure TMainForm.Timer1Timer( Sender: TObject );
begin
  if Assigned( FDialogForm ) then
    FDialogForm.Close;
end;

end.
Die DialogForm ist ein simple Form.
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)

Geändert von Sir Rufo (22. Mai 2015 um 19:47 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
 
#9

AW: Wie ShowModal Form aus dem HauptForm schließen?

  Alt 22. Mai 2015, 19:58
Aber wir driften vom Thema ab, denn die Fehlermeldung kommt nicht vom Versuch die Form zu schliessen, sondern vom Versuch die modal anzuzeigen.

Die Fehlermeldung ist doch sehr eindeutig:
Zitat:
TCustomForm.ShowModal for OfflineForm:TOfflineForm impossible, because already visible (hint for designer forms: set Visible property to false ) already modal.)
und da gibt es auch noch einen Tip, was man kontrollieren, bzw. gewährleisten sollte (Im OI OfflineForm.Visible = False setzen)
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 Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#10

AW: Wie ShowModal Form aus dem HauptForm schließen?

  Alt 22. Mai 2015, 20:00
Nur um mal mit dieser Mär mit den modalen Forms, die sich angeblich nicht von aussen schliessen lassen, aufzuräumen habe ich hier ein Beispiel-Code
Ich glaube, es bezweifelt niemand, dass es geht, wenn man nur ein bisschen (mehr) Aufwand treibt. Aber ich denke auch, dass das dem Sinn einer modalen Form zuwiderläuft.

Aber wie himitsu schon im anderen Thread schrieb: Hier kann man nur mutmaßen, weil zu wenige Infos vorhanden sind, und der Code keine wirkliche Aussagekraft hat.

MfG Dalai
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:08 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