Текст, как ссылка) - VB

Узнай цену своей работы

Формулировка задачи:

Возможно ли сделать так, чтобы по нажатию на какую либо строчку в текстовом поле, открывалась новая форма?и чтобы эта форма всегда была поверх всех окон?

Решение задачи: «Текст, как ссылка)»

textual
Листинг программы
  1. Option Explicit
  2.  
  3. Private Const EM_CHARFROMPOS& = &HD7
  4.  
  5. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  6. Private Declare Function LoadCursor Lib "user32" Alias "LoadCursorA" (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long
  7. Private Declare Function SetCursor Lib "user32" (ByVal hCursor As Long) As Long
  8. Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
  9.  
  10. Private Const IDC_HAND = 32649&
  11. Private Const IDC_IBEAM = 32513&
  12. Private Const HWND_TOPMOST = -1
  13. Private Const SWP_NOMOVE = 2
  14. Private Const SWP_NOSIZE = 1
  15.  
  16. Private Sub txtText_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
  17.     Dim Pos As Long, Wrd As String
  18.     x = ScaleX(x, vbTwips, vbPixels): y = ScaleY(y, vbTwips, vbPixels)
  19.     Pos = CLng(x) + (CLng(y) * &H10000)
  20.     Wrd = LCase(GetWord(txtText, Pos))
  21.     Select Case Wrd
  22.     Case "first", "second"
  23.         SetCursor LoadCursor(0, IDC_HAND)
  24.         lblMsg.Caption = Wrd
  25.     Case Else
  26.         SetCursor LoadCursor(0, IDC_IBEAM)
  27.         lblMsg.Caption = vbNullString
  28.     End Select
  29. End Sub
  30. Private Sub txtText_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
  31.     Dim Pos As Long
  32.     x = ScaleX(x, vbTwips, vbPixels): y = ScaleY(y, vbTwips, vbPixels)
  33.     Pos = CLng(x) + (CLng(y) * &H10000)
  34.     Select Case LCase(GetWord(txtText, Pos))
  35.     Case "first"
  36.         SetTopMost frmFirst
  37.         frmFirst.Show
  38.     Case "second"
  39.         SetTopMost frmSecond
  40.         frmSecond.Show
  41.     End Select
  42. End Sub
  43. Private Function SetTopMost(Form As Form) As Boolean
  44.     SetTopMost = SetWindowPos(Form.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
  45. End Function
  46. Private Function GetWord(Text As TextBox, Pos As Long) As String
  47.     Dim ptChar As Long, PtLine As Long
  48.     Dim ptStart As Long, ptEnd As Long
  49.     ptChar = SendMessage(Text.hwnd, EM_CHARFROMPOS, 0, ByVal Pos)
  50.     PtLine = ptChar \ &H10000
  51.     ptChar = ptChar And &HFFFF&
  52.     If ptChar <= 0 Then Exit Function
  53.     ptStart = ptChar
  54.     Do Until ptStart <= 0
  55.         If Mid$(Text.Text, ptStart, 1) <= " " Then Exit Do
  56.         ptStart = ptStart - 1
  57.     Loop
  58.     ptEnd = ptChar
  59.     Do Until ptEnd > Len(Text.Text) Or Mid$(Text.Text, ptEnd, 1) <= " "
  60.         ptEnd = ptEnd + 1
  61.     Loop
  62.     If ptStart = ptEnd Then Exit Function
  63.     GetWord = Mid$(Text.Text, ptStart + 1, ptEnd - ptStart - 1)
  64. End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы