⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dccomctrls.pas

📁 获取硬盘相关详细信息
💻 PAS
📖 第 1 页 / 共 5 页
字号:
{*******************************************************************************

  UtilMind Common Controls (ListView and TreeView)
  Used by AppControls and DiskControls
  Original Filename: umComCtrls.pas
  Last updated: May 21, 2002

  Copyright (c) 1999-2003 UtilMind Solutions
  All rights reserved.
  E-Mail: info@utilmind.com
  WWW: http://www.utilmind.com, http://www.appcontrols.com

  The entire contents of this file is protected by International Copyright
Laws. Unauthorized reproduction, reverse-engineering, and distribution of all
or any portion of the code contained in this file is strictly prohibited and
may result in severe civil and criminal penalties and will be prosecuted to
the maximum extent possible under the law.

*******************************************************************************}
{$I umDefines.inc}

unit dcComCtrls;

interface

uses Windows, Messages, Classes, Controls, Graphics,
     ComCtrls, CommCtrl, Menus,
     Registry,
{$IFDEF USEINIFILES}
     IniFiles,
{$ENDIF}
{$IFDEF APPCONTROLS}
     acClasses, acGraphics;
{$ELSE}
     dcInternal;
{$ENDIF}

{$IFDEF VER130}
  {$DEFINE SUBITEMSBUGFIX}
{$ENDIF}
{$IFDEF VER140}
  {$DEFINE SUBITEMSBUGFIX}
{$ENDIF}

type
  TumCustomListView = class;

  TdcListViewSortDirection = (sdAscending, sdDescending);
  TdcListViewSortMarkKind = (mkSunken, mkRaised);
  TdcListViewSortMarkAlign = (maText, maEdge);
  TdcListViewToolTipOption = (ttoInstantShow, ttoLongStay, ttoBelowItem, ttoOffset);
  TdcListViewToolTipOptions = set of TdcListViewToolTipOption;

  TdcListViewDrawHeaderSection = procedure(Sender: TObject; Canvas: TCanvas; Rect: TRect;
                                           ColumnIndex: Integer; Pressed: Boolean) of object;
  TdcListViewToolTipEvent = procedure(Sender: TObject; var ToolTipText: String;
                                      Item: TListItem; LogicalCol: Integer) of object;

{$IFDEF D4}
  TdcListViewCustomDrawSubItemExEvent = procedure(Sender: TObject; Canvas: TCanvas; Rect: TRect;
       Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean) of object;
  TdcListViewColumnDragEvent = procedure(Sender: TObject; ColumnOrders: array of Integer) of object;
{$ENDIF}
  TdcListViewColumnResizeBeginEvent = procedure(Sender: TObject; Column: TListColumn; var AllowResize: Boolean) of object;

  { TdcListViewCursors }
  TdcListViewCursors = class(TPersistent)
  private
    FBorder,
    FHeader,
{$IFDEF APPCONTROLS}
    FHotCursor,
{$ENDIF}    
    FDivider,
    FScrollHorz,
    FScrollVert: TCursor;

    { for internal use }
    ListView: TumCustomListView;

{$IFDEF APPCONTROLS}
    procedure SetHotCursor(Value: TCursor);
{$ENDIF}    
  public
    constructor Create(aListView: TumCustomListView);
  published
    property Border: TCursor read FBorder write FBorder default crDefault;
    property Header: TCursor read FHeader write FHeader default crDefault;
{$IFDEF APPCONTROLS}
    property HotCursor: TCursor read FHotCursor write SetHotCursor default crLinkSelect;
{$ENDIF}
    property Divider: TCursor read FDivider write FDivider default crDefault;
    property ScrollHorz: TCursor read FScrollHorz write FScrollHorz default crDefault;
    property ScrollVert: TCursor read FScrollVert write FScrollVert default crDefault;
  end;

  { TdcListViewHeaderMenu }
  TdcListViewHeaderMenu = class(TPersistent)
  private
    FAlignLeftItem: TComponent;
    FAlignRightItem: TComponent;
    FAlignCenterItem: TComponent;
    FAscendingItem: TComponent;
    FDescendingItem: TComponent;
    FBestFitItem: TComponent;
    FPopupMenu: TPopupMenu;

    { for internal use }
    ListView: TumCustomListView;

    procedure SetAlignLeftItem(Value: TComponent);
    procedure SetAlignRightItem(Value: TComponent);
    procedure SetAlignCenterItem(Value: TComponent);
    procedure SetAscendingItem(Value: TComponent);
    procedure SetDescendingItem(Value: TComponent);
    procedure SetBestFitItem(Value: TComponent);
  public
    constructor Create(aListView: TumCustomListView);
  published
    property AlignLeftItem: TComponent read FAlignLeftItem write SetAlignLeftItem;
    property AlignRightItem: TComponent read FAlignRightItem write SetAlignRightItem;
    property AlignCenterItem: TComponent read FAlignCenterItem write SetAlignCenterItem;
    property AscendingItem: TComponent read FAscendingItem write SetAscendingItem;
    property DescendingItem: TComponent read FDescendingItem write SetDescendingItem;
    property BestFitItem: TComponent read FBestFitItem write SetBestFitItem;
    property PopupMenu: TPopupMenu read FPopupMenu write FPopupMenu;
  end;

  { TdcListViewRegistrySaver }
  TdcListViewRegistrySaver = class(TdcRegistrySaver)
  protected
    procedure DoSaveToRegistry(Reg: TRegistry); override;
    procedure DoLoadFromRegistry(Reg: TRegistry); override;

    {$IFDEF USEINIFILES}
    procedure DoSaveToIniFile(Ini: TIniFile); override;
    procedure DoLoadFromIniFile(Ini: TIniFile); override;
    {$ENDIF}
  end;

  { TumCustomListView }
  {$IFNDEF D4}
  THeaderStyle = (hsButtons, hsFlat);
  TListHotTrackStyle = (htHandPoint, htUnderlineCold, htUnderlineHot);
  TListHotTrackStyles = set of TListHotTrackStyle;
  {$ENDIF}

  TumCustomListView = class(TCustomListView)
  private
    FAbout: String;

    FCursors: TdcListViewCursors;    
    FHeaderColor: TColor;
    FHeaderStyle: THeaderStyle;
    FHeaderMenu: TdcListViewHeaderMenu;
    FShowHeaderMenu, FShowSortMark,
    FShowScrollTips, FShowToolTips: Boolean;
    FSortDirection: TdcListViewSortDirection;
    FSortColumn: Word;
    FSortMarkAlign: TdcListViewSortMarkAlign;
    FSortMarkKind: TdcListViewSortMarkKind;
    FSortMarkImageAsc,
    FSortMarkImageDesc: TPicture;
    FRegistrySaver: TdcListViewRegistrySaver;

