AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wie wird ein Fenster geschlossen?

Ein Thema von Marphy · begonnen am 12. Jul 2005 · letzter Beitrag vom 12. Jul 2005
Antwort Antwort
Seite 1 von 2  1 2      
Marphy

Registriert seit: 24. Feb 2005
162 Beiträge
 
Delphi 7 Professional
 
#1

Wie wird ein Fenster geschlossen?

  Alt 12. Jul 2005, 13:30
Hallo zusammen,
mein kleines Problem:
Wenn der User auf den X-Button in der Titelleiste meines Formulars klickt, soll irgendeine Methode aufgerufen werden (z.B. um eine bestimmte Aktion abzubrechen etc.). Wird das Fenster jedoch im Code über ein Close() geschlossen, soll o.g. nicht ausgeführt werden... Wie kann ich dieses Problem am Besten lösen? In VB gibt's im OnCloseQuery()-Event wenigstens noch einen entsprechenden Parameter... Habe ich vielleicht was übersehen?

Danke und liebe Grüße,
Marco
Marco
Wo ein Wille ist, ist auch ein Weg. Aber wo ein Weg ist, ist nicht unbedingt auch ein Wille...
  Mit Zitat antworten Zitat
Benutzerbild von Boombuler
Boombuler

Registriert seit: 14. Mär 2003
Ort: Osnabrück
244 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Wie wird ein Fenster geschlossen?

  Alt 12. Jul 2005, 13:34
Notfalls mach dir selber einen Parameter!

wenn du im Code Close aufrufen willst setzt du einfach eine Bool-Variable auf True und wenn im OnCloseQuery die Variable auf True steht wingst du das direkt durch...

Greetz
B00mbuler
"Look at you, Hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?"
SwapIt Highscore:
  Mit Zitat antworten Zitat
Kompon Ente
(Gast)

n/a Beiträge
 
#3

Re: Wie wird ein Fenster geschlossen?

  Alt 12. Jul 2005, 13:34
Zitat von Marphy:
In VB gibt's im OnCloseQuery()-Event wenigstens noch einen entsprechenden Parameter... Habe ich vielleicht was übersehen?
Jep, hast du!

Formular -> Ereignisse -> OnCloseQuery
  Mit Zitat antworten Zitat
Benutzerbild von fred.reichbier
fred.reichbier

Registriert seit: 27. Apr 2004
154 Beiträge
 
#4

Re: Wie wird ein Fenster geschlossen?

  Alt 12. Jul 2005, 13:39
Zitat von Kompon Ente:
Zitat von Marphy:
In VB gibt's im OnCloseQuery()-Event wenigstens noch einen entsprechenden Parameter... Habe ich vielleicht was übersehen?
Jep, hast du!

Formular -> Ereignisse -> OnCloseQuery
Ich glaube, OnCloseQuery wird aufgerufen wenn der user auf X drückt und wenn CLOSE aufgerufen wird
Friedrich Weber
  Mit Zitat antworten Zitat
Marphy

Registriert seit: 24. Feb 2005
162 Beiträge
 
Delphi 7 Professional
 
#5

Re: Wie wird ein Fenster geschlossen?

  Alt 12. Jul 2005, 13:40
Hallo hier beiden,
danke für die schnellen Antworten!

Zitat von Kompon Ente:
Zitat von Marphy:
In VB gibt's im OnCloseQuery()-Event wenigstens noch einen entsprechenden Parameter... Habe ich vielleicht was übersehen?
Jep, hast du!

Formular -> Ereignisse -> OnCloseQuery
Dass es in Delphi auch ein OnCloseQuery() gibt, weiß ich natürlich. Ein Parameter, der die "Art" angibt, wie ein Formular geschlossen wird, besitzt dieses Event in Delphi jedoch nicht (sehr wohl aber in VB). Das meinte ich

@boombuler:
Diese Lösung habe ich mir auch schon überlegt. Wäre aber allerdings nur eine Notlösung... Warum kann sich jeder selbst denken

@fred:
Genau!

Gruß, Marco
Marco
Wo ein Wille ist, ist auch ein Weg. Aber wo ein Weg ist, ist nicht unbedingt auch ein Wille...
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#6

Re: Wie wird ein Fenster geschlossen?

  Alt 12. Jul 2005, 14:09
Benutze im Code Delphi-Referenz durchsuchenApplication.Terminate, dadurch wird das OnClose-Event übersprungen.
Alternativ könntest du auch vor dem Aufruf von Close die OnClose-Property auf nil setzen.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Wie wird ein Fenster geschlossen?

  Alt 12. Jul 2005, 14:12
Zitat von Khabarakh:
Benutze im Code Delphi-Referenz durchsuchenApplication.Terminate, dadurch wird das OnClose-Event übersprungen.
Bist du sicher, dass das so eine gute Idee ist?
Zitat:
Alternativ könntest du auch vor dem Aufruf von Close die OnClose-Property auf nil setzen.
Auch das halte ich eher für eine 'von-hinten-durch-die-Brust-ins-Auge' Lösung.

Einfache eine Boolean Variable im private Abschnitt der Formklasse deklarieren und gut ist.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Marphy

Registriert seit: 24. Feb 2005
162 Beiträge
 
Delphi 7 Professional
 
#8

Re: Wie wird ein Fenster geschlossen?

  Alt 12. Jul 2005, 14:16
Hallo Sebastian,

Zitat von Khabarakh:
Benutze im Code Delphi-Referenz durchsuchenApplication.Terminate, dadurch wird das OnClose-Event übersprungen.
Alternativ könntest du auch vor dem Aufruf von Close die OnClose-Property auf nil setzen.
Ich will aber nicht meine ganze Anwendung, sondern nur ein Fenster schließen. Der andere Vorschlag ist auch nicht das Optimum, da (a) zu aufwendig, vor jedem Close() dat Dingens zu "nilen" und nachher wieder auf die entsprechende Methode zu setzen und (2) will ich vielleicht auch bei Close() im OnClose()-Event Code ausführen, nur eben anderen, als wenn der Nutzer die Form über den X-Button schließt.

Gruß, Marco

P.S.: Wie steht's eigentlich mit deinem TChart-Klone?
Marco
Wo ein Wille ist, ist auch ein Weg. Aber wo ein Weg ist, ist nicht unbedingt auch ein Wille...
  Mit Zitat antworten Zitat
Sidorion

Registriert seit: 23. Jun 2005
403 Beiträge
 
#9

Re: Wie wird ein Fenster geschlossen?

  Alt 12. Jul 2005, 14:30
Da kommst Du wohl um eine eigene methode nicht drumrum
close() ist nämlich nicht virtuell und wird imho auch beim Drücken auf das Kreuz gerufen.
eine Lösung wäre:
im Interface deiner Form schreibst du:
Delphi-Quellcode:
  private
   _bExecuteCloseAction: Boolean;
  ...
  public
  ...
  Constructor Create(Owner: TComponent); Override;
  function CloseQuery: Boolean; Override;
  Procedure Close(_bExecuteCloseAction: Boolean); ReIntroduce; Overload;
  ...
der Body der Funltion sieht dann so aus:
Delphi-Quellcode:
Procedure TMyForm.Close(_bExecuteCloseAction: Boolean);
Begin
  bExecuteCloseAction:=_bExecuteCloseAction;
  Close;
End;
Natürlich muss die Boolean variable im Constructor noch initialisiert werden:
Delphi-Quellcode:
Constructor TMyForm.Create(Owner: TComponent);
Begin
  Inherited;
  bExecuteCloseAction:=True;
End;
und im CloseQuery abgeprüft:
Delphi-Quellcode:
function TMyForm.CloseQuery: Boolean; Override;
Begin
  If bExecuteCloseQuery
  Then Begin
    //hier Deine schließfunktionalität
    Result:=?????;
  End Else Result:=True;
End;
Jetzt kannst du irgendwo im code schreiben
Delphi-Quellcode:
MyForm1.Close(false); //wenn nix ausgeführt werden soll
//oder
MyForm.Close;
//bzw
MyForm.Close(true); //wenn die funktionalität ausgeführt werden soll
Manchmal sehen Dinge, die wie Dinge aussehen wollen mehr wie Dinge aus, als Dinge
<Esmerelda Wetterwachs>
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Wie wird ein Fenster geschlossen?

  Alt 12. Jul 2005, 14:37
Also Jungs, was macht ihr da eigentlich? Das ist ja grausam.

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Button1Click(Sender: TObject);
  private
    bCloseButtonUsed: Boolean;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  bCloseButtonUsed := False;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if bCloseButtonUsed then
    CanClose := bCloseButtonUsed
  else
    CanClose := Messagebox(Handle, 'Schließen?', 'Fenster schließen', MB_YESNO) = ID_YES;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  bCloseButtonUsed := True;
  Close;
end;
Klickt man auf die Schaltfläche auf dem Formular, wird es sofort geschlossen, bei Klick auf das Kreuz in der Titelleiste kommt die Abfrage. So war es doch gewollt oder?
Michael
Ein Teil meines Codes würde euch verunsichern.
  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 07:45 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