Давайте попробуем написать простейший пример, в котором будет рисоваться обычный квадрат. Но для усложнения задачи квадрат будем рисовать не на форме, а внутри компонента TPaintBox, который очень хорошо подходит для этих целей.
Создайте новое приложение и поместите на него компонент PaintBox с вкладки System палитры компонентов. Постарайтесь разместить этот компонент в нижней половине окна.
У формы и у PaintBox есть свойство canvas, значит, на них можно рисовать. Рисование лучше всего производить по событию onPaint, которое также есть у обоих компонентов. Итак, создадим обработчик события OnPaint для формы и напишем тут следующее:
Canvas.Rectangle(10,10,100,100);
Здесь мы вызываем метод Rectangle объекта canvas нашей главной формы. У этого метода четыре параметра.
- Левая позиция квадрата.
- Верхняя позиция квадрата.
- Правая позиция.
- Нижняя позиция.
Теперь выделите компонент PaintBox и создайте такой же обработчик события OnPaint для этого компонента. В нем напишите следующее: PaintBoxl.Canvas.Rectangle(10,10,100,100);
Здесь вызывается тот же метод с такими же параметрами, только для PaintBox. Это значит, что этот квадрат будет рисоваться уже внутри компонента PaintBox.
Попробуйте запустить приложение, и вы увидите два квадрата (рис. 12.2). Оба они рисуются с помощью метода Rectangle с одними и теми же параметрами и, по идее, должны быть нарисованы в одном и том же месте. Но в реальности это не так, потому что первый квадрат рисуется на форме, и координаты его отсчитыва- ются относительно формы (10, 0, 100, 100), а второй— внутри компонента, и координаты его отсчитываются от- носительно этого компонента (10, 0, 100, 100).
Почему в примере рисование происходит именно в обработчике события OnPaint? Просто событие генерируется каждый раз, когда нужно приложение и поместите код рисования квадрата в обработчик события Onshow. В лучшем случае вы увидите квадрат, но если свернуть окно или просто перекрыть другим и потом снова открыть его, то квадрат исчезнет.