以对象作为参数时,提示形参和实参不一致的有关问题

以对象作为参数时,提示形参和实参不一致的问题
假如有一个类Tman,我写了一个过程是这样写的;
procedure say(aman:Tman)
begin
  showmessage(aman.name);//name表示一个人的名字;
end;
我在程序中这样调用;
  say(tman.create) 可以执行
但如果将 过程改为
 procedure say(var aman:Tman)
begin
  showmessage(aman.name);//name表示一个人的名字;
end;
程序中再调用 say(tman.create)就提示形参与实参类型不一致,
两个过程只有一个var的区别,但转递的都是一个tman的对象(其实是一个指针)而已,我知道,var是按地址进行转递,没有var按值进行转递,但怎么会出现形参实参类型不致的问题?有时我用窗体作为参数传递时也会出现这样一个情况,这是怎么回事,这两上过程的参数到底有什么区别,请高手指教多谢!!!!

------解决方案--------------------
procedure say(var aman:Tman)
这样传的参数实际上成了指针(地址)的指针(地址)
比如
procedure setName(aman:Tman)
begin
aman.name:='a';
end; 

setName(aman)
say(aman:Tman)提示的就是a了, 

------解决方案--------------------
procedure say(var aman:Tman);

say(tman.create);


var定义的参数不能tman.create直接传递,定义一个变量接受tman.create,再把该变量做参就得


var
a: tman;
begin
a := tman.create;
say(a);