unit MCAD_MI1201_Errors; interface uses Windows, McadUserEx; type // номера ошибок tErrorCode=( {0} ecOK, {1} ecINTERRUPTED, {2} ecINSUFFICIENT_MEMORY, {3} ecMUST_BE_REAL, {4} ecMUST_BE_INTEGER, {5} ecINVALID_PARAMETER_NUMBER, {6} ecINVALID_PARAMETER_VALUE, {7} ecTIMEOUT, {8} ecMUST_BE_POSITIVE, {9} ecINVALID_DIMENSION, {10} ecHardware_Error, {11} ecUnhandledError, {12} ecUnknownError, {13} ecInterfaceOff, {14} ecCantLoadErrorTable, {15} ecCantLoadInterface, {16} ecNoData ); const cNUMBER_OF_ERRORS=Ord(High(tErrorCode)); cErrorMessageTable:array[1..cNUMBER_OF_ERRORS] of PChar=( {0 'no error', - ненужное сообщение} {1} 'выполнение прервано', {2} 'не хватает памяти', {3} 'нужно действительное число', {4} 'нужно целое', {5} 'неверный номер параметра', {6} 'недопустимое значение параметра', {7} 'истекло время ожидания', {8} 'нужно положительное число', {9} 'неправильная размерность массива', {10} 'ошибка оборудования', {11} 'дурная ошибка, обратитесь к разработчикам', {12} 'неизвестная ошибка', {13} 'интерфейс отключен, выполните msControl(cIntеrface, 1) для включения интерфейса', {14} 'не удается загрузить сообщ. об ошибках', {15 } 'не удается загрузить интерфейс', {16 } 'нет данных в диапазоне' ); procedure SetGlobalErrorCode(Code:tErrorCode); function GlobalErrorCode:tErrorCode; procedure SetUnhandledErrorCode; function MakeErrorResult(ErrCode:tErrorCode; ArgNum:byte):LRESULT; function ErrorTableOK:boolean; function CreateErrorTable:boolean; implementation function MakeErrorResult; begin Result:=MakeLResult(Ord(ErrCode),ArgNum); end; type tFlag=(fErrorTableCreated); tFlags=set of tFlag; var vFlags:tFlags; vGlobalErrorCode:tErrorCode; procedure SetUnhandledErrorCode; begin SetGlobalErrorCode(ecUnhandledError); end; function GlobalErrorCode; begin Result:=vGlobalErrorCode; end; procedure SetGlobalErrorCode; begin if Code=ecOK then begin vGlobalErrorCode:=Code; end else if vGlobalErrorCode=ecOK then begin vGlobalErrorCode:=Code; end; end; function ErrorTableOK:boolean; begin Result:=(fErrorTableCreated in vFlags); end; function CreateErrorTable:boolean; begin Result:=CreateUserErrorMessageTable( SysInit.HInstance, cNUMBER_OF_ERRORS, cErrorMessageTable); if Result then begin vGlobalErrorCode:=ecOK; end else begin Include(vFlags, fErrorTableCreated); end; end; end.