मुझे नहीं लगता कि PaintTree
विधि को संशोधित किए बिना इसे कार्यान्वित करने का एक आसान तरीका है क्योंकि नोड घटनाओं में से कोई भी नहीं निकालया जा सकता है क्योंकि नोड जिनकी रेखाएं खींची जानी चाहिए, अभी तक मौजूद नहीं है।
यहां गंदे तरीके निम्नतम दृश्यमान नोड के आधार पर क्षैतिज रेखाओं को अतिरिक्त रूप से आकर्षित करने के लिए कैसे है। वास्तव में यह इस स्क्रीनशॉट में नारंगी रंग से भरा क्षेत्र में DefaultNodeHeight
मूल्य की दूरी के साथ लाइनों ड्रॉ:
यहाँ कोड है:
type
TVirtualStringTree = class(VirtualTrees.TVirtualStringTree)
public
procedure PaintTree(TargetCanvas: TCanvas; Window: TRect; Target: TPoint;
PaintOptions: TVTInternalPaintOptions; PixelFormat: TPixelFormat = pfDevice); override;
end;
implementation
{ TVirtualStringTree }
procedure TVirtualStringTree.PaintTree(TargetCanvas: TCanvas; Window: TRect;
Target: TPoint; PaintOptions: TVTInternalPaintOptions;
PixelFormat: TPixelFormat);
var
I: Integer;
EmptyRect: TRect;
PaintInfo: TVTPaintInfo;
begin
inherited;
if (poGridLines in PaintOptions) and (toShowHorzGridLines in TreeOptions.PaintOptions) and
(GetLastVisible <> nil) then
begin
EmptyRect := GetDisplayRect(GetLastVisible,
Header.Columns[Header.Columns.GetLastVisibleColumn].Index, False);
EmptyRect := Rect(ClientRect.Left, EmptyRect.Bottom + DefaultNodeHeight,
EmptyRect.Right, ClientRect.Bottom);
ZeroMemory(@PaintInfo, SizeOf(PaintInfo));
PaintInfo.Canvas := TargetCanvas;
for I := 0 to ((EmptyRect.Bottom - EmptyRect.Top) div DefaultNodeHeight) do
begin
PaintInfo.Canvas.Font.Color := Colors.GridLineColor;
DrawDottedHLine(PaintInfo, EmptyRect.Left, EmptyRect.Right,
EmptyRect.Top + (I * DefaultNodeHeight));
end;
end;
end;
और यहाँ निरंतर साथ परिणाम और चर नोड ऊंचाई:
गड़बड़ (बाईं तरफ से स्थानांतरित लाइनें) ऊपर स्क्रीनशॉट पर दिखाई देने वाली एक बिंदीदार रेखा प्रतिपादन का एक परिणाम है। यदि आप प्रॉपर्टी को अपने वर्चुअल ट्री व्यू पर lsSolid
पर सेट करते हैं तो आपको सही परिणाम दिखाई देगा।
अब परिणाम देखकर आयताकार स्थानांतरित हो गया है। मैं इसे बाद में ठीक कर दूंगा (मुझे अभी जाना है)। लेकिन फिर भी यह काफी गंदे समाधान है। – TLama
बिलकुल गंदा नहीं! वास्तव में बहुत अच्छा है! आपका बहुत बहुत धन्यवाद! –
पुhew, रेखा की स्थिति सही थी। यह बिंदीदार रेखा प्रतिपादन के कारण हुआ था। हालांकि एक बग था। लाइन के दाएं बाउंड को निर्धारित करने के लिए मैं इंडेक्स 'हेडर' कॉलम के साथ कॉलम का उपयोग कर रहा था। गणना - 1' क्या गलत था। यदि आप उदा। 2 कॉलम और दूसरे स्थान को पहली स्थिति में ले जाया गया, इंडेक्स मुझे उपयोग करना चाहिए (सबसे सही कॉलम का सूचकांक) 0 था, 1 नहीं ('हेडर। कॉलम। काउंटर - 1' क्या था)। अब मैं उस 'GetLastVisibleColumn' के लिए उपयोग कर रहा हूं, सही तरीका क्या होना चाहिए। – TLama