1
0
mirror of synced 2024-12-22 17:23:07 +01:00
x2utils/X2UtVirtualTree.pas

102 lines
2.8 KiB
ObjectPascal
Raw Normal View History

{
:: X2UtVirtualTree provides a set of functions commonly used with
:: TVirtualTree (http://www.delphi-gems.com/).
::
:: Last changed: $Date$
:: Revision: $Rev$
:: Author: $Author$
}
unit X2UtVirtualTree;
interface
uses
2005-01-25 11:44:32 +01:00
Graphics,
2005-02-26 23:06:31 +01:00
VirtualTrees,
Windows;
2005-02-26 23:06:31 +01:00
//:$ Applies the sort order on the specified column.
//:: When a column is already sorted, the sort order is reversed.
2005-01-25 11:44:32 +01:00
//:: Specify a SortColor to provide the new column with that color
//:: (similar to Explorer in Windows XP). If you choose to use SortColor,
//:: the column's Tag property will be used to restore the color when calling
//:: SortColumn for the second time, so be sure not to rely on that.
procedure SortColumn(const AHeader: TVTHeader;
2005-01-25 11:44:32 +01:00
const AColumn: TColumnIndex;
const ASortColor: TColor = clNone;
const AApplySort: Boolean = True);
2005-02-26 23:06:31 +01:00
//:$ Calculates the position of an image in a virtual string tree.
function CalcImagePos(const ATree: TVirtualStringTree;
const ANode: PVirtualNode;
const ACellRect: TRect): TPoint;
2005-02-26 23:06:31 +01:00
implementation
2005-02-26 23:06:31 +01:00
procedure SortColumn(const AHeader: TVTHeader;
const AColumn: TColumnIndex;
const ASortColor: TColor;
const AApplySort: Boolean);
begin
with AHeader do
2005-01-25 11:44:32 +01:00
begin
if (ASortColor <> clNone) and (SortColumn <> -1) then
with Columns[SortColumn] do
if Tag <> 0 then
begin
if Tag = clNone then
Options := Options + [coParentColor]
else
Color := Tag;
2005-01-25 11:44:32 +01:00
Tag := 0;
end;
if AApplySort then
if SortColumn = AColumn then
SortDirection := TSortDirection(1 - Integer(SortDirection))
else begin
SortColumn := AColumn;
SortDirection := sdAscending;
end;
2005-01-25 11:44:32 +01:00
if ASortColor <> clNone then
with Columns[SortColumn] do
begin
if coParentColor in Options then
Tag := clNone
else
Tag := Color;
2005-01-25 11:44:32 +01:00
Color := ASortColor;
end;
end;
end;
2005-02-26 23:06:31 +01:00
function CalcImagePos(const ATree: TVirtualStringTree;
const ANode: PVirtualNode;
const ACellRect: TRect): TPoint;
2005-02-26 23:06:31 +01:00
var
pNode: PVirtualNode;
begin
Result := ACellRect.TopLeft;
2005-02-26 23:06:31 +01:00
with ATree do
begin
pNode := ANode;
if Assigned(pNode) and not (toShowRoot in ATree.TreeOptions.PaintOptions) then
pNode := pNode^.Parent;
2005-02-26 23:06:31 +01:00
while Assigned(pNode) and (pNode <> ATree.RootNode) do
begin
Inc(Result.X, Indent);
pNode := pNode^.Parent;
end;
Inc(Result.X, Margin);
Inc(Result.Y, (Integer(NodeHeight[ANode]) - Images.Height) div 2);
end;
end;
end.