RAD Studio 10.4.1 is now available! Learn more. Looking for discounts? Visit our Special Offers page!
News

Multiple windows in Delphi

Author: deepak S1409

From a recent thread in borland.public.delphi.nativeapi.win32:

There’s a problem in the way Delphi handles multiple open forms. Delphi applications can have multiple forms, and you will notice that each form does not appear on the task bar. Delphi forms do not have the WS_EX_APPWINDOW style set – this style is required if a window needs to appear in the task bar. But there is one icon, isn’t there? That’s the icon of the Delphi “Application” – and clicking on it in the task bar simply focusses the main window (or any other modal window above it)

If you need your “other” windows to appear in the task bar, then you can do this: Override the CreateParams procedure in your other forms, and write this code in there:


procedure CreateParams(var Params: TCreateParams); override;
...
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
Params.WndParent := GetDesktopWindow;
end;

Now, if you’re doing this, you probably are writing applications where ndividual windows behave independently of the “main” form. You might notice that suddenly, the main form comes up in FRONT of the other top level form, like when showing hints or displaying dialog boxes from them. Reason: Delphi’s Application variable is the culprit – it handles a lot of things including hint display, Dialog box messages etc. When it gets these messages, the main form gets activated, for some reason.

Fix: Don’t just make your “other” forms with WS_EX_APPWINDOW. Make ALL your top level forms have that style, including your main form. (Use the same logic for the main form). Then, REMOVE the WS_EX_APPWINDOW style from the “Application” – using this code:


SetWindowLong(Application.Handle, GWL_EXSTYLE,
GetWindowLong(Application.Handle,GWL_EXSTYLE)
and not WS_EX_APPWINDOW
or WS_EX_TOOLWINDOW);

You’ll have a lot less trouble then.


Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder.
Design. Code. Compile. Deploy.
Start Free Trial   Learn More About Upgrading

Deep Dive Webinar: Boost C++Builder Compile Speed with TwineCompile
Related posts
C++

What's New in the GetIt Package Manager - June 2020

C++

RAD Studio 10.4 Now Available, Learn More

C++NewsRAD Studio

Open for Business with 10.4! - May 2020 GM Update

C++DelphiNews

Embarcadero Open Source Project Sponsorship

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

IN THE ARTICLES