Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: Pascal
Expertise: Beginner
Mar 19, 1997

Can forms be manipulated at runtime?

Question:
Can forms be manipulated at runtime?

Answer:
Typically, you want to have your programs visible and have the ability to switch to them; however, there are times when you have a background operation that you don't want anyone messing with once it has started; or only when you choose to let them mess with it. The way to accomplish this is with a WinAPI call to ShowWindow.

ShowWindow is a function that allows you change a window's appearance with respect to Windows environment. With it, you can maximize, minimize, hide, or show windows to your heart's content. For a more detailed explanation of the function, check out the Delphi help under WinAPI. Search on ShowWindow, and you'll be on your way.

The program below is a simple example of how you can employ ShowWindow. It demonstrates not only the ShowWindow procedure, but also a methodology for periodically querying a user for a response. You can execute a program like this on the fly to implement a "Register Now!" screen. Here's what to do:

  1. Start a new project
  2. Drop two BitButtons on the form.
  3. Set the 'Kind' property for BitBtn1 to bkRetry and set its caption to 'Continue'
  4. Set the 'Kind' property for BitBtn1 to bkCancel, leaving its caption alone.
  5. Drop a timer onto the form, and set its 'Interval' property to 30000 (30 secs).
  6. Copy the code from the listing below into each event listed in the code.
  7. Run the form. Now every 30 seconds a message will appear on the screen, asking whether you want to show the form.
  8. Select Cancel to quit the program or select Continue to keep hiding the form.
{=======================================================================

 This unit demonstrates how you can hide a window from the task manager

 and keep the user from being able to Alt-Tab to it.

 =======================================================================}



unit Hidemain;



interface



uses

  WinTypes, WinProcs, Messages, Controls, Forms,

  Dialogs, StdCtrls, Buttons, Classes, ExtCtrls;



type

  TForm1 = class(TForm)

    BitBtn1: TBitBtn;

    BitBtn2: TBitBtn;

    Timer1: TTimer;

    procedure Timer1Timer(Sender: TObject);

    procedure BitBtn1Click(Sender: TObject);

    procedure BitBtn2Click(Sender: TObject);

    procedure FormClose(Sender: TObject; var Action: TCloseAction);

    procedure FormCreate(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;



var

  Form1: TForm1;



implementation



{$R *.DFM}



procedure TForm1.Timer1Timer(Sender: TObject);

begin

  {First, check the button's label. If it's 'Hide' then

   change it to 'Continue'. First value is only for initial

   program execution}

  if (BitBtn1.Caption = 'Hide') then

    begin

      BitBtn1.Caption := 'Continue';

      BitBtn1.Update;

    end;



  {If the window's hidden, ask the user if he/she wants to show it. If

   so, show it with its default display parameters.}

  if NOT IsWindowVisible(Self.Handle) then

    if (MessageDlg('Do you want to show the hidden application?',

                  mtConfirmation, [mbYes,mbNo], 0) = mrYes) then

      ShowWindow(Self.Handle, SW_SHOWNORMAL);

end;



procedure TForm1.BitBtn1Click(Sender: TObject);

begin

  ShowWindow(Self.Handle, SW_HIDE);

end;



procedure TForm1.BitBtn2Click(Sender: TObject);

begin

  Close;

end;



procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

  Action := caFree;

end;



procedure TForm1.FormCreate(Sender: TObject);

begin

  BitBtn1.Caption := 'Hide';

  BitBtn1.Update;

end;



end.



So what gets accomplished here? Once the form is hidden, it is hidden. You won't be able to Alt-Tab or Ctrl-Esc to the Task Manager. This is one of those point of no return scenarios, but it's useful. Something like this could be used for monitoring certain Windows events or checking the status of a file independent of another program. Play around with it.

DevX Pro
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date