BiffExplorer: Improved scrolling of virtual tree.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4525 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2016-02-28 10:58:25 +00:00
parent d28952365f
commit 5f4b958da5
2 changed files with 35 additions and 2 deletions

View File

@@ -313,6 +313,8 @@ object MainForm: TMainForm
OnGetText = BIFFTreeGetText OnGetText = BIFFTreeGetText
OnPaintText = BIFFTreePaintText OnPaintText = BIFFTreePaintText
OnGetNodeDataSize = BIFFTreeGetNodeDataSize OnGetNodeDataSize = BIFFTreeGetNodeDataSize
OnResize = BIFFTreeResize
OnScroll = BIFFTreeScroll
end end
end end
object StatusBar: TStatusBar object StatusBar: TStatusBar

View File

@@ -108,6 +108,8 @@ type
procedure BIFFTreePaintText(Sender: TBaseVirtualTree; procedure BIFFTreePaintText(Sender: TBaseVirtualTree;
const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
TextType: TVSTTextType); TextType: TVSTTextType);
procedure BIFFTreeResize(Sender: TObject);
procedure BIFFTreeScroll(Sender: TBaseVirtualTree; DeltaX, DeltaY: Integer);
procedure CbFindChange(Sender: TObject); procedure CbFindChange(Sender: TObject);
procedure CbFindKeyPress(Sender: TObject; var Key: char); procedure CbFindKeyPress(Sender: TObject; var Key: char);
procedure CbHexAddressChange(Sender: TObject); procedure CbHexAddressChange(Sender: TObject);
@@ -491,22 +493,50 @@ begin
1: CellText := Format('$%.4x', [data^.RecordID]); 1: CellText := Format('$%.4x', [data^.RecordID]);
2: CellText := data^.RecordName; 2: CellText := data^.RecordName;
3: if data^.Index > -1 then CellText := IntToStr(data^.Index); 3: if data^.Index > -1 then CellText := IntToStr(data^.Index);
4: cellText := data^.RecordDescription; 4: CellText := data^.RecordDescription;
end; end;
end; end;
end; end;
{ Paint parent node in bold font. }
procedure TMainForm.BIFFTreePaintText(Sender: TBaseVirtualTree; procedure TMainForm.BIFFTreePaintText(Sender: TBaseVirtualTree;
const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
TextType: TVSTTextType); TextType: TVSTTextType);
begin begin
// Paint parent node in bold font.
if (Sender.GetNodeLevel(Node) = 0) and (Column = 0) then if (Sender.GetNodeLevel(Node) = 0) and (Column = 0) then
TargetCanvas.Font.Style := [fsBold]; TargetCanvas.Font.Style := [fsBold];
end; 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); procedure TMainForm.CbFindChange(Sender: TObject);
begin begin
ExecFind(true, true); ExecFind(true, true);
@@ -732,6 +762,7 @@ begin
BiffTree.DefaultNodeHeight := BiffTree.Canvas.TextHeight('Tg') + 4; BiffTree.DefaultNodeHeight := BiffTree.Canvas.TextHeight('Tg') + 4;
BiffTree.Header.DefaultHeight := ValueGrid.DefaultRowHeight; BiffTree.Header.DefaultHeight := ValueGrid.DefaultRowHeight;
BiffTree.ScrollBarOptions.VerticalIncrement := BiffTree.DefaultNodeHeight;
UpdateCmds; UpdateCmds;
end; end;