【发布时间】:2014-01-29 15:00:57
【问题描述】:
在 Delphi 2010 中, 我有一个树视图。树视图有一个定义为记录的数据对象。
// Define the Data Object that will be associated with each Node
type
TNodeRec = record
rId: Integer;
rDate: TDateTime;
rSite: string;
rURL: string;
rRedirURL: string;
rTitle: string;
rCategory: String;
rURL_RtnCode: Integer;
rURL_RtnText: String
end;
我将此数据对象与树视图中的每个节点相关联,然后填写值。这工作正常....
var
BuffData: ^TNodeRec; // The data object associated with each node;
URLNode: TTreeNode;
begin
...
// Create our New Data Object
new(BuffData);
BuffData^.rId := 0;
BuffData^.rDate := EDate;
BuffData^.rURL := ElString;
BuffData^.rRedirURL := '';
BuffData^.rTitle := ElText;
URLNode := TV1.Items.AddChildObject(nil, BuffData^.rTitle, BuffData);
我的挑战是,从 buttonClick 事件中,我需要将此数据对象传递给另一个例程(在另一个 UNIT 中)以对其进行修改,并将修改后的值提供给调用例程...这通常可以通过VAR 声明,但我不知道我需要它,因为我已将其声明为指向记录的指针。
无论如何,我的 ButtonClick 事件看起来像这样......
procedure TURLListForm.btnEvalSelectedClick(Sender: TObject);
var
SelNode : TTreeNode;
BuffData : TNodeRec;
begin
// verify there is a node selected
...
BuffData := TNodeRec(TV1.Selected.Data^);
WebEvaluate(BuffData);
ShowMessage(TNodeRec(TV1.Selected.Data^).rRedirURL);
end;
问题在于 ShowMessage 框始终为空,即 rRedirURL 没有像 VAR 声明那样被传回。
WebEvaluate 定义为
procedure WebEvaluate(Data1: TNodeRec);
begin
TNodeRec(Data1).rRedirURL := 'Test value'
ShowMessage('In WebEvaluate Routine:' + Data1.rRedirURL);
end
在 WebEvaluate 例程中,Data1.rRedirURL 具有分配的值。当我回到调用例程时,该值丢失了。我相信这与我如何传递 Data1 记录有关,但我不知道如何更正它...... 我做错了什么?
谢谢
【问题讨论】:
标签: delphi pointers parameters