2015-05-11 25 views
3

我想執行搜索過程到VirtualStringTree,我想通過比較搜索文本與來自節點的文本而不是來自指針(例如Data^.Column0),因爲這並不總是StringVirtualStringTree:搜索類型不是字符串的文本

請幫我一個建議,從中取回節點的文本。

爲了更好地理解看到婁代碼(我調整爲例,從拉撒路)

type 
    PTreeData = ^TTreeData; 
    TTreeData = record 
    Column0: TDate; //Date 
    Column1: Integer; //Integer 
    Column2: String; 
    end; 

procedure TForm1.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; 
Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString); 
var 
    Data: PTreeData; 
begin 
    Data := VST.GetNodeData(Node); 
    case Column of 
    0: CellText := DateToStr(Data^.Column0); //2015-05-11 or 11-05-2015 
    1: CellText := IntToStr(Data^.Column1) + ' days'; //22 days 
    2: CellText := Data^.Column2; 
    end; 
end; 
+0

你怎麼打算,如果你讓他們通過鏈接來獲取節點的數據節點數據指針?如果你在問如何編寫一個通用的解決方案,那麼你的問題(很可能)會縮小到如何通過文本搜索簡單類型,並丟棄虛擬樹和指針的東西。剩下的將是*我有一個記錄集合(通過節點指針在虛擬樹內部),其中我想通過文本*搜索任何簡單的類型字段。 – TLama

+0

如果沒有辦法,我會添加到'record'' ColumnOAsText'這將是'Data^.Column0AsText:= DateToStr(Data^.Column0)',我將通過字符串執行搜索。 – REALSOFO

+0

我無法理解這一點。您已有代碼來返回每列的文本表示形式。 –

回答

3

如果你想獲得一個虛擬樹視圖單元格的文本,那麼你可以使用Text屬性。這將在內部觸發OnGetText事件,你就可以得到就像你正在返回它在樹中顯示的文本:

var 
    S: string; 
    Node: PVirtualNode; 
    Column: TColumnIndex; 
begin 
    ... 
    S := VirtualStringTree.Text[Node, Column]; 
end; 
+0

這就是我正在尋找的......謝謝@TLama。 – REALSOFO

+1

不客氣!但是,好吧,我不是這種方式的忠實粉絲。我寧願傾向於創建一個記錄*糖*方法,使用字段索引參數(您將傳遞列索引)的'ToString'類型。你的'OnGetText'處理程序中的代碼將變成'CellText:= Data.ToString(Column);'(但它取決於你喜歡什麼以及你擁有哪個Delphi版本)。 – TLama

+0

我的意思是['像這樣的東西]「(http://pastebin.com/2ZDpdr2V)。 – TLama