Delphi 2010에서 TreeView가 있습니다. treeview에는 레코드로 정의 된 데이터 객체가 있습니다.Delphi - 레코드에 대한 포인터 전달
// 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 선언을 통해 수행되지만 필자는 이것을 레코드에 대한 POINTER로 선언 했으므로 필요 없다는 것을 알지 못합니다.
어쨌든, 내 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;
문제는이 VAR 선언 예정대로 것처럼 ShowMessage 상자가 항상 비어 있는지 일명 rRedirURL가 다시 전달 가져 오지입니다 ... 다음과 같습니다.
WebEvaluate가 WebEvaluate 루틴 내에서
procedure WebEvaluate(Data1: TNodeRec);
begin
TNodeRec(Data1).rRedirURL := 'Test value'
ShowMessage('In WebEvaluate Routine:' + Data1.rRedirURL);
end
으로 정의된다, Data1.rRedirURL는 할당 된 값이 있습니다. 호출 루틴으로 돌아 가면 값이 손실됩니다. 데이터 1 레코드를 전달하는 방법과 관련이 있다고 생각하지만이를 수정하는 방법을 알지 못합니다 ... 무엇이 잘못 되었나요?
감사