powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Узнать ширину текста
18 сообщений из 18, страница 1 из 1
Узнать ширину текста
    #35875022
Krasnaja Shapka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как узнать ширину, которую будет занимать текст написаный, скажем, шрифтом Tohama, 8 пт.?
Программно. Желательно без записывания строки в пустую ячейку и т.д.

Спасибо.
...
Рейтинг: 0 / 0
Узнать ширину текста
    #35875107
Krasnaja Shapka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне необходимо в форму в Textbox вписать строку - чтоб влезла красиво... По количеству букв, как оказалось, ширина сильно отличается.

p.s. еще желательно найти решение без мерянья линейкой всех букв вручную :)
...
Рейтинг: 0 / 0
Узнать ширину текста
    #35875425
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если дело происходит в Экселе (судя по "ячейкам"), то встроенными средствами никак.
...
Рейтинг: 0 / 0
Узнать ширину текста
    #35875880
Krasnaja Shapka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а скажем в Office? я так понимаю, что раз в excel это нельзя - то нигде в офисе нельзя
...
Рейтинг: 0 / 0
Узнать ширину текста
    #35876029
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The TextWidth method returns the width of a text string as it would be printed in the current font of a Report object.
...
Рейтинг: 0 / 0
Узнать ширину текста
    #35876059
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон - предыдущее в офисе сработает только для отчета.

Тогда только использовать API-шную функцию DrawText...
...
Рейтинг: 0 / 0
Узнать ширину текста
    #35876238
Про DrawText() с флагом DT_CALCRECT уже сказали.
Но, если уж есть форма, как я понимаю UserForm, то почему бы не использовать (невидимый) TextBox на ней с .AutoSize = True для определения ширины текста?
...
Рейтинг: 0 / 0
Узнать ширину текста
    #35876353
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й кварталто почему бы не использовать (невидимый) TextBox на ней с .AutoSize = True для определения ширины текста?

AutoSize нет в Офисе - он в VB6 и у Label-a...
...
Рейтинг: 0 / 0
Узнать ширину текста
    #35876593
AndrF,
Вряд ли у меня настолько особенный Офис:
...
Рейтинг: 0 / 0
Узнать ширину текста
    #35877442
Krasnaja Shapka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
идея со скрытым Textbox-ом прикольная, спасибо... но я решил что удобнее будет использовать API, хотя никогда ими не пользовался...

заткнулся я в самом начале, прочитал хелп по этой функции, решил на примере попробовать:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Private Declare Function DrawText Lib "user32" Alias "DrawTextA" _
    (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long

Sub temp()
' Выводим текст в правой части формы
Dim retval As Long
Dim MyText As String
Dim MyRect As RECT

Form1.Font.Size =  12 
Form1.ScaleMode = vbPixels
MyRect.Left =  0 
MyRect.Right = Form1.ScaleWidth
MyRect.Top =  0 
MyRect.Bottom =  90 
MyText = "Rkjkjknklkkj kjjhjh"
retval = DrawText(Form1.hdc, MyText, - 1 , _
MyRect, DT_RIGHT Or DT_WORDBREAK)
End Sub

говорит что user-defined type is not defined и выделяет декларацию DrawText. перечитал все что у меня есть по API еще раз. и не понял где я не прав...
...
Рейтинг: 0 / 0
Узнать ширину текста
    #35877674
Krasnaja Shapka,
не прав в том, что не описал тип RECT.

Это, я так понимаю, макет на VB6, чтобы пощупать, что и как?
...
Рейтинг: 0 / 0
Узнать ширину текста
    #35877850
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще не прав в Form1.hdc. В VBA hdc нет.
...
Рейтинг: 0 / 0
Узнать ширину текста
    #35878520
Krasnaja Shapka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
оккей, я так понял что взял неудачный пример, для VB, а у меня VBA...

тогда что мне сувать в hDC - если его в VBA нет? откуда брать дескриптор контекста устройства? и вообще, контекст устройства, это монитор? excel? данное окно? или может сам текстбокс?

короче больше вопросом чем ответов :(

сорри что нагружаю ;)
...
Рейтинг: 0 / 0
Узнать ширину текста
    #35879190
SoftParanoik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например, так (код в модуле формы)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private Declare Function GetWindowDC Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDC As Long) As Long
Public hDC As Long
Public hWnd As Long
Private Sub UserForm_Activate()
    hWnd = GetActiveWindow()
    hDC = GetWindowDC(hWnd)
    MsgBox Hex(hWnd)
    MsgBox Hex(hDC)
    ReleaseDC hWnd, hDC
End Sub
...
Рейтинг: 0 / 0
Узнать ширину текста
    #35880043
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й кварталAndrF,
Вряд ли у меня настолько особенный Офис:

А то что на снимке-то совсем не TextBox Access-a - это ничего?
...
Рейтинг: 0 / 0
Узнать ширину текста
    #35880113
AndrF,
Ничего. Про Access только ты сам с собой говоришь.
...
Рейтинг: 0 / 0
Узнать ширину текста
    #35881726
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й кварталНичего. Про Access только ты сам с собой говоришь.

Ну как и ты про сторонний контрол, хоть и от MS.
...
Рейтинг: 0 / 0
Узнать ширину текста
    #35882874
AndrF,
Этот "сторонний контрол", а точнее библиотека Microsoft Forms, является основным средством создания пользовательского интерфейса в VBA. Подчёркиваю, основным, и, подчёркиваю, в VBA (хотя и VB её поддерживает на уровне). Любой VBA-хост - члены Офиса, как самые известные, или другие приложения - VBA-хосты, разработанные с помощью Visual Basic For Applications SDK, имеют встроенную (как в design-time, так и в run-time) поддержку Microsoft Forms. При этом не запрещается VBA-хосту иметь свои схожие по функциональности средства. Например, у Access есть свои мощные формы, где они исторически на первом плане, и даже не каждый, кто работает с Access, знает, как включить в проект UserForm-ы, или у Outlook есть средства настройки стандартных форм.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Узнать ширину текста
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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