Solved

Error Closing a Delphi Program

Posted on 2010-08-15
6
1,226 Views
Last Modified: 2013-11-23
A program I'm writing requires data from a flash drive, so I inspect removable drives for the file. If there's a removable drive and the file exists, no problems. If there is no no file, I'd like to provide a message to the user to install his data flash drive then re-start the app. After he clicks OK, the program terminates but AFTER it ends, I get a error (from Windows?)  :
    EInvalidOperation with message 'Cannot change visible in OnShow or OnHide'

I don't use an OnShow or OnHide anywhere in the app yet the problem persists. I have installed the code in a new, blank form and it works fine. But when add it to the "OnActivate" event of my
program it bombs after termination.

Any help would is appreciated. Thanks.

Ed
SDataFile := LocateDataFile;   
             //Expecting like 'F:\DatFile.bin'

if SDataFile = '' then begin
   showmessage('Data File NOT found. '+
               'Please insert your data flash drive and re-start);
   Application.Terminate;      {'close' produces the same error}
End;

//Problems get much worse if I wait for the flash drive even
//when it gets inserted and the TDriveComboBox is updated.

Open in new window

0
Comment
Question by:Ed Covney
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
6 Comments
 
LVL 31

Accepted Solution

by:
Marco Gasi earned 500 total points
ID: 33441714
I've tested your code and it doesn't raises any error. I used form's OnActivate. Are you using Form's event or Application event?
0
 
LVL 31

Assisted Solution

by:Marco Gasi
Marco Gasi earned 500 total points
ID: 33441729
Tested with TApplicationEvent also: none error... Have you other secondary forms in your app? Or  procedure LocateDataFile calls and shows/hides some dialog or some form?
0
 
LVL 3

Author Comment

by:Ed Covney
ID: 33442085
That was fast - thank you.

Based on the fact that we both got the code to work on a fresh new form, I changed the basic set-up in the OnActivate event of the form. instead of;
             If not filefound then close;
 I start with
             if filefound then begin
               {the remainder of the event code here}
               else begin
                 showmessage('Insert data drive');
                 close;
              end;

I do sorta remember from 30 years ago, that bad juju can happen if you try to quit in the middle.

Thank you for your Help Marqus
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 31

Expert Comment

by:Marco Gasi
ID: 33443527
Glad you solved, but if the problem were that you think, should raise error even in a blank form, doesn't? I think there is something in LocateDataFile procedure or in some aother place that conflicts with Close statement. However, good bye
0
 
LVL 3

Author Comment

by:Ed Covney
ID: 33446505
marqus -

The first thing I did was to transfer the code to a new form, where it worked as expected. And now that I changed the way / order of code execution, it also worlks in my program - using LocateDataFile.

I agree there may still be a problem somewhere and wish I knew something about error trapping which I've always been able to avoid. A trip to the bookstore is in my near future -:)

Thanks for sticking araound. - Ed
0
 
LVL 3

Expert Comment

by:big_one01
ID: 33485970
Check in the Delphi IDE menu:
Project-->Options
 In the Forms tab --> Autocreate forms:

Maybe you have some form that must not be there, then the form is autocreated and when you dont close o destroy that instance, then raise the error.
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Introduction Raise your hands if you were as upset with FireMonkey as I was when I discovered that there was no TListview.  I use TListView in almost all of my applications I've written, and I was not going to compromise by resorting to TStringGrid…
Jaspersoft Studio is a plugin for Eclipse that lets you create reports from a datasource.  In this article, we'll go over creating a report from a default template and setting up a datasource that connects to your database.
The viewer will learn how to use and create keystrokes in Netbeans IDE 8.0 for Windows.
The viewer will learn how to synchronize PHP projects with a remote server in NetBeans IDE 8.0 for Windows.

696 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