{$IFDEF D3}
    FCheckOnClick: Boolean; 
{$ELSE}
    FGridLines, FHotTrack, FRowSelect: Boolean;
{$ENDIF}
{$IFNDEF D4}
    FFlatScrollBars, FFullDrag: Boolean;
    FHotTrackStyles: TListHotTrackStyles;
{$ENDIF}

    FToolTipOptions: TdcListViewToolTipOptions;
    FToolTipText: String;

    FOnDrawHeaderSection: TdcListViewDrawHeaderSection;
    FOnToolTip: TdcListViewToolTipEvent;
    FOnMouseEnter, FOnMouseLeave: TNotifyEvent;
    FOnSettingsChanged: TNotifyEvent;
    FOnAlignmentChanged: TLVColumnClickEvent;
    FOnColumnResizeBegin: TdcListViewColumnResizeBeginEvent;
    FOnColumnResizeEnd: TLVColumnClickEvent;
{$IFDEF D4}
    FOnCustomDrawSubItemEx: TdcListViewCustomDrawSubItemExEvent;
    FOnColumnDragged: TdcListViewColumnDragEvent;
{$ENDIF}

    // overriden methods
    FOldAlignLeftItemClick: TNotifyEvent;
    FOldAlignRightItemClick: TNotifyEvent;
    FOldAlignCenterItemClick: TNotifyEvent;
    FOldAscendingItemClick: TNotifyEvent;
    FOldDescendingItemClick: TNotifyEvent;
    FOldBestFitItemClick: TNotifyEvent;

    // for internal use
    FDefaultMenu: TPopupMenu;
    FDefAscendingItem: TMenuItem;
    FDefDescendingItem: TMenuItem;
    FHeaderHandle: hWnd;
    FHeaderInstance: Pointer;
    FHoverSection: Integer;
    FOldHeaderWndProc: Pointer;
    MouseX, MouseY: Integer;
    HeaderVisible: Boolean;
    ColumnDragging: Boolean;
{$IFDEF D4}
    ColumnDragged: Boolean;
    CustomDrawRect: TRect;
{$ENDIF}
    //------------------

    procedure SetHeaderColor(Value: TColor);
    procedure SetHeaderStyle(Value: THeaderStyle);
    procedure SetShowSortMark(Value: Boolean);
    procedure SetSortDirection(Value: TdcListViewSortDirection);
    procedure SetSortColumn(Value: Word);
    procedure SetSortMarkAlign(Value: TdcListViewSortMarkAlign);
    procedure SetSortMarkKind(Value: TdcListViewSortMarkKind);
    procedure SetSortMarkImageAsc(Value: TPicture);
    procedure SetSortMarkImageDesc(Value: TPicture);
    function  GetToolTips: Boolean;            
    procedure SetToolTips(Value: Boolean);
    procedure SetToolTipOptions(Value: TdcListViewToolTipOptions);
    function  GetViewStyle: TViewStyle;

    function  GetSortType: TSortType;
    procedure SetSortType(Value: TSortType);
    procedure SetHoverSection(Value: Integer);
    {$IFNDEF D3}
    procedure SetGridLines(Value: Boolean);
    procedure SetHotTrack(Value: Boolean);
    procedure SetRowSelect(Value: Boolean);
    {$ENDIF}
    {$IFNDEF D4}
    procedure ResetExStyles;
    procedure SetFlatScrollBars(Value: Boolean);
    procedure SetFullDrag(Value: Boolean);
    procedure SetHotTrackStyles(Value: TListHotTrackStyles);
    {$ENDIF}
    {$IFNDEF D5}
    function  GetHoverTime: Integer;
    procedure SetHoverTime(Value: Integer);
    {$ENDIF}
    {$IFDEF D4}
    procedure SetOnCustomDrawSubItemEx(const Value: TdcListViewCustomDrawSubItemExEvent);
    procedure StdOnCustomDrawSubItemHook(Sender: TCustomListView; Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean);
    {$ENDIF}

    procedure HeaderWndProc(var Message: TMessage);
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
    procedure CMSysColorChange(var Message: TMessage); message CM_SYSCOLORCHANGE;
    procedure CMWinIniChange(var Message: TMessage); message CM_WININICHANGE;
    procedure CNKeyDown(var Message: TWMKEY); message CN_KEYDOWN;
{$IFDEF D4}
    procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY;
{$ENDIF}
{$IFDEF D3}
    procedure WMLButtonUp(var Message: TWMLButtonUp); message WM_LBUTTONUP;
{$ENDIF}
    procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
    procedure WMParentNotify(var Message: TWMParentNotify); message WM_PARENTNOTIFY;
    procedure WMDrawHeader(var Message: TWMDrawItem); message WM_DRAWITEM;
    procedure WMNotify(var Message: TWMNotify); message WM_NOTIFY;

    procedure AlignLeftItemClick(Sender: TObject);
    procedure AlignRightItemClick(Sender: TObject);
    procedure AlignCenterItemClick(Sender: TObject);
    procedure AscendingItemClick(Sender: TObject);
    procedure DescendingItemClick(Sender: TObject);
    procedure BestFitItemClick(Sender: TObject);

{$IFDEF D3}
    procedure SortMarkImageChanged(Sender: TObject);
{$ENDIF}

    property HoverSection: Integer read FHoverSection write SetHoverSection;
  protected
    DefaultSortProc: Pointer;

    procedure Notification(aComponent: TComponent; Operation: TOperation); override;
    procedure Loaded; override;
    procedure CreateWnd; override;

    procedure AlignControls(aControl: TControl; var Rect: TRect); override;
{$IFDEF SUBITEMSBUGFIX}
    function CreateListItem: TListItem; override;
{$ENDIF}
    procedure SetViewStyle(Value: TViewStyle); {$IFNDEF D6} virtual; {$ELSE} reintroduce; {$ENDIF}
    procedure ColClick(Column: TListColumn); override;
    procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
    procedure WndProc(var Message: TMessage); override;

