CURSOR DO TEXTBOX SEGUINDO O CURSOR DO MOUSE

ALEXMARCHI 13/08/2007 13:23:27
#230701
Boa Tarde

Imaginemos que eu tenho um textbox com umas 5 linhas e conforme eu vou passando o mouse o cursor do textbox segue o mouse

na verdade eu preciso saber sobre que palavra o mouse está.

se o cursor do textbox seguir o cursor do mouse, eu pesquiso o primeiro espaço antes e depois da posição do cursor e ficarei sabendo sobre que palavra o mouse está.

ex. pratico. no text box eu tenho a seguinte frase
VBMania o melhor site de vb


se eu parar o mouse sobre melhor me aparece em um label a palavra melhor !
USUARIO.EXCLUIDOS 13/08/2007 13:50:46
#230710
Resposta escolhida
Amigo, pra fazer isto vc precisaria saber o tamando do Width da Fonte.

Chutei alguns valores aqui, até achar um fator multiplicativo, mais o mesmo pode variar de acordo a fonte que vc utiliza em seu TextBox.
Sei que tem como pegar este tamanho via código, mais no momento não me recordo.

Por enquanto segue um exemplo definindo manualmente o tamanho da fonte.


Private Sub Text1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim WidthFont As Long
WidthFont = 75

Text1.SelStart = X / WidthFont

Dim AntesCursor As String
Dim PosAnt As Long
Dim DepoisCursor As String
Dim PosDps As Long

AntesCursor = Left$(Text1.Text, Text1.SelStart)
DepoisCursor = Right(Text1.Text, Len(Text1.Text) - Text1.SelStart)

PosAnt = InStr(1, StrReverse(AntesCursor), " ")
If PosAnt = 0 Then
Label1.Caption = Left(Text1.Text, InStr(1, Text1.Text, " "))
Exit Sub
End If

PosDps = InStr(1, DepoisCursor, " ")
If PosDps = 0 Then
Label1.Caption = Right(Text1.Text, InStr(1, StrReverse(Text1.Text), " "))
Exit Sub
End If

Label1.Caption = Mid(AntesCursor, Len(AntesCursor) - PosAnt + 2, Len(AntesCursor)) & _
Mid(DepoisCursor, 1, PosDps)

End Sub

ALEXMARCHI 13/08/2007 14:52:38
#230726
Marcelo, muito Obrigado

Ajudou bastante, pelo menos agora eu sei por onde começar
a Unica coisa que deu errado foi em campos Text MultLine, a sua dica ja ajudou bastante,


USUARIO.EXCLUIDOS 13/08/2007 14:57:46
#230728

Que isso...o q esse Marcelo faz é brincadeira...ta loco!!

Parabéns cara...vc é folder mesmo!!
USUARIO.EXCLUIDOS 13/08/2007 15:25:31
#230733
Citação:

Que isso...o q esse Marcelo faz é brincadeira...ta loco!!

Parabéns cara...vc é folder mesmo!!


Valeu cara...rsrs... mais que isso... não fiz nada demais não, tenho certeza que vc faria o mesmo!


Amigo Alexandre, vou testar aqui com MultLine e já posto novamente.
USUARIO.EXCLUIDOS 13/08/2007 16:03:22
#230739
Alexandre,

Sgue rotina para o MultLine...


Private Sub Text1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim WidthFont As Long
Dim HeightFont As Long
Dim NumLinhas As Integer
Dim SelStart As Long
Dim Conteudo As Variant

WidthFont = 74
HeightFont = 200

NumLinhas = y \ HeightFont

Conteudo = Split(Text1.Text, vbCrLf)
If NumLinhas > UBound(Conteudo) + 1 Then
NumLinhas = UBound(Conteudo) + 1
End If

For i = 1 To NumLinhas
SelStart = SelStart + Len(Conteudo(i - 1))
Next

Text1.SelStart = x / WidthFont + SelStart

Dim AntesCursor As String
Dim PosAnt As Long
Dim PosAntEnter As Long

Dim DepoisCursor As String
Dim PosDps As Long
Dim PosDpsEnter As Long

AntesCursor = Left$(Text1.Text, Text1.SelStart)
DepoisCursor = Right(Text1.Text, Len(Text1.Text) - Text1.SelStart)

PosAnt = InStr(1, StrReverse(AntesCursor), " ")
PosAntEnter = InStr(1, StrReverse(AntesCursor), vbCrLf)

' If InStr(1, Label1.Caption, "No") Then Stop
If PosAntEnter > PosAnt Then
PosAnt = PosAntEnter
End If
If PosAnt = 0 Then
Label1.Caption = Left(Text1.Text, InStr(1, Text1.Text, " "))
Exit Sub
End If

PosDps = InStr(1, DepoisCursor, " ")
PosDpsEnter = InStr(1, DepoisCursor, vbCrLf)
If PosDpsEnter < PosDps Then
PosDps = PosDpsEnter
End If
If PosDps = 0 Then
Label1.Caption = Right(Text1.Text, InStr(1, StrReverse(Text1.Text), " "))
Exit Sub
End If

Label1.Caption = Mid(AntesCursor, Len(AntesCursor) - PosAnt + 2, Len(AntesCursor)) & _
Mid(DepoisCursor, 1, PosDps) & vbCrLf

Dim ConteudoLabel As Variant
ConteudoLabel = Split(Label1.Caption, vbCrLf)
Label1.Caption = ConteudoLabel(UBound(ConteudoLabel) - 1)

End Sub

Tópico encerrado , respostas não são mais permitidas