improve the horizontal scrollbar so it doesn't only update when resized but also when a new address is added

fix (related to bug 212)
This commit is contained in:
cheatengine@gmail.com 2013-04-13 09:59:49 +00:00
parent 19fd2516f6
commit 952c40f2e9
2 changed files with 46 additions and 21 deletions

View File

@ -434,6 +434,8 @@ type
procedure setupColors; procedure setupColors;
procedure miSelectStructureClick(Sender: tobject); procedure miSelectStructureClick(Sender: tobject);
function getHorizontalScrollbarString: String; //returns a string out of spaces that fills up the length of all the columns combined
procedure SetupFirstNodeLength;
procedure InitializeFirstNode; procedure InitializeFirstNode;
procedure RefreshStructureList; procedure RefreshStructureList;
procedure TreeViewHScroll(sender: TObject; scrolledleft, maxscrolledleft: integer); procedure TreeViewHScroll(sender: TObject; scrolledleft, maxscrolledleft: integer);
@ -2268,6 +2270,8 @@ end;
procedure TfrmStructures2.TreeViewHScroll(sender: TObject; scrolledleft, maxscrolledleft: integer); procedure TfrmStructures2.TreeViewHScroll(sender: TObject; scrolledleft, maxscrolledleft: integer);
begin begin
HeaderControl1.Left:=-scrolledleft; HeaderControl1.Left:=-scrolledleft;
HeaderControl1.Width:=tvStructureView.clientwidth +maxscrolledleft+100; HeaderControl1.Width:=tvStructureView.clientwidth +maxscrolledleft+100;
end; end;
@ -2353,27 +2357,10 @@ var x: integer;
begin begin
x:=(HeaderControl1.Sections[HeaderControl1.Sections.Count-1].Left+HeaderControl1.Sections[HeaderControl1.Sections.Count-1].Width); SetupFirstNodeLength;
tvStructureView.ClientWidth:=x; tvStructureView.ReAlign;
if tvStructureView.Items.Count>0 then
begin
//make the first line (structname) as long as x
if mainStruct<>nil then
begin
s:=' ';
while tvStructureView.Canvas.TextWidth(s)<x do
s:=s+' ';
tvStructureView.items[0].Text:=s;
end;
end;
tvStructureView.Refresh;
HeaderControl.Left:=-tvStructureView.scrolledleft;
end; end;
procedure TfrmStructures2.RefreshVisibleNodes; procedure TfrmStructures2.RefreshVisibleNodes;
@ -2791,6 +2778,33 @@ begin
result:=mainStruct; result:=mainStruct;
end; end;
function TfrmStructures2.getHorizontalScrollbarString: String; //returns a string out of spaces that fills up the length of all the columns combined
var
i: integer;
s: THeaderSection;
totalwidth: integer;
currentwidth: integer;
begin
currentwidth:=0;
result:='';
s:=HeaderControl1.Sections[HeaderControl1.Sections.Count-1];
totalwidth:=s.Left+s.Width;
while currentwidth<totalwidth do
begin
result:=result+' ';
currentwidth:=tvStructureView.Canvas.GetTextWidth(result);
end;
end;
procedure TfrmStructures2.SetupFirstNodeLength;
begin
if tvStructureView.items.count>0 then
tvStructureView.Items[0].Text:=getHorizontalScrollbarString;
end;
procedure TfrmStructures2.InitializeFirstNode; procedure TfrmStructures2.InitializeFirstNode;
//Clear the screen and setup the first node //Clear the screen and setup the first node
var tn: TTreenode; var tn: TTreenode;
@ -2802,6 +2816,9 @@ begin
tn.Data:=mainStruct; tn.Data:=mainStruct;
tn.HasChildren:=true; tn.HasChildren:=true;
tn.Expand(false); tn.Expand(false);
SetupFirstNodeLength;
end; end;
end; end;
@ -3524,12 +3541,14 @@ begin
else else
result:=TStructColumn.create(c.parent); result:=TStructColumn.create(c.parent);
SetupFirstNodeLength;
RefreshVisibleNodes; RefreshVisibleNodes;
end; end;
procedure TfrmStructures2.removeColumn(columnid: integer); procedure TfrmStructures2.removeColumn(columnid: integer);
begin begin
columns[columnid].free; columns[columnid].free;
SetupFirstNodeLength;
RefreshVisibleNodes; RefreshVisibleNodes;
end; end;

View File

@ -23,12 +23,13 @@ type
public public
procedure WMHScroll(var Msg: TLMScroll); message LM_HSCROLL; procedure WMHScroll(var Msg: TLMScroll); message LM_HSCROLL;
procedure WMVScroll(var Msg: TLMScroll); message LM_VSCROLL; procedure WMVScroll(var Msg: TLMScroll); message LM_VSCROLL;
procedure ForceScrollbarChange;
// procedure resize; // procedure resize;
published published
property ScrolledLeft;
property onHScroll: THScrollEvent read fOnHScroll write fOnHScroll; property onHScroll: THScrollEvent read fOnHScroll write fOnHScroll;
property onVScroll: TNotifyEvent read fOnVScroll write fOnVScroll; property onVScroll: TNotifyEvent read fOnVScroll write fOnVScroll;
property Align; property Align;
@ -125,6 +126,11 @@ type
implementation implementation
procedure TTreeview.ForceScrollbarChange;
begin
GetMaxScrollLeft;
end;
procedure TTreeview.WMVScroll(var Msg: TLMScroll); procedure TTreeview.WMVScroll(var Msg: TLMScroll);
begin begin
inherited WMVScroll(msg); inherited WMVScroll(msg);