Показать сообщение отдельно
Старый 13.08.2003, 12:35   #19  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
И еще немного о DialogBox
Маленький комментарий ко второму варианту модального окна согласно Wamr (с помощью MessageBox). Передо мной встала задача создать такое модальное окно, при котором бы в Axapty не посылалось бы вообще никаких сообщений. Стандарно так ведет себя только Box::stop(), но в этом варианте диалога только одна кнопка. Вот код, который эмулирует аксартовский DialogBox, причем создает диалоги, полностью блокирующие окно Аксапты:
PHP код:
//int MessageBox(
//  HWND hWnd,          // handle to owner window
//  LPCTSTR lpText,     // text in message box
//  LPCTSTR lpCaption,  // message box title
//  UINT uType,         // message box style
DialogButton systemMessageBox(
                
str             _text,
                
DialogBoxType   _dialogBoxType,
                
str             _title "@SYS11132",
                
DialogButton    _defaultButton DialogButton::Ok,
                
boolean         _taskModal false,
                
int             _hWnd activeFormRun activeFormRun.hWnd() : 0)
{
    
DLL             user32DLL   = new DLL("USER32");
    
DLLFunction     messageBox  = new DLLFunction(user32DLL"MessageBoxA");
    
int             uType 0retxhWnd _hWnd;
    
DialogButton    retButton;

    
messageBox.returns(ExtTypes:: DWord);
    
messageBox.arg(ExtTypes:: DWORD,
                   
ExtTypes::String,
                   
ExtTypes::String,
                   
ExtTypes:: DWORD);

    switch(
_dialogBoxType)
    {
        case 
DialogBoxType::InfoBox :
            
uType #MB_OK | #MB_ICONINFORMATION;
            
break;
        case 
DialogBoxType::OkCancelBox :
            
uType #MB_OKCANCEL | #MB_ICONWARNING;
            
uType _defaultButton == DialogButton::Ok uType #MB_DEFBUTTON1 :
                        
uType #MB_DEFBUTTON2;
            
break;
        case 
DialogBoxType::StopBox :
            
uType #MB_OK | #MB_ICONSTOP;
            
break;
        case 
DialogBoxType::WarnBox :
            
uType #MB_OK | #MB_ICONWARNING;
            
break;
        case 
DialogBoxType::YesNoBox :
            
uType #MB_YESNO | #MB_ICONWARNING;
            
uType _defaultButton == DialogButton::Yes uType #MB_DEFBUTTON1 :
                        
uType #MB_DEFBUTTON2;
            
break;
        case 
DialogBoxType::YesNoCancelBox :
            
uType #MB_YESNOCANCEL | #MB_ICONWARNING;
            
uType _defaultButton == DialogButton::Yes uType #MB_DEFBUTTON1 :
                        
(_defaultButton == DialogButton::No uType #MB_DEFBUTTON2 :
                            
uType #MB_DEFBUTTON3);
            
break;

        case 
DialogBoxType::NoToAllBox,
             
DialogBoxType::YesToAllBox,
             
DialogBoxType::YesToAllNoToAllBox :
        default :
            
uType #MB_YESNO | #MB_ICONINFORMATION;
    
}
    if (
_taskModal)
    {
        
uType uType #MB_TASKMODAL;
        
xhWnd 0;
    }

    
/* --> */ ret messageBox.call(xhWnd_text_titleuType);

    switch(
ret)
    {
        case 
#IDOK, #IDRETRY, #IDIGNORE  :
            
retButton DialogButton::Ok;
            break;
        case 
#IDCANCEL, #IDABORT, #IDCLOSE :
            
retButton DialogButton::Cancel;
            break;
        case 
#IDYES, #IDHELP :
            
retButton DialogButton::Yes;
            break;
        case 
#IDNO :
        
default :
            
retButton DialogButton::No;
            break;
    }
    return 
retButton;