Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-10-2005
RaulRuiz RaulRuiz is offline
Miembro
 
Registrado: jul 2004
Ubicación: Málaga - Spain
Posts: 11
Poder: 0
RaulRuiz Va por buen camino
Drag&drop en un richedit

Hola, buenas.

Os comento: tengo un richedit donde el usuario puede introducir un texto y ahora quisiera añadir cierta funcionalidad: que se pueda hacer drag&drop de una cadena de texto desde un list hasta el memo.

El problema es que la única manera de posicionarme es tomar las coordenadas del caret. Es decir, si el cursor está posicionado en la última línea pero hago drop entre la primera y segunda palabra de la primera línea, en lugar de colocar el texto en esta última posición, se colocaría al final.

En el evento onmouseup tengo las coordenadas en pixels pero no sé como convertir esta información a "coordenadas" en caracteres.

¿A alguno de vosotros se le ocurre algo?
Gracias
Responder Con Cita
  #2  
Antiguo 26-10-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Creo que algo así puede conseguir lo que precisas, esto es, que el elemento de la lista (en este caso un "TListBox") se sitúe en el lugar en que esté en ese momento el cursor del "TRichEdit":

Código Delphi [-]
 procedure TForm1.rEditorDragDrop(Sender, Source: TObject; X, Y: Integer);
 var
   i: integer;
 begin
   if not (Source is TListBox) then Exit;
   i := (Source as TListBox).ItemIndex;
   (Sender as TRichEdit).SelText := (Source as TListBox).Items[i];
 end;
No digo yo que no pudiera mejorarse el asunto, que lo hize en un momento y sin mirar más allá posibles consecuencias, pero, en fin, creo que por ahí van los tiros, si no estoy confundido con lo que quieres llevar a cabo, ya digo.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 26-10-2005
RaulRuiz RaulRuiz is offline
Miembro
 
Registrado: jul 2004
Ubicación: Málaga - Spain
Posts: 11
Poder: 0
RaulRuiz Va por buen camino
Gracias dec, pero me temo que aún no se soluciona el problema.

Si utilizo 'seltext', pasa lo que comentaba: el texto va a la posición donde está el cursor y no a la posición donde he soltado el ratón.

¿Más ideas, please?
Responder Con Cita
  #4  
Antiguo 26-10-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,


Cita:
Empezado por RaulRuiz
Si utilizo 'seltext', pasa lo que comentaba: el texto va a la posición donde está el cursor y no a la posición donde he soltado el ratón.
Así es la verdad. Pensaba que era justo lo necesario, pero, me doy cuenta ahora de que no es así. Debe haber alguna manera de hacer lo que precisas. Yo estoy haciendo alguna prueba, pero, no puedo garantizar una posible solución, claro está.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 26-10-2005
RaulRuiz RaulRuiz is offline
Miembro
 
Registrado: jul 2004
Ubicación: Málaga - Spain
Posts: 11
Poder: 0
RaulRuiz Va por buen camino
Acabo de encontrarlo!!! (o al menos eso creo).

En delphi.about.com he encontrado un artículo: 'What's the word under the mouse cursor in a TRichedit' .

Tiene buena pinta.

Muchas gracias
Responder Con Cita
  #6  
Antiguo 26-10-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

La solución, digna de estudio (creo yo), la encontré escrita por Thomas Stutz en su ejemplo: Drag & Drop items from a TListBox to a TRichEdit?

Copio a continuación el código de Thomas Stutz por considerarlo merecido y útil:

Código Delphi [-]
 function RECharIndexByPos(RichEdit: TRichEdit; X, Y: Integer): Integer;
 var
   P: TPoint;
 begin
   P := Point(X, Y);
   Result := SendMessage(RichEdit.Handle, EM_CHARFROMPOS, 0, Longint(@P));
 end;
 
 
 procedure TForm1.RichEdit1DragOver(Sender, Source: TObject; X, Y: Integer;
   State: TDragState; var Accept: Boolean);
 var
   P: TPoint;
 begin
   // Check, if Source is ListBox1
   Accept := Source = ListBox1;
   if GetCursorPos(P) then
     with RichEdit1 do
     begin
       // Get the Index from Mouse Position
       P := ScreenToClient(P);
       SelStart := RECharIndexByPos(RichEdit1, P.X, P.Y);
       SetFocus;
     end;
 end;
 
 procedure TForm1.RichEdit1DragDrop(Sender, Source: TObject; X, Y: Integer);
 begin
   // finally insert text at mouse position
   RichEdit1.SelText := ListBox1.Items[ListBox1.ItemIndex];
 end;
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 26-10-2005 a las 10:47:31. Razón: Añadir código fuente.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 11:34:41.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi