Class TExtListView (unit ExtListView) |
Inherits from
TCustomEnhListView
The new class.
constructor Create(AOwner: TComponent);
- Override constructor to "zero out" our internal variable.
function ApproximateViewRect(Count: integer;
const Proposed: TPoint): TPoint;
function CheckComCtlVersion(MajorHi, MajorLo,
MinorHi, MinorLo: word): boolean;
Add LVCF_FMT Just to make sure.
destructor Destroy;
function ELV_GetNextItem(StartItem: integer; Direction: TSearchDirection;
States: TItemStates): integer;
function GetColumnOrder(Count: integer;
var IntArray: array of integer): boolean;
function GetSubItemAt(X, Y: integer): string;
function LoadSettings: boolean;
DON'T CALL INHERITED!!!! It has caused me no end of trouble, so I just resave the width stuff if I need to rather than call inherited.
procedure SetColumnOrder(Count: integer; const IntArray: array of integer);
procedure SetIconSpacing(X, Y: integer);
procedure SetItemCountEx(Count: integer; Flags: TLVItemCountFlags);
function StoreSettings: boolean;
procedure UpdateColumnImage(Index: integer);
procedure UpdateColumnsImages;
Force reset of column image information
function ActualColumnIndex(Index: integer): integer;
procedure CreateParams(var Params: TCreateParams);
don't think i need this, it has an Owner property
procedure CreateWnd;
procedure DefaultDrawHeader(var Canvas: TCanvas; Index: Integer;
var Rect: TRect; Selected: boolean);
Default to whatever is in ExtendedStyles settings
procedure DrawItem(var Canvas: TCanvas; Index: Integer; Rect: TRect;
State: TOwnerDrawState; var DefaultDrawing,
FullRowSelect: boolean);
I must have been high
for x := 0 to ColCount-1 do
if ColArray[x] = Index then
begin
Result := Columns[ColArray[x]];
exit;
end;
function GetActualColumn(Index: integer): TListColumn;
needs to account for modified column order
function GetCheckState(Index: integer): boolean;
function GetExtendedStyles: TLVExtendedStyles;
Property method to get the extended style bits.
function GetHeaderHandle: HWnd;
A real world use of XOR!!! We need to invalidate if subitem images is in new value and not in old, or in old value and not in new, but NOT if it is set or cleared in both.
function GetHotCursor: HCursor;
function GetHotItem: integer;
function GetHoverTime: DWORD;
Call even if not changed because handle may not have been allocated
function GetSelectionMark: integer;
Force the header to redraw
function GetShowSortArrows: boolean;
function GetSmallImages: TImageList;
Set it.
function GetSubItemImageIndex(Item, SubItem: integer): integer;
function GetSubItemRect(Item, SubItem: integer; Index: integer): TRect;
Not sure about how to update the view after changing this.
function GetSubItemText(Index, SubItem: integer): string;
Subitem set to -1 means Caption text
function GetVersion: TDFSVersion;
account for modified column order Delphi 2 and C++B 1 have a bug in TListColumn.
function HotTrack(var Item: TNMListView): boolean;
procedure ItemActivate;
procedure Loaded;
function MarqueeBegin: boolean;
Event method handlers -- fire the events if they exist.
procedure SetCheckState(Index: integer; Checked: boolean);
procedure SetColumnsFormat(Value: TExtListColumns);
Images changed
procedure SetExtendedStyles(Val: TLVExtendedStyles);
Property method for setting styles.
procedure SetHotCursor(const Val: HCursor);
procedure SetHotItem(Val: integer);
procedure SetHoverTime(Val: DWORD);
procedure SetRequireComCtlUpdate(Value: boolean);
Call even if not changed because handle may not have been allocated
procedure SetSelectionMark(Val: integer);
procedure SetShowSortArrows(Value: boolean);
procedure SetSmallImages(Value: TImageList);
Nothing, just get it
procedure SetSubItemImageIndex(Item, SubItem, Value: integer);
Get it.
procedure SetVirtualMode(Val: boolean);
procedure SetWorkArea(Rect: TRect);
procedure VMCacheHint(var HintInfo: TNMCacheHint);
No way.
function VMFindItem(var FindInfo: TNMFindItem): integer;
procedure VMGetDispInfo(var ItemInfo: TLVItemEx);
procedure VMStateChanged(var StateInfo: TNMODStateChange);
procedure CNNotify(var Message: TWMNotify);
Set it.
procedure ColumnHeaderImagesChange(Sender: TObject);
function GetItemIndent(Index: integer): Integer;
procedure SetItemIndent(Index: integer; Value: Integer);
Get it.
function SetValueFromAPIValue(Styles: DWORD): TLVExtendedStyles;
Function to convert from the API values to our style set type.
function SetValueToAPIValue(Styles: TLVExtendedStyles): LPARAM;
Function to convert from our set type to expected API value.
procedure WMNotify(var Message: TWMNotify);
We only want to handle LVN_GETDISPINFO when in virtual mode
property Align :
property AllocBy :
property AutoColumnSort :
Publish inherited protected properties
property AutoResort :
property AutoSortAscending :
property AutoSortStyle :
property BorderStyle :
property Color :
property ColumnClick :
property Columns :
property ColumnsFormat : TExtListColumns
property Ctl3D :
property DragCursor :
property DragMode :
property Enabled :
property ExtendedStyles : TLVExtendedStyles
Property for new styles.
property Font :
property HideSelection :
property HoverTime : DWORD
property IconOptions :
property Items :
property LargeImages :
property LastColumnClicked :
property MultiSelect :
property ParentColor :
property ParentFont :
property ParentShowHint :
property PopupMenu :
property ReadOnly :
property RequireComCtlUpdate : boolean
property ReverseSortArrows :
property SaveSettings : TExtLVSaveSettings
Autosave settings property.
property ShowColumnHeaders :
property ShowHint :
property ShowSortArrows : boolean
property SmallImages : TImageList
Redeclare so we can know when it changes and hook into it.
property StateImages :
property Style :
property TabOrder :
property TabStop :
property ViewStyle :
property VirtualMode : boolean
property Visible :
property CurrentSortAscending :
property HeaderHandle : HWnd
property HotCursor : HCursor
property HotItem : integer
property IsChecked : boolean
property ItemIndent : integer
property SelectionMark : integer
property SubItem_BoundsRect : TRect
property SubItem_IconRect : TRect
property SubItem_ImageIndex : integer
property SubItem_LabelRect : TRect
property SubItem_SelectBoundsRect : TRect
property WorkArea : TRect
event OnAfterDefaultDrawItem :
event OnChange :
event OnChanging :
event OnClick :
event OnColumnClick :
event OnDblClick :
event OnDeletion :
event OnDragDrop :
event OnDragOver :
event OnDrawHeader :
event OnDrawItem :
event OnDrawSubItem :
event OnEditCanceled :
event OnEdited :
event OnEditing :
event OnEndDrag :
event OnEnter :
event OnExit :
event OnHotTrack : TLVHotTrackEvent
event OnInsert :
event OnItemActivate : TLVItemActivateEvent
event OnKeyDown :
event OnKeyPress :
event OnKeyUp :
event OnMarqueeBegin : TLVMarqueeBeginEvent
Events
event OnMeasureItem :
event OnMouseDown :
event OnMouseMove :
event OnMouseUp :
event OnSortBegin :
event OnSortFinished :
event OnSortItems :
event OnStartDrag :
event OnVMCacheHint : TLVVMCacheHintEvent
event OnVMFindItem : TLVVMFindItemEvent
event OnVMGetItemInfo : TLVVMGetItemInfoEvent
event OnVMStateChanged : TLVVMStateChangedEvent
FColumnOrder : PIntArray;
FColumnOrderCount : integer;
FColumnsFormat : TExtListColumns;
FColumnsFormatChangeLink : TChangeLink;
FExtendedStyles : TLVExtendedStyles;
FHoverTime : DWORD;
FItemCountEx : integer;
FItemCountExFlags : TLVItemCountFlags;
FOnHotTrack : TLVHotTrackEvent;
FOnItemActivate : TLVItemActivateEvent;
FOnMarqueeBegin : TLVMarqueeBeginEvent;
FOnVMCacheHint : TLVVMCacheHintEvent;
FOnVMFindItem : TLVVMFindItemEvent;
FOnVMGetItemInfo : TLVVMGetItemInfoEvent;
FOnVMStateChanged : TLVVMStateChangedEvent;
FRequireComCtlUpdate : boolean;
FSaveSettings : TExtLVSaveSettings;
FSelectionMark : integer;
FVirtualMode : boolean;
constructor Create(AOwner: TComponent);
Override constructor to "zero out" our internal variable.
function ApproximateViewRect(Count: integer;
const Proposed: TPoint): TPoint;
function CheckComCtlVersion(MajorHi, MajorLo,
MinorHi, MinorLo: word): boolean;
Add LVCF_FMT Just to make sure...
destructor Destroy;
function ELV_GetNextItem(StartItem: integer; Direction: TSearchDirection;
States: TItemStates): integer;
function GetColumnOrder(Count: integer;
var IntArray: array of integer): boolean;
function GetSubItemAt(X, Y: integer): string;
function LoadSettings: boolean;
DON'T CALL INHERITED!!!! It has caused me no end of trouble, so I just resave the width stuff if I need to rather than call inherited.
procedure SetColumnOrder(Count: integer; const IntArray: array of integer);
procedure SetIconSpacing(X, Y: integer);
procedure SetItemCountEx(Count: integer; Flags: TLVItemCountFlags);
function StoreSettings: boolean;
procedure UpdateColumnImage(Index: integer);
procedure UpdateColumnsImages;
Force reset of column image information
function ActualColumnIndex(Index: integer): integer;
procedure CreateParams(var Params: TCreateParams);
don't think i need this, it has an Owner property
procedure CreateWnd;
procedure DefaultDrawHeader(var Canvas: TCanvas; Index: Integer;
var Rect: TRect; Selected: boolean);
Default to whatever is in ExtendedStyles settings
procedure DrawItem(var Canvas: TCanvas; Index: Integer; Rect: TRect;
State: TOwnerDrawState; var DefaultDrawing,
FullRowSelect: boolean);
I must have been high
for x := 0 to ColCount-1 do
if ColArray[x] = Index then
begin
Result := Columns[ColArray[x]];
exit;
end;
function GetActualColumn(Index: integer): TListColumn;
needs to account for modified column order
function GetCheckState(Index: integer): boolean;
function GetExtendedStyles: TLVExtendedStyles;
Property method to get the extended style bits.
function GetHeaderHandle: HWnd;
A real world use of XOR!!! We need to invalidate if subitem images is in new value and not in old, or in old value and not in new, but NOT if it is set or cleared in both.
function GetHotCursor: HCursor;
function GetHotItem: integer;
function GetHoverTime: DWORD;
Call even if not changed because handle may not have been allocated
function GetSelectionMark: integer;
Force the header to redraw
function GetShowSortArrows: boolean;
function GetSmallImages: TImageList;
Set it.
function GetSubItemImageIndex(Item, SubItem: integer): integer;
function GetSubItemRect(Item, SubItem: integer; Index: integer): TRect;
Not sure about how to update the view after changing this. Refresh doesn't do the job. Seems the best way to do it is in client code, something like: (*
SetIconSpacing(X, Y);
// Does strange things if ViewStyle is not set to vsIcon!
if ViewStyle = vsIcon then
begin
SendMessage(Handle, WM_SETREDRAW, 0, 0);
try
ViewStyle := vsSmallIcon;
ViewStyle := vsIcon;
finally
SendMessage(Handle, WM_SETREDRAW, 1, 0);
end;
end;
function GetSubItemText(Index, SubItem: integer): string;
Subitem set to -1 means Caption text
function GetVersion: TDFSVersion;
account for modified column order Delphi 2 and C++B 1 have a bug in TListColumn.GetWidth. It returns zero for the width if the handle hasn't been allocated yet instead of returning the value of the internal storage variable like Delphi 3 does. I've also had some problems similar under Delphi 3, so I'm just always requiring the handle to be valid.
function HotTrack(var Item: TNMListView): boolean;
procedure ItemActivate;
procedure Loaded;
function MarqueeBegin: boolean;
Event method handlers -- fire the events if they exist.
For some reason, the SECOND time you drag a header width, it toasts the bitmap. I think it has to do with the TListView class somehow resetting the column information, overwriting our information (image info). Anyway, catching the condition (begin column header drag) and resetting all the extended information for that column fixes it.
procedure SetCheckState(Index: integer; Checked: boolean);
procedure SetColumnsFormat(Value: TExtListColumns);
Images changed
procedure SetExtendedStyles(Val: TLVExtendedStyles);
Property method for setting styles.
Property method to set new style bits.
procedure SetHotCursor(const Val: HCursor);
procedure SetHotItem(Val: integer);
procedure SetHoverTime(Val: DWORD);
procedure SetRequireComCtlUpdate(Value: boolean);
Call even if not changed because handle may not have been allocated
procedure SetSelectionMark(Val: integer);
procedure SetShowSortArrows(Value: boolean);
procedure SetSmallImages(Value: TImageList);
Nothing, just get it
procedure SetSubItemImageIndex(Item, SubItem, Value: integer);
Get it.
procedure SetVirtualMode(Val: boolean);
procedure SetWorkArea(Rect: TRect);
procedure VMCacheHint(var HintInfo: TNMCacheHint);
No way.
function VMFindItem(var FindInfo: TNMFindItem): integer;
procedure VMGetDispInfo(var ItemInfo: TLVItemEx);
procedure VMStateChanged(var StateInfo: TNMODStateChange);
procedure CNNotify(var Message: TWMNotify);
Set it.
procedure ColumnHeaderImagesChange(Sender: TObject);
function GetItemIndent(Index: integer): Integer;
procedure SetItemIndent(Index: integer; Value: Integer);
Get it.
function SetValueFromAPIValue(Styles: DWORD): TLVExtendedStyles;
Function to convert from the API values to our style set type.
function SetValueToAPIValue(Styles: TLVExtendedStyles): LPARAM;
Function to convert from our set type to expected API value.
LVS_EX_INFOTIP, LVS_EX_REGIONAL, LVS_EX_MULTIWORKAREAS - not implemented Function to convert our style set type into the value expected by the API.
procedure WMNotify(var Message: TWMNotify);
We only want to handle LVN_GETDISPINFO when in virtual mode
property Align :
property AllocBy :
property AutoColumnSort :
Publish inherited protected properties
property AutoResort :
property AutoSortAscending :
property AutoSortStyle :
property BorderStyle :
property Color :
property ColumnClick :
property Columns :
property ColumnsFormat : TExtListColumns
property Ctl3D :
property DragCursor :
property DragMode :
property Enabled :
property ExtendedStyles : TLVExtendedStyles
Property for new styles.
property Font :
property HideSelection :
property HoverTime : DWORD
property IconOptions :
property Items :
property LargeImages :
property LastColumnClicked :
property MultiSelect :
property ParentColor :
property ParentFont :
property ParentShowHint :
property PopupMenu :
property ReadOnly :
property RequireComCtlUpdate : boolean
property ReverseSortArrows :
property SaveSettings : TExtLVSaveSettings
Autosave settings property.
property ShowColumnHeaders :
property ShowHint :
property ShowSortArrows : boolean
property SmallImages : TImageList
Redeclare so we can know when it changes and hook into it.
property StateImages :
property Style :
property TabOrder :
property TabStop :
property ViewStyle :
property VirtualMode : boolean
property Visible :
property CurrentSortAscending :
property HeaderHandle : HWnd
property HotCursor : HCursor
property HotItem : integer
property IsChecked : boolean
property ItemIndent : integer
property SelectionMark : integer
property SubItem_BoundsRect : TRect
property SubItem_IconRect : TRect
property SubItem_ImageIndex : integer
property SubItem_LabelRect : TRect
property SubItem_SelectBoundsRect : TRect
property WorkArea : TRect
event OnAfterDefaultDrawItem :
event OnChange :
event OnChanging :
event OnClick :
event OnColumnClick :
event OnDblClick :
event OnDeletion :
event OnDragDrop :
event OnDragOver :
event OnDrawHeader :
event OnDrawItem :
event OnDrawSubItem :
event OnEditCanceled :
event OnEdited :
event OnEditing :
event OnEndDrag :
event OnEnter :
event OnExit :
event OnHotTrack : TLVHotTrackEvent
event OnInsert :
event OnItemActivate : TLVItemActivateEvent
event OnKeyDown :
event OnKeyPress :
event OnKeyUp :
event OnMarqueeBegin : TLVMarqueeBeginEvent
Events
event OnMeasureItem :
event OnMouseDown :
event OnMouseMove :
event OnMouseUp :
event OnSortBegin :
event OnSortFinished :
event OnSortItems :
event OnStartDrag :
event OnVMCacheHint : TLVVMCacheHintEvent
event OnVMFindItem : TLVVMFindItemEvent
event OnVMGetItemInfo : TLVVMGetItemInfoEvent
event OnVMStateChanged : TLVVMStateChangedEvent
FColumnOrder : PIntArray;
FColumnOrderCount : integer;
FColumnsFormat : TExtListColumns;
FColumnsFormatChangeLink : TChangeLink;
FExtendedStyles : TLVExtendedStyles;
FHoverTime : DWORD;
FItemCountEx : integer;
FItemCountExFlags : TLVItemCountFlags;
FOnHotTrack : TLVHotTrackEvent;
FOnItemActivate : TLVItemActivateEvent;
FOnMarqueeBegin : TLVMarqueeBeginEvent;
FOnVMCacheHint : TLVVMCacheHintEvent;
FOnVMFindItem : TLVVMFindItemEvent;
FOnVMGetItemInfo : TLVVMGetItemInfoEvent;
FOnVMStateChanged : TLVVMStateChangedEvent;
FRequireComCtlUpdate : boolean;
FSaveSettings : TExtLVSaveSettings;
FSelectionMark : integer;
FVirtualMode : boolean;