Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Преобразование Width в Length


Страницы:   1 2

Arazel ©   (2005-10-29 20:49:00) 

Помогите вычислить длину текста по Width?


Arazel   (2005-10-30 11:28:00) [21]

Элементарно:

Есть кнопка, размер кнопки: Width – 98, Height – 22
Так вот как мне предварительно узнать по Width
сколькосимволов в Caption поместится?


sniknik   (2005-10-30 11:12:00) [22]

вроде получилось. только точку с запятой и пробел почемуто вставило в разыв строки (я не задавал), там только пары - точка вверху с точкой внизу.
скинь в редактор убери, будут одинаково сточками по длинне но на 6 символов больше по количеству.


sniknik   (2005-10-30 11:08:00) [23]

homm ©   (30.10.05 07:05) [7]
по вопросу нужно не максимальное, а точное...
ну допустим вычислил ты что в длинну 100 влазит 30 символов "."
а в тексте на самом деле находится 10-18 "Щ"
"ЩЩЩЩЩЩЩЩЩЩ"

и потом точка это не самое минимальное, к примеру (если получится в отображении на сайте)
точки 30символов
"............................."
а сдесь 36 спаренных... (в редакторе они одинаковой длинны, как в отображении счас посмотрим )
̣"˙̣˙̣˙̣˙̣˙̣˙̣˙̣˙̣˙̣˙ ;̣˙̣˙̣˙̣˙̣˙̣˙̣˙̣˙"


Anatoly Podgoretsky   (2005-10-30 11:04:00) [24]

Много, много проще, никаких преобразований не требуется, сам текст уже имеет всю информацию и нет нужды преобразовывать его через Width, просто использовать функцию Length


homm   (2005-10-30 07:05:00) [25]


>  задача общего решения не имеет.

Отнюдь!


TR: TRect;

TR := MakeRect(0, 0, KnownWidth + Canvas.TextWidth ('...'), Canvas.TextHeight(MyString))
DrawText (Canvas.Handle, MyString, -1, TR, DT_SINGLELINE or DT_MODIFYSTRINGor DT_END_ELLIPSIS);

После этого MyString будет содержать максимальное количество символов, помещающееся в указаную длину. Единственный недостаток - на канве будет текст, поэтому TR задай выше верхней граници видимости.


Юрий Зотов   (2005-10-30 05:47:00) [26]

> Arazel ©   (29.10.05 21:00) [3]
> Помогите вычислить длину текста в  симолах по Canvas.TextWidth?

При немоноширинном шрифте длина разного текста будет разной, поэтому задача общего решения не имеет.

А при моноширинном шрифте можно так:

S:= '';
N := 0
W := Canvas.ClipRect.Right - Canvas.ClipRect.Left;
while Canvas.TextWidth(S) < W do
begin
 S := S + 'a';
 Inc(N)
end;
if Canvas.TextWidth(S) <> W then
 Dec(N);


isasa   (2005-10-29 22:13:00) [27]

Eraser ©   (29.10.05 21:07) [4]
Издеваешься?


:)
Шрифт моноширинный, пропорциональный, гарнитура, кегль, ...
Сумма ширин символов + межсимвольное, в зависимоти от см 1-й абзац ....


Eraser   (2005-10-29 21:07:00) [28]


> Arazel ©   (29.10.05 21:00) [3]

Издеваешься?


Arazel   (2005-10-29 21:00:00) [29]

Помогите вычислить длину текста в  симолах по Canvas.TextWidth?


Arazel   (2005-10-29 20:58:00) [30]

Eraser ©   (29.10.05 20:52) [1]
Я перепутал на оборот =\


Eraser   (2005-10-29 20:52:00) [31]


> Arazel ©   (29.10.05 20:49)

TCanvas.TextWidth


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо