FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour richedit con tabulador (desde recursos), ¿como?
Posts: 593
Joined: Sat May 12, 2007 11:47 AM

richedit con tabulador (desde recursos), ¿como?

Posted: Sun Jul 14, 2013 01:40 AM

Buenas noches,

Utilizo la clase richedit y no logro hacer que funcione el tabulador dentro de la edición del texto. Cada vez que se pulsa el tabulador se sale de la edición del richedit (se sale del "custom control") y lo que quiero es que haga una tabulación en el texto.

El "Window styles" del recurso en el que uso la richedit es 0x50A01004, calculo que el problema está en el recurso donde hago la edición porque el tabulador SI FUNCIONA al compilar el sample TestRtf.prg (que utiliza window, no recurso).

Uso recursos con una DLL generada con pelles-c

Gracias.

Rolando :D

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: richedit con tabulador (desde recursos), ¿como?

Posted: Sun Jul 14, 2013 06:12 PM

Rolando,

Una vez hagas REDEFINE RICHEDIT ... a continuación haz:

define DLGC_WANTTAB 0x0002

oRichEdit:nDlgCode = DLGC_WANTTAB

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 593
Joined: Sat May 12, 2007 11:47 AM

Re: richedit con tabulador (desde recursos), ¿como?

Posted: Sun Jul 14, 2013 10:34 PM
Antonio,

Gracias por responder.

Lamentablemente no funciona lo que propones. Además estuve "mirando" la trichedit.prg y no encontré la data nDlgCode.

Saludos.

Rolando
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: richedit con tabulador (desde recursos), ¿como?

Posted: Mon Jul 15, 2013 08:16 AM

Rolando,

La Clase TRichEdit, como todos los demás controles, deriva de la Clase TControl y es TControl quien implementa la DATA nDlgCode.

Windows le pregunta a nuestros controles que teclas quieren procesar, y el control solicita las que desea. El método que responde a esta petición es Method GetDlgCode( nLastKey ). Al asignarle un valor a nDlgCode estamos indicando las teclas extraordinarias que queremos.

De todas formas he visto que la Clase TRichEdit tiene su propia implementación del Método GetDlgCode() por lo que habría que modificarlo para que mi propuesta funcionase, pero la implementación actual devuelve DLGC_WANTALLKEYS, lo que significa "las quiero todas" y posiblemente el propio RichEdit esta controlando que hacer al pulsar Tab (saltar al siguiente control).

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: richedit con tabulador (desde recursos), ¿como?

Posted: Mon Jul 15, 2013 08:20 AM
Rolando,

La solución es modificar el Método KeyDown() de la Clase TRichEdit, para que no haga nada con VK_TAB:

Code (fw): Select all Collapse
METHOD KeyDown( nKey, nFlags ) CLASS TRichEdit

   if nKey == VK_TAB
      return nil
   endif

   ...
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: richedit con tabulador (desde recursos), ¿como?

Posted: Mon Jul 15, 2013 08:23 AM

Aunque lo más práctico sería añadir una nueva DATA a la Clase TRichEdit lWantTab para que sea tan sencillo como:

oRichEdit:lWantTab = .T.

sin necesidad de tocar los fuentes de FWH :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 593
Joined: Sat May 12, 2007 11:47 AM

Re: richedit con tabulador (desde recursos), ¿como?

Posted: Sun Jul 21, 2013 10:00 PM
Antonio,

Después de una semana de ausencia "forzada" por problemas de salud, retomo el tema en cuestión y comento que probé con lo que indicas agregando al METHOD KeyDown:
Code (fw): Select all Collapse
if nKey == VK_TAB
      return nil
endif


Esto no hace ningún efecto y el tabulador hace lo mismo (sale del richedit).

Por otro lado, estuve también viendo esto de incluir una data

Code (fw): Select all Collapse
oRichEdit:lWantTab = .T.


Y lo hice (aunque sin entender que efecto tiene esta data sobre la TRichEdit). Comento que tampoco soluciona nada.

Gracias.

