我在单元文件的interface部分定义如下
...
interface
...
type
  PTProgrammeList = ^TProgrammeList;
  TProgrammeList = record
    ChannelId: integer;
  end;
...
//form的定义
    TreeviewChannelList: TTreeView;
...
    procedure FormCreate(Sender: TObject);
    procedure TreeviewChannelListClick(Sender: TObject);
...
实现部分如下
implementation
...
//---------------------------------------------------------------------------------------
procedure TfrmMainInput.FormCreate(Sender: TObject);
var
  i: integer;
  tempData: PTProgrammeList;
begin
for i := 0 to 20 do
begin
        New(tempData);
        aTempProgramList^.ChannelId := i;
        TreeviewChannelList.Items.AddObject(nil, IntToStr(i), tempData);
end;
end;
//---------------------------------------------------------------------------------------
procedure TfrmMainInput.TreeviewChannelListClick(Sender: TObject);
begin
if TreeviewChannelList.TreeviewChannelList.Selected <> nil then
      ShowMessage(IntToStr(PTProgrammeList(TreeviewChannelList.Selected)^.ChannelId));
end;
...各位大侠猜猜,在点击TreeView上的Node的的时候我看到的Message是什么?-------不是与Node的Text同样的值,而是4489704...呜呜...
怀着疑问,我到BCB6下边了一个类似的测试程序,如下:
h文件:
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
//---------------------------------------------------------------------------
struct My
{
               int  i;
};
typedef My* PMy;class TForm1 : public TForm
{
__published: // IDE-managed Components
        TTreeView *TreeView1;
        void __fastcall FormCreate(TObject *Sender);
        void __fastcall TreeView1Click(TObject *Sender);
private: // User declarations
public: // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endifcpp文件L=:
#include <vcl.h>
#pragma hdrstop#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
        for(int i = 0; i < 50; ++ i)
        {
                My *a = new My();
                a->i = i;
                TreeView1->Items->AddObject(NULL, IntToStr(i), a);
        }
}
//---------------------------------------------------------------------------void __fastcall TForm1::TreeView1Click(TObject *Sender)
{
        if(TreeView1->Selected != NULL)
                ShowMessage(IntToStr(PMy(TreeView1->Selected->Data)->i));
}
//---------------------------------------------------------------------------
运行的结果完全如我所料----是正确的!
不知哪位大侠遇到过相同的问题?解决了么?救救兄弟...

解决方案 »

  1.   

    上面有一行抄错了:       
    ShowMessage(IntToStr(PTProgrammeList(TreeviewChannelList.Selected)^.ChannelId));
    应该改为:
    ShowMessage(IntToStr(PTProgrammeList(TreeviewChannelList.Selected.Data)^.ChannelId));
      

  2.   

    就是这样你才错了
    用ShowMessage(IntToStr(PTProgrammeList(TreeviewChannelList.Selected)^.ChannelId));
    试试
      

  3.   

    怎么会呢?TreeviewChannelList.Selected 是TTreeNode类型的(指针),把TreeviewChannelList.Selected转化成PTProgrammeList的指针或出问题的