Du hast ja das Rechteck des jeweiligen Items und kannst
ClipRect der Zeichenfläche abfragen. Nun musst Du nur noch sehen, ob es Überschneidungen zwischen diesen beiden gibt. Wenn nicht, muss das Item auch nicht gezeichnet werden. Mal aus der hohlen Hand:
Delphi-Quellcode:
procedure TDeinItem.SetRect(R: TRect);
var Clip, dummy: TRect;
begin
Left := R.Left;
Top := R.Top;
Width := R.Right - R.Left;
Height := R.Bottom - R.Top;
Clip := DeinCanvas.ClipRect;
if IntersectRect(dummy, Clip, R) then
Invalidate;
end;