Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.01.2017, 15:42   #1
АНАТОЛИЙ249
Пользователь
 
Регистрация: 05.02.2007
Сообщений: 91
По умолчанию Вывод текста на bitmap

Есть bitmap , нужно вывести текст по центру ,если текст не влазит уменьшить размер и вывести в 2 строки и тоже по центру обе строки.

Тут нашел вроде но работает не так маленько .

Не уменьшает текст для вывода в 2 строки,размер шрифта постоянный не меняется.

Цитата:

procedure DrawRectEx(const Canvas: TCanvas; const Rect: TRect;
Text: string);
var
i, oldWidth, Width: Integer;
PoleWidth, PoleWidth2: Integer;
l, t: Integer;
CharHeight: Integer;
s, NewS, TextSpace: string;
begin
i := 1;
s := '';

TextSpace := Text + ' '; // Пробел в коне для правильной работы
// цикла while

CharHeight := Canvas.TextHeight('V'); // Высота символов

oldWidth := 0;

PoleWidth := Rect.Left + Rect.Right; // Длина всего поля для рисования
PoleWidth2 := PoleWidth div 2; // Половина длины поля
t := Rect.Top; // Высота, на которой выводится строка

while PosEx(' ', TextSpace, i) <> 0 do
begin
NewS := Copy(TextSpace, i, PosEx(' ', TextSpace, i) - i + 1);

Width := Canvas.TextWidth(NewS);
if Width + oldWidth < PoleWidth then
begin
s := s + NewS;
Inc(oldWidth, Width);
end
else
begin
if oldWidth > 0 then
begin
// Рисование буфера и очистка его
l := PoleWidth2 - oldWidth div 2 + Rect.Left;
Canvas.TextOut(l, t, s);
s := NewS;
oldWidth := Width;
end
else
begin
// Рисуем одно слово
oldWidth := 0;
s := '';

l := PoleWidth2 - Width div 2 + Rect.Left;
Canvas.TextOut(l, t, NewS);
end;

Inc(t, CharHeight);
if t + CharHeight > Rect.Bottom then
begin
oldWidth := 0;
Break;
end;
end;

// Следующее слово
i := PosEx(' ', TextSpace, i) + 1;
end;

// Вывод остатков текста
if oldWidth > 0 then
begin
l := PoleWidth2 - oldWidth div 2 + Rect.Left;
Canvas.TextOut(l, t, s);
end;
end;




Спасибо.

Последний раз редактировалось АНАТОЛИЙ249; 06.01.2017 в 15:59.
АНАТОЛИЙ249 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисование многострочного текста BitMap Puhovoi Мультимедиа в Delphi 4 03.12.2021 13:02
C++ вывод текста drukas Общие вопросы C/C++ 4 31.03.2013 17:57
32bpp bitmap вывод текста через GDI+ Celestia Мультимедиа в Delphi 1 30.11.2010 19:07
из-за чего появляется полоса (на скрине) при вставке BitMap в TImage? - Проблема с Bitmap Grey@2009 Мультимедиа в Delphi 2 02.01.2010 20:23
C|Вывод текста Troi666 Помощь студентам 4 09.05.2009 01:31