|
@@ -9,8 +9,8 @@ uses
|
|
BGRAVirtualScreen, BGRABitmapTypes, UVolatileScrollBar;
|
|
BGRAVirtualScreen, BGRABitmapTypes, UVolatileScrollBar;
|
|
|
|
|
|
type
|
|
type
|
|
- PMyShellListViewItemData = ^TMyShellListViewItemData;
|
|
|
|
- TMyShellListViewItemData = record
|
|
|
|
|
|
+ PLCShellListViewItemData = ^TLCShellListViewItemData;
|
|
|
|
+ TLCShellListViewItemData = record
|
|
initialIndex: integer;
|
|
initialIndex: integer;
|
|
caption, filename, typeStr, sizeStr, dateOrDeviceStr: string;
|
|
caption, filename, typeStr, sizeStr, dateOrDeviceStr: string;
|
|
fileSize: int64;
|
|
fileSize: int64;
|
|
@@ -21,14 +21,14 @@ type
|
|
displayRect: TRect;
|
|
displayRect: TRect;
|
|
isSelected: boolean;
|
|
isSelected: boolean;
|
|
end;
|
|
end;
|
|
- TMyShellListViewData = array of TMyShellListViewItemData;
|
|
|
|
|
|
+ TLCShellListViewData = array of TLCShellListViewItemData;
|
|
|
|
|
|
TFormatTypeEvent = procedure(Sender: TObject; var AType: string) of object;
|
|
TFormatTypeEvent = procedure(Sender: TObject; var AType: string) of object;
|
|
TSelectItemEvent = procedure(Sender: TObject; Item: Integer; Selected: Boolean) of object;
|
|
TSelectItemEvent = procedure(Sender: TObject; Item: Integer; Selected: Boolean) of object;
|
|
|
|
|
|
- { TMyShellListView }
|
|
|
|
|
|
+ { TLCShellListView }
|
|
|
|
|
|
- TMyShellListView = class
|
|
|
|
|
|
+ TLCShellListView = class
|
|
private
|
|
private
|
|
FAllowMultiSelect: boolean;
|
|
FAllowMultiSelect: boolean;
|
|
FOnDblClick: TNotifyEvent;
|
|
FOnDblClick: TNotifyEvent;
|
|
@@ -39,7 +39,7 @@ type
|
|
FObjectTypes: TObjectTypes;
|
|
FObjectTypes: TObjectTypes;
|
|
FOnFormatType: TFormatTypeEvent;
|
|
FOnFormatType: TFormatTypeEvent;
|
|
FRoot: string;
|
|
FRoot: string;
|
|
- FData: TMyShellListViewData;
|
|
|
|
|
|
+ FData: TLCShellListViewData;
|
|
FPreviousResize: TSize;
|
|
FPreviousResize: TSize;
|
|
FFitColumnNeeded: boolean;
|
|
FFitColumnNeeded: boolean;
|
|
FViewStyle: TViewStyle;
|
|
FViewStyle: TViewStyle;
|
|
@@ -96,7 +96,7 @@ type
|
|
{%H-}Shift: TShiftState; X, Y: Integer);
|
|
{%H-}Shift: TShiftState; X, Y: Integer);
|
|
procedure MouseWheel(Sender: TObject; {%H-}Shift: TShiftState;
|
|
procedure MouseWheel(Sender: TObject; {%H-}Shift: TShiftState;
|
|
WheelDelta: Integer; {%H-}MousePos: TPoint; var Handled: Boolean);
|
|
WheelDelta: Integer; {%H-}MousePos: TPoint; var Handled: Boolean);
|
|
- procedure CompareItem(Sender: TObject; Item1, Item2: PMyShellListViewItemData; {%H-}Data: Integer;
|
|
|
|
|
|
+ procedure CompareItem(Sender: TObject; Item1, Item2: PLCShellListViewItemData; {%H-}Data: Integer;
|
|
var Compare: Integer);
|
|
var Compare: Integer);
|
|
procedure ColumnClick(Sender: TObject; AColumn: integer);
|
|
procedure ColumnClick(Sender: TObject; AColumn: integer);
|
|
procedure DoFitColumns(ABitmap: TBGRABitmap; AClientWidth: integer);
|
|
procedure DoFitColumns(ABitmap: TBGRABitmap; AClientWidth: integer);
|
|
@@ -113,10 +113,11 @@ type
|
|
procedure Reload;
|
|
procedure Reload;
|
|
procedure BeginUpdate;
|
|
procedure BeginUpdate;
|
|
procedure EndUpdate;
|
|
procedure EndUpdate;
|
|
- procedure Invalidate;
|
|
|
|
|
|
+ procedure InvalidateView;
|
|
procedure Update;
|
|
procedure Update;
|
|
procedure MakeItemVisible(AIndex : integer);
|
|
procedure MakeItemVisible(AIndex : integer);
|
|
constructor Create(AVirtualScreen: TBGRAVirtualScreen);
|
|
constructor Create(AVirtualScreen: TBGRAVirtualScreen);
|
|
|
|
+ procedure VirtualScreenFreed;
|
|
destructor Destroy; override;
|
|
destructor Destroy; override;
|
|
procedure SetItemImage(AIndex: integer; ABitmap: TBGRABitmap; AOwned: boolean);
|
|
procedure SetItemImage(AIndex: integer; ABitmap: TBGRABitmap; AOwned: boolean);
|
|
function GetItemImage(AIndex: integer): TBGRABitmap;
|
|
function GetItemImage(AIndex: integer): TBGRABitmap;
|
|
@@ -162,7 +163,7 @@ uses LCLType, UResourceStrings, LazPaintType, LazUTF8, Forms, Math,
|
|
UFileSystem, LazFileUtils;
|
|
UFileSystem, LazFileUtils;
|
|
|
|
|
|
var
|
|
var
|
|
- SortTarget: TMyShellListView;
|
|
|
|
|
|
+ SortTarget: TLCShellListView;
|
|
|
|
|
|
function FileSizeToStr(ASize: int64; AByteCaption: string): string;
|
|
function FileSizeToStr(ASize: int64; AByteCaption: string): string;
|
|
begin
|
|
begin
|
|
@@ -174,16 +175,16 @@ begin
|
|
result := FloatToStrF(ASize/(1024*1024), ffFixed, 5, 1) + ' MB';
|
|
result := FloatToStrF(ASize/(1024*1024), ffFixed, 5, 1) + ' MB';
|
|
end;
|
|
end;
|
|
|
|
|
|
-function MyShellListViewCompare(item1,item2: pointer): integer;
|
|
|
|
|
|
+function LCListViewCompare(item1,item2: pointer): integer;
|
|
begin
|
|
begin
|
|
result := 0;
|
|
result := 0;
|
|
if Assigned(SortTarget) then
|
|
if Assigned(SortTarget) then
|
|
SortTarget.CompareItem(SortTarget,item1,item2,0,result);
|
|
SortTarget.CompareItem(SortTarget,item1,item2,0,result);
|
|
end;
|
|
end;
|
|
|
|
|
|
-{ TMyShellListView }
|
|
|
|
|
|
+{ TLCShellListView }
|
|
|
|
|
|
-procedure TMyShellListView.SetMask(const AValue: string);
|
|
|
|
|
|
+procedure TLCShellListView.SetMask(const AValue: string);
|
|
begin
|
|
begin
|
|
if AValue <> FMask then
|
|
if AValue <> FMask then
|
|
begin
|
|
begin
|
|
@@ -192,29 +193,29 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.SetOnDblClick(AValue: TNotifyEvent);
|
|
|
|
|
|
+procedure TLCShellListView.SetOnDblClick(AValue: TNotifyEvent);
|
|
begin
|
|
begin
|
|
if FOnDblClick=AValue then Exit;
|
|
if FOnDblClick=AValue then Exit;
|
|
FOnDblClick:=AValue;
|
|
FOnDblClick:=AValue;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.SetOnSelectItem(AValue: TSelectItemEvent);
|
|
|
|
|
|
+procedure TLCShellListView.SetOnSelectItem(AValue: TSelectItemEvent);
|
|
begin
|
|
begin
|
|
if FOnSelectItem=AValue then Exit;
|
|
if FOnSelectItem=AValue then Exit;
|
|
FOnSelectItem:=AValue;
|
|
FOnSelectItem:=AValue;
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TMyShellListView.GetViewStyleFit: TViewStyle;
|
|
|
|
|
|
+function TLCShellListView.GetViewStyleFit: TViewStyle;
|
|
begin
|
|
begin
|
|
result := FViewStyle;
|
|
result := FViewStyle;
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TMyShellListView.GetWidth: integer;
|
|
|
|
|
|
+function TLCShellListView.GetWidth: integer;
|
|
begin
|
|
begin
|
|
result := FVirtualScreen.Width;
|
|
result := FVirtualScreen.Width;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.SetAllowMultiSelect(AValue: boolean);
|
|
|
|
|
|
+procedure TLCShellListView.SetAllowMultiSelect(AValue: boolean);
|
|
var idx: integer;
|
|
var idx: integer;
|
|
begin
|
|
begin
|
|
if FAllowMultiSelect=AValue then Exit;
|
|
if FAllowMultiSelect=AValue then Exit;
|
|
@@ -231,27 +232,27 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.SetItemSelected(AIndex: integer; AValue: boolean);
|
|
|
|
|
|
+procedure TLCShellListView.SetItemSelected(AIndex: integer; AValue: boolean);
|
|
begin
|
|
begin
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then exit
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then exit
|
|
else
|
|
else
|
|
begin
|
|
begin
|
|
FData[AIndex].isSelected := AValue;
|
|
FData[AIndex].isSelected := AValue;
|
|
- FVirtualScreen.DiscardBitmap;
|
|
|
|
|
|
+ InvalidateView;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TMyShellListView.GetColumnCount: integer;
|
|
|
|
|
|
+function TLCShellListView.GetColumnCount: integer;
|
|
begin
|
|
begin
|
|
result := length(FColumns);
|
|
result := length(FColumns);
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TMyShellListView.GetHeight: integer;
|
|
|
|
|
|
+function TLCShellListView.GetHeight: integer;
|
|
begin
|
|
begin
|
|
result := FVirtualScreen.Height;
|
|
result := FVirtualScreen.Height;
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TMyShellListView.GetItemCaption(AIndex: integer): string;
|
|
|
|
|
|
+function TLCShellListView.GetItemCaption(AIndex: integer): string;
|
|
begin
|
|
begin
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then
|
|
result := ''
|
|
result := ''
|
|
@@ -259,12 +260,12 @@ begin
|
|
result := FData[AIndex].caption;
|
|
result := FData[AIndex].caption;
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TMyShellListView.GetItemCount: integer;
|
|
|
|
|
|
+function TLCShellListView.GetItemCount: integer;
|
|
begin
|
|
begin
|
|
result := length(FData);
|
|
result := length(FData);
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TMyShellListView.GetItemDevice(AIndex: integer): string;
|
|
|
|
|
|
+function TLCShellListView.GetItemDevice(AIndex: integer): string;
|
|
begin
|
|
begin
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then
|
|
result := ''
|
|
result := ''
|
|
@@ -272,7 +273,7 @@ begin
|
|
result := FData[AIndex].dateOrDeviceStr;
|
|
result := FData[AIndex].dateOrDeviceStr;
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TMyShellListView.GetItemIsFolder(AIndex: integer): boolean;
|
|
|
|
|
|
+function TLCShellListView.GetItemIsFolder(AIndex: integer): boolean;
|
|
begin
|
|
begin
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then
|
|
result := false
|
|
result := false
|
|
@@ -280,7 +281,7 @@ begin
|
|
result := FData[AIndex].isFolder;
|
|
result := FData[AIndex].isFolder;
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TMyShellListView.GetItemLastModification(AIndex: integer): TDateTime;
|
|
|
|
|
|
+function TLCShellListView.GetItemLastModification(AIndex: integer): TDateTime;
|
|
begin
|
|
begin
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then
|
|
result := 0
|
|
result := 0
|
|
@@ -288,7 +289,7 @@ begin
|
|
result := FData[AIndex].modification;
|
|
result := FData[AIndex].modification;
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TMyShellListView.GetItemName(AIndex: integer): string;
|
|
|
|
|
|
+function TLCShellListView.GetItemName(AIndex: integer): string;
|
|
begin
|
|
begin
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then
|
|
result := ''
|
|
result := ''
|
|
@@ -296,7 +297,7 @@ begin
|
|
result := FData[AIndex].filename;
|
|
result := FData[AIndex].filename;
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TMyShellListView.GetItemSelected(AIndex: integer): boolean;
|
|
|
|
|
|
+function TLCShellListView.GetItemSelected(AIndex: integer): boolean;
|
|
begin
|
|
begin
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then
|
|
result := false
|
|
result := false
|
|
@@ -304,7 +305,7 @@ begin
|
|
result := FData[AIndex].isSelected;
|
|
result := FData[AIndex].isSelected;
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TMyShellListView.GetItemType(AIndex: integer): string;
|
|
|
|
|
|
+function TLCShellListView.GetItemType(AIndex: integer): string;
|
|
begin
|
|
begin
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then
|
|
result := ''
|
|
result := ''
|
|
@@ -312,7 +313,7 @@ begin
|
|
result := FData[AIndex].typeStr;
|
|
result := FData[AIndex].typeStr;
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TMyShellListView.GetSelectedCount: integer;
|
|
|
|
|
|
+function TLCShellListView.GetSelectedCount: integer;
|
|
var
|
|
var
|
|
i: Integer;
|
|
i: Integer;
|
|
begin
|
|
begin
|
|
@@ -321,7 +322,7 @@ begin
|
|
if ItemSelected[i] then inc(result);
|
|
if ItemSelected[i] then inc(result);
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.SetRoot(const AValue: string);
|
|
|
|
|
|
+procedure TLCShellListView.SetRoot(const AValue: string);
|
|
begin
|
|
begin
|
|
if FRoot <> AValue then
|
|
if FRoot <> AValue then
|
|
begin
|
|
begin
|
|
@@ -330,7 +331,7 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.SetSelectedIndex(AValue: integer);
|
|
|
|
|
|
+procedure TLCShellListView.SetSelectedIndex(AValue: integer);
|
|
begin
|
|
begin
|
|
if (AValue < 0) or (AValue >= ItemCount) then AValue := -1;
|
|
if (AValue < 0) or (AValue >= ItemCount) then AValue := -1;
|
|
if FSelectedIndex=AValue then Exit;
|
|
if FSelectedIndex=AValue then Exit;
|
|
@@ -339,13 +340,13 @@ begin
|
|
ItemSelected[AValue] := true;
|
|
ItemSelected[AValue] := true;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.SetSortColumn(AValue: integer);
|
|
|
|
|
|
+procedure TLCShellListView.SetSortColumn(AValue: integer);
|
|
begin
|
|
begin
|
|
if FSortColumn=AValue then Exit;
|
|
if FSortColumn=AValue then Exit;
|
|
FSortColumn:=AValue;
|
|
FSortColumn:=AValue;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.SetViewStyleFit(AValue: TViewStyle);
|
|
|
|
|
|
+procedure TLCShellListView.SetViewStyleFit(AValue: TViewStyle);
|
|
begin
|
|
begin
|
|
if FViewStyle=AValue then Exit;
|
|
if FViewStyle=AValue then Exit;
|
|
FViewStyle := AValue;
|
|
FViewStyle := AValue;
|
|
@@ -353,13 +354,13 @@ begin
|
|
FreeAndNil(FVScrollBar);
|
|
FreeAndNil(FVScrollBar);
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.SetDisplayRect(AIndex: integer; const ARect: TRect);
|
|
|
|
|
|
+procedure TLCShellListView.SetDisplayRect(AIndex: integer; const ARect: TRect);
|
|
begin
|
|
begin
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then exit;
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then exit;
|
|
FData[AIndex].displayRect := ARect;
|
|
FData[AIndex].displayRect := ARect;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.PopulateWithRoot;
|
|
|
|
|
|
+procedure TLCShellListView.PopulateWithRoot();
|
|
var
|
|
var
|
|
i,j: Integer;
|
|
i,j: Integer;
|
|
Dirs,Files: TFileInfoList;
|
|
Dirs,Files: TFileInfoList;
|
|
@@ -479,7 +480,7 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.Redraw(Sender: TObject; ABitmap: TBGRABitmap);
|
|
|
|
|
|
+procedure TLCShellListView.Redraw(Sender: TObject; ABitmap: TBGRABitmap);
|
|
var
|
|
var
|
|
clientArea: TRect;
|
|
clientArea: TRect;
|
|
textHeight,w,h: integer;
|
|
textHeight,w,h: integer;
|
|
@@ -730,7 +731,7 @@ begin
|
|
DrawIcons;
|
|
DrawIcons;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.KeyDown(Sender: TObject; var Key: Word;
|
|
|
|
|
|
+procedure TLCShellListView.KeyDown(Sender: TObject; var Key: Word;
|
|
Shift: TShiftState);
|
|
Shift: TShiftState);
|
|
|
|
|
|
procedure KeySelectRange(curItem: integer);
|
|
procedure KeySelectRange(curItem: integer);
|
|
@@ -753,7 +754,7 @@ procedure TMyShellListView.KeyDown(Sender: TObject; var Key: Word;
|
|
FSelectedIndex:= curItem;
|
|
FSelectedIndex:= curItem;
|
|
ItemSelected[FSelectedIndex] := true;
|
|
ItemSelected[FSelectedIndex] := true;
|
|
end;
|
|
end;
|
|
- FVirtualScreen.DiscardBitmap;
|
|
|
|
|
|
+ InvalidateView;
|
|
if Assigned(FOnSelectItem) then FOnSelectItem(self,curItem,true);
|
|
if Assigned(FOnSelectItem) then FOnSelectItem(self,curItem,true);
|
|
MakeItemVisible(curItem);
|
|
MakeItemVisible(curItem);
|
|
end;
|
|
end;
|
|
@@ -769,7 +770,7 @@ begin
|
|
DeselectAll;
|
|
DeselectAll;
|
|
FSelectedIndex:= 0;
|
|
FSelectedIndex:= 0;
|
|
ItemSelected[0] := true;
|
|
ItemSelected[0] := true;
|
|
- FVirtualScreen.DiscardBitmap;
|
|
|
|
|
|
+ InvalidateView;
|
|
MakeItemVisible(0);
|
|
MakeItemVisible(0);
|
|
if Assigned(FOnSelectItem) then FOnSelectItem(self,0,true);
|
|
if Assigned(FOnSelectItem) then FOnSelectItem(self,0,true);
|
|
exit;
|
|
exit;
|
|
@@ -820,13 +821,13 @@ begin
|
|
|
|
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.MouseDoubleClick(Sender: TObject);
|
|
|
|
|
|
+procedure TLCShellListView.MouseDoubleClick(Sender: TObject);
|
|
begin
|
|
begin
|
|
if (SelectedIndex <> -1) and Assigned(FOnDblClick) then
|
|
if (SelectedIndex <> -1) and Assigned(FOnDblClick) then
|
|
FOnDblClick(self);
|
|
FOnDblClick(self);
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.MouseDown(Sender: TObject; Button: TMouseButton;
|
|
|
|
|
|
+procedure TLCShellListView.MouseDown(Sender: TObject; Button: TMouseButton;
|
|
Shift: TShiftState; X, Y: Integer);
|
|
Shift: TShiftState; X, Y: Integer);
|
|
var i,idx,prevItem:integer;
|
|
var i,idx,prevItem:integer;
|
|
prevItemWasSelected:boolean;
|
|
prevItemWasSelected:boolean;
|
|
@@ -843,7 +844,7 @@ begin
|
|
if FVScrollBar.MouseDown(X,Y) then
|
|
if FVScrollBar.MouseDown(X,Y) then
|
|
begin
|
|
begin
|
|
FVerticalScrollPos:= FVScrollBar.Position;
|
|
FVerticalScrollPos:= FVScrollBar.Position;
|
|
- FVirtualScreen.DiscardBitmap;
|
|
|
|
|
|
+ InvalidateView;
|
|
exit;
|
|
exit;
|
|
end;
|
|
end;
|
|
idx := GetItemAt(X,Y);
|
|
idx := GetItemAt(X,Y);
|
|
@@ -859,7 +860,7 @@ begin
|
|
if FSelectedIndex > idx then dec(FSelectedIndex) else inc(FSelectedIndex);
|
|
if FSelectedIndex > idx then dec(FSelectedIndex) else inc(FSelectedIndex);
|
|
ItemSelected[FSelectedIndex] := not ItemSelected[FSelectedIndex];
|
|
ItemSelected[FSelectedIndex] := not ItemSelected[FSelectedIndex];
|
|
end;
|
|
end;
|
|
- FVirtualScreen.DiscardBitmap;
|
|
|
|
|
|
+ InvalidateView;
|
|
end else
|
|
end else
|
|
if idx <> -1 then
|
|
if idx <> -1 then
|
|
begin
|
|
begin
|
|
@@ -868,7 +869,7 @@ begin
|
|
FSelectedIndex := idx
|
|
FSelectedIndex := idx
|
|
else
|
|
else
|
|
FSelectedIndex:= -1;
|
|
FSelectedIndex:= -1;
|
|
- FVirtualScreen.DiscardBitmap;
|
|
|
|
|
|
+ InvalidateView;
|
|
end;
|
|
end;
|
|
if (FSelectedIndex <> prevItem) then
|
|
if (FSelectedIndex <> prevItem) then
|
|
begin
|
|
begin
|
|
@@ -882,29 +883,29 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.MouseMove(Sender: TObject; Shift: TShiftState; X,
|
|
|
|
|
|
+procedure TLCShellListView.MouseMove(Sender: TObject; Shift: TShiftState; X,
|
|
Y: Integer);
|
|
Y: Integer);
|
|
begin
|
|
begin
|
|
if Assigned(FVScrollBar) then
|
|
if Assigned(FVScrollBar) then
|
|
if FVScrollBar.MouseMove(X,Y) then
|
|
if FVScrollBar.MouseMove(X,Y) then
|
|
begin
|
|
begin
|
|
FVerticalScrollPos:= FVScrollBar.Position;
|
|
FVerticalScrollPos:= FVScrollBar.Position;
|
|
- FVirtualScreen.DiscardBitmap;
|
|
|
|
|
|
+ InvalidateView;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.MouseUp(Sender: TObject; Button: TMouseButton;
|
|
|
|
|
|
+procedure TLCShellListView.MouseUp(Sender: TObject; Button: TMouseButton;
|
|
Shift: TShiftState; X, Y: Integer);
|
|
Shift: TShiftState; X, Y: Integer);
|
|
begin
|
|
begin
|
|
if Assigned(FVScrollBar) and (Button = mbLeft) then
|
|
if Assigned(FVScrollBar) and (Button = mbLeft) then
|
|
if FVScrollBar.MouseUp(X,Y) then
|
|
if FVScrollBar.MouseUp(X,Y) then
|
|
begin
|
|
begin
|
|
FVerticalScrollPos:= FVScrollBar.Position;
|
|
FVerticalScrollPos:= FVScrollBar.Position;
|
|
- FVirtualScreen.DiscardBitmap;
|
|
|
|
|
|
+ InvalidateView;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.MouseWheel(Sender: TObject; Shift: TShiftState;
|
|
|
|
|
|
+procedure TLCShellListView.MouseWheel(Sender: TObject; Shift: TShiftState;
|
|
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
|
|
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
|
|
var Delta: integer;
|
|
var Delta: integer;
|
|
begin
|
|
begin
|
|
@@ -919,13 +920,13 @@ begin
|
|
if FVerticalScrollPos > FVScrollBar.Maximum then FVerticalScrollPos:= FVScrollBar.Maximum;
|
|
if FVerticalScrollPos > FVScrollBar.Maximum then FVerticalScrollPos:= FVScrollBar.Maximum;
|
|
if FVerticalScrollPos < FVScrollBar.Minimum then FVerticalScrollPos:= FVScrollBar.Minimum;
|
|
if FVerticalScrollPos < FVScrollBar.Minimum then FVerticalScrollPos:= FVScrollBar.Minimum;
|
|
FreeAndNil(FVScrollBar);
|
|
FreeAndNil(FVScrollBar);
|
|
- FVirtualScreen.DiscardBitmap;
|
|
|
|
|
|
+ InvalidateView;
|
|
Handled := true;
|
|
Handled := true;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.CompareItem(Sender: TObject; Item1,
|
|
|
|
- Item2: PMyShellListViewItemData; Data: Integer; var Compare: Integer);
|
|
|
|
|
|
+procedure TLCShellListView.CompareItem(Sender: TObject; Item1,
|
|
|
|
+ Item2: PLCShellListViewItemData; Data: Integer; var Compare: Integer);
|
|
var diff: int64;
|
|
var diff: int64;
|
|
diffDate: TDateTime;
|
|
diffDate: TDateTime;
|
|
|
|
|
|
@@ -983,7 +984,7 @@ begin
|
|
CompareIndex;
|
|
CompareIndex;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.ColumnClick(Sender: TObject; AColumn: integer);
|
|
|
|
|
|
+procedure TLCShellListView.ColumnClick(Sender: TObject; AColumn: integer);
|
|
begin
|
|
begin
|
|
if SortColumn = AColumn then SortColumn := -1
|
|
if SortColumn = AColumn then SortColumn := -1
|
|
else SortColumn := AColumn;
|
|
else SortColumn := AColumn;
|
|
@@ -991,44 +992,44 @@ begin
|
|
If Assigned(FOnSort) then FOnSort(Sender);
|
|
If Assigned(FOnSort) then FOnSort(Sender);
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.Reload;
|
|
|
|
|
|
+procedure TLCShellListView.Reload;
|
|
begin
|
|
begin
|
|
PopulateWithRoot();
|
|
PopulateWithRoot();
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.BeginUpdate;
|
|
|
|
|
|
+procedure TLCShellListView.BeginUpdate;
|
|
begin
|
|
begin
|
|
inc(FUpdateCount);
|
|
inc(FUpdateCount);
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.EndUpdate;
|
|
|
|
|
|
+procedure TLCShellListView.EndUpdate;
|
|
begin
|
|
begin
|
|
if FUpdateCount > 0 then
|
|
if FUpdateCount > 0 then
|
|
begin
|
|
begin
|
|
dec(FUpdateCount);
|
|
dec(FUpdateCount);
|
|
- if FUpdateCount = 0 then FVirtualScreen.DiscardBitmap;
|
|
|
|
|
|
+ if FUpdateCount = 0 then InvalidateView;
|
|
end;
|
|
end;
|
|
if FSelectedIndex >= ItemCount then FSelectedIndex:= -1;
|
|
if FSelectedIndex >= ItemCount then FSelectedIndex:= -1;
|
|
FreeAndNil(FVScrollBar);
|
|
FreeAndNil(FVScrollBar);
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.Invalidate;
|
|
|
|
|
|
+procedure TLCShellListView.InvalidateView;
|
|
begin
|
|
begin
|
|
- FVirtualScreen.DiscardBitmap;
|
|
|
|
|
|
+ if Assigned(FVirtualScreen) then FVirtualScreen.DiscardBitmap;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.Update;
|
|
|
|
|
|
+procedure TLCShellListView.Update;
|
|
begin
|
|
begin
|
|
FVirtualScreen.Update;
|
|
FVirtualScreen.Update;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.MakeItemVisible(AIndex: integer);
|
|
|
|
|
|
+procedure TLCShellListView.MakeItemVisible(AIndex: integer);
|
|
begin
|
|
begin
|
|
FWantedItemVisible := AIndex;
|
|
FWantedItemVisible := AIndex;
|
|
- FVirtualScreen.DiscardBitmap;
|
|
|
|
|
|
+ InvalidateView;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.DoFitColumns(ABitmap: TBGRABitmap; AClientWidth: integer);
|
|
|
|
|
|
+procedure TLCShellListView.DoFitColumns(ABitmap: TBGRABitmap; AClientWidth: integer);
|
|
var i,j,curSize,totalSize: integer;
|
|
var i,j,curSize,totalSize: integer;
|
|
colSizes: array of integer;
|
|
colSizes: array of integer;
|
|
sizeA: integer;
|
|
sizeA: integer;
|
|
@@ -1074,7 +1075,7 @@ begin
|
|
EndUpdate;
|
|
EndUpdate;
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TMyShellListView.AddColumn(AName: string; AWidth: integer;
|
|
|
|
|
|
+function TLCShellListView.AddColumn(AName: string; AWidth: integer;
|
|
AAlign: TAlignment): integer;
|
|
AAlign: TAlignment): integer;
|
|
begin
|
|
begin
|
|
setlength(FColumns, length(FColumns)+1);
|
|
setlength(FColumns, length(FColumns)+1);
|
|
@@ -1087,7 +1088,7 @@ begin
|
|
result := high(FColumns);
|
|
result := high(FColumns);
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TMyShellListView.GetItemCell(AIndex, AColumn: integer): string;
|
|
|
|
|
|
+function TLCShellListView.GetItemCell(AIndex, AColumn: integer): string;
|
|
begin
|
|
begin
|
|
result := '';
|
|
result := '';
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then exit;
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then exit;
|
|
@@ -1097,16 +1098,16 @@ begin
|
|
if AColumn = FIndexDate then result := FData[AIndex].dateOrDeviceStr;
|
|
if AColumn = FIndexDate then result := FData[AIndex].dateOrDeviceStr;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.Clear;
|
|
|
|
|
|
+procedure TLCShellListView.Clear;
|
|
var i: integer;
|
|
var i: integer;
|
|
begin
|
|
begin
|
|
for I := 0 to ItemCount-1 do
|
|
for I := 0 to ItemCount-1 do
|
|
SetItemImage(I,nil,false);
|
|
SetItemImage(I,nil,false);
|
|
FData := nil;
|
|
FData := nil;
|
|
- if FUpdateCount = 0 then FVirtualScreen.DiscardBitmap;
|
|
|
|
|
|
+ if FUpdateCount = 0 then InvalidateView;
|
|
end;
|
|
end;
|
|
|
|
|
|
-constructor TMyShellListView.Create(AVirtualScreen: TBGRAVirtualScreen);
|
|
|
|
|
|
+constructor TLCShellListView.Create(AVirtualScreen: TBGRAVirtualScreen);
|
|
begin
|
|
begin
|
|
BytesCaption:= rsBytes;
|
|
BytesCaption:= rsBytes;
|
|
FVirtualScreen := AVirtualScreen;
|
|
FVirtualScreen := AVirtualScreen;
|
|
@@ -1137,21 +1138,29 @@ begin
|
|
FSortColumn:= -1;
|
|
FSortColumn:= -1;
|
|
end;
|
|
end;
|
|
|
|
|
|
-destructor TMyShellListView.Destroy;
|
|
|
|
|
|
+procedure TLCShellListView.VirtualScreenFreed;
|
|
|
|
+begin
|
|
|
|
+ FVirtualScreen := nil;
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+destructor TLCShellListView.Destroy;
|
|
begin
|
|
begin
|
|
Clear;
|
|
Clear;
|
|
- FVirtualScreen.OnRedraw := nil;
|
|
|
|
- FVirtualScreen.OnKeyDown := nil;
|
|
|
|
- FVirtualScreen.OnDblClick := nil;
|
|
|
|
- FVirtualScreen.OnMouseDown := nil;
|
|
|
|
- FVirtualScreen.OnMouseMove := nil;
|
|
|
|
- FVirtualScreen.OnMouseUp := nil;
|
|
|
|
- FVirtualScreen.OnMouseWheel := nil;
|
|
|
|
|
|
+ if Assigned(FVirtualScreen) then
|
|
|
|
+ begin
|
|
|
|
+ FVirtualScreen.OnRedraw := nil;
|
|
|
|
+ FVirtualScreen.OnKeyDown := nil;
|
|
|
|
+ FVirtualScreen.OnDblClick := nil;
|
|
|
|
+ FVirtualScreen.OnMouseDown := nil;
|
|
|
|
+ FVirtualScreen.OnMouseMove := nil;
|
|
|
|
+ FVirtualScreen.OnMouseUp := nil;
|
|
|
|
+ FVirtualScreen.OnMouseWheel := nil;
|
|
|
|
+ end;
|
|
FreeAndNil(FVScrollBar);
|
|
FreeAndNil(FVScrollBar);
|
|
inherited Destroy;
|
|
inherited Destroy;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.SetItemImage(AIndex: integer; ABitmap: TBGRABitmap;
|
|
|
|
|
|
+procedure TLCShellListView.SetItemImage(AIndex: integer; ABitmap: TBGRABitmap;
|
|
AOwned: boolean);
|
|
AOwned: boolean);
|
|
begin
|
|
begin
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then exit;
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then exit;
|
|
@@ -1160,11 +1169,11 @@ begin
|
|
if imageOwned then FreeAndNil(image);
|
|
if imageOwned then FreeAndNil(image);
|
|
image := ABitmap;
|
|
image := ABitmap;
|
|
imageOwned := AOwned and (ABitmap <> nil);
|
|
imageOwned := AOwned and (ABitmap <> nil);
|
|
- FVirtualScreen.DiscardBitmap;
|
|
|
|
|
|
+ InvalidateView;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TMyShellListView.GetItemImage(AIndex: integer): TBGRABitmap;
|
|
|
|
|
|
+function TLCShellListView.GetItemImage(AIndex: integer): TBGRABitmap;
|
|
begin
|
|
begin
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then
|
|
result := nil
|
|
result := nil
|
|
@@ -1172,7 +1181,7 @@ begin
|
|
Result := FData[AIndex].image;
|
|
Result := FData[AIndex].image;
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TMyShellListView.GetItemFullName(AIndex: integer): string;
|
|
|
|
|
|
+function TLCShellListView.GetItemFullName(AIndex: integer): string;
|
|
begin
|
|
begin
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then
|
|
result := ''
|
|
result := ''
|
|
@@ -1183,12 +1192,12 @@ begin
|
|
Result := IncludeTrailingPathDelimiter(FRoot) + FData[AIndex].filename;
|
|
Result := IncludeTrailingPathDelimiter(FRoot) + FData[AIndex].filename;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.SetFocus;
|
|
|
|
|
|
+procedure TLCShellListView.SetFocus;
|
|
begin
|
|
begin
|
|
SafeSetFocus(FVirtualScreen);
|
|
SafeSetFocus(FVirtualScreen);
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TMyShellListView.GetItemDisplayRect(AIndex: integer): TRect;
|
|
|
|
|
|
+function TLCShellListView.GetItemDisplayRect(AIndex: integer): TRect;
|
|
begin
|
|
begin
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then
|
|
result := EmptyRect
|
|
result := EmptyRect
|
|
@@ -1196,27 +1205,27 @@ begin
|
|
result := FData[AIndex].displayRect;
|
|
result := FData[AIndex].displayRect;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.Sort;
|
|
|
|
|
|
+procedure TLCShellListView.Sort;
|
|
var lst: TList;
|
|
var lst: TList;
|
|
i: integer;
|
|
i: integer;
|
|
- sortedData: TMyShellListViewData;
|
|
|
|
|
|
+ sortedData: TLCShellListViewData;
|
|
begin
|
|
begin
|
|
lst := TList.Create;
|
|
lst := TList.Create;
|
|
for i:= 0 to ItemCount-1 do
|
|
for i:= 0 to ItemCount-1 do
|
|
lst.Add(@FData[i]);
|
|
lst.Add(@FData[i]);
|
|
SortTarget := self;
|
|
SortTarget := self;
|
|
- lst.Sort(@MyShellListViewCompare);
|
|
|
|
|
|
+ lst.Sort(@LCListViewCompare);
|
|
setlength(sortedData,ItemCount);
|
|
setlength(sortedData,ItemCount);
|
|
for i := 0 to lst.Count-1 do
|
|
for i := 0 to lst.Count-1 do
|
|
- sortedData[i] := PMyShellListViewItemData(lst[i])^;
|
|
|
|
|
|
+ sortedData[i] := PLCShellListViewItemData(lst[i])^;
|
|
FData := sortedData;
|
|
FData := sortedData;
|
|
lst.Free;
|
|
lst.Free;
|
|
|
|
|
|
if Assigned(FOnSort) then FOnSort(self);
|
|
if Assigned(FOnSort) then FOnSort(self);
|
|
- FVirtualScreen.DiscardBitmap;
|
|
|
|
|
|
+ InvalidateView;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.RemoveItemFromList(AIndex: integer);
|
|
|
|
|
|
+procedure TLCShellListView.RemoveItemFromList(AIndex: integer);
|
|
var i: integer;
|
|
var i: integer;
|
|
begin
|
|
begin
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then exit;
|
|
if (AIndex < 0) or (AIndex >= ItemCount) then exit;
|
|
@@ -1224,10 +1233,10 @@ begin
|
|
for i := AIndex to ItemCount-2 do
|
|
for i := AIndex to ItemCount-2 do
|
|
FData[i] := FData[i+1];
|
|
FData[i] := FData[i+1];
|
|
setlength(FData, ItemCount-1);
|
|
setlength(FData, ItemCount-1);
|
|
- FVirtualScreen.DiscardBitmap;
|
|
|
|
|
|
+ InvalidateView;
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TMyShellListView.IndexByName(AName: string; ACaseSensitive: boolean
|
|
|
|
|
|
+function TLCShellListView.IndexByName(AName: string; ACaseSensitive: boolean
|
|
): integer;
|
|
): integer;
|
|
var
|
|
var
|
|
i: Integer;
|
|
i: Integer;
|
|
@@ -1248,7 +1257,7 @@ begin
|
|
result := -1;
|
|
result := -1;
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TMyShellListView.GetItemAt(X, Y: Integer): integer;
|
|
|
|
|
|
+function TLCShellListView.GetItemAt(X, Y: Integer): integer;
|
|
var i: integer;
|
|
var i: integer;
|
|
p : TPoint;
|
|
p : TPoint;
|
|
begin
|
|
begin
|
|
@@ -1262,7 +1271,7 @@ begin
|
|
result := -1;
|
|
result := -1;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMyShellListView.DeselectAll;
|
|
|
|
|
|
+procedure TLCShellListView.DeselectAll;
|
|
var i:integer;
|
|
var i:integer;
|
|
discard: boolean;
|
|
discard: boolean;
|
|
begin
|
|
begin
|
|
@@ -1274,7 +1283,7 @@ begin
|
|
discard := true;
|
|
discard := true;
|
|
end;
|
|
end;
|
|
FSelectedIndex := -1;
|
|
FSelectedIndex := -1;
|
|
- if discard then FVirtualScreen.DiscardBitmap;
|
|
|
|
|
|
+ if discard then InvalidateView;
|
|
end;
|
|
end;
|
|
|
|
|
|
end.
|
|
end.
|