浏览代码

fix free issue

Unknown 6 年之前
父节点
当前提交
c098e5edea
共有 2 个文件被更改,包括 107 次插入97 次删除
  1. 4 3
      lazpaint/ubrowseimages.pas
  2. 103 94
      lazpaint/umyslv.pas

+ 4 - 3
lazpaint/ubrowseimages.pas

@@ -75,7 +75,7 @@ type
     FOpenButtonHint: string;
     FIsSaveDialog: boolean;
     FOverwritePrompt: boolean;
-    ShellListView1: TMyShellListView;
+    ShellListView1: TLCShellListView;
     FInFormShow: boolean;
     FChosenImage: TImageEntry;
     FPreview: TImagePreview;
@@ -282,7 +282,7 @@ begin
   bmp.Free;
   ImageList128.Clear;
 
-  ShellListView1 := TMyShellListView.Create(vsList);
+  ShellListView1 := TLCShellListView.Create(vsList);
   SetShellMask;
   ShellListView1.OnDblClick := @ShellListView1DblClick;
   ShellListView1.OnSelectItem := @ShellListView1SelectItem;
@@ -311,6 +311,7 @@ end;
 
 procedure TFBrowseImages.FormDestroy(Sender: TObject);
 begin
+  ShellListView1.VirtualScreenFreed;
   FreeAndNil(ShellListView1);
   FreeAndNil(FChosenImage.bmp);
   FreeAndNil(FPreview);
@@ -725,7 +726,7 @@ procedure TFBrowseImages.ResetDirectory(AFocus: boolean; AForceReload: boolean);
 var newDir: string;
 begin
   newDir := DirectoryEdit1.Text;
-  if (newDir <> ShellListView1.Root) or AForceReload then
+  if Assigned(ShellListView1) and ((newDir <> ShellListView1.Root) or AForceReload) then
   begin
     ClearThumbnails;
     if newDir = ShellListView1.Root then

+ 103 - 94
lazpaint/umyslv.pas

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