powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Определение ширины textbox
11 сообщений из 11, страница 1 из 1
Определение ширины textbox
    #37096024
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Требуется подобрать размер шрифта. для этого использую textbox:

Thisform.text1.autosize=.t.
Thisform.text1.value='ТАБЕЛЬНЫЙ'
for _fontsize=13 to 6 step -1
Thisform.text1.fontsize=_fontsize
Thisform.text1.refresh
endfor

получается вот так:

13 ТАБЕЛЬНЫЙ 11687
12 ТАБЕЛЬНЫЙ 11687
11 ТАБЕЛЬНЫЙ 10197
10 ТАБЕЛЬНЫЙ 10197
9 ТАБЕЛЬНЫЙ 8135
8 ТАБЕЛЬНЫЙ 8135
7 ТАБЕЛЬНЫЙ 8135
6 ТАБЕЛЬНЫЙ 8135

Первая колонка fontsize
Вторая тестовое слово
Третья результат теста

При этом по картинка на самом деле такая как показывают результаты, т.е. шрифт не меняется.


Как еще можно определить длину поля?
...
Рейтинг: 0 / 0
Определение ширины textbox
    #37096099
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Определение ширины textbox
    #37096142
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ,

пробовал - погрешность большая.
...
Рейтинг: 0 / 0
Определение ширины textbox
    #37096249
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamisпробовал - погрешность большая.
По сравнению с чем? И что надо получить в результате? Почему не устраивает автоподбор ширины самого объекта? Кстати, если есть форма, то ширину текста можно определить при помощи метода

Метод TextWidth
...
Рейтинг: 0 / 0
Определение ширины textbox
    #37096895
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ,

Мне нужно построить отчет. Для этого мне надо определить ширину полей. Программа просчитывает данные, заголовки и отрисовывает колонки отчета. Средняя ширина символа подходит для длинных строк Хотя для них это не принципиально а вот для коротких табельный номер, фамилия - возникают проблемы.

Попробовал textbox - результат тот же: для разных размеров шрифтов ширина одинакова - как я и писал. Хотя если на форме отрисовать label вручную, то все получается. А программно нет.

Пардон, я скривил - я использую не text а label. Но это без разницы.
...
Рейтинг: 0 / 0
Определение ширины textbox
    #37096930
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamis,

попробуй сделать в конце ThisForm.Label.Refresh() или ThisForm.Refresh()
...
Рейтинг: 0 / 0
Определение ширины textbox
    #37096961
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

делал. само сабой
...
Рейтинг: 0 / 0
Определение ширины textbox
    #37097041
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
glamisА программно нет.

Программно надо перед присваиванием значения Value, сделать контрол видимым
Thisform.text1.visible = .t.
...
Рейтинг: 0 / 0
Определение ширины textbox
    #37097276
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело в том, что FoxPro - однопоточное приложение. Т.е. он не может выполнять некие действия "паралельно". В данном случае, действия по изменению реквизитов объекта и действия по его отображению. Необходимо явным образом "пропихнуть" действие по отображению (отрисовке) изменений объекта. Для этого существует команда DOEVENTS

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Thisform.Label1.autosize = .t.
Thisform.Label1.Caption='ТАБЕЛЬНЫЙ'
Thisform.Label1.Visible = .T.		&& Автоподбор ширины работает только для видимых объектов
for _fontsize= 13  to  6  step - 1 
	Thisform.Label1.fontsize=_fontsize
	Thisform.Label1.refresh()

	* Заставляем отработать обновление формы
	DOEVENTS

	* И вот теперь смотрим размер объекта
	?ThisForm.Label1.Width
endfor

Теперь насчет собственно отчета. По большому счету - то, чем Вы занимаетесь, бессмысленно. Если речь идет о печати на утвержденных формах отчетности или на готовых бланках, то менять ширину столбцов Вы не можете, поскольку в этом случае "поплывут" соседние столбцы.

Подгонять размер шрифта под фиксированную ширину столбца, в принципе, возможно, только опять же, не очень нужно. В большинстве случаев и так все поместится, а в тех редких случаях, когда тем не менее не будет помещаться, пуская сам пользователь думает как поместить текст. Либо изменяя шрифт, либо изменяя высоту строки для автопереноса.

Дело в том, что все возможные ситуации учесть невозможно. Это будет стоить кучу времени с минимальным результатом. Затраты на подобную модификацию никак не окупят результата. Поэтому, используйте максимально простое решение. Например, использовать шрифт равной ширины (Courier или MS Sens Serif) у которого ширина ВСЕХ символов одинаковая. Тогда расчет будет простейший.
...
Рейтинг: 0 / 0
Определение ширины textbox
    #37097302
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМДело в том, что все возможные ситуации учесть невозможно. Это будет стоить кучу времени с минимальным результатом. Затраты на подобную модификацию никак не окупят результата. Поэтому, используйте максимально простое решение. Например, использовать шрифт равной ширины (Courier или MS Sens Serif) у которого ширина ВСЕХ символов одинаковая. Тогда расчет будет простейший.Или Используйте самый "узкий" шрифт из доступных, например, Arial Narrow, который позволит запихать значительно больше текста в тот же бокс, и, опять же, не занимайтесь бесмысленными рассчетами.
...
Рейтинг: 0 / 0
Определение ширины textbox
    #37097950
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поменял Arial на Times и все получилось.

Спасибо всем!
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Определение ширины textbox
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]