Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1241
  • Last Modified:

Error Closing a Delphi Program

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
Ed Covney
Asked:
Ed Covney
  • 3
  • 2
2 Solutions
 
Marco GasiFreelancerCommented:
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
 
Marco GasiFreelancerCommented:
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
 
Ed CovneyRetiredAuthor Commented:
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
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
Marco GasiFreelancerCommented:
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
 
Ed CovneyRetiredAuthor Commented:
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
 
big_one01Commented:
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

[Webinar On Demand] Database Backup and Recovery

Does your company store data on premises, off site, in the cloud, or a combination of these? If you answered “yes”, you need a data backup recovery plan that fits each and every platform. Watch now as as Percona teaches us how to build agile data backup recovery plan.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now