Rolando :-)
Posts: 593
Joined: Sat May 12, 2007 11:47 AM

Re: richedit con tabulador (desde recursos), ¿como?

Posted: Wed Jul 24, 2013 03:51 PM

arriba

Posts: 593
Joined: Sat May 12, 2007 11:47 AM

Re: richedit con tabulador (desde recursos), ¿como?

Posted: Thu Jul 25, 2013 05:28 PM

+1

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: richedit con tabulador (desde recursos), ¿como?

Posted: Thu Jul 25, 2013 06:40 PM

Rolando,

Te pido disculpas por mi retraso en atenderte pero he estado ocupado con FWH 64 bits y atendiendo a Lucas en ese tema.

Voy a construir un ejemplo y probamos con él

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: richedit con tabulador (desde recursos), ¿como?

Posted: Thu Jul 25, 2013 06:46 PM

De momento con el ejemplo de FWH testrich.prg de la carpeta samples, añadiendo estas dos líneas:

oRich:bKeyDown = { | nKey | MsgInfo( nKey ) }
oRich:nDlgCode = DLGC_WANTALLKEYS

sigue sin detectar la tecla de tabulación...

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: richedit con tabulador (desde recursos), ¿como?

Posted: Thu Jul 25, 2013 06:51 PM
Si añadimos estas tres líneas en la Clase TRichEdit ya conseguimos interceptar la tecla VK_TAB:

Code (fw): Select all Collapse
METHOD KeyDown( nKey, nFlags ) CLASS TRichEdit

   if nKey == VK_TAB
      MsgInfo( "VK_TAB" )
      return 0
   endif


Ahora falta pasarle ese evento al procedimiento original del control RichEdit...
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 593
Joined: Sat May 12, 2007 11:47 AM

Re: richedit con tabulador (desde recursos), ¿como?

Posted: Thu Jul 25, 2013 10:44 PM

Antonio,

Justamente probé "detectar" la tecla TAB de la manera que indicas, colocando también un msginfo() para confirmarlo, pero no logro salir de ahí pasando ese evento a la TRichedit. Estuve buscando dentro de la clase y probando con todos los "send" que tiene pero no doy pié con bola.

Gracias por tu interés. Seguramente encontrarás la solución.

Rolando :D

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: richedit con tabulador (desde recursos), ¿como?

Posted: Fri Jul 26, 2013 11:55 AM
Rolando,

Buscando en google he encontrado que se trata de un error de los controles RichEdit, ya que si se devuelve el valor DLGC_WANTALLKEYS desde el Método GetDlgCode() de TRichEdit, Windows no debería darle el foco a otro control.

La solución usada para saltarse esta limitación es interceptar el mensaje WM_NEXTDLGCTL que recibe el diálogo y no hacer nada. Asi que este código debería servir.

Windows solo envía el mensaje WM_NEXTDLGCTL si esta en un control Edit ó RichEdit. Esto nos servirá. Pero lo que estoy intentando entender ahora es porque si estoy devolviendo 1 (ó .T.) que debiera decirle a Windows que no haga nada, el diálogo sigue llevándose el foco. Puedes probar este cambio y verás como detecta que intentamos irnos del RichEdit.

Code (fw): Select all Collapse
#define WM_NEXTDLGCTL  0x0028

METHOD HandleEvent( nMsg, nWParam, nLParam ) CLASS TDialog

   if nMsg == WM_NEXTDLGCTL
      MsgBeep() 
      return 1
   endif  

   ...
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: richedit con tabulador (desde recursos), ¿como?

Posted: Fri Jul 26, 2013 11:58 AM
Falta añadir este método en la Clase TRichEdit:

Code (fw): Select all Collapse
   METHOD GetDlgCode( nLastKey ) INLINE ::nDlgCode


y esta línea en nuestro código:

#define DLGC_WANTCHARS 0x0080

oRich:nDlgCode = DLGC_WANTALLKEYS

aún asi, sigue sin comportarse como debiera.
regards, saludos

Antonio Linares
www.fivetechsoft.com