Problem with the ABORT procedure

I was developing apps in Delphi 1.0. I migrated the project
to Delphi 3.0. But I got the compiling error with the following code:

procedure TfCliente.TableBeforeCancel(DataSet: TDataset);

BEGIN
   If MessageDlg('Cancel?', mtConfirmation,
                 [mbYes, mbNo], 0) = mrNo Then
        Abort;
END;

Delphi says "Statement expected, but expression of type 'integer' found."

It's strange because I always used the ABORT procedure to cancel the TTable's Before procedures, but now in Delphi 3.0 it won't compile. I tried to put the ABORT procedure in other codes, it just shows the same error.

In this case will this be Delphi 3.0's bug?
 
davihongsikchoiAsked:
Who is Participating?
 
gallagheCommented:
I think the problem has something to do with either the order of the units USES clause or a unit is missing from the unit.

try using my "Message" unit, (this isolates the call to MessageDlg) add it to the form;s uses clause which is causing the problem. Then use the function called "Question".

Caveat: Each of my routines allow you to do multi-lines in the messages by using a semi-colon rather then #13.

For example:
'This is line 1' + #13 + 'Line 2' ;

My method
'This is line 1;Line 2' ;


Demo call
procedure TfrmMain.Table1BeforeCancel(DataSet: TDataSet);
begin
  if not Question('Cancel?') then
    abort ;
end;

-------------Source code -------------------------
unit kg_MsgDlg ;

interface

uses
  Windows, Messages, Classes, Graphics;

function  Confirmation(const S: String): Word ;
function  Question(const S: String):Boolean ;
procedure Information(const S: String) ;
procedure InformationPos(const S: String;nRow,nCol:Integer) ;
procedure Alert(const S: String) ;
procedure ErrMsg(const S: String) ;
function  RetryBox(const S: String):Boolean ;
function  StrCrLf(const cMsg:String):String ;

implementation

uses SysUtils, Controls, Forms, Consts, Dialogs ;

function StrCrLf(const cMsg:String):String ;
var nLen,i:Integer ;
begin

  nLen := Length(cMsg) ;
  i := 1 ;
  while i <= nLen do begin
    if cMsg[i] in [';','~'] then
      Result := Result + #13
    else
      Result := Result + cMsg[i] ;
    Inc(i) ;
  end ;
end ;

function Confirmation(const S: String): Word ;
begin
  case MessageDlg(StrCrLf(S),mtConfirmation,[mbYes,mbNo,mbCancel],0) of
     IDYES    : Result := mrYes ;
     IDNO     : Result := mrNo ;
     IDCANCEL : Result := mrCancel ;
     else       Result := mrCancel ;
  end
end ;

procedure Alert(const S: String) ;
begin
  MessageDlg(StrCrLf(S),mtWarning,[mbOk],0) ;
end ;

procedure Information(const S: String) ;
begin
  MessageDlg(StrCrLf(S),mtInformation,[mbOk],0) ;
end ;

procedure InformationPos(const S: String;nRow,nCol:Integer) ;
begin
  MessageDlgPos(StrCrLf(S),mtInformation,[mbOk],0,nCol,nRow) ;
end ;

procedure ErrMsg(const S: String) ;
begin
  MessageDlg(StrCrLf(S),mtError,[mbOk],0) ;
end ;

function Question(const S: String):Boolean ;
begin
  case MessageDlg(StrCrLf(S),mtConfirmation,[mbYes,mbNo],0) of
     IDYES    : Result := True ;
     IDNO     : Result := False ;
  else          Result := False ;
  end ;
end ;

function RetryBox(const S: String):Boolean ;
begin
  case MessageDlg(StrCrLf(S),mtConfirmation,[mbRetry,mbNo],0) of
     IDRETRY  : Result := True ;
     IDNO     : Result := False ;
  else          Result := False ;
  end ;
end ;

end.


Kevin S. Gallagher
0
 
kretzschmarCommented:
hi davihongsikchoi,

are you sure that your codefragment causes your problem? I've checked out and compiled it with D3 without errors.

Or if there a other defined by own Abort procedure? if so use sysutils.abort instead.

meikl
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.