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
OnPaintText = BIFFTreePaintText
OnGetNodeDataSize = BIFFTreeGetNodeDataSize
OnResize = BIFFTreeResize
OnScroll = BIFFTreeScroll
end
end
object StatusBar: TStatusBar

View File

@ -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;