我接受了我的建議,或者至少我認爲我擁有我的previous question。總之,我用TreeList替換了TMS中的THTMLTreeList,並在其中創建了兩列。我的第一列設置爲150個像素和我推翻這個代碼AdvancedCustomDrawItem事件:如何在TTreeview中剪輯文本(續)
procedure TForm1.trXMLAdvancedCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
var PaintImages, DefaultDraw: Boolean);
var hContext: HDC;
s: PChar;
iLength: Integer;
uRect: TRect;
begin
DefaultDraw := False;
hContext := trXML.Canvas.Handle;
s := PChar(Node.Text);
iLength := Length(Node.Text);
uRect := Node.DisplayRect(True);
DrawText(hContext, s, iLength, uRect, DT_END_ELLIPSIS);
end;
我得到的結果,我希望,那就是,當我畫的樹,在第一列中的文本進行裁剪。當我改變第一列的大小時,文本會被適當地裁剪。但是,當TreeList不夠寬並且底部有一個滾動條並且我向右滾動時,文本現在延伸到第二列的數量與滾動條移動的數量相同。這就像文本是相對於TreeList的客戶區域繪製的,而不是部分隱藏的第一列,所以它總是將150像素延伸到TreeList中。
在我看來,我對設備上下文句柄或TRect使用了錯誤的東西,但我做了很少的圖形類型編程,所以我不知道要更改什麼。任何幫助,將不勝感激。
您不應該使用發件人的句柄嗎? –
我的意思是Sender.Handle而不是Sender.Canvas.Handle。 –
我不知道。這可能是對的。好。我嘗試過這個。我得到了同樣的結果。如果您在表單上放置TTreeList並使用上面的代碼覆蓋它的AdvancedCustomDrawItem事件,您將明白我的意思。對我來說這是一個黑匣子,所以我會嘗試任何事情,但這並沒有解決它。 – jrodenhi