Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Returning from TForm1.Close() event

Posted on 2001-07-24
10
Medium Priority
?
268 Views
Last Modified: 2010-04-04
Hello.  Just a problem I ran across while programming =>
How do I return from a TForm1.Close() event.

For example =>
when a user presses the window's X, then the program tells him the document has not been saved, and he presses cancel

Or =>
when a user decides to save the file, but then in the SaveDialog presses cancel, thereby indicating that he wants to return to the program

When a new file is opened, but the existing file needs to be saved, I also need to do the same check (i.e - do you want to save the file?), but that I can sit in a seperate procedure, or check the Sender...  Concerning the TForm.Close() I'm stumped however...

Thanks for any help
Serdyn
0
Comment
Question by:Lmoen
  • 4
  • 3
  • 2
  • +1
10 Comments
 
LVL 21

Accepted Solution

by:
gemarti earned 600 total points
ID: 6313569
In the OnCloseQuery event of the form put in the following code:

If CanClose = true then
  begin
    CanClose := false;
    .
    .
    .
    do something; //insert your code

  end;
0
 
LVL 1

Expert Comment

by:Phoenix_s
ID: 6313602
use the form.closequery event which fires before the form.close.  This allows you to program anything that needs to be done

---direct cut'n paste from d5 help

Occurs when the Close method is called or when the user chooses Close from the form's System menu.

type TCloseQueryEvent = procedure(Sender: TObject; var CanClose: Boolean) of object;
property OnCloseQuery: TCloseQueryEvent;

Description

Use OnCloseQuery to specify the conditions under which the form can close. An OnCloseQuery event handler contains a Boolean CanClose variable that determines whether a form is allowed to close. Its default value is True.

You can use an OnCloseQuery event handler to ask users if they are sure they really want the form closed immediately. For example, you can use the handler to display a message box that prompts the user to save a file before closing the form.

The TCloseQueryEvent type points to the method that determines whether a form can be closed. The value of the CanClose parameter determines if the form can close or not.


example from same d5 helpfile

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin
  if MessageDlg('Close the form?', mtConfirmation,
    [mbOk, mbCancel], 0) = mrCancel then
     CanClose := False;
end;

----------------------------------------------------------

as long as you do processing in the formclosequery event, you have control over whether the form closes or not.



hope this helps
0
 
LVL 1

Expert Comment

by:Phoenix_s
ID: 6313617
getmarti - damn... you beat me by 4 mins ;)

0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
LVL 27

Expert Comment

by:kretzschmar
ID: 6313674
On CloseQuery is the right point

CanClose would be allways true at start, germarti,

i would prefer something like this:

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var mresult : Integer;
begin
  if memo1.Modified then
    mResult := MessageBox(self.Handle,'Save before Quit?','Confirm',MB_YESNOCANCEL or MB_ICONQUESTION);
    case mResult of
      mrYes :  If savedialog1.execute then
                       memo1.lines.savetofile(savedialog1.filename);
      mrCancel : CanClose := False;
    end;
end;


meikl ;-)
0
 
LVL 27

Expert Comment

by:kretzschmar
ID: 6313708
oops a begin - end pair missed

corrected version

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var mresult : Integer;
begin
  if memo1.Modified then
  begin
    mResult := MessageBox(self.Handle,'Save before Quit?','Confirm',MB_YESNOCANCEL or MB_ICONQUESTION);
    case mResult of
      mrYes : If savedialog1.execute then
                memo1.lines.savetofile(savedialog1.filename);
      mrCancel : CanClose := False;
    end;
  end;
end;

meikl ;-)
0
 
LVL 5

Expert Comment

by:scrapdog
ID: 6313821
OnCloseQuery works nicely with MDI forms too.  The main form checks all of the child forms before calling its own OnCloseQuery.
0
 
LVL 21

Expert Comment

by:gemarti
ID: 6313986
Phoenix - Yeah...but Kretzschmar may have the better of us both..


Waiting.....
0
 
LVL 27

Expert Comment

by:kretzschmar
ID: 6314062
gemati,
at least, you was the first on the right point of the preferred solution,
i just added a better example

meikl ;-)
0
 
LVL 21

Expert Comment

by:gemarti
ID: 6314788
Kretzschmar: As I stated...You had the better of both Phoenix and me.

Anyway...I got a long way to go to catch up with you so I'll take what I earn.

  GEM  :->
0
 
LVL 27

Expert Comment

by:kretzschmar
ID: 6316051
>I got a long way to go to catch up with you so I'll take what I earn.

go on, gem :-))
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The uses clause is one of those things that just tends to grow and grow. Most of the time this is in the main form, as it's from this form that all others are called. If you have a big application (including many forms), the uses clause in the in…
This article explains how to create forms/units independent of other forms/units object names in a delphi project. Have you ever created a form for user input in a Delphi project and then had the need to have that same form in a other Delphi proj…
Please read the paragraph below before following the instructions in the video — there are important caveats in the paragraph that I did not mention in the video. If your PaperPort 12 or PaperPort 14 is failing to start, or crashing, or hanging, …
Loops Section Overview
Suggested Courses

927 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question