我在单元文件的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));
}
//---------------------------------------------------------------------------
运行的结果完全如我所料----是正确的!
不知哪位大侠遇到过相同的问题?解决了么?救救兄弟...
...
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));
}
//---------------------------------------------------------------------------
运行的结果完全如我所料----是正确的!
不知哪位大侠遇到过相同的问题?解决了么?救救兄弟...
解决方案 »
- delphi+access的程序,运行越久,cpu使用率越高
- 花钱求购毕业设计(汉字拼音笔画输入法)
- 事务怎么回滚
- cxGrid中如何在按下回车键后,光标移动到下一行(不是下一列!)?
- 比较麻烦的问题。
- 关于dbgrideh的问题!
- TDBgrid中,用ctrl+Delete删除记录时,怎么样才能显示中文的提示啊(默认是英文提示不爽啊)
- 如何把两次查询的内容放在一个DBgrid上?
- 能制造音乐贺卡的软件是怎么做出来的?是封装了编译器吗?
- 为什么同一进程,同一connection,只是不同时候修改了数据,会出现冲突???
- 很简单的问题
- DataGrid 的数据输入问题,我将DataGrid 绑定到一个AdoQuery 控件上……
ShowMessage(IntToStr(PTProgrammeList(TreeviewChannelList.Selected)^.ChannelId));
应该改为:
ShowMessage(IntToStr(PTProgrammeList(TreeviewChannelList.Selected.Data)^.ChannelId));
用ShowMessage(IntToStr(PTProgrammeList(TreeviewChannelList.Selected)^.ChannelId));
试试