Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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


Ответ
 
Опции темы
Старый 16.09.2009, 09:55   #1
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию размер шрифта

Добрый день.
Товарищи специалисты, подскажите как сделать следующее:
надо определить размеры прямоугольника под выбранный winдузовый текст
varelik вне форума Ответить с цитированием
Старый 16.09.2009, 10:04   #2
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Код:
Canvas.TextWidth('aaa');
Canvas.TextHeight('aaa');
Естественно, тебе нужно выбрать шрифт, резмер...
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 16.09.2009, 10:22   #3
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию

Ок, вношу конкретику:
Ссылаясь на свою старую тему: как вывести текст в несколько строк
на канву имагера, я пришел к следующему: в memo1 вводил строки,
а потом по щелчку по кнопке они появлялись на канве имагера.
Этот имагер создается динамически. И если использовать одну строку-
можно написать :timage1(new).width:=timage1(new).c anvas.textwidth(form5.memo1.text);
а если строк много и они разной длины- то как выбрать размер имагера по размеру самой длинной строки?
Код:
i3,max:integer;
//--------
for i3=0 to form5.memo1.lines.count-1 do begin
timage1(new).canvas.textout(0,i3*20,form5.memo1.lines.strings[i3]);
max:=0;//максималь. к-во символов в строке
if length(form5.memo1.lines.strings[i3])>max
then max:=length(form5.memo1.lines.strings[i3]); //определили этот max
timage1(new).width:=max*коэффициэнт;
Вот, собсно этот коэффициэнт мне и нада узнать

Последний раз редактировалось varelik; 16.09.2009 в 10:28.
varelik вне форума Ответить с цитированием
Старый 16.09.2009, 10:41   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Коэффициент я лично получаю по самой длинной букве шрифта:
коэффициэнт:=<Обьект на котором рисуем>.Canvas.TextExtent('W');
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.09.2009, 11:46   #5
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию

Stilet,
когда я пишу:
timage1(new).width:=max*timage1(new ).Canvas.TextExtent('W');
выдает ошибку: operator not applicable to this operand.
вобще, function textextent:tagsize. что такое tagsize?
и как мне правильно записать?
varelik вне форума Ответить с цитированием
Старый 16.09.2009, 11:51   #6
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Выдержка из модуля Types:
Код:
tagSIZE = packed record
    cx: Longint;
    cy: Longint;
  end;
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 16.09.2009, 11:56   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Цитата:
когда я пишу:
Я так понимаю что хелп из моды вышел?
А почитал бы ты про этот метод натолкнулся на такое:
Код:
timage1(new).width:=max*timage1(new ).Canvas.TextExtent('W').cx;
Или же:
Код:
timage1(new).width:=max*timage1(new ).Canvas.TextWidth('W');
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.09.2009, 12:18   #8
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию

благодарю за разъяснение)
Stilet, как ты сказал- работает. Но есть еще проблемка:
я у memo1 сделал wordwrap=false, шоб текст мог выходить за границы memo1, а не перелазил на его следущую строку, достигнув этой границы.
Используя:
timage1(new).width:=max*timage1(new ).Canvas.TextWidth('W');
у меня на канве имагера текст, введенный после границы memo1 обрезается- как исправить?
varelik вне форума Ответить с цитированием
Старый 16.09.2009, 12:27   #9
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Так пойдёт?

Код:
procedure TForm1.FormPaint(Sender: TObject);
const text = 'Однажды в студёную зимнюю пору я из лесу вышел, был сильный мороз';
var rect: trect;
begin
  SetRect(rect, 10,10,200,200);
  With canvas do
  begin
    Font.Name := 'Comic Sans MS';
    Font.Size := 14;
    DrawText(Handle,pchar(text),length(text),rect, DT_LEFT or DT_WORDBREAK);
  end;
end;
пыщь
JTG вне форума Ответить с цитированием
Старый 16.09.2009, 12:48   #10
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию

JTG,
вот сразу не могу сказать, - эта тема для меня новая и далеко не все понимаю.
у меня, повторюсь, из memo текстовые строки различной длины должны на канву image отображаться не урезаясь. и размер image должен автоматически(чтоб не урезались строки) стать таким же как длина самой длинной строки из memo. вот..
Мне бы свой, приведенный выше код поправить..
varelik вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме 20000 рублей в месяц
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Размер шрифта в WordArt Diego__ Microsoft Office Word 3 01.09.2009 10:59
Как установить тип и размер шрифта к документу? Alexpoliv Microsoft Office Word 2 23.08.2009 21:06
Размер шрифта Gorychev HTML и CSS 6 25.05.2008 10:42
Тип и размер шрифта rusif Помощь студентам 1 19.12.2007 17:48
изменить размер шрифта в свойстве “Caption” формы (Form) Борис2 Компоненты Delphi 8 13.09.2007 19:36


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS