FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Hola de nuevo a todos:
Cita:
Cita:
Mis primeras sospechas apuntaban a que los mensajes de Windows le estaban llegando solo al Shape y no al RichEdit, pero no estoy seguro, (tendré que probarlo). En cuanto a lo de escribir directamente en el Canvas.... también lo pensé pero no consigo acceder al Canvas del RichEdit, a lo mejor alguién pueda decirme cómo. Bueno, muchas gracias, sois tan atentos como siempre, (sigo en contacto). |
#2
|
||||
|
||||
Cita:
NOTA: Simplemente hay que redefinir el mensaje de pintado WMPaint, para pintar una línea en el interior del control (espero que sea lo que buscas...). El ejemplo es en Delphi () aunque no te será difícil supongo pasarlo a C++. El código del componente quedaría así:
P.D: Si te sirve el código y puedes pasarlo a C++, me gustaría ver cómo queda para comporar ambos. Thnks.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. Última edición por Neftali [Germán.Estévez] fecha: 20-04-2005 a las 11:12:08. |
#3
|
|||
|
|||
Muchas gracias Netfalí, el código funciona casi a la perfección. El casi es porque la linea (en realidad yo sólo necesitaba una única linea vertical) aparece perfectamente al igual que el texto del RichEdit sin embargo cuando empiezo a escribir, la parte de la linea correspondiente al renglón en el que estoy escribiendo desaparece.
Pero sin duda es un gran avance, voy a ver si puedo resolver este pequeño percance y cuando lo tenga pegaré el código en C++ como me has pedido. Muchísimas gracias! |
#4
|
|||
|
|||
Ya tengo el código!!!!
Si el RichEdit no tiene barras de Scroll funciona perfectamente. Para el caso en el que las barras existan tuve que responder también al mensaje WM_CHAR, para que si al escribir movemos las barras de Scroll la linea se siga dibujando. Sin embargo si movemos el Scroll manualmente la linea no se dibuja hasta que la soltamos, eso aún tengo que arreglarlo, pero conforme voy avanzando parece que el código C++ se va distanciando del expuesto en Delphi, así que aunque aún no esté completo del todo he preferido colocarlo ya. Como no sé mucho de Delphi, supongo que la traducción no es exacta pero al menos si parecida, ah por cierto, en lugar de crear una función que respondiera al mensaje WM_PAINT he creado una función que responda a todos los mensajes (para así poder hacer pruebas con otros mensajes que me pudieran hacer falta), bueno ahí pego el código y de nuevo muchas gracias Netfalí: Código:
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { // Creo un componente de la clase TDibuito (que hereda de TRichEdit) cuaderno=new TCuaderno(this); cuaderno->Parent=this; // Configuro algunas propiedades cuaderno->ScrollBars=ssBoth; cuaderno->WordWrap=false; } //------------------------------------------------------------------------- __fastcall TCuaderno:: TCuaderno (TComponent* Owner) :TRichEdit(Owner) { // Confiuro algunas propiedades Height=300; Width=500; // Creo el objeto MCanvas MCanvas= new TControlCanvas(); MCanvas->Control=this; // Mediante esta asignación puedo responder a todos los eventos // Lo hago así por si me fuera necesario responder a más eventos // los pensados inicialmente Application->OnMessage= ApplicationEventsMessage; } //------------------------------------------------------------------------- void __fastcall TCuaderno::ApplicationEventsMessage(tagMSG &Msg, bool &Handled) { // Compruebo que el mensaje es alguno de los que me interesan if (((Msg.message==WM_PAINT)||(Msg.message==WM_CHAR))&&(Msg.hwnd==Handle)) { // Envío manualmente el mensaje SendMessage(Msg.hwnd,Msg.message,Msg.wParam,Msg.lParam); // Pinto la linea que me interesa, siempre por debajo del texto escrito for (int a=0;a<=300;a++) if (MCanvas->Pixels[50][a]==clWhite) MCanvas->Pixels[50][a]=clBlue; // Actualizo esta variable para que no se procese el mensaje de nuevo Handled=true; } } //------------------------------------------------------------------------- |
#5
|
||||
|
||||
Cita:
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#6
|
|||
|
|||
Ya sé que igual es un poco tarde para preguntar sobre el tema...pero estaba buscando cómo insertar la linea vertical en mi RichEdit y como tampoco controlo mucho...alguien me podía explicar:
teniendo un TRichEdit y el código que tan amablemente a facilitado Neftali ¿qué pasos tengo que dar para que aparezca esa linea vertical en mi trichedit? Gracias por adelantado. Un saludo, María. |
|
|
|