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

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

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

Сообщение Yurich » 20.01.2005 (Чт) 15:50

Есть-ли возможность определять длину (в твипах) произвольной строки, хранящейся в переменной, при известных размерах шрифта. Это надо для последующего форматирования текста в процессе печати.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 20.01.2005 (Чт) 15:52

Код: Выделить всё
Debug.Print Printer.TextWidth ("Строка")
Изображение

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 20.01.2005 (Чт) 16:07

Спасибо, Тёмыч! Буду пробовать.

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 27.01.2005 (Чт) 23:40

Существует-ли стандартная ф-я, чтобы засветить/погасить мигающий курсор на форме или пикчебоксе?

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

Сообщение Amed » 28.01.2005 (Пт) 0:10

Мигающий курсор на форме или пикчербоксе? :?

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 28.01.2005 (Пт) 0:54

Токмо не нать переспрашивать. Я достаточно чётко спросил!

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

Сообщение Amed » 28.01.2005 (Пт) 0:59

Да я не понимаю просто... Курсор или каретку? Если каретку, то как она может мигать в пикчербоксе или на форме? Если курсор, то тем более... :?

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 28.01.2005 (Пт) 1:07

Amed писал(а):Да я не понимаю просто... Курсор или каретку? Если каретку, то как она может мигать в пикчербоксе или на форме? Если курсор, то тем более... :?

То, что мигает в моем понимании всегда было и будет курсором, а что двигается синхронно с мышью - маузепоинтер!

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

Сообщение Amed » 28.01.2005 (Пт) 1:14

В моём понимании, кстати, тоже. Я просто уточнял. А как запихнуть курсор в пикчербокс? CreateCaret? Не прокатило...

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 28.01.2005 (Пт) 1:23

когда пикчер в октиве отлавливаем клавиши. вносим это все в строку и выводим на это самый пикчур. тока прикол в том, чтобы через таймер отлавливать всю эту мешанину и через некоторое время прибавлять и удалять знак "|"... я так в консоли делал....
ХЎ

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

Сообщение Amed » 28.01.2005 (Пт) 1:24

Да ведь смысл в том, чтобы найти функцию для делания всего этого автоматом :?

Yurich писал(а):Существует-ли стандартная ф-я, чтобы засветить/погасить мигающий курсор на форме или пикчебоксе?

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 28.01.2005 (Пт) 1:27

Я этот самый курсор просто прорисовываю через Line, но это муторно - вычислить знакоместо, определить длину, конфигурацию, нарисовать, потом погасить, разрешить/запретить и т.д.

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

Сообщение Amed » 28.01.2005 (Пт) 1:36

Совет: ждём до утра, когда придут зубры... tyomitch, GSerg, alibek и др... Я лично думаю, что низзя CreateCaret в пикчере...

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

Сообщение GSerg » 28.01.2005 (Пт) 4:45

Все люди как люди, а я даже кофе утром толком попить не могу, сразу на форум :)

Код: Выделить всё
Option Explicit

Private Declare Function CreateCaret Lib "user32.dll" (ByVal hwnd As Long, ByVal hBitmap As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function DestroyCaret Lib "user32.dll" () As Long
Private Declare Function HideCaret Lib "user32.dll" (ByVal hwnd As Long) As Long
Private Declare Function SetCaretPos Lib "user32.dll" (ByVal x As Long, ByVal y As Long) As Long
Private Declare Function ShowCaret Lib "user32.dll" (ByVal hwnd As Long) As Long

Private Sub Form_Load()
  Picture1.ScaleMode = vbPixels
End Sub

Private Sub Form_Unload(Cancel As Integer)
  DestroyCaret
End Sub

Private Sub Picture1_GotFocus()
  CreateCaret Picture1.hwnd, 0, 2, 20
  SetCaretPos 20, 20
  ShowCaret Picture1.hwnd
End Sub

Private Sub Picture1_LostFocus()
  DestroyCaret
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение Amed » 28.01.2005 (Пт) 8:39

Ы-ы... А почему у меня ничего не получилось? =))

Ага... Я писал
Код: Выделить всё
CreateCaret Picture1.hwnd, Picture1.Picture, 2, 20
почему-то... :? И ничего не работало :?

Стыдно, да, стыдно... :oops:

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 28.01.2005 (Пт) 22:52

GSerg писал(а):Все люди как люди, а я даже кофе утром толком попить не могу, сразу на форум :)

Код: Выделить всё
Option Explicit

Private Declare Function CreateCaret Lib "user32.dll" (ByVal hwnd As Long, ByVal hBitmap As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function DestroyCaret Lib "user32.dll" () As Long
Private Declare Function HideCaret Lib "user32.dll" (ByVal hwnd As Long) As Long
Private Declare Function SetCaretPos Lib "user32.dll" (ByVal x As Long, ByVal y As Long) As Long
Private Declare Function ShowCaret Lib "user32.dll" (ByVal hwnd As Long) As Long

Private Sub Form_Load()
  Picture1.ScaleMode = vbPixels
End Sub

Private Sub Form_Unload(Cancel As Integer)
  DestroyCaret
End Sub

Private Sub Picture1_GotFocus()
  CreateCaret Picture1.hwnd, 0, 2, 20
  SetCaretPos 20, 20
  ShowCaret Picture1.hwnd
End Sub

Private Sub Picture1_LostFocus()
  DestroyCaret
End Sub


Замечена интересная особенность. На форме кроме пикчебокса расположил текстбокс. При клике на текстбокс мышью фокус им не улавливается. Причина в наличии строк

Код: Выделить всё
Private Sub Picture1_LostFocus()
DestroyCaret
End Sub Private Sub Picture1_LostFocus()


Т.к. вызов ф-ии происходит уже после потери фокуса, то DestroyCaret работает неправильно и отключает курсор в текстбоксе. Интересно, что в параметрах DestroyCaret почему-то нет HWnd.

И еще
Код: Выделить всё
Private Declare Function CreateCaret Lib "user32.dll" (ByVal hwnd As Long, ByVal hBitmap As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long

Я так понял, что hBitmap определяет маску (вид) курсора.
У меня не получается её задействовать.

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 29.01.2005 (Сб) 0:36

Yurich писал(а):Я так понял, что hBitmap определяет маску (вид) курсора.
У меня не получается её задействовать.


Уп..п-с: Каpта бит, котоpая опpеделяет вставку; если 0, то вставка является чеpной; если 1, то вставка является сеpой.


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

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

Сейчас этот форум просматривают: PetalBot и гости: 16

    TopList