Talk:VirtualTreeview
From Lazarus wiki
Jump to navigationJump to searchThe 4.0.17 package on sourceforge contains some memleaks. For one, I had to fix the lcl, see cvs-log.
Below is a patch for virtualtrees.pas.
--- D:\lazarus\projects\Virtualtrees-4.0.17\VirtualTrees.pas Tue Apr 26 22:54:48 2005 +++ D:\lazarus\projects\Virtualtrees\VirtualTrees.pas Mon May 09 11:04:46 2005 @@ -3840,7 +3840,6 @@ try // Since we want the image list appearing in the correct system colors, we have to remap its colors. Images := TBitmap.Create; - OneImage := TBitmap.Create; //todo if ColorRemapping then // Images.Handle := CreateMappedRes(FindClassHInstance(TBaseVirtualTree), PChar(ImageName), Grays, SysGrays) // else @@ -3853,20 +3852,20 @@ IL.Clear; IL.Height := Images.Height; IL.Width := Images.Height; - OneImage.Width := IL.Width; - OneImage.Height := IL.Height; MaskColor := clFuchsia; //later: bug in gtk MaskColor := Images.Canvas.Pixels[0, 0]; // this is usually clFuchsia Dest := Rect(0, 0, IL.Width, IL.Height); - for I := 0 to (Images.Width div Images.Height) - 1 do + for I := 0 to (Images.Width div Images.Height) - 1 do begin + OneImage := TBitmap.Create; + OneImage.Width := IL.Width; + OneImage.Height := IL.Height; Source := Rect(I * IL.Width, 0, (I + 1) * IL.Width, IL.Height); OneImage.Canvas.CopyRect(Dest, Images.Canvas, Source); IL.AddMasked(OneImage, MaskColor); end; finally Images.Free; - OneImage.Free; end; finally Watcher.Leave; @@ -3958,7 +3957,7 @@ I, Width, Height: Integer;*) begin - // don't use system image set, since not very system has this. + // don't use system image set, since not every system has this. if Flat then IL := FlatImages else @@ -4148,7 +4147,7 @@ var HintWasEnabled: Boolean; -begin exit; +begin //mm timeEndPeriod(MinimumTimerInterval); LightCheckImages.Free; @@ -4158,8 +4157,10 @@ FlatImages.Free; XPImages.Free; UtilityImages.Free; +{$IFNDEF LCL} // System images are not used. SystemCheckImages.Free; SystemFlatCheckImages.Free; +{$ENDIF} //x if NeedToUnitialize then //x OleUninitialize; @@ -4198,7 +4199,7 @@ procedure ReleaseThreadReference(Tree: TBaseVirtualTree); -begin exit; +begin if Assigned(WorkerThread) then begin Dec(WorkerThread.FRefCount); @@ -4237,7 +4238,7 @@ constructor TWorkerThread.Create(CreateSuspended: Boolean); -begin exit; +begin inherited Create(CreateSuspended); FChangeLock := TCriticalSection.Create; FWaiterList := TThreadList.Create; @@ -4247,7 +4248,7 @@ destructor TWorkerThread.Destroy; -begin exit; +begin FWaiterList.Free; FChangeLock.Free; inherited; @@ -4375,7 +4376,7 @@ procedure TWorkerThread.RemoveTree(Tree: TBaseVirtualTree); -begin exit; +begin Assert(Assigned(Tree), 'Tree must not be nil.'); with FWaiterList.LockList do