Получение позиции

Ответы на вопросы, чаще всего задаваемые в форумах VBStreets. Для тех, кому лень искать.
hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Получение позиции

Сообщение hCORe » 07.06.2004 (Пн) 18:29

Почему-то совершенно неизвестна функция GetCaretPos API:
Код: Выделить всё
Private Declare Function GetCaretPos Lib _
"user32" (lpPoint As POINTAPI) As Long

О ней ничего внятного даже API-Guide сказать не может.
На самом деле, она бывает очень полезна и позволяет получить... позицию каретки (или символа вставки) в текстовом поле или RichTextBox'е.

Это может очень помочь при проектировании, скажем, приложений с функцией предикативного ввода - чтобы точно отпозиционировать список вариантов рядом с местом ввода текста. Вот!

А теперь пример:
Код: Выделить всё
Public Sub PosList(ListObject As Control, RelativeObject As Control)
On Error Resume Next
    Dim pt As POINTAPI
    GetCaretPos pt
    ListObject.Move pt.X * Screen.TwipsPerPixelX + _
    RelativeObject.FontSize + 300, pt.Y * Screen.TwipsPerPixelY + _
    RelativeObject.FontSize * 2 * Screen.TwipsPerPixelY + 150
    If ListObject.Left + ListObject.Width >= _
    RelativeObject.Width Then
        ListObject.Move RelativeObject.Left + _
        RelativeObject.Width - ListObject.Width
    End If
    If ListObject.Top + ListObject.Height >= _
    RelativeObject.Height - 1000 Then
        ListObject.Move ListObject.Left, _
        RelativeObject.Top + RelativeObject.Height - _
        ListObject.Height
    End If
End Sub


Здесь RelativeObject - это элемент, относительно которого надо позиционировать список, а ListObject - элемент, который необходимо переместить.

Если на форме слева или сверху находятся дополнительные элементы, то, вполне возможно, что позиционирование немного "съедет". Чтобы этого не происходило, просто включите высоту (Height) и ширину (Width) в соответствующие формулы для высчитывания расстояния сверху (Top) и слева (Left).
Моду создают модоки, а распространяют модозвоны.

Вернуться в Популярные вопросы

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

    TopList