En la versión XE7 tenemos una rutina nueva que como último parámetro recibe un método anónimo de delphi, he aqui la firma en C++Builder
extern DELPHI_PACKAGE void __fastcall MessageDlg(const System::UnicodeString AMessage, const System::Uitypes::TMsgDlgType ADialogType, const System::Uitypes::TMsgDlgButtons AButtons, const int AHelpContext, const _di_TInputCloseDialogProc ACloseDialogProc)/* overload */; |
He aquí el código de como usarla e implementar el método anónimo en C++Builder.
/* * Forma de Implementar en C++, el Método Anónimo. * El truco está en el uso de la platilla TCppInterfacedObject, la cual * ya tiene implementados los métodos de IUnknown. */ class TMyInputDialogProc : public TCppInterfacedObject< TInputCloseDialogProc > { private: TForm *FForm; public: __fastcall TMyInputDialogProc(TForm * AForm) : FForm(AForm){} void __fastcall Invoke(const System::Uitypes::TModalResult AResult) { ShowMessage(String().sprintf(L"Se pulsó el Botton %i", AResult)); if(AResult == mrYes) { FForm->Close(); } else if (AResult == mrNo) { ShowMessage("Salida cancelada!"); } } }; //--------------------------------------------------------------------------- void __fastcall TForm11::Button1Click(TObject *Sender) { _di_TInputCloseDialogProc ACloseDialogProc = new TMyInputDialogProc(this); MessageDlg("Desea salir de la Aplicación ?", TMsgDlgType::mtWarning, TMsgDlgButtons() < < TMsgDlgBtn::mbYes << TMsgDlgBtn::mbNo, 0, ACloseDialogProc // Uso de la Implementación de TInputCloseDialogProc ); } //--------------------------------------------------------------------------- |