Solved

"Cannot make a visible Window modal"

Posted on 2009-04-13
6
2,811 Views
Last Modified: 2012-05-06
I get the above error when running the code shown below. TfrmAddUser is NOT in the auto-create list. Its relevant properties are set as follows:

Visible: False
Enabled: True
FormStyle: fsNormal
WindowState: wsNormal

I am using Delphi 2006. I checked the existing Question:

http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_21234459.html

... but nothing there seemed to make it work either. Any ideas, anyone?
procedure TfrmUserRoles.mAddUser;
var
  loAddUser: TfrmAddUser;
  lsUserID: string;
begin
  loAddUser := TfrmAddUser.Create(nil, lsUserID);
  try
    if (loAddUser.ShowModal = mrOk) then
      tvUsers.Items.Add(tvUsers.TopItem, lsUserID);
  finally
    loAddUser.Free;
  end;
end;

Open in new window

0
Comment
Question by:MartinC
  • 4
  • 2
6 Comments
 

Expert Comment

by:LucEngelen
ID: 24134223
Use this instead, and add the AddUser unit to whichever unit youre calling the dialog from

procedure TfrmUserRoles.mAddUser;
var
  lsUserID: string;
begin
  if frmAddUser = nil then
    Application.CreateForm(TfrmAddUser, frmAddUser);

  if frmAddUser.ShowModal = mrOK then
    ...

  frmAddUser.Release;
end;

0
 

Expert Comment

by:LucEngelen
ID: 24134243
Oops, and frmAddUser := nil; after frmAddUser.Release, or you'll get access violations next time you call it.
0
 

Author Comment

by:MartinC
ID: 24134333
LucEngelen:

Your method is an alternate way of calling a Modal form (and in fact one I have used before) but I was really hoping to find out why the code I wrote above - which conforms to methods used elsewhere in this app - might not work. The original code seems to be a reasonable way to do it - assign the created form to a local variable of type TfrmAddUser, and free it at the end after reading the returned lsUserID - but the error I get stymies me.
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!

 

Accepted Solution

by:
LucEngelen earned 60 total points
ID: 24134386
I dont know what your create constructor is doing, since you havent included it in your sample code.

Are you setting form.visible := true in there?  If so that is the reason for the issue.

You cannot call ShowModal once a window has had its visible state changed to true.

You may want to test this by just calling ;
loAddUser := TfrmAddUser.Create(nil);
loAddUser.ShowModal;


0
 

Author Comment

by:MartinC
ID: 24134449
And I wish I HAD included the constructor because then you would no doubt have spotted instantly what I left out:

  inherited create(AOwner);

I just spotted it then myself before reading your last comment, but thanks - and points - for your help anyway.
0
 

Expert Comment

by:LucEngelen
ID: 24134571
It happens ;)  Its happened to me so many times I made it a habit to write inherited Create and inherited Destroy as soon as the begin and ends are in place, even if I wasnt working on those functions at the time.

0

Featured Post

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!

Question has a verified solution.

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

Objective: - This article will help user in how to convert their numeric value become words. How to use 1. You can copy this code in your Unit as function 2. than you can perform your function by type this code The Code   (CODE) The Im…
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…
Are you ready to implement Active Directory best practices without reading 300+ pages? You're in luck. In this webinar hosted by Skyport Systems, you gain insight into Microsoft's latest comprehensive guide, with tips on the best and easiest way…

749 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