![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Текст на TImage [D7, XP]
Fr © (2011-03-25 16:46:00)На форме лежит TImage. В него загружен бмп. Align установлен в alClient. Stretch = true.
Задача: в координаты 10,10 TImage вывести текст с Size=8. Размер выведенного текста не должен изменяться при ресайзе формы.
Пытаюсь сделать так:
procedure TForm1.FormResize(Sender: TObject);
begin
with Image1.Canvas do begin
Font.Name:='Arial';
Font.Height:=10;
//Font.Style:=[fsBold];
Font.Color:=clYellow;
OldBkMode := SetBkMode(Handle, TRANSPARENT);
TextOut( 10, 10, 'String');
SetBkMode(Handle, OldBkMode);
end;
end;
Но при ресайзе формы размер выводимого шрифта так же меняется.
Как добиться того, чтобы при ресайзе формы шрифт всегда выводился одним размером?
Fr (2011-03-26 10:40:00) [1]
> Тебе уже ИШ подсказал, как сделать правильно.
Это я уже сделал сразу после его совета. Спасибо. Хотелось разобраться - почему не работает первый вариант.
Поэтому спасибо и Leon-Z © (25.03.11 21:50) [4]за пояснение.
Amoeba_ (2011-03-25 21:52:00) [2]
> r (25.03.11 17:10) [3]
>
>
> > clickmaker © (25.03.11 16:53) [1]
>
> Так onResize обрабатывается уже после изменения размера
> формы? Т.е., когда событие наступает, форма уже изменена,
> соответственно и Image1 изменил свои размеры. И вот в этот
> момент я пытаюсь вывести текст заданного размера....
>
Нефиг рисовать на TImage, он не для этого предназначен, ССЗБ. Тебе уже ИШ подсказал, как сделать правильно.
Для непонятливого поясню:
Загружаешь (из файла или из ресурса) картинку в TBitmap. Затем в событии OnPaint компонента TPainBox отрисовываешь на его Canvas сперва этот Bitmap, а затем выводишь текст. А у формы св-во DoubleBuffered установи (в Runtime) в True.
Leon-Z (2011-03-25 21:50:00) [3]
> Fr (25.03.11 17:10) [3]
> Так onResize обрабатывается уже после изменения размера
> формы?
Событие OnResize наступает до изменения размера окнано в то время когда уже заданы новые размеры.
Короче Resize меняет размеры (этого мы не видим).
Потом Paint перерисовывает с новыми размерами (а это видим).
Fr (2011-03-25 17:10:00) [4]
> clickmaker © (25.03.11 16:53) [1]
Так onResize обрабатывается уже после изменения размера формы? Т.е., когда событие наступает, форма уже изменена, соответственно и Image1 изменил свои размеры. И вот в этот момент я пытаюсь вывести текст заданного размера....
Игорь Шевченко (2011-03-25 16:54:00) [5]
> Как добиться того, чтобы при ресайзе формы шрифт всегда
> выводился одним размером?
1. Рисовать на событии OnPaint
2. На TPaintBox
clickmaker (2011-03-25 16:53:00) [6]все, что рисуется на Image1.Canvas, становится частью Image и ресайзится вместе с ним, слоев там нет.
Рисовать текст нужно отдельно