AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

close in onShow

Ein Thema von mikelpahl · begonnen am 14. Jul 2006 · letzter Beitrag vom 17. Jul 2006
Antwort Antwort
mikelpahl

Registriert seit: 28. Jun 2004
Ort: Karlsruhe
12 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

close in onShow

  Alt 14. Jul 2006, 22:51
Beim Aufruf von Formularen möchte ich einige Dinge erledigen wie z.B. Datenquellen öffenen und diverse Sachen prüfen, die man für eine einwandfreie Funktion des Formulars benötigt.

Das erledige ich überlicherweise im Ereignis onShow des Forms, da die Formulare von verschiedenen Stellen aufgerufen werden. Wenn ich dabei dann feststelle, dass irgendwas nicht passt möchte ich das Formlar gleich im inshow wieder schliessen. Dazu verwende ich self.close;
Scheinbar führt der Aufruf von close im onShow aber nicht dazu, dass das Formular sich schliesst.
Ansonsten klappt das mit dem self.close ganz gut wenn nicht im onShow steht.

Um dem Problem näher zu kommen habe ich folgendes einfaches Beispiel getestet:
Auch hier bleibt das Form EinstellungForm offen:

Delphi-Quellcode:
procedure TEinstellungForm.FormShow(Sender: TObject);
begin
  exitok:=false;
  EinstellungForm.close;
end;
Beim Ergeigniss onActivate gehts auch nicht.
Michael Pahl
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: close in onShow

  Alt 14. Jul 2006, 22:55
ich würde das ganze anders lösen. Anstelle des Formular mit ".Show" anzuzeigen, bau einfach eine eigene funktion.
Delphi-Quellcode:
procedure TEinstellungForm.Execute;
begin
  if (Bedingung) then
    Show
  else
    exitok := false;
end;
somit sparst du dir zum Beispiel das schließen wenn etwas nicht klappt.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: close in onShow

  Alt 14. Jul 2006, 23:32
Moin Zusammen,

bzw. das Ganze nicht als Prozedure, sondern Funktion:

Delphi-Quellcode:
function TEinstellungsForm.Initialize : boolean;
begin
  Result := // Ergebnis der Initialisierung
end;


procedure TIrgendeineAndereForm.WasAuchImmer;
begin
  FEinstellungForm := EinstellungForm.Initialize;
  if FEinstellungForm then begin
    FEinstellungForm.Show;
  end else begin
    // Auf den Fehler reagieren
  end;
end;
Wobei FEinstellungForm ein Feld in der Klasse TIrgendeineAndereForm ist.
Dann hättest Du auch an anderen Stellen direkt zugriff darauf, ob das aufzurufende Formular im gewünschten Zusammenhang da ist.
Wenn Du statt eines boolschen Wertes, z.B., einen integer als Rückgabewert nimmst, könntest Du Dir auch einen Fehlercode zurückgeben und entscheiden warum die Initialsierung fehlgeschlagen ist, um das Problem anschliessend besser beheben zu können.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
mikelpahl

Registriert seit: 28. Jun 2004
Ort: Karlsruhe
12 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: close in onShow

  Alt 16. Jul 2006, 20:40
Vielen Dank für die Antworten. Diese Lösung hatte ich mir vorher auch schon überlegt.

Nur wollte ich sicher gehen ob man im onshow Ereignis nicht das Form schliessen kann. Schneinbar nicht, oder weiss da jemand definitiv. Es wäre die elegantere Methode gewesen.

Ich gebe bei der Lösung dann noch eine Schritt weiter und bastel für das Form eine Funktion start, die die Initialisierung übernimmt und bei Erfolg das Fromular modal aufruft. Leider muss man bei der Lösung immer dran denken das Form mit start aufzurufen und nich mit showmodal.

Delphi-Quellcode:
procedure TMainForm.BtnAdminClick(Sender: TObject);
begin
  Application.CreateForm(TEinstellungForm, EinstellungForm);
  EinstellungForm.Start;
  EinstellungForm.Release;
  EinstellungForm:=nil;
end;

Function TEinstellungForm.Start : boolean;
begin
  result:=true;
  exitok:=false;
  // bei fehler
  result:=false;
  if result then
    self.showmodal;
end;
Michael Pahl
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: close in onShow

  Alt 16. Jul 2006, 21:15
es geht definitiv nicht. Grund: Es wird erst das Ereignis ausgelöst und danach wird das Form angezeigt. Wenn du also im OnShow das Form schließt wird es trotzdem danach angezeigt weil das anzeigen eben erst nach dem auslösen des Events passiert.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.199 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: close in onShow

  Alt 16. Jul 2006, 21:31
Es geht über einen Trick indem du dir eine WM_CLOSE-Message schickst. Ist zwar keine sofortiges schließen aber ein schließen bevor der User irgendwas anderes machen kann.


PostMessage(self.Handle, WM_CLOSE, 0, 0);
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Lasse2002

Registriert seit: 29. Nov 2004
79 Beiträge
 
RAD-Studio 2009 Pro
 
#7

Re: close in onShow

  Alt 16. Jul 2006, 23:24
Wie wäre es mit PostQuitMessage?
  PostQuitMessage(0);
Lasse
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: close in onShow

  Alt 17. Jul 2006, 02:10
PsotQuitMessage beendet die Nachrichten Schliefe des Fensters. Ginge zwar auch, aber ich tendiere zu der Lösung von Christian.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:40 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