Рисование в TImage

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Рисование в TImage

Сообщение absdjfh » 15.02.2013 18:38:22

Помогите разобраться с ошибкой.
У меня есть Form1, на ней расположены Panel1 (Align = alTop), на панели - Button1. Далее в оставшейся области формы (свойство Align = alClient) расположен компонент TImage. Все это можно увидеть на картинке.
Снимок1.PNG

Событие OnClick для кнопки:
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
begin
  with Image1.Canvas do
  begin
    Brush.Color := clYellow;
    Image1.Canvas.Rectangle(0, 0, Image1.Width, Image1.Height);
  end;
end; 

То есть мы рисуем в области Image1 желтый прямоугольник (можно любого другого цвета).
Теперь три ситуации:
1) запускаем приложение, нажимаем на кнопку - на всей области TImage рисуется прямоугольник
2) запускаем приложение, изменяем размер формы (например, увеличиваем), нажимаем на кнопку - также рисуется на всей области TImage.
3) после ситуации 2 увеличиваем размер еще немного и после этого нажимаем на кнопку.
Чего я ждал от ситуации 3: полное закрашивание TImage желтым цветом.
Что я получил: частичное закрашивание только той области, которая была закрашена в прошлый раз.
Снимок2.PNG

Что я делаю не так?

Добавлено спустя 4 часа 42 минуты 17 секунд:
Кажется, я понял, в чем дело. При первом обращении к Canvas предположительно устанавливаются значения Image1.Canvas.Width := Image1.Width и Image1.Canvas.Height := Image1.Height, которые затем не изменяются при изменении размеров Image1. Остается лишь один вопрос: такое поведение - баг или документированная возможность (feature)? Мне это кажется немного странным.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
absdjfh
новенький
 
Сообщения: 60
Зарегистрирован: 21.01.2012 13:59:00

Re: Рисование в TImage

Сообщение absdjfh » 06.03.2013 23:44:19

Все правильно, объяснение по этому поводу здесь
http://wiki.freepascal.org/Developing_with_Graphics#Draw_to_a_TImage
Странно, что из 80 просмотров, так никто и не указал на то, как разрешается эта проблема (никто не знает?). Гуглить по-английски не привык, поэтому английскую вики нашел не сразу.
absdjfh
новенький
 
Сообщения: 60
Зарегистрирован: 21.01.2012 13:59:00

Re: Рисование в TImage

Сообщение ZeUsM » 07.03.2013 14:54:44

Какая именно проблема? Поставьте Stretch := true и проблемы не будет. :wink:
Аватара пользователя
ZeUsM
новенький
 
Сообщения: 57
Зарегистрирован: 08.11.2010 13:55:35
Откуда: Нерезиновая


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 231

Рейтинг@Mail.ru