⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exceptions.cpp

📁 《C Builder 5技术内幕》程序源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// User can choose to continue to run or terminate the application.
  try
  {
    pBitmapButton = new Graphics::TBitmap;
// Try to load bitmap from files.
// If the file does NOT exist or graphic format is INVALID,
// two excepts, EInOutError and EInvalidGraphic will occur.
// User can choose to continue to run or terminate the application.
    try
    {
      pBitmapButton->LoadFromFile( asSrc );
      pDest->Add( pBitmapButton, NULL );
    }
    catch( const EFOpenError& e ) // Not EInOutError
//  __except( const EInOutError &e )
    {
//--------------------------------------------------------------------
//  NOTE:
//  Use member function, <destination>->Assign(<source>), to copy the type of
//  property of a component to another, DO NOT use "<destination> = <source>,
//  which will be never work properly, since the destination type is TBitmap,
//  while the source type is TPicture.
//  If you use type-casting, (TBitmap *)<source>, an error will occurs.
      pBitmapButton->Assign( ImageNaked->Picture );
      pDest->Add( pBitmapButton, NULL );
      if( pBitmapButton != NULL )   // Release the memory
      {
        delete pBitmapButton;
        pBitmapButton = NULL;
      }
      AnsiString asEInformation = e.Message + ".\nContinue to run ANYWAY?";
      int nBtnReturned = Application->MessageBox(
          asEInformation.c_str(),
          AnsiString( e.ClassName() ).c_str(),
          MB_YESNO + MB_ICONSTOP + MB_DEFBUTTON2 );
      if( nBtnReturned == IDYES )
        return false;
      if( nBtnReturned == IDNO )
        Application->Terminate();
    }
    catch( const EInvalidGraphic& e )
    {
      pBitmapButton->Assign( ImageNaked->Picture );
      pDest->Add( pBitmapButton, NULL );
      if( pBitmapButton != NULL )   // Release the memory
      {
        delete pBitmapButton;
        pBitmapButton = NULL;
      }
      AnsiString asEInformation = e.Message + ".\nContinue to run ANYWAY?";
      int nBtnReturned = Application->MessageBox(
          asEInformation.c_str(),
          AnsiString( e.ClassName()).c_str(),
          MB_YESNO + MB_ICONSTOP + MB_DEFBUTTON2 );
      if( nBtnReturned == IDYES )
        return false;
      if( nBtnReturned == IDNO )
        Application->Terminate();
    }
  }
  catch ( ... )
  {
//
//  const_cast< T > (arg)
//
//  Description
//
//  Use the const_cast operator to add or remove the const or volatile
//  modifier from a type.
//  In the statement, const_cast< T > (arg), T and arg must be of
//  the same type except for const and volatile modifiers.
//  The cast is resolved at compile time. The result is of type T.
//  Any number of const or volatile modifiers can be added or removed
//  with a single const_cast expression.
//
//  A pointer to const can be converted to a pointer to non-const that
//  is in all other respects an identical type. If successful,
//  the resulting pointer refers to the original object.
//
//  A const object or a reference to const cast results in a non-const
//  object or reference that is otherwise an identical type.
//
//  The const_cast operator performs similar typecasts on the volatile
//  modifier. A pointer to volatile object can be cast to a pointer to
//  non-volatile object without otherwise changing the type of the object.
//  The result is a pointer to the original object. A volatile-type object
//  or a reference to volatile-type can be converted into an identical
//  non-volatile type.
//    AnsiString asInformation = AnsiString( const_cast< char * >( MI_NOMEMORY ) );
    Application->MessageBox(
//        asInformation.c_str(),
        AnsiString( const_cast< char * >( MI_NOMEMORY ) ).c_str(),
        const_cast< char * >( MT_FATALERROR ),
        MB_OK + MB_ICONERROR );
    Application->Terminate();
  }
  return true;
//-----------------------------------------------------------------------
//  Application->MessageBox and Windows MessageBox Help
//-----------------------------------------------------------------------
//  Specifies a set of bit flags that determine the contents and behavior
// of the dialog box. This parameter can be a combination of flags from
// the following groups of flags.
// Specify one of the following flags to indicate the buttons contained
// in the message box:

//  Flag	Meaning
//  MB_ABORTRETRYIGNORE	The message box contains three push buttons: Abort, Retry, and Ignore.
//  MB_OK	            The message box contains one push button: OK. This is the default.
//  MB_OKCANCEL	        The message box contains two push buttons: OK and Cancel.
//  MB_RETRYCANCEL	    The message box contains two push buttons: Retry and Cancel.
//  MB_YESNO         	The message box contains two push buttons: Yes and No.
//  MB_YESNOCANCEL	    The message box contains three push buttons: Yes, No, and Cancel.

//  Specify one of the following flags to display an icon in the message box:

//  Flag

//  MB_ICONEXCLAMATION, MB_ICONWARNING
//	An exclamation-point icon appears in the message box.

//  MB_ICONINFORMATION, MB_ICONASTERISK
//	An icon consisting of a lowercase letter i in a circle appears in
//  the message box.

//  MB_ICONQUESTION
//	A question-mark icon appears in the message box.

//  MB_ICONSTOP, MB_ICONERROR,  MB_ICONHAND
//  A stop-sign icon appears in the message box.

//  Specify one of the following flags to indicate the default button:

