From 5f4b958da507d4a4cd0f09979f5ab229a9a6c5b4 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Sun, 28 Feb 2016 10:58:25 +0000 Subject: [PATCH] BiffExplorer: Improved scrolling of virtual tree. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4525 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- applications/biffexplorer/bemain.lfm | 2 ++ applications/biffexplorer/bemain.pas | 35 ++++++++++++++++++++++++++-- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/applications/biffexplorer/bemain.lfm b/applications/biffexplorer/bemain.lfm index 1d8055a1c..f34d5a54e 100644 --- a/applications/biffexplorer/bemain.lfm +++ b/applications/biffexplorer/bemain.lfm @@ -313,6 +313,8 @@ object MainForm: TMainForm OnGetText = BIFFTreeGetText OnPaintText = BIFFTreePaintText OnGetNodeDataSize = BIFFTreeGetNodeDataSize + OnResize = BIFFTreeResize + OnScroll = BIFFTreeScroll end end object StatusBar: TStatusBar diff --git a/applications/biffexplorer/bemain.pas b/applications/biffexplorer/bemain.pas index ae5eb76de..66f50ab1d 100644 --- a/applications/biffexplorer/bemain.pas +++ b/applications/biffexplorer/bemain.pas @@ -108,6 +108,8 @@ type procedure BIFFTreePaintText(Sender: TBaseVirtualTree; const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType); + procedure BIFFTreeResize(Sender: TObject); + procedure BIFFTreeScroll(Sender: TBaseVirtualTree; DeltaX, DeltaY: Integer); procedure CbFindChange(Sender: TObject); procedure CbFindKeyPress(Sender: TObject; var Key: char); procedure CbHexAddressChange(Sender: TObject); @@ -491,22 +493,50 @@ begin 1: CellText := Format('$%.4x', [data^.RecordID]); 2: CellText := data^.RecordName; 3: if data^.Index > -1 then CellText := IntToStr(data^.Index); - 4: cellText := data^.RecordDescription; + 4: CellText := data^.RecordDescription; end; end; end; +{ Paint parent node in bold font. } procedure TMainForm.BIFFTreePaintText(Sender: TBaseVirtualTree; const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType); begin - // Paint parent node in bold font. if (Sender.GetNodeLevel(Node) = 0) and (Column = 0) then TargetCanvas.Font.Style := [fsBold]; end; +{ Make the BIFFTree show complete lines. + See https://stackoverflow.com/questions/929600/how-can-virtual-treeview-control-be-made-to-always-scroll-by-lines?rq=1} +procedure TMainForm.BIFFTreeResize(Sender: TObject); +var + DY: integer; +begin + with BiffTree do begin + DY := BiffTree.DefaultNodeHeight; + BottomSpace := ClientHeight mod DY; + BiffTree.OffsetY := Round(BiffTree.OffsetY / DY) * DY; + end; +end; + + +{ Make the BIFFTree scroll by lines, not by pixels. + See https://stackoverflow.com/questions/929600/how-can-virtual-treeview-control-be-made-to-always-scroll-by-lines?rq=1} +procedure TMainForm.BIFFTreeScroll(Sender: TBaseVirtualTree; + DeltaX, DeltaY: Integer); +var + DY: integer; +begin + if DeltaY <> 0 then begin + DY := BiffTree.DefaultNodeHeight; + BiffTree.OffsetY := Round(BiffTree.OffsetY / DY) * DY; + end; +end; + + procedure TMainForm.CbFindChange(Sender: TObject); begin ExecFind(true, true); @@ -732,6 +762,7 @@ begin BiffTree.DefaultNodeHeight := BiffTree.Canvas.TextHeight('Tg') + 4; BiffTree.Header.DefaultHeight := ValueGrid.DefaultRowHeight; + BiffTree.ScrollBarOptions.VerticalIncrement := BiffTree.DefaultNodeHeight; UpdateCmds; end;