📄 virtualtrees.pas
字号:
ivsHasChildren,
ivsMultiline,
ivsSelected
);
TVirtualNodeInitStates = set of TVirtualNodeInitState;
TScrollBarStyle = (
sbmRegular,
sbmFlat,
sbm3D
);
// Options per column.
TVTColumnOption = (
coAllowClick, // Column can be clicked (must be enabled too).
coDraggable, // Column can be dragged.
coEnabled, // Column is enabled.
coParentBidiMode, // Column uses the parent's bidi mode.
coParentColor, // Column uses the parent's background color.
coResizable, // Column can be resized.
coShowDropMark, // Column shows the drop mark if it is currently the drop target.
coVisible, // Column is shown.
coAutoSpring, // Column takes part in the auto spring feature of the header (must be resizable too).
coFixed // Column is fixed and can not be selected or scrolled etc.
);
TVTColumnOptions = set of TVTColumnOption;
// These flags are returned by the hit test method.
THitPosition = (
hiAbove, // above the client area (if relative) or the absolute tree area
hiBelow, // below the client area (if relative) or the absolute tree area
hiNowhere, // no node is involved (possible only if the tree is not as tall as the client area)
hiOnItem, // on the bitmaps/buttons or label associated with an item
hiOnItemButton, // on the button associated with an item
hiOnItemCheckbox, // on the checkbox if enabled
hiOnItemIndent, // in the indentation area in front of a node
hiOnItemLabel, // on the normal text area associated with an item
hiOnItemLeft, // in the area to the left of a node's text area (e.g. when right aligned or centered)
hiOnItemRight, // in the area to the right of a node's text area (e.g. if left aligned or centered)
hiOnNormalIcon, // on the "normal" image
hiOnStateIcon, // on the state image
hiToLeft, // to the left of the client area (if relative) or the absolute tree area
hiToRight // to the right of the client area (if relative) or the absolute tree area
);
THitPositions = set of THitPosition;
TCheckType = (
ctNone,
ctTriStateCheckBox,
ctCheckBox,
ctRadioButton,
ctButton
);
// The check states include both, transient and fluent (temporary) states. The only temporary state defined so
// far is the pressed state.
TCheckState = (
csUncheckedNormal, // unchecked and not pressed
csUncheckedPressed, // unchecked and pressed
csCheckedNormal, // checked and not pressed
csCheckedPressed, // checked and pressed
csMixedNormal, // 3-state check box and not pressed
csMixedPressed // 3-state check box and pressed
);
TCheckImageKind = (
ckLightCheck, // gray cross
ckDarkCheck, // black cross
ckLightTick, // gray tick mark
ckDarkTick, // black tick mark
ckFlat, // flat images (no 3D border)
ckXP, // Windows XP style
ckCustom, // application defined check images
ckSystem, // System defined check images.
ckSystemFlat // Flat system defined check images.
);
// mode to describe a move action
TVTNodeAttachMode = (
amNoWhere, // just for simplified tests, means to ignore the Add/Insert command
amInsertBefore, // insert node just before destination (as sibling of destination)
amInsertAfter, // insert node just after destionation (as sibling of destination)
amAddChildFirst, // add node as first child of destination
amAddChildLast // add node as last child of destination
);
// modes to determine drop position further
TDropMode = (
dmNowhere,
dmAbove,
dmOnNode,
dmBelow
);
// operations basically allowed during drag'n drop
TDragOperation = (
doCopy,
doMove,
doLink
);
TDragOperations = set of TDragOperation;
TVTImageKind = (
ikNormal,
ikSelected,
ikState,
ikOverlay
);
TVTHintMode = (
hmDefault, // show the hint of the control
hmHint, // show node specific hint string returned by the application
hmHintAndDefault, // same as hmHint but show the control's hint if no node is concerned
hmTooltip // show the text of the node if it isn't already fully shown
);
// Indicates how to format a tooltip.
TVTTooltipLineBreakStyle = (
hlbDefault, // Use multi-line style of the node.
hlbForceSingleLine, // Use single line hint.
hlbForceMultiLine // Use multi line hint.
);
TMouseButtons = set of TMouseButton;
// Used to describe the action to do when using the OnBeforeItemErase event.
TItemEraseAction = (
eaColor, // Use the provided color to erase the background instead the one of the tree.
eaDefault, // The tree should erase the item's background (bitmap or solid).
eaNone // Do nothing. Let the application paint the background.
);
// There is a heap of switchable behavior in the tree. Since published properties may never exceed 4 bytes,
// which limits sets to at most 32 members, and because for better overview tree options are splitted
// in various sub-options and are held in a commom options class.
//
// Options to customize tree appearance:
TVTPaintOption = (
toHideFocusRect, // Avoid drawing the dotted rectangle around the currently focused node.
toHideSelection, // Selected nodes are drawn as unselected nodes if the tree is unfocused.
toHotTrack, // Track which node is under the mouse cursor.
toPopupMode, // Paint tree as would it always have the focus (useful for tree combo boxes etc.)
toShowBackground, // Use the background image if there's one.
toShowButtons, // Display collapse/expand buttons left to a node.
toShowDropmark, // Show the dropmark during drag'n drop operations.
toShowHorzGridLines, // Display horizontal lines to simulate a grid.
toShowRoot, // Show lines also at top level (does not show the hidden/internal root node).
toShowTreeLines, // Display tree lines to show hierarchy of nodes.
toShowVertGridLines, // Display vertical lines (depending on columns) to simulate a grid.
toThemeAware, // Draw UI elements (header, tree buttons etc.) according to the current theme if
// enabled (Windows XP+ only, application must be themed).
toUseBlendedImages, // Enable alpha blending for ghosted nodes or those which are being cut/copied.
toGhostedIfUnfocused, // Ghosted images are still shown as ghosted if unfocused (otherwise the become non-ghosted
// images).
toFullVertGridLines, // Display vertical lines over the full client area, not only the space occupied by nodes.
// This option only has an effect if toShowVertGridLines is enabled too.
toAlwaysHideSelection, // Do not draw node selection, regardless of focused state.
toUseBlendedSelection, // Enable alpha blending for node selections.
toStaticBackground // Show simple static background instead of a tiled one.
);
TVTPaintOptions = set of TVTPaintOption;
// Options to toggle animation support:
TVTAnimationOption = (
toAnimatedToggle // Expanding and collapsing a node is animated (quick window scroll).
);
TVTAnimationOptions = set of TVTAnimationOption;
// Options which toggle automatic handling of certain situations:
TVTAutoOption = (
toAutoDropExpand, // Expand node if it is the drop target for more than a certain time.
toAutoExpand, // Nodes are expanded (collapsed) when getting (losing) the focus.
toAutoScroll, // Scroll if mouse is near the border while dragging or selecting.
toAutoScrollOnExpand, // Scroll as many child nodes in view as possible after expanding a node.
toAutoSort, // Sort tree when Header.SortColumn or Header.SortDirection change or sort node if
// child nodes are added.
toAutoSpanColumns, // Large entries continue into next column(s) if there's no text in them (no clipping).
toAutoTristateTracking, // Checkstates are automatically propagated for tri state check boxes.
toAutoHideButtons, // Node buttons are hidden when there are child nodes, but all are invisible.
toAutoDeleteMovedNodes, // Delete nodes which where moved in a drag operation (if not directed otherwise).
toDisableAutoscrollOnFocus,// Disable scrolling a column entirely into view if it gets focused.
toAutoChangeScale, // Change default node height automatically if the system's font scale is set to big fonts.
toAutoFreeOnCollapse, // Frees any child node after a node has been collapsed (HasChildren flag stays there).
toDisableAutoscrollOnEdit // Do not center a node horizontally when it is edited.
);
TVTAutoOptions = set of TVTAutoOption;
// Options which determine the tree's behavior when selecting nodes:
TVTSelectionOption = (
toDisableDrawSelection, // Prevent user from selecting with the selection rectangle in multiselect mode.
toExtendedFocus, // Entries other than in the main column can be selected, edited etc.
toFullRowSelect, // Hit test as well as selection highlight are not constrained to the text of a node.
toLevelSelectConstraint, // Constrain selection to the same level as the selection anchor.
toMiddleClickSelect, // Allow selection, dragging etc. with the middle mouse button. This and toWheelPanning
// are mutual exclusive.
toMultiSelect, // Allow more than one node to be selected.
toRightClickSelect, // Allow selection, dragging etc. with the right mouse button.
toSiblingSelectConstraint, // constrain selection to nodes with same parent
toCenterScrollIntoView, // Center nodes vertically in the client area when scrolling into view.
toSimpleDrawSelection // Simplifies draw selection, so a node's caption does not need to intersect with the
// selection rectangle.
);
TVTSelectionOptions = set of TVTSelectionOption;
// Options which do not fit into any of the other groups:
TVTMiscOption = (
toAcceptOLEDrop, // Register tree as OLE accepting drop target
toCheckSupport, // Show checkboxes/radio buttons.
toEditable, // Node captions can be edited.
toFullRepaintOnResize, // Fully invalidate the tree when its window is resized (CS_HREDRAW/CS_VREDRAW).
toGridExtensions, // Use some special enhancements to simulate and support grid behavior.
toInitOnSave, // Initialize nodes when saving a tree to a stream.
toReportMode, // Tree behaves like TListView in report mode.
toToggleOnDblClick, // Toggle node expansion state when it is double clicked.
toWheelPanning, // Support for mouse panning (wheel mice only). This option and toMiddleClickSelect are
// mutal exclusive, where panning has precedence.
toReadOnly, // The tree does not allow to be modified in any way. No action is executed and
// node editing is not possible.
toVariableNodeHeight, // When set then GetNodeHeight will trigger OnMeasureItem to allow variable node heights.
toFullRowDrag // Start node dragging by clicking anywhere in it instead only on the caption or image.
// Must be used together with toDisableDrawSelection.
);
TVTMiscOptions = set of TVTMiscOption;
const
DefaultPaintOptions = [toShowButtons, toShowButtons, toShowDropmark, toShowTreeLines, toShowRoot, toThemeAware,
toUseBlendedImages];
DefaultAnimationOptions = [];
DefaultAutoOptions = [toAutoDropExpand, toAutoTristateTracking, toAutoScrollOnExpand, toAutoDeleteMovedNodes];
DefaultSelectionOptions = [];
DefaultMiscOptions = [toAcceptOLEDrop, toFullRepaintOnResize, toInitOnSave, toToggleOnDblClick, toWheelPanning];
DefaultColumnOptions = [coAllowClick, coDraggable, coEnabled, coParentColor, coParentBidiMode, coResizable,
coShowDropmark, coVisible];
type
TBaseVirtualTree = class;
TVirtualTreeClass = class of TBaseVirtualTree;
PVirtualNode = ^TVirtualNode;
TColumnIndex = type Integer;
TColumnPosition = type Cardinal;
// This record must already be defined here and not later because otherwise BCB users will not be able
// to compile (conversion done by BCB is wrong).
TCacheEntry = record
Node: PVirtualNode;
AbsoluteTop: Cardinal;
end;
TCache = array of TCacheEntry;
TNodeArray = array of PVirtualNode;
TCustomVirtualTreeOptions = class(TPersistent)
private
FOwner: TBaseVirtualTree;
FPaintOptions: TVTPaintOptions;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -