Delphi — TPaintBox — Изменение размера
Вопрос
У меня возникли проблемы с изменением размера TPaintBox и рисованием на нем:
В моей форме (с именем FMain) я удалил TPaintBox (с именем DisplayImage), размер которого я пытаюсь изменить при изменении размера формы.
Для этого я написал метод OnResize() для FMain (я подтвердил, что он вызывается правильно), в котором я пытаюсь изменить размер DisplayImage:
procedure TFMain.FormResize(Sender: TObject);
begin
DisplayImage.Width := FMain.ClientWidth;
DisplayImage.Height := FMain.ClientHeight;
DisplayImage.Canvas.Brush.Color := clGreen;
DisplayImage.Canvas.Brush.Style := bsSolid;
DisplayImage.Canvas.Rectangle(0, 0, DisplayImage.Width, DisplayImage.Height);
end;
ИМХО, последний код должен рисовать зеленый прямоугольник полного изображения поверх всего изображения, делая его фактически всегда зеленым.Вместо этого я получаю серое изображение (как и стандартный фоновый цвет Delphi), и время от времени во время изменения размера на долю секунды вспыхивает зеленое изображение.
Чего мне не хватает, есть ли какой-то скрытый компонент, который мне нужно обновить после изменения размера?
Заранее спасибо,
Метель
Решение
Прежде всего, вместо того, чтобы делать
DisplayImage.Width := FMain.ClientWidth;
DisplayImage.Height := FMain.ClientHeight;
при каждом изменении размера просто установите Align := alClient
из коробки с краской.
Во-вторых, чтобы нарисовать в ящике с краской, используйте OnPaint
событие коробки с красками:
procedure TFMain.DisplayImagePaint(Sender: TObject);
begin
DisplayImage.Canvas.Brush.Color := clGreen;
DisplayImage.Canvas.Brush.Style := bsSolid;
DisplayImage.Canvas.Rectangle(0, 0, DisplayImage.Width, DisplayImage.Height)
end;