Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Determinar linea en TRichEdit

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Determinar linea en TRichEdit Responder citando

¿Es posible, en un RichEdit , determinar si el ratón está en una línea particular? Como un ejemplo, el reconocimiento de un enlace en los navegadores...

detalle : en el evento OnMouseMove
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Respuesta : Usted puede. Si alguien necesita , consulte la página :

http://msdn.microsoft.com/en-us/library/windows/desktop/bb787991(v=vs.85).aspx Wink
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Consegui un código que devuelve la palabra sobre la que está el ratón. Pero, lamentablemente, no capta toda la línea:

Código:

void __fastcall TForm1::RichEdit1MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
    POINTL pt; pt.x = X; pt.y = Y;
    // Idem - devolve o índice do caracter
    int pos =  RichEdit1->Perform(EM_CHARFROMPOS, 0, reinterpret_cast<int>(&pt));
    // calcula o início e o fim da palavra sobre a qual o mouse está.
    int start = RichEdit1->Perform(EM_FINDWORDBREAK, WB_LEFT, pos);
    int end = RichEdit1->Perform(EM_FINDWORDBREAK, WB_RIGHTBREAK, pos);
    //=============
    ::TEXTRANGE tr;
    tr.chrg.cpMin = start;
    tr.chrg.cpMax = end;
    tr.lpstrText = new char[end-start+2];
    //=============
    RichEdit1->Perform(EM_GETTEXTRANGE, 0, (LPARAM)&tr);
    Caption=tr.lpstrText; // pos;
    //=============
    delete[] tr.lpstrText;
}
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Felip escribió:
Consegui un código que devuelve la palabra sobre la que está el ratón. Pero, lamentablemente, no capta toda la línea:

Creí que al poner el enlace de arriba querías decir que ya habías solucionado tu problema.

Si lo que necesitas es saber el número de línea sobre el que está el ratón y a la vez con ese dato tener el contenido de esa línea:
Código:
void __fastcall TForm1::RichEdit1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
    DWORD charIndex = RichEdit1->Perform(EM_CHARFROMPOS, 0 (LPARAM)&TPoint(X, Y));
    if (charIndex >= 0)
    {
        int lineIndex = RichEdit1->Perform(EM_EXLINEFROMCHAR, 0, charIndex);
        Caption = RichEdit1->Lines->Strings[lineIndex];
    }
    else
        Caption = "-";
}
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

_Leo escribió:

Creí que al poner el enlace de arriba querías decir que ya habías solucionado tu problema.


También pensé que había logrado, pero el resultado no fue satisfactorio.

Gracias, _Leo. Ahora es perfecto!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

El código dejó de funcionar en mi C++Builder (CE) 10.4.
Hice un ajuste y funciona de nuevo:

Código:

...
   TPoint pt;
   pt.x = X; pt.y = Y;
   DWORD charIndex = RichEdit1->Perform(EM_CHARFROMPOS, 0, (LPARAM)(&pt.x, &pt.y));
...
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.