Jump to content
alank2

ShowModal on a form makes it maximized for some reason

Recommended Posts

I need to put a VCL form in a DLL and call it from another application.  I've made the DLL and can call it just fine, but it shows as maximized even though it isn't supposed to be.

 


  //create form
  Form1=new TForm1(NULL);

  //show form modally
  Form1->ShowModal();

  //copy result
  strcpy(APhoneNumber, Form1->phonenumber);

  //delete form
  delete Form1;

 

Windows state is set to normal,

 

If I put this in the formshow of the form:

 


Form1->WindowState=wsNormal;

 

There is no difference - I think the WindowState is already set this way.  If I could click the title bar of the form, it does go to the right size.  If I close it and reopen it with the above code (which creates a new TForm1), it does NOT happen a second time.

 

If I change the formshow to this:

 


Form1->WindowState=wsMinimized;
Form1->WindowState=wsNormal;

 

It does show as normal size the first and subsequent times, but I can see the animation of it minimizing and restoring.

 

Why does this happen?  Could it be perceiving the way the application that is using it was loaded such as maximized and overriding the WindowState somehow?  if so, can that be prevented in a better way that what I'm doing?  Other thoughts?

 

edit: Does this have to do with   Application->FInitialMainFormState?  Can I change it somehow?  When I try it says it is protected.

 

Edited by alank2

Share this post


Link to post

VCL Framework does not support work inside DLL. The problem is that DLL can’t share types, memory manager etc. So, you got uninited instance of Application inside your dll and many, many more problems.

 

The easiest way to solve all these problems is to use BPL instead of DLL. It's can be loaded dynamicaly too, if you need it.

Or you can try to write your form in pure WinApi.

Share this post


Link to post
On 11/7/2024 at 8:46 AM, alank2 said:

Why does this happen?  Could it be perceiving the way the application that is using it was loaded such as maximized and overriding the WindowState somehow?  if so, can that be prevented in a better way that what I'm doing?  Other thoughts?

Does the host application display any UI windows of its own before the DLL's VCL form is displayed?  If not, then does GetStartupInfo() report that the 1st window shown should be maximized?

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×