Hallo,
nimm mal deine Original-Button-Methode,
klick auf den Button und dann verschieb mal dein Form,
wech is das Icon! (nehme ich mal an)
Windows übermalt dein Icon sofort wieder.
Was du ins Canvas malst, bleibt dort nur bis zum nächsten Redraw drin.
Das ist nicht wie StringGrid.Cells[]:= 'bla';
Du musst das Icon-
Handle als From-Variable definieren
und dein Draw ins OnPaint des Forms packen.
Nach dem Laden des Handles
Form1.Invalidate bzw.
Invalidate (du hast ja dein with) aufrufen (das ruft OnPaint auf).
Heiko