在德爾福2010年, 我有一個TreeView。樹視圖具有一個定義爲記錄的數據對象。德爾福 - 傳遞指向記錄
// 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;
我把這個數據對象與treeview中的EACH節點關聯起來,然後我填入數值。這工作得很好....
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事件,我需要這個數據對象傳遞到另一個程序(在其他單位)進行修改,並有可供修改的值調用例程...這通常通過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記錄有關,但我不知道如何糾正它... 我在做什麼錯了?
感謝