Как вписать текст на PictureBox в квадрат?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
TAlex
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 16.06.2003 (Пн) 11:39
Откуда: г.Харьков, Украина

Как вписать текст на PictureBox в квадрат?

Сообщение TAlex » 06.12.2004 (Пн) 16:02

Есть PictureBox с нарисованной сеткой (квадраты). Известна сторона квадрата. Нужно вписать в квадрат текст (по центру). И при изменении размера квадрата изменять текст.
Пишу:

Me.pictJap.Font.Name = "Arial"
japTextHeight = Me.pictJap.TextHeight("88") ' максимум два символа
Me.pictJap.Font.Size = (CellSize * Me.pictJap.Font.Size) / japTextHeight
If Me.pictJap.Font.Size <= 8 Then ' в MSDN пишут что так надо при размере шрифта меньше 8 пт.
Me.pictJap.Font.Name = Me.pictJap.Font.Name
Me.pictJap.Font.Size = Me.pictJap.Font.Size
End If
japTextWidth = Me.pictJap.TextWidth("88")
If japTextWidth > CellSize Then
Me.pictJap.Font.Size = (CellSize * Me.pictJap.Font.Size) / japTextWidth
If Me.pictJap.Font.Size <= 8 Then
Me.pictJap.Font.Name = Me.pictJap.Font.Name
Me.pictJap.Font.Size = Me.pictJap.Font.Size
End If
End If

И теперь если написать:
Me.pictJap.CurrentX = StartX
Me.pictJap.CurrentY = StartY
Me.pictJap.Print "88"
то текст вылезает вправо за край квадрата. Хотя если написать
Me.pictJap.Line -(xr, yb)
то диагональ точно вписывается в квадрат.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.12.2004 (Пн) 16:07

Фигнёй не страдать.
Юзать функцию DrawText, указывая ей bounding rectangle.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

TAlex
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 16.06.2003 (Пн) 11:39
Откуда: г.Харьков, Украина

Сообщение TAlex » 07.12.2004 (Вт) 0:27

Написал
Код: Выделить всё
myRect.Left = Main.pictJap.CurrentX
myRect.Top = Main.pictJap.CurrentY
myRect.Right = myRect.Left + CellSize
myRect.Bottom = myRect.Top + CellSize
DrawText Main.pictJap.hwnd, "11", Len("11"), myRect, DT_CENTER + DT_VCENTER

Ничего не выводит. Что не так?

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 07.12.2004 (Вт) 1:18

Единицы измерения - твипы или пикселы? Проверьте.

DrawText принимает пикселы. ж)

TAlex
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 16.06.2003 (Пн) 11:39
Откуда: г.Харьков, Украина

Сообщение TAlex » 08.12.2004 (Ср) 3:48

Все равно не выводится текст. Сделал так:
Код: Выделить всё
twips_pixX = Screen.TwipsPerPixelX
twips_pixY = Screen.TwipsPerPixelY
myRect.Left = Main.pictJap.CurrentX / twips_pixX
myRect.Top = Main.pictJap.CurrentY / twips_pixY
myRect.Right = myRect.Left + CellSize / twips_pixX
myRect.Bottom = myRect.Top + CellSize / twips_pixY

DrawText Main.pictJap.hwnd, "11", Len("11"), myRect, DT_CENTER + DT_VCENTER


И даже так не получается:
Код: Выделить всё
myRect.Left = 1
myRect.Top = 1
myRect.Right = 100
myRect.Bottom = 100


Может с Len() что-то не то или с hwnd?
Есть рабочий пример? Позиция начинает считаться с переданного объекта?

sash
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 17.05.2003 (Сб) 3:37

Сообщение sash » 08.12.2004 (Ср) 7:43

Надо не hwnd, а hdc передавать:

Код: Выделить всё
DrawText pic1.hDC, "Hello world!!!", Len("Hello world!!!"), rc, DT_CENTER Or DT_VCENTER Or DT_SINGLELINE

TAlex
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 16.06.2003 (Пн) 11:39
Откуда: г.Харьков, Украина

Сообщение TAlex » 09.12.2004 (Чт) 16:30

Получилось. Спасибо.


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

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

Сейчас этот форум просматривают: Google-бот и гости: 15

    TopList  
cron