>209
それならdelegateすればよいかも。その利点は
・TCommand(とその派生型)はTClientを知る必要がない
・TClientは処理したいコマンドのみ処理すればよい
(TCommand23が後から追加されてもコンパイルエラーになることはない、処理しないコマンドは無視される)

procedure TMyClient.CommandListOnRegister(Sender: TObject);
begin
// クラスを前もって登録
cmd := TCommand1.Create;
cmd.ID := CommandID1;
cmd.OnExecute := TMyClient.Command1Execute;
CommandList.Register(cmd);
...
end

procedure TMyClient.Command1Execute(Sender: TObject);
begin
with Sender as TCommand1 do
begin
...
end
end;

// AMessage.ID=CommandID1なら
// TMyClient.Command1Executeが呼ばれる
CommandList.Execute(AMessage.ID);