Вопрос

У меня возникли проблемы с изменением размера 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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top