Ещё с Делфи осталось ощущение, что все свойства канвы доступны лишь очень продвинутым кодерам, коим я не являюсь даже близко ))
По примерам из разных форумов и блогов создал в модальном окне следующую процедуру размещения изображений из файлов на форме:
- Код: Выделить всё
- procedure TFormSetLoc.DrawPictLoc(LocRow: Integer);
 var
 S: string;
 PictRect, TempRect: TRect;
 begin
 S:= CurrDir+'/images/'+StringGridLoc.Cells[1, LocRow]+'.bmp';
 TempRect:= Rect(0, 0, 48, 32);
 if DirectLoc then
 PictRect:= Rect(48, 32 * (LocRow - 1), 0, 32 * LocRow)
 else
 PictRect:= Rect(0, 32 * (LocRow - 1), 48, 32 * LocRow);
 Try
 if FileExists(S) then
 ImgTmp.Picture.LoadFromFile(S)
 else
 ImgTmp.Picture.PNG.Canvas.CopyRect(TempRect, ImageLoc0.Picture.Bitmap.Canvas, TempRect);
 ImgLoc.Picture.PNG.Canvas.CopyRect(PictRect, ImgTmp.Picture.Bitmap.Canvas, TempRect);
 ImgLoc.Repaint;
 except
 ShowMessage(MessagePictLocNotFound+#$D#$A+S);
 end;
 end;
Позже слегка модифицировал и повторил в главном окне, изображения во временный имидж читались, но далее ничего не происходило (сверху кусочек главного окна, где ожидались картинки, остальное модальное):

Фрагмент кода (естественно пробовал копировать и напрямую в любой имидж на главной форме, без поиска):
- Код: Выделить всё
- ImgTmp.Picture.PNG.Canvas.CopyRect(TempRect, ImageLoc0.Picture.Bitmap.Canvas, TempRect);
 (Findcomponent('ImageLoc'+IntToStr(PictNum+8)) as TImage)
 .Picture.PNG.Canvas.CopyRect(PictRect, ImgTmp.Picture.Bitmap.Canvas, TempRect);
После плясок с бубном получил такой рабочий код:
- Код: Выделить всё
- procedure TFormMain.DrawPictLocs(PictNum, LocRow: Integer);
 var
 S: string;
 PictRect, TempRect: TRect;
 begin
 S:= CurrDir+'/images/'+FormSetLoc.StringGridLoc.Cells[1, LocRow]+'.bmp';
 TempRect:= Rect(0, 0, 48, 32);
 if DirectLoc then
 PictRect:= Rect(48, 0, 0, 32)
 else
 PictRect:= Rect(0, 0, 48, 32);
 Try
 if FileExists(S) then
 ImgTmp.Picture.LoadFromFile(S)
 else
 ImgTmp.Canvas.CopyRect(TempRect, ImageLoc0.Canvas, TempRect);
 (Findcomponent('ImageLoc'+IntToStr(PictNum+8)) as TImage)
 .Canvas.CopyRect(PictRect, ImgTmp.Canvas, TempRect);
 (Findcomponent('ImageLoc'+IntToStr(PictNum+8)) as TImage).Repaint;
 except
 ShowMessage(MessagePictLocNotFound+#$D#$A+S);
 end;
 end;
И результат:

Попробовал в модальной форме упростить ImgTmp.Picture.PNG.Canvas.CopyRect до ImgTmp.Canvas.CopyRect и получил закрашенный чёрным имидж:

То есть более длинный путь к холсту работает в модальном окне, но не работает в главном, а более короткий - наоборот. Или тут какая-то другая причина, о которой даже не подозреваю?
Как бы выход (на костылях) найден, но если кто сможет, раскройте пожалуйста глубинную сущность данного метода (можно ссылкой на почитать про нюансы).