{$IFDEF D4}
    function  CustomDrawSubItem(Item: TListItem; SubItem: Integer; State: TCustomDrawState; Stage: TCustomDrawStage): Boolean; override;
{$ENDIF}
    procedure AlignmentChanged(Column: TListColumn); dynamic;
    procedure ColumnResizeBegin(Column: TListColumn; var AllowResize: Boolean); dynamic;
    procedure ColumnResizeEnd(Column: TListColumn); dynamic;
    procedure DrawHeader(Canvas: TCanvas; Rect: TRect; ColumnIndex: Integer; Pressed: Boolean); dynamic;
    procedure UpdateListItems; virtual;

    { protected (hidden) properties (for internal use) }
    property Columns;
  public
    constructor Create(aOwner: TComponent); override;
    destructor Destroy; override;

    procedure RepaintHeader; virtual;
    {$IFDEF D4}
    function FindCaption(const Caption: String): TListItem; overload;
    {$ENDIF} 

    function CountPerPage: Integer; // calculates number of items that can fit vertically in the visible area of a listview control when in list or report view    
    function GetColumnAt(X: Integer): TListColumn;
    {$IFNDEF D6}
    procedure Clear;
    procedure DeleteSelected;
    procedure SelectAll;
    {$ENDIF}
    procedure UnselectAll;    
    function  IsScrollBarsVisible: Boolean;
    procedure BestFit{$IFDEF D4}(FitHeaderText: Boolean = False){$ENDIF};
{$IFDEF D4}
    procedure SetColumnOrders(ColumnOrders: Array of Integer);
{$ENDIF}

    function ImportFromTXT(const FileName: String; SeparatorChar: Char {$IFDEF D4} = #9{$ENDIF}): Boolean;
    procedure ExportToTXT(const FileName: String; ExportColumnCaptions: Boolean {$IFDEF D4} = True {$ENDIF});
    procedure ExportToHTML(const FileName: String; ExportColumnCaptions: Boolean {$IFDEF D4} = True {$ENDIF}; const DocumentTitle: String {$IFDEF D4} = '' {$ENDIF});

    procedure ReplaceStr(const OldCaption, NewCaption: String {$IFDEF D4}; ReplaceOnlyVisibleItems: Boolean = True {$ENDIF});

    // public properties (not for Object Inspector)
    property Items;
  published
    { derived properties/events }
    property Align;
    property AllocBy;
{$IFDEF D4}
    property Anchors;
    property BiDiMode;
{$ENDIF}
    property BorderStyle;
{$IFDEF D4}
    property BorderWidth;
{$ENDIF}
{$IFDEF D3}
    property Checkboxes;
{$ENDIF}
    property Color;
    property ColumnClick;
{$IFDEF D4}
    property Constraints;
{$ENDIF}
    property Ctl3D;
    property Enabled;
    property Font;
{$IFDEF D4}
    property FlatScrollBars;
    property FullDrag;
{$ENDIF}
{$IFDEF D3}
    property GridLines;
{$ENDIF}
    property HideSelection;
{$IFDEF D3}
    property HotTrack;
{$ENDIF}
{$IFDEF D4}
    property HotTrackStyles;
{$ENDIF}
{$IFDEF D5}
    property HoverTime;
{$ENDIF}
    property IconOptions;
    property MultiSelect;
{$IFDEF D4}
    property OwnerData;
    property OwnerDraw;
{$ENDIF}
    property ReadOnly default False;
{$IFDEF D3}
    property RowSelect;
{$ENDIF}
{$IFDEF D4}
    property ParentBiDiMode;
{$ENDIF}
    property ParentColor default False;
    property ParentFont;
    property ParentShowHint;
    property PopupMenu;
    property ShowColumnHeaders;
{$IFDEF D5}
    property ShowWorkAreas;
{$ENDIF}
    property ShowHint;
    property TabOrder;
    property TabStop default True;
    property Visible;
{$IFDEF D5}
    property OnAdvancedCustomDraw;
    property OnAdvancedCustomDrawItem;
    property OnAdvancedCustomDrawSubItem;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -