Длина строки в пикселях

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Длина строки в пикселях

Сообщение Alexanbar » 11.01.2005 (Вт) 22:36

1) Нужно рассчитать длину строки (конкретного шрифта)в пикселях или иных единицах через API (без использования Label1.Autosise)

2) А ещё лучше, если кто подскажет, как найти ширину таба в SSTAb.

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 11.01.2005 (Вт) 22:45

1) А Form.TextWidth() не ага? :roll:
2) Там такого, по-моему, нет :roll:

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2056
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 11.01.2005 (Вт) 23:03

Хм.... В принципе наверное потребуется функция DrawText, и её настройка

на http://www.allapi.net можно примеры глянуть....

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 11.01.2005 (Вт) 23:32

В SSTab действительено нету нужного свойства, а надо. Пробовал посылать сообщение TCM_GETITEMRECT, но он на это выдаёт одни нули. Tabstrip выдаёт только Bottom, но значение очень странное.

А нужно это всё, чтобы отрисовать SSTab в стиле XP. И всего-то, что мне нужно - знать ширину таба.

Появилась идея рассчитать размер текста, написанного на табе, сложить его с размером картинки, и тогда, по-идее получится размер таба.

Чтобы рассчитать размер текста, нельзя использовать к-л контролы, кроме самого SSTAb - буду создавать Класс-модуль

Насчет DrawText посмотрю.

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 11.01.2005 (Вт) 23:40

Насчет ширины текста. Глянь, на всякий, вот тут: http://bbs.vbstreets.ru/viewtopic.php?t=12431
Есть ли у меня вопрос? У меня всегда есть вопрос

deepslam
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 286
Зарегистрирован: 19.08.2002 (Пн) 2:25
Откуда: Russia

Сообщение deepslam » 11.01.2005 (Вт) 23:41

Хех...можно самому померить и создать некий массив типа:
буква-> шрифт-> длина буквы из этого складывать нужную длину...
Я думаю у тя ведь не будет слишком много разных шрифтов разных размеров в проге... :)

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2056
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 12.01.2005 (Ср) 0:10

Код: Выделить всё
Private Declare Function GetTextExtentPoint32 Lib "gdi32" _
            Alias "GetTextExtentPoint32A" _
            (ByVal hdc As Long, _
            ByVal lpsz As String, _
            ByVal cbString As Long, _
            lpSize As POINTAPI) As Long

Private Type POINTAPI
    X As Long
    Y As Long
End Type
Private Declare Function GetWindowDC Lib "user32" _
            (ByVal hwnd As Long) As Long
Dim PT As POINTAPI
Private Sub Form_Click()
GetTextExtentPoint32 GetWindowDC(Text1.hwnd), Text1.Text, Len(Text1.Text), PT
MsgBox PT.X
MsgBox PT.Y
End Sub


Во пашет по ходу

Нужно на форму добавить TextBox.

Тогда по клику на форме можно узнать высоту и ширину текста

Респект Eugenio !! :roll: :)

:shock:

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 12.01.2005 (Ср) 1:37

Вроде получилось. Использовал ф-ю DrawText 2 раза для каждого таба.
Первый раз - с флагами DT_LEFT Or DT_CALCRECT. В этом случае правая грань прямоугольника усекается до нужной длины.

Это как раз определяет грань таба
Далее прорисовываю таб.
Затем ещё раз рисую текст с флагом DF_LEFT

Далее перехожу к следующему табу.

Остаётся сделать подсветку табов при движении мыши и устранить кое-какие мелкие неприятности.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: YaCy [Bot] и гости: 26

    TopList