Eine feinere Auflösung als mit Canvas.ClipRect erreichst du mit GetClipRgn() oder IsRectVisible(). Windows verwaltet komplexere Zeichenbereiche in sogenannten Region's -> Regionen. Das sind komplexe Datenstrukturen die nicht nur einfache Rechtecke darstellen können sondern ganze Ansammlungen von Rechtecken.
Entweder holt man sich mit GetClipRgn() zu einem Canvas.Handle -> Geräte Kontext -> Device Context ->
DC -> hDC diese Region und kann dann über eigene Regions mit zb. der Funktion CombineRgn() alle Boolschen Operationen durchführen, also auch IsRectViusible() simmulieren, oder aber man benutzt IsRectVisible(). Möchte man zb. den Bereich der neugezeichnet werden soll schon im vorhinein clippen/beschneiden und dann ausfüllen dann kann man auch mit FillRgn() statt mit FillRect() arbeiten. FillRect() würde intern die Region holen und dann den übergebenen TRect in eine Region umwandeln und eine Intersection erzeugen. Mit dieser Intersection-Region (CombineRgn(RGN_AND) ) wird dann FillRgn() aufgerufen. So gesehen kann man das autom. machen lassen mit einem Aufruf von FillRect() oder eben selber manuell durchführen über GetClipRgn(), CombineRgn() und FillRgn(). Vorteil der letzteren Methode ist es das man wesentlich mehr EInfluß nehmen kann, zb. noch eigene Bereich zergliedern etc.pp.
Gruß Hagen