Делаю компонент-кнопку от TCustomControl.
Её канвас создаю так в Create компонента:
Код:
FCanvas: TCanvas;
...
FCanvas := TControlCanvas.Create;
TControlCanvas( FCanvas ).Control := Self;
Ну и рисую на нём:
Код:
FCanvas.Draw( 0, 0, _BitMap );
Всё отлично работает до тех пор, пока родитель кнопки или его родитель или ещё выше по иерархии не сделает:
И если после этого что-то вызовет перерисовку кнопки, к примеру смена одного из её свойств, то "control has no parent window", в роли control-а в данной ошибке выступает естественно тот, у которого нет родителя. Можно конечно при каждой перерисовке циклом проверять родителей или обернуть в try ... except, но оба эти варианты ни в какие рамки конечно не лезут. Как это правильно сделать?