Die ID eines Device-Context (HDC) ist halt nunmal kein Fensterhandle (HWND), daher kann die Funktion SetWindowRgn() auch nichts mit "Canvas.Handle" anfangen.
Ein "
Handle" im allgemeinen ist halt nur ein "Griff", innerhalb einer Liste aller Device-Contexte oder innerhalb einer Liste aller Fenster halt eine eindeutige ID um das gewünschte Objekt zu identifizieren und mit ihm zu arbeiten. Alle Handles werden halt als 32Bit-Wert gespeichert, dadurch entsteht der Eindruck vermeindlicher Kompatibilität.
Wenn Du nicht alle Controls die von TGaphicControl stammen und ohne Windowhandle daherkommen nochmal ableiten und deren Paint-/Mousehandler überschrieben willst dann ist wohl die Lösung mit dem Panel der einzig akzeptable Weg.
MfG,
Tryer