Skip to content

New tip: FocusModal #81

Open
Open
@delphidabbler

Description

@delphidabbler

Possible new tip from extra/Topelina Tips.odt


FocusModal

Open a modal progress window while loading your data.

Question/Problem/Abstract:

Have you ever needed a small window with a progressbar with focus, but having the code being executed in another window?

I use this trick for our client/server application when retrieving data from the server.

The connection is uninterruptable, and the user is not allowed to click anywhere while the connection is open. This small trick prohibits that, and tells the user about the process of retrieving his data.

The recipe is like this:

Create a small sized window with a TProgressBar inside. Name the TProgressBar "ProgressBar".

Make an instance of the window. For example:

var 
  f : TfrmProgress; 

initialization 
  f := nil; 
end.

To open the window, use the following lines of code:

procedure OpenWindow; 
begin 
  if f = nil then 
  begin 
    f := TfrmProgress.Create( Application ); 
    f.WindowList := DisableTaskWindows(f.Handle); 
    f.Show; 
  end; 
end; 

The window is now open and modal, but your thread of code continues where you left off.

You can set the progressbar by:

procedure SetProgressBar( APosition : integer ); 
begin 
  if f <> nil then 
    f.ProgressBar.Position := APosition; 
end; 

To close the window, do the following:

procedure CloseWindow; 
begin 
  if f <> nil then 
  begin 
    EnableTaskWindows(f.WindowList); 
    f.Close; 
    f.Free; 
    f := nil; 
  end; 
end; 

Usage:

Use the code like this:

begin 
  OpenWindow; 
  SetProgressBar( 33 ); 
  do_something; 
  SetProgressBar( 66 ); // Increase the progressbar to indicate 
                        // progress 
  do_something_else; 
  SetProgressBar( 100 ); 
  CloseWindow; 
end;

Contributed by: topellina [email protected]

Metadata

Metadata

Assignees

Labels

consideringConsidering or investigating the issueenhancementNew feature or request

Projects

Status

Considering

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions