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

在讲解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
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值