PEmployee = ^Employee;                   这个是定义  摘抄
  Employee = record
      ID,                          
      BranchID        :Integer;    
      LoginName,                   
      Password        :String[20]; 
      Name            :String[40]; 
      Sex             :String[1];  
      State           :String[20]; 
end;Me                 :PEmployee;     摘抄  if PEmployee(TbsskinTreeview.Selected.Data).ID = Me.ID then      这个是其中的一条语句
  begin
    MessageBox(Handle, '不能与您自己对话!', '提示', MB_ICONINFORMATION);
    exit;
  end;
TbsskinTreeview.Selected.Data是没有ID这个属性的,ID是PEmployee给出来的PEmployee(TbsskinTreeview.Selected.Data).ID 这样写究竟是什么意思··  搞不明白啊~~~~

解决方案 »

  1.   

    为什么TbsskinTreeview.Selected.Data可以放到PEmployee里面去???????????????
      

  2.   

    强制类型转换因为Data是Pointer指针类型,可以保存任何指针类型的数据
    你看看前文,添加到Data中的数据是不是PEmployee类型;所以取值的时候要转换成对应的类型,即PEmployee(...)
      

  3.   

    PEmployee(TbsskinTreeview.Selected.Data).ID 
    treeview的node有一个data属性,保留指针,那么
    PEmployee(TbsskinTreeview.Selected.Data)就是讲data内容转为PEmployee指针,然后既可以访问PEmployee中的ID字段了
      

  4.   

    PEmployee(TbsskinTreeview.Selected.Data).ID 实际上应该是  PEmployee(TbsskinTreeview.Selected.Data)^.ID
    不过Delphi中可以省略 "^"
     
    TbsskinTreeview.Selected.Data是 Pointer类型
    Pointer是Delphi中最基本的指针类型.. 
    所以就可以这样强制转化使用了. PEmployee(TbsskinTreeview.Selected.Data)^这里加"^" 是解除绑定的意思..
    这里的节点,你在添加的时候应该是类似这样的
    var
     p: PEmployee;
    begin
     new(p);
     //给P下所有数据进行赋值 操作
     
     tv1.Items.AddChildObject(nil,'显示信息',TObject(p))