:: Visual Foxpro, Foxpro for DOS
Ширина фразы
lemenev
Автор

Сообщений: 136
Дата регистрации: 23.06.2022
Как можно узнать ширину фразы в пикселях? Например, «Мама мыла раму», Arial, 14 ?
Цель – понять уместится ли текст в отведённый размер на форме.
Ratings: 0 negative/0 positive
Re: Ширина фразы
Taran

Сообщений: 13688
Откуда: Красноярск
Дата регистрации: 16.01.2008
Есть какая-то функция, но там какие-то заморочки.
Проще разместить невидимый label хоть на форме, хоть на screen. Установить AutiSize=.T. и заполнять требуемым текстом.
Ну и WordWrap оставить .F. конечно.


P.S.
А вообще
TXTWIDTH(cExpression [, cFontName, nFontSize [, cFontStyle]])
Возвращает длину символьного выражения исходя из средней ширины символа для данного шрифта.



Исправлено 1 раз(а). Последнее : Taran, 07.12.22 20:30
Ratings: 0 negative/0 positive
Re: Ширина фразы
Taran

Сообщений: 13688
Откуда: Красноярск
Дата регистрации: 16.01.2008
У меня примерно так.
*BEG:»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
Procedure GetTextWidth(toObj)
this.hSetObjForWidth(toObj)
Return this.lblSize.Width
EndProc
*END:«««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
*BEG:»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
Hidden Procedure hSetObjForWidth(toSrc as Label)
With this.lblSize as Label
.FontCharSet = toSrc.FontCharSet
.FontBold = toSrc.FontBold
.FontSize = toSrc.FontSize
.FontItalic = toSrc.FontItalic
.FontName = toSrc.FontName
.Caption = toSrc.Caption
EndWith
EndProc
*END:«««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
Ratings: 0 negative/0 positive
Re: Ширина фразы
akvvohinc

Сообщений: 4256
Откуда: Москва
Дата регистрации: 11.11.2008
Taran
Проще разместить невидимый label
Думаю, наоборот - Label должен быть видимым - Label.visible = .T.
Ratings: 0 negative/0 positive
Re: Ширина фразы
Taran

Сообщений: 13688
Откуда: Красноярск
Дата регистрации: 16.01.2008
akvvohinc
Taran
Проще разместить невидимый label
Думаю, наоборот - Label должен быть видимым - Label.visible = .T.

Ну если не прокатит, то делать Visible и убирать за границу формы.
Мне вообще это похрену.
У меня все визуальные методы общего назначения собраны в объекте на основе класса Custom.
А этот самый label вешается на этот Custom программным способ при инициализации класса.
Соотв. видимым он никак не может быть.

А теории раздувать на ровном месте .. не, не моё.
Ratings: 0 negative/0 positive
Re: Ширина фразы
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
У меня textbox невидимый



Исправлено 1 раз(а). Последнее : Ydin, 08.12.22 00:12
Ratings: 0 negative/0 positive
Re: Ширина фразы
Taran

Сообщений: 13688
Откуда: Красноярск
Дата регистрации: 16.01.2008
Ydin
У меня textbox невидимый

Извиняюсь конечно. А как с помощью TextBox вычислить ширину фразы в пикселях? Видимо я что-то пропустил в ЦПШ.
Ratings: 0 negative/0 positive
Re: Ширина фразы
akvvohinc

Сообщений: 4256
Откуда: Москва
Дата регистрации: 11.11.2008
Taran
У меня все визуальные методы общего назначения собраны в объекте на основе класса Custom.
А этот самый label вешается на этот Custom программным способ при инициализации класса.
Соотв. видимым он никак не может быть.
Прям-таки и не может.
А какая связь между "куда вешается" объект и его свойством Visible?

Ydin
У меня textbox невидимый
Хотел бы посмотреть на реализацию (она, безусловно, возможна).

Если Textbox в Design-time описан с некоторыми свойствами (или, что то же самое, "крепится" к родителю программно с помощью ADD OBJECT), то, конечно, он может быть и невидимым. Но только позже никакие изменения его свойств не приведут к изменению ширины, пока он не станет видимым.

Но в примере выше, если я правильно его понял, у уже существующего Label меняются свойства.
И тогда, если он был невидимый, его Label.Width не изменится.

Может, я что-то в своё время "недокопал", но вот код, иллюстрирующий сказанное выше:



Исправлено 2 раз(а). Последнее : akvvohinc, 08.12.22 02:33
Ratings: 0 negative/0 positive
Re: Ширина фразы
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
Нет, сейчас посмотрел свой класс TextBox'a.
В нем мой метод AutoSize. В нем TXTWIDTH. Написано в прошлом веке и я забыл.
А в другом месте через Лейбл.

Лейбл точнее



Исправлено 1 раз(а). Последнее : Ydin, 08.12.22 16:46
Ratings: 0 negative/0 positive
Re: Ширина фразы
lemenev
Автор

Сообщений: 136
Дата регистрации: 23.06.2022
Всем спасибо.
Меня вполне устроила комбинация функций TXTWIDTH() и FONTMETRIC():

? TXTWIDTH('Мама мыла раму','Arial',14)*FONTMETRIC(6,'Arial',14)
Ratings: 0 negative/1 positive
Re: Ширина фразы
akvvohinc

Сообщений: 4256
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Меня вполне устроила комбинация функций TXTWIDTH() и FONTMETRIC()
Это только кажется и сильно зависит от типа шрифта (ну, и конечно, от ваших требований к точности определения ширины).
Если он моноширинный, то, может, такой способ и подойдет.



Исправлено 1 раз(а). Последнее : akvvohinc, 08.12.22 18:16
Ratings: 0 negative/0 positive
Re: Ширина фразы
leonid

Сообщений: 3208
Откуда: Рига
Дата регистрации: 03.02.2006
Функции TxtWidth и FontMetric не имеют параметра FontCharSet, а ширина текста от этого параметра вполне зависит.
Ratings: 0 negative/0 positive
Re: Ширина фразы
of63

Сообщений: 25406
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
() В винде функции [средней] ширины текстов сделаны на коленке. Но от них им уйти нельзя, т.к. старые прогеры на них "заложились", поэтому и не это все не реально изменить, или адекватно использовать. Воспринимайте эту функцию как "идею" (например, того, чего я сказал выше, или сво вариант), не более...
В винде ОЧЕНЬ МНОГО подобных ("ненужных") ф-ий



Исправлено 1 раз(а). Последнее : of63, 11.12.22 01:21
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 13 akvvohinc  (Гостей: 12)

© 2000-2024 Fox Club 
Яндекс.Метрика