Solved

"Cannot make a visible Window modal"

Posted on 2009-04-13
6
2,826 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
[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
  • 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
Technology Partners: 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

Technology Partners: 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

Suggested Solutions

Title # Comments Views Activity
Delphi Spellcheck in Webbrowser 1 74
Delphi XE10 Round Image 2 219
Working with hours 3 86
Remove all child-forms from a parent-panel 16 11
Introduction The parallel port is a very commonly known port, it was widely used to connect a printer to the PC, if you look at the back of your computer, for those who don't have newer computers, there will be a port with 25 pins and a small print…
Hello everybody This Article will show you how to validate number with TEdit control, What's the TEdit control? TEdit is a standard Windows edit control on a form, it allows to user to write, read and copy/paste single line of text. Usua…
A short tutorial showing how to set up an email signature in Outlook on the Web (previously known as OWA). For free email signatures designs, visit https://www.mail-signatures.com/articles/signature-templates/?sts=6651 If you want to manage em…

737 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