C++ Builder下如何使用Android对话框

来源:互联网 发布:mysql视频教程 编辑:程序博客网 时间:2024/06/06 19:22

在讲解Android的对话框之前,我们先来看下面这个例子:

void __fastcall TForm1::Button1Click(TObject *Sender){ ShowMessage("OK1"); ShowMessage("OK2"); ShowMessage("OK3"); ShowMessage("OK4");}

 

点击按钮后,四个对话框连续出现,最后一个对话框显示在最上面。并不是象Windows的程序那样,出现一个后,点击确定才会出现下一个。
这是因为Android系统不支持阻塞对话框,对话框出现后立即返回,执行后面的代码。

那么把ShowMessage换成MessageDlg函数又会怎么样呢?再看下面的例子:

void __fastcall TForm1::Button1Click(TObject *Sender){ int n = MessageDlg(L"这是一个演示对话框", TMsgDlgType::mtConfirmation, TMsgDlgButtons()<<TMsgDlgBtn::mbYes<<TMsgDlgBtn::mbNo<<TMsgDlgBtn::mbCancel, 0); if(n == mrYes)  ShowMessage(L"您选择了是"); else if(n == mrNo)  ShowMessage(L"您选择了否"); else if(n == mrCancel)  ShowMessage(L"您选择了取消");}

点击按钮后,将会提示“Blocking dialogs not implemented on this platform”,该平台不支持阻塞对话框。
同样,MessageBox和InputBox函数在Android系统下都无法被执行。

如果我们需要在对话框显示之后,接受用户的选取或输入操作,再根据用户的选择运行不同的代码,应该如何做呢?这就需要给MessageDlg或InputBox传入一个类对象,该类对象继承自TInputCloseDialogProc,由用户自己实现,并在其中编写对话框显示之后的下一步执行代码。具体过程如下:

1. 以C++ Builder XE7为例,创建一个Android工程

2. 放置四个按钮,分别是信息对话框、询问对话框、输入对话框和退出。

3. 为这四个对话框分别编写四个实现类,用于执行对话框中的选择操作:

//---------------------------------------------------------------------------class TMyDialogProc1 : public TCppInterfacedObject< TInputCloseDialogProc >{private:TForm *FForm;public:__fastcall TMyDialogProc1(TForm * AForm) : FForm(AForm){}void __fastcall Invoke(const System::Uitypes::TModalResult AResult){if(AResult == mrOk){ShowMessage(L"您点击了OK");}}};//---------------------------------------------------------------------------class TMyDialogProc2 : public TCppInterfacedObject< TInputCloseDialogProc >{private:TForm *FForm;public:__fastcall TMyDialogProc2(TForm * AForm) : FForm(AForm){}void __fastcall Invoke(const System::Uitypes::TModalResult AResult){if(AResult == mrYes){ShowMessage(L"您选择了确定");}else if(AResult == mrCancel){ShowMessage(L"您选择了取消");}}};//---------------------------------------------------------------------------class TMyDialogProc3 : public TCppInterfacedObject< TInputCloseBoxProc>{private:TForm *FForm;public:__fastcall TMyDialogProc3(TForm * AForm) : FForm(AForm){}void __fastcall Invoke(const System::Uitypes::TModalResult AResult, const System::UnicodeString AValue){if(AResult == mrOk){ShowMessage(L"修改后的文字:" + AValue);}}};//---------------------------------------------------------------------------class TMyDialogProc4 : public TCppInterfacedObject< TInputCloseDialogProc >{private:TForm *FForm;public:__fastcall TMyDialogProc4(TForm * AForm) : FForm(AForm){}void __fastcall Invoke(const System::Uitypes::TModalResult AResult){if(AResult == mrYes){ShowMessage(L"您选择了退出程序");FForm->Close();  //关闭程序}else if(AResult == mrNo){ShowMessage(L"您选择了取消退出");}}};//---------------------------------------------------------------------------


4. 在四个按钮的OnClick事件中,显示不同的对话框(注意最后一个参数):

//---------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender){_di_TInputCloseDialogProc ADialogProc1 = new TMyDialogProc1(this);MessageDlg(L"您好,欢迎使用Android对话框。",TMsgDlgType::mtInformation,TMsgDlgButtons() << TMsgDlgBtn::mbOK,0,ADialogProc1);}//---------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender){_di_TInputCloseDialogProc ADialogProc2 = new TMyDialogProc2(this);MessageDlg(L"你确定要删除该文件吗?",TMsgDlgType::mtInformation,TMsgDlgButtons() << TMsgDlgBtn::mbYes << TMsgDlgBtn::mbCancel,0,ADialogProc2);}//---------------------------------------------------------------------------void __fastcall TForm1::Button3Click(TObject *Sender){_di_TInputCloseBoxProc ADialogProc3 = new TMyDialogProc3(this);InputBox(L"输入",L"请输入文字:",L"默认文字",ADialogProc3);}//---------------------------------------------------------------------------void __fastcall TForm1::Button4Click(TObject *Sender){_di_TInputCloseDialogProc ADialogProc4 = new TMyDialogProc4(this);MessageDlg(L"您确定要退出程序吗?",TMsgDlgType::mtWarning,TMsgDlgButtons() << TMsgDlgBtn::mbYes << TMsgDlgBtn::mbNo,0,ADialogProc4);}//---------------------------------------------------------------------------


5. 程序运行效果如图所示:

 

0 0
原创粉丝点击