Jump to content

"MessageScreen" - Blocking(!) Message- and InputDialogs and "Live" StatusMessages (with Abort option)


Oliver Morsch

Recommended Posts

"MessageScreen" - Blocking(!) Message- and InputDialogs and "Live" StatusMessages (with Abort option)

 

No need for callbacks or extra threads or ...

 

- Live Status messages (show the user at every time, what you are just doing)

 

- Blocking(!) Input Dialog

 

- Blocking(!) Message Dialog

 

- "Abort option" at every time

 

Sample Code:

 



procedure TfrmMain.btnTestClick(Sender: TObject);
var
  Nam: String;
  i: Integer;
  Br: Boolean;
begin
  MS.Show;
  try
 
    // "Live" Status Messages:
    MS.StatusMsg('Step 1 / 3 ...');
    Sleep(4000); // Do Something here ...
    MS.StatusMsg('Step 2 / 3 ...');
    Sleep(4000); // Do Something here ...
    MS.StatusMsg('Step 3 / 3 ...');
    Sleep(4000); // Do Something here ...
 
    // Input Dialog:
    if MS.InputDlg('Please enter your name:', 'Bill', 50) = 1 then begin
      Nam := MS.LastAnswerVal;
      MS.MessageDlg('Your name is ' + Nam + '!', 'OK');
    end;
 
    // Message Dialog:
    case MS.MessageDlg('What do you want to do today, ' + Nam + '?', 'Do This', 'Do That', 'Do Everything', 'Do Anything' , 'Do Nothing') of
      1: MS.MessageDlg('You Pressed Button 1!', 'OK');
      2: MS.MessageDlg('You Pressed Button 2!', 'OK');
      3: MS.MessageDlg('You Pressed Button 3!', 'OK');
      4: MS.MessageDlg('You Pressed Button 4!', 'OK');
      5: MS.MessageDlg('You Pressed Button 5!', 'OK');
    else
      raise Exception.Create('There is no other Button, only 1 - 5 ?!');
    end;
 
    // "Live" Status Messages with "ABORT" option:
    Br := False;
    for i := 1  to 10000000 do begin
      MS.StatusMsg('Record ' + IntToStr(i) + ' / 10000000', 1000, True); // !!! Important: Use "Delay" (here 1000 ms) if there are many Updates per second !!!
      if MS.HasAbort then begin
        if MS.MessageDlg('Really ABORT ?', 'Yes', 'No') = 1 then begin
          Br := True;
          BREAK;
        end;
      end;
    end;
    if Br then begin
      MS.MessageDlg('User has pressed ABORT !', 'OK');
    end;
    MS.StatusMsg('Ready!');
    Sleep(2000);
 
  finally
    MS.Hide;
  end;
end;


 

MsgScr.zip

post-147-0-49735100-1442885884_thumb.png

  • Upvote 3
Link to comment
Share on other sites

  • 1 month later...
  • 4 weeks later...
  • 1 year later...
  • 10 months later...

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...