Das letzte Beispiel wird so nicht funktionieren, da immer die aufrufende Instanz übergeben wird, also TForm. Das kannst du ja nicht einfach nach TCanvas casten. Und ob er jetzt zuerst nach TForm castet und dann auf Canvas zugreift, oder das ganze in einem with .. do Konstrukt erledigt, kommt doch vollkommen aufs gleiche hinaus.
Soweit ich das in Erinnerung habe wirft AS doch auch eh ne
Exception, fals Sender nicht in den entsprechenden Typ gecastet werden kann.
Wenn man sich beim Typ nicht sicher sein kann (sollte bei ordentlicher Programmierung nicht vorkommen), kann man den Typ vorher prüfen:
if (Sender is TForm) then