Salve a tutti,
ho trovato la soluzione, spero possa interessare a qualcuno.
La proprietà us->OnUDPRead (punta all'event handler) richiede una funzione "metodo di una classe". Per cui ho creato la classe statica "ceh" con il metodo evento_rx_UDP che ho assegnato a us->OnUDPRead con l'istruzione:
us->OnUDPRead=(TUDPReadEvent)&(ceh.evento_rx_UDP);
Questa soluzione credo sia generalizzabile per un qualsiasi event handler.

Il codice seguente crea un oggetto UDP client che invia un pacchetto ad un oggetto UDP server.
//---------------------------------------------------------------------------

#include "IdBaseComponent.hpp"
#include "IdComponent.hpp"
#include "IdUDPBase.hpp"
#include "IdUDPClient.hpp"
#include "IdUDPServer.hpp"
#include "Inifiles.hpp"

#pragma package(smart_init)
#pragma link "IdBaseComponent"
#pragma link "IdComponent"
#pragma link "IdUDPBase"
#pragma link "IdUDPClient"
#pragma link "IdUDPServer"

TIdUDPClient *uc;
TIdUDPServer *us;

class Tceh {
public:
void __fastcall evento_rx_UDP(TIdUDPListenerThread *AThread, TIdBytes AData, TIdSocketHandle *ABinding);
} ceh;

void __fastcall Tceh::evento_rx_UDP(TIdUDPListenerThread *AThread, TIdBytes AData, TIdSocketHandle *ABinding)
{
printf("pkt ricevuto\n");
return ;
}


#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{

uc=new TIdUDPClient(NULL);
us=new TIdUDPServer(NULL);

us->Bindings->Clear();
us->Bindings->Add();
us->Bindings->Items[0]->IP="192.168.1.6";
us->Bindings->Items[0]->Port=30000;

// assegnazione della funzione che gestisce l'evento:
us->OnUDPRead=(TUDPReadEvent)&(ceh.evento_rx_UDP);

us->Active=true;

uc->Host="192.168.1.6";
uc->Port=30000;
uc->Connect();
uc->Send("prova");
uc->Disconnect();

us->Active=false;
printf("ok\n");

int i=getchar();

delete uc,us;
return 0;
}
//---------------------------------------------------------------------------