Вы не используете PaintBox правильно. PaintBox имеет собственное событие для рисования. Вы должны использовать TPaintBox.OnPaint
вместо TForm.OnPaint
, и результат будет таким, как вы написали.
Вы также можете рисовать прямо на картинке. В этом случае используется событие TForm.OnPaint
.
Вы также можете рисовать непосредственно на изображении после его изменения (например, после загрузки). Работает, если используется графика TBitmap.
procedure TForm1.button1click(Sender: TObject);
begin
image1.LoadFromFile('c:\temp\1.bmp')
image1.canvas.Rectangle(0,0,100,100);
end;