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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2021, 18:21   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 624
По умолчанию Узнать размеры области вывода текста

Код:
bmp.Canvas.Font:=Ft;
bmp.Canvas.TextOut(x, y, s)
s:string;
Ft:TFont;
bmp: TBitMap;

Как узнать, какого размера будет изображение с текстом?
Чтобы под этот текст задать необходимые размеры БитМапа

Собственно, у меня задача такая: перевести текст из Memo и БитМап, по фонту Ft
Я так понимаю, это надо делать построчно?
Kronos913 вне форума Ответить с цитированием
Старый 29.04.2021, 06:24   #2
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,814
По умолчанию

метод кривой, но как вариант за неимением чего другого: программно вставить текст в TLabel, применив к нему такой же размер шрифта. и посмотреть размеры TLabel. думаю, размеры текста в TBitMap будут такие же...
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 29.04.2021, 09:18   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Canvas.TextWidth
Canvas.TextHeight
... и другие методы Сanvas
https://programmersforum.ru/showthre...ight=textwidth
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 29.04.2021, 11:14   #4
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 624
По умолчанию

Цитата:
Сообщение от NetSpace Посмотреть сообщение
метод кривой, но как вариант за неимением чего другого: программно вставить текст в TLabel, применив к нему такой же размер шрифта. и посмотреть размеры TLabel. думаю, размеры текста в TBitMap будут такие же...
Я, кстати, думал об этом. Но да, это уже на крайний случай вариант. Хотелось бы более прямой способ

Цитата:
Сообщение от evg_m Посмотреть сообщение
Canvas.TextWidth
Canvas.TextHeight
... и другие методы Сanvas
https://programmersforum.ru/showthre...ight=textwidth
Спасибо, сейчас попробую
Kronos913 вне форума Ответить с цитированием
Старый 29.04.2021, 12:40   #5
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 624
По умолчанию

Все спасибо. Вот код процедуры, может кому пригодится

Код:
procedure TextToBmp(const s: TStrings; var bmp:TBitmap; const ft:Tfont);
var
 i, h, w:integer;
begin
 If s.Count>0 then begin
  bmp.Canvas.Font:=ft;
  h:= bmp.Canvas.TextHeight('1')+1;
  bmp.Height:=h*s.Count+2;
  w:= 0;
  For i:=0 to s.Count-1 do begin
   If w<bmp.Canvas.TextWidth(s[i])+1 then begin
    w:=bmp.Canvas.TextWidth(s[i])+1;
    bmp.Width:=w;
   end;
   bmp.Canvas.TextOut(1, h*i, s[i]);
  end;
 end;
end;
И вот так ее вызываю:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 b:tbitmap;
begin
 b:=TBitmap.Create;
 TextToBmp(memo1.Lines, b, FontDialog1.Font);
 image1.Picture.Assign(b);
 b.Free;
end;
Kronos913 вне форума Ответить с цитированием
Старый 29.04.2021, 13:33   #6
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 624
По умолчанию

Вот еще версия, в формате функции
Код:
Function TextToBmp(const s: TStrings; var bmp:TBitmap; const ft:Tfont): boolean;
var
 i, h, w:integer;
begin
 If s.Count>0 then begin
  bmp.Canvas.Font:=ft;
  h:= bmp.Canvas.TextHeight('A1')+1;
  bmp.Height:=h*s.Count+2;
  w:= 0;

  For i:=0 to s.Count-1 do begin
   If w<bmp.Canvas.TextWidth(s[i]+'  ') then begin
    w:=bmp.Canvas.TextWidth(s[i]+'  ');
    bmp.Width:=w;
   end;
   bmp.Canvas.TextOut(0, (h*i)+1, ' '+s[i]);

  end;
  TextToBmp:=true;
 end else TextToBmp:=false;
end;

Последний раз редактировалось Kronos913; 29.04.2021 в 13:52.
Kronos913 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Размеры клиентской области окна, в которой отображается содержимое документа newerow1989 JavaScript, Ajax 3 09.06.2019 10:57
Как узнать размеры экрана ser70 Общие вопросы C/C++ 1 01.06.2013 07:35
Как узнать размеры вставляемой картинки (Delphi) Kreadlling Общие вопросы Delphi 3 12.04.2012 01:54
КАК УЗНАТЬ РАЗМЕРЫ ВИДЕО??? NBSTUDIO Мультимедиа в Delphi 2 13.08.2009 13:08
Размеры текста, после изменения координат? (TmetafileCanvas) AnTe Win Api 1 24.06.2009 08:41