//  Flag	Meaning
//  MB_DEFBUTTON1	The first button is the default button.
//                  MB_DEFBUTTON1 is the default unless MB_DEFBUTTON2,
//                  MB_DEFBUTTON3, or MB_DEFBUTTON4 is specified.
//  MB_DEFBUTTON2	The second button is the default button.
//  MB_DEFBUTTON3	The third button is the default button.
//  MB_DEFBUTTON4	The fourth button is the default button.


//  Specify one of the following flags to indicate the modality of
//  the dialog box:

//  Flag        	Meaning
//  MB_APPLMODAL	The user must respond to the message box before continuing work in the window identified by the hWnd parameter. However, the user can move to the windows of other applications and work in those windows. Depending on the hierarchy of windows in the application, the user may be able to move to other windows within the application. All child windows of the parent of the message box are automatically disabled, but popup windows are not.MB_APPLMODAL is the default if neither MB_SYSTEMMODAL nor MB_TASKMODAL is specified.
//  MB_SYSTEMMODAL	Same as MB_APPLMODAL except that the message box has the WS_EX_TOPMOST style. Use system-modal message boxes to notify the user of serious, potentially damaging errors that require immediate attention (for example, running out of memory). This flag has no effect on the user's ability to interact with windows other than those associated with hWnd.
//  MB_TASKMODAL	Same as MB_APPLMODAL except that all the top-level windows belonging to the current task are disabled if the hWnd parameter is NULL. Use this flag when the calling application or library does not have a window handle available but still needs to prevent input to other windows in the current application without suspending other applications.

//  In addition, you can specify the following flags:

//  MB_DEFAULT_DESKTOP_ONLY
//  The desktop currently receiving input must be a default desktop;
//  otherwise, the function fails. A default desktop is one an application
//  runs on after the user has logged on.

//  MB_HELP
//  Adds a Help button to the message box. Choosing the Help button or
//  pressing F1 generates a Help event.

//  MB_RIGHT
//  The text is right-justified.

//  MB_RTLREADING
//  Displays message and caption text using right-to-left reading order
//  on Hebrew and Arabic systems.

//  MB_SETFOREGROUND
//  The message box becomes the foreground window. Internally, Windows
//  calls the SetForegroundWindow function for the message box.

//  MB_TOPMOST
//  The message box is created with the WS_EX_TOPMOST window style.

//  MB_SERVICE_NOTIFICATION
//  Windows NT only: The caller is a service notifying the user of an event.
//  The function displays a message box on the current active desktop,
//  even if there is no user logged on to the computer.
//  If this flag is set, the hWnd parameter must be NULL. This is
//  so the message box can appear on a desktop other than the desktop
//  corresponding to the hWnd.
//  For Windows NT version 4.0, the value of MB_SERVICE_NOTIFICATION has
//  changed. See WINUSER.H for the old and new values. Windows NT 4.0
//  provides backward compatibility for pre-existing services
//  by mapping the old value to the new value in the implementation of
//  MessageBox and MessageBoxEx. This mapping is only done for executables
//  that have a version number, as set by the linker, less than 4.0.

//  To build a service that uses MB_SERVICE_NOTIFICATION, and can run on
//  both Windows NT 3.x and Windows NT 4.0, you have two choices.

//  1.	At link-time, specify a version number less than 4.0; or
//  2.	At link-time, specify version 4.0. At run-time,
//  use the GetVersionEx function to check the system version.
//  Then when running on Windows NT 3.x, use MB_SERVICE_NOTIFICATION_NT3X;
//  and on Windows NT 4.0, use MB_SERVICE_NOTIFICATION.

//  MB_SERVICE_NOTIFICATION_NT3X

//  Windows NT only: This value corresponds to the value defined for
//  MB_SERVICE_NOTIFICATION for Windows NT version 3.51.

//  Return Values

//  The return value is zero if there is not enough memory to create
//  the message box.
//  If the function succeeds, the return value is one of the following
//  menu-item values returned by the dialog box:

//  Value	    Meaning
//  IDABORT	    Abort button was selected.
//  IDCANCEL	Cancel button was selected.
//  IDIGNORE	Ignore button was selected.
//  IDNO	    No button was selected.
//  IDOK    	OK button was selected.
//  IDRETRY	    Retry button was selected.
//  IDYES	    Yes button was selected.


//  If a message box has a Cancel button, the function returns
//  the IDCANCEL value if either the ESC key is pressed or
//  the Cancel button is selected. If the message box has no Cancel button,
//  pressing ESC has no effect.

//  Remarks

//  When you use a system-modal message box to indicate that the system
//  is low on memory, the strings pointed to by the lpText and
//  lpCaption parameters should not be taken from a resource file,
//  because an attempt to load the resource may fail.
//  When an application calls MessageBox and specifies the MB_ICONHAND
//  and MB_SYSTEMMODAL flags for the uType parameter, Windows displays
//  the resulting message box regardless of available memory.
//  When these flags are specified, Windows limits the length of
//  the message box text to three lines. Windows does not automatically
//  break the lines to fit in the message box, however,
//  so the message string must contain carriage returns to
//  break the lines at the appropriate places.

//  If you create a message box while a dialog box is present,
//  use the handle of the dialog box as the hWnd parameter.
//  The hWnd parameter should not identify a child window, such as
//  a control in a dialog box.
//  Windows 95: The system can support a maximum of 16,364 window handles.
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -