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

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

p.s. еще желательно найти решение без мерянья линейкой всех букв вручную :)
...
Рейтинг: 0 / 0
17.03.2009, 23:08
    #35875425
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать ширину текста
Если дело происходит в Экселе (судя по "ячейкам"), то встроенными средствами никак.
...
Рейтинг: 0 / 0
18.03.2009, 10:37
    #35875880
Krasnaja Shapka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать ширину текста
а скажем в Office? я так понимаю, что раз в excel это нельзя - то нигде в офисе нельзя
...
Рейтинг: 0 / 0
18.03.2009, 11:23
    #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
18.03.2009, 11:30
    #35876059
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать ширину текста
Пардон - предыдущее в офисе сработает только для отчета.

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

AutoSize нет в Офисе - он в VB6 и у Label-a...
...
Рейтинг: 0 / 0
18.03.2009, 13:42
    #35876593
Узнать ширину текста
AndrF,
Вряд ли у меня настолько особенный Офис:
...
Рейтинг: 0 / 0
18.03.2009, 17:46
    #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
18.03.2009, 19:00
    #35877674
Узнать ширину текста
Krasnaja Shapka,
не прав в том, что не описал тип RECT.

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

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

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

сорри что нагружаю ;)
...
Рейтинг: 0 / 0
19.03.2009, 13:50
    #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
19.03.2009, 17:49
    #35880043
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать ширину текста
13-й кварталAndrF,
Вряд ли у меня настолько особенный Офис:

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

Ну как и ты про сторонний контрол, хоть и от MS.
...
Рейтинг: 0 / 0
20.03.2009, 20:33
    #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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Узнать ширину текста / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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