Hola a todos
Intento hacer una marca en los edit obligatorios con parte de la rutina de
Jose Ramon publicada aqui
pero me sale un efecto raro al cambiar de ventana,pestaña,ect...
Estaria bien consegir un efecto de triangulo en una esquina, pero me
conformo con las lineas del borde
alguien me puede ayudar
#pragma BEGINDUMP
#include "windows.h"
#include "xailer.h"
#include "colors.ch"
#include <commctrl.h>
HB_FUNC_STATIC( TEDIT_WMNCPAINT )
{
PHB_ITEM Self = hb_stackSelfItem();
HWND hWnd = GetHandleOf( Self );
if( XA_ObjGetL( Self, "lObligado" ) )
{
HDC hdc = GetWindowDC( hWnd );
RECT rect;
HPEN hbr = CreatePen( PS_SOLID, 1, clRed );
HPEN hOldPen = SelectObject( hdc, (HPEN) hbr );
GetWindowRect( hWnd, &rect );
rect.right -= rect.left; // Ancho
rect.bottom -= rect.top; // Alto
rect.left = 0;
rect.top = 0;
// arriba // izquierda
MoveToEx( hdc, 0, rect.bottom -= rect.top+1, NULL );
// horizontal // vertical
LineTo( hdc, rect.right -= rect.left+1, rect.bottom -=
rect.top );
LineTo( hdc, rect.right -= rect.left, rect.top);
//MoveToEx( hdc, 0, 0 , NULL );
SelectObject( hdc, (HPEN) hOldPen );
DeleteObject( hbr );
}
else
PrevWindowProc( hWnd, WM_NCPAINT, hb_parnl( 1 ), 0 );
hb_retnl( 0 );
}
Attached files ATT01133.txt (197 B)Â
In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Pintar dentro o en borde de un control TEdit
- Carlos Ortiz
- Mensajes: 873
- Registrado: Mié Jul 01, 2009 5:44 pm
- Ubicación: Argentina - Córdoba
- Contactar:
Pintar dentro o en borde de un control TEdit
Algo mas sencillo y que no necesita incluír ningún código adicional es
cambiar el color de nClrPane para los campos que són obligatorios. No será
lo más bonito pero no queda mal.
"Juan Jose Lopez Garcia" <correo@jjlopezg.jazztel.es> escribió en el mensaje
news:4d5732e0$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Hola a todos
>
> Intento hacer una marca en los edit obligatorios con parte de la rutina de
> Jose Ramon publicada aqui
> pero me sale un efecto raro al cambiar de ventana,pestaña,ect...
> Estaria bien consegir un efecto de triangulo en una esquina, pero me
> conformo con las lineas del borde
>
> alguien me puede ayudar
>
>
> #pragma BEGINDUMP
>
> #include "windows.h"
> #include "xailer.h"
> #include "colors.ch"
> #include <commctrl.h>
>
> HB_FUNC_STATIC( TEDIT_WMNCPAINT )
> {
> PHB_ITEM Self = hb_stackSelfItem();
> HWND hWnd = GetHandleOf( Self );
>
> if( XA_ObjGetL( Self, "lObligado" ) )
> {
> HDC hdc = GetWindowDC( hWnd );
> RECT rect;
> HPEN hbr = CreatePen( PS_SOLID, 1, clRed );
> HPEN hOldPen = SelectObject( hdc, (HPEN) hbr );
>
> GetWindowRect( hWnd, &rect );
> rect.right -= rect.left; // Ancho
> rect.bottom -= rect.top; // Alto
> rect.left = 0;
> rect.top = 0;
> // arriba // izquierda
> MoveToEx( hdc, 0, rect.bottom -= rect.top+1, NULL );
> // horizontal // vertical
> LineTo( hdc, rect.right -= rect.left+1, rect.bottom -=
> rect.top );
> LineTo( hdc, rect.right -= rect.left, rect.top);
> //MoveToEx( hdc, 0, 0 , NULL );
>
>
> SelectObject( hdc, (HPEN) hOldPen );
> DeleteObject( hbr );
> }
> else
> PrevWindowProc( hWnd, WM_NCPAINT, hb_parnl( 1 ), 0 );
>
> hb_retnl( 0 );
> }
>
>
>
>
cambiar el color de nClrPane para los campos que són obligatorios. No será
lo más bonito pero no queda mal.
"Juan Jose Lopez Garcia" <correo@jjlopezg.jazztel.es> escribió en el mensaje
news:4d5732e0$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Hola a todos
>
> Intento hacer una marca en los edit obligatorios con parte de la rutina de
> Jose Ramon publicada aqui
> pero me sale un efecto raro al cambiar de ventana,pestaña,ect...
> Estaria bien consegir un efecto de triangulo en una esquina, pero me
> conformo con las lineas del borde
>
> alguien me puede ayudar
>
>
> #pragma BEGINDUMP
>
> #include "windows.h"
> #include "xailer.h"
> #include "colors.ch"
> #include <commctrl.h>
>
> HB_FUNC_STATIC( TEDIT_WMNCPAINT )
> {
> PHB_ITEM Self = hb_stackSelfItem();
> HWND hWnd = GetHandleOf( Self );
>
> if( XA_ObjGetL( Self, "lObligado" ) )
> {
> HDC hdc = GetWindowDC( hWnd );
> RECT rect;
> HPEN hbr = CreatePen( PS_SOLID, 1, clRed );
> HPEN hOldPen = SelectObject( hdc, (HPEN) hbr );
>
> GetWindowRect( hWnd, &rect );
> rect.right -= rect.left; // Ancho
> rect.bottom -= rect.top; // Alto
> rect.left = 0;
> rect.top = 0;
> // arriba // izquierda
> MoveToEx( hdc, 0, rect.bottom -= rect.top+1, NULL );
> // horizontal // vertical
> LineTo( hdc, rect.right -= rect.left+1, rect.bottom -=
> rect.top );
> LineTo( hdc, rect.right -= rect.left, rect.top);
> //MoveToEx( hdc, 0, 0 , NULL );
>
>
> SelectObject( hdc, (HPEN) hOldPen );
> DeleteObject( hbr );
> }
> else
> PrevWindowProc( hWnd, WM_NCPAINT, hb_parnl( 1 ), 0 );
>
> hb_retnl( 0 );
> }
>
>
>
>
@dbfarma
www.dbfarma.com.ar
www.dbfarma.com.ar
Pintar dentro o en borde de un control TEdit
Juan Jose,
supongo que el error de pintado que tienes es por que se están perdiendo
recursos. Tienes que eliminar el hDC después de utilizarlo, así que después
de DeleteObject( ... ) añade ReleaseDC( hWnd );
Saludos,
José Lalín
supongo que el error de pintado que tienes es por que se están perdiendo
recursos. Tienes que eliminar el hDC después de utilizarlo, así que después
de DeleteObject( ... ) añade ReleaseDC( hWnd );
Saludos,
José Lalín
Pintar dentro o en borde de un control TEdit
Perdon no me di cuenta que publicaba en englis
Carlos, si no consigo que se vea correcto tendre que hacer algo asi
Jose, he probado a añadir el ReleaseDC pero no a resultado cuando cabio de
pestaña en un folder con un browse
sige saliedo ese efecto.
Gracias por su tiempo
Saludos
"Juan Jose Lopez Garcia" <correo@jjlopezg.jazztel.es> escribió en el mensaje
news:4d5732e0$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Hola a todos
>
> Intento hacer una marca en los edit obligatorios con parte de la rutina de
> Jose Ramon publicada aqui
> pero me sale un efecto raro al cambiar de ventana,pestaña,ect...
> Estaria bien consegir un efecto de triangulo en una esquina, pero me
> conformo con las lineas del borde
>
> alguien me puede ayudar
>
>
> #pragma BEGINDUMP
>
> #include "windows.h"
> #include "xailer.h"
> #include "colors.ch"
> #include <commctrl.h>
>
> HB_FUNC_STATIC( TEDIT_WMNCPAINT )
> {
> PHB_ITEM Self = hb_stackSelfItem();
> HWND hWnd = GetHandleOf( Self );
>
> if( XA_ObjGetL( Self, "lObligado" ) )
> {
> HDC hdc = GetWindowDC( hWnd );
> RECT rect;
> HPEN hbr = CreatePen( PS_SOLID, 1, clRed );
> HPEN hOldPen = SelectObject( hdc, (HPEN) hbr );
>
> GetWindowRect( hWnd, &rect );
> rect.right -= rect.left; // Ancho
> rect.bottom -= rect.top; // Alto
> rect.left = 0;
> rect.top = 0;
> // arriba // izquierda
> MoveToEx( hdc, 0, rect.bottom -= rect.top+1, NULL );
> // horizontal // vertical
> LineTo( hdc, rect.right -= rect.left+1, rect.bottom -=
> rect.top );
> LineTo( hdc, rect.right -= rect.left, rect.top);
> //MoveToEx( hdc, 0, 0 , NULL );
>
>
> SelectObject( hdc, (HPEN) hOldPen );
> DeleteObject( hbr );
> }
> else
> PrevWindowProc( hWnd, WM_NCPAINT, hb_parnl( 1 ), 0 );
>
> hb_retnl( 0 );
> }
>
>
>
>
------------------------------------------------------------ --------------------
>
>
> __________ Información de ESET NOD32 Antivirus, versión de la base de
> firmas de virus 5869 (20110213) __________
>
> ESET NOD32 Antivirus ha comprobado este mensaje.
>
> http://www.eset.com
>
>
>
__________ Información de ESET NOD32 Antivirus, versión de la base de firmas de virus 5869 (20110213) __________
ESET NOD32 Antivirus ha comprobado este mensaje.
http://www.eset.com
Carlos, si no consigo que se vea correcto tendre que hacer algo asi
Jose, he probado a añadir el ReleaseDC pero no a resultado cuando cabio de
pestaña en un folder con un browse
sige saliedo ese efecto.
Gracias por su tiempo
Saludos
"Juan Jose Lopez Garcia" <correo@jjlopezg.jazztel.es> escribió en el mensaje
news:4d5732e0$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Hola a todos
>
> Intento hacer una marca en los edit obligatorios con parte de la rutina de
> Jose Ramon publicada aqui
> pero me sale un efecto raro al cambiar de ventana,pestaña,ect...
> Estaria bien consegir un efecto de triangulo en una esquina, pero me
> conformo con las lineas del borde
>
> alguien me puede ayudar
>
>
> #pragma BEGINDUMP
>
> #include "windows.h"
> #include "xailer.h"
> #include "colors.ch"
> #include <commctrl.h>
>
> HB_FUNC_STATIC( TEDIT_WMNCPAINT )
> {
> PHB_ITEM Self = hb_stackSelfItem();
> HWND hWnd = GetHandleOf( Self );
>
> if( XA_ObjGetL( Self, "lObligado" ) )
> {
> HDC hdc = GetWindowDC( hWnd );
> RECT rect;
> HPEN hbr = CreatePen( PS_SOLID, 1, clRed );
> HPEN hOldPen = SelectObject( hdc, (HPEN) hbr );
>
> GetWindowRect( hWnd, &rect );
> rect.right -= rect.left; // Ancho
> rect.bottom -= rect.top; // Alto
> rect.left = 0;
> rect.top = 0;
> // arriba // izquierda
> MoveToEx( hdc, 0, rect.bottom -= rect.top+1, NULL );
> // horizontal // vertical
> LineTo( hdc, rect.right -= rect.left+1, rect.bottom -=
> rect.top );
> LineTo( hdc, rect.right -= rect.left, rect.top);
> //MoveToEx( hdc, 0, 0 , NULL );
>
>
> SelectObject( hdc, (HPEN) hOldPen );
> DeleteObject( hbr );
> }
> else
> PrevWindowProc( hWnd, WM_NCPAINT, hb_parnl( 1 ), 0 );
>
> hb_retnl( 0 );
> }
>
>
>
>
------------------------------------------------------------ --------------------
>
>
> __________ Información de ESET NOD32 Antivirus, versión de la base de
> firmas de virus 5869 (20110213) __________
>
> ESET NOD32 Antivirus ha comprobado este mensaje.
>
> http://www.eset.com
>
>
>
__________ Información de ESET NOD32 Antivirus, versión de la base de firmas de virus 5869 (20110213) __________
ESET NOD32 Antivirus ha comprobado este mensaje.
http://www.eset.com
- ignacio
- Site Admin
- Mensajes: 9440
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Pintar dentro o en borde de un control TEdit
Juan Jose escribió el dom, 13 febrero 2011 02:24Hola a todos
Intento hacer una marca en los edit obligatorios con parte de la rutina de ...
1) No hace falta destruir el DC por estar dentro de un evento OnPaint
2) Cuando quieras pintar algo, deberás primero llamar PrevWindowProc y luego tu pintar encima.
Si te fijas lo estás haciendo mal. Llamas a PrevWindowProc cuando no pintas nada, cuando realmente no hace falta, sólo has de retornar NIl. Sin embargo cuando quieres pintar tu algo, deberás esperar a que el control se pinte con PrevWindowProc y luego pintar lo que quieras encima.
Espero que así te funcione.
Un saludo
Intento hacer una marca en los edit obligatorios con parte de la rutina de ...
1) No hace falta destruir el DC por estar dentro de un evento OnPaint
2) Cuando quieras pintar algo, deberás primero llamar PrevWindowProc y luego tu pintar encima.
Si te fijas lo estás haciendo mal. Llamas a PrevWindowProc cuando no pintas nada, cuando realmente no hace falta, sólo has de retornar NIl. Sin embargo cuando quieres pintar tu algo, deberás esperar a que el control se pinte con PrevWindowProc y luego pintar lo que quieras encima.
Espero que así te funcione.
Un saludo
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Pintar dentro o en borde de un control TEdit
Gracias Ignacio por la ayuda, con este codigo pinta bien
tengo que poner el PrevWindowProc con el else del if sino no pinta los
border de los otros controles, pero..
con siempre falta algo ya que al entrar a la pestaña del folder solo los
pinta cuando pasa el raton por encima
o han recibido el foco
Gracias a todos por las respuestas
HB_FUNC_STATIC( TEDIT_WMNCPAINT )
{
PHB_ITEM Self = hb_stackSelfItem();
HWND hWnd = GetHandleOf( Self );
if( XA_ObjGetL( Self, "lObligado" ) )
{
HDC hdc = GetWindowDC( hWnd );
RECT rect;
HPEN hbr = CreatePen( PS_SOLID, 1, clRed );
HPEN hOldPen = SelectObject( hdc, (HPEN) hbr );
PrevWindowProc( hWnd, WM_NCPAINT, hb_parnl( 1 ), 0 );
GetWindowRect( hWnd, &rect );
rect.right -= rect.left; // Ancho
rect.bottom -= rect.top; // Alto
rect.left = 0;
rect.top = 0;
MoveToEx( hdc, 0, rect.bottom -= rect.top+1, NULL );
LineTo( hdc, rect.right -= rect.left+1, rect.bottom -=
rect.top );
LineTo( hdc, rect.right -= rect.left, rect.top);
SelectObject( hdc, (HPEN) hOldPen );
DeleteObject( hbr );
ReleaseDC(hWnd,hdc);
}
else
PrevWindowProc( hWnd, WM_NCPAINT, hb_parnl( 1 ), 0 );
hb_retnl( 0 );
}
"Juan Jose Lopez Garcia" <correo@jjlopezg.jazztel.es> escribió en el mensaje
news:4d5732e0$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Hola a todos
>
> Intento hacer una marca en los edit obligatorios con parte de la rutina de
> Jose Ramon publicada aqui
> pero me sale un efecto raro al cambiar de ventana,pestaña,ect...
> Estaria bien consegir un efecto de triangulo en una esquina, pero me
> conformo con las lineas del borde
>
> alguien me puede ayudar
>
>
> #pragma BEGINDUMP
>
> #include "windows.h"
> #include "xailer.h"
> #include "colors.ch"
> #include <commctrl.h>
>
> HB_FUNC_STATIC( TEDIT_WMNCPAINT )
> {
> PHB_ITEM Self = hb_stackSelfItem();
> HWND hWnd = GetHandleOf( Self );
>
> if( XA_ObjGetL( Self, "lObligado" ) )
> {
> HDC hdc = GetWindowDC( hWnd );
> RECT rect;
> HPEN hbr = CreatePen( PS_SOLID, 1, clRed );
> HPEN hOldPen = SelectObject( hdc, (HPEN) hbr );
>
> GetWindowRect( hWnd, &rect );
> rect.right -= rect.left; // Ancho
> rect.bottom -= rect.top; // Alto
> rect.left = 0;
> rect.top = 0;
> // arriba // izquierda
> MoveToEx( hdc, 0, rect.bottom -= rect.top+1, NULL );
> // horizontal // vertical
> LineTo( hdc, rect.right -= rect.left+1, rect.bottom -=
> rect.top );
> LineTo( hdc, rect.right -= rect.left, rect.top);
> //MoveToEx( hdc, 0, 0 , NULL );
>
>
> SelectObject( hdc, (HPEN) hOldPen );
> DeleteObject( hbr );
> }
> else
> PrevWindowProc( hWnd, WM_NCPAINT, hb_parnl( 1 ), 0 );
>
> hb_retnl( 0 );
> }
>
>
>
>
------------------------------------------------------------ --------------------
>
>
> __________ Información de ESET NOD32 Antivirus, versión de la base de
> firmas de virus 5869 (20110213) __________
>
> ESET NOD32 Antivirus ha comprobado este mensaje.
>
> http://www.eset.com
>
>
>
__________ Información de ESET NOD32 Antivirus, versión de la base de firmas de virus 5871 (20110213) __________
ESET NOD32 Antivirus ha comprobado este mensaje.
http://www.eset.com
tengo que poner el PrevWindowProc con el else del if sino no pinta los
border de los otros controles, pero..
con siempre falta algo ya que al entrar a la pestaña del folder solo los
pinta cuando pasa el raton por encima
o han recibido el foco
Gracias a todos por las respuestas
HB_FUNC_STATIC( TEDIT_WMNCPAINT )
{
PHB_ITEM Self = hb_stackSelfItem();
HWND hWnd = GetHandleOf( Self );
if( XA_ObjGetL( Self, "lObligado" ) )
{
HDC hdc = GetWindowDC( hWnd );
RECT rect;
HPEN hbr = CreatePen( PS_SOLID, 1, clRed );
HPEN hOldPen = SelectObject( hdc, (HPEN) hbr );
PrevWindowProc( hWnd, WM_NCPAINT, hb_parnl( 1 ), 0 );
GetWindowRect( hWnd, &rect );
rect.right -= rect.left; // Ancho
rect.bottom -= rect.top; // Alto
rect.left = 0;
rect.top = 0;
MoveToEx( hdc, 0, rect.bottom -= rect.top+1, NULL );
LineTo( hdc, rect.right -= rect.left+1, rect.bottom -=
rect.top );
LineTo( hdc, rect.right -= rect.left, rect.top);
SelectObject( hdc, (HPEN) hOldPen );
DeleteObject( hbr );
ReleaseDC(hWnd,hdc);
}
else
PrevWindowProc( hWnd, WM_NCPAINT, hb_parnl( 1 ), 0 );
hb_retnl( 0 );
}
"Juan Jose Lopez Garcia" <correo@jjlopezg.jazztel.es> escribió en el mensaje
news:4d5732e0$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Hola a todos
>
> Intento hacer una marca en los edit obligatorios con parte de la rutina de
> Jose Ramon publicada aqui
> pero me sale un efecto raro al cambiar de ventana,pestaña,ect...
> Estaria bien consegir un efecto de triangulo en una esquina, pero me
> conformo con las lineas del borde
>
> alguien me puede ayudar
>
>
> #pragma BEGINDUMP
>
> #include "windows.h"
> #include "xailer.h"
> #include "colors.ch"
> #include <commctrl.h>
>
> HB_FUNC_STATIC( TEDIT_WMNCPAINT )
> {
> PHB_ITEM Self = hb_stackSelfItem();
> HWND hWnd = GetHandleOf( Self );
>
> if( XA_ObjGetL( Self, "lObligado" ) )
> {
> HDC hdc = GetWindowDC( hWnd );
> RECT rect;
> HPEN hbr = CreatePen( PS_SOLID, 1, clRed );
> HPEN hOldPen = SelectObject( hdc, (HPEN) hbr );
>
> GetWindowRect( hWnd, &rect );
> rect.right -= rect.left; // Ancho
> rect.bottom -= rect.top; // Alto
> rect.left = 0;
> rect.top = 0;
> // arriba // izquierda
> MoveToEx( hdc, 0, rect.bottom -= rect.top+1, NULL );
> // horizontal // vertical
> LineTo( hdc, rect.right -= rect.left+1, rect.bottom -=
> rect.top );
> LineTo( hdc, rect.right -= rect.left, rect.top);
> //MoveToEx( hdc, 0, 0 , NULL );
>
>
> SelectObject( hdc, (HPEN) hOldPen );
> DeleteObject( hbr );
> }
> else
> PrevWindowProc( hWnd, WM_NCPAINT, hb_parnl( 1 ), 0 );
>
> hb_retnl( 0 );
> }
>
>
>
>
------------------------------------------------------------ --------------------
>
>
> __________ Información de ESET NOD32 Antivirus, versión de la base de
> firmas de virus 5869 (20110213) __________
>
> ESET NOD32 Antivirus ha comprobado este mensaje.
>
> http://www.eset.com
>
>
>
__________ Información de ESET NOD32 Antivirus, versión de la base de firmas de virus 5871 (20110213) __________
ESET NOD32 Antivirus ha comprobado este mensaje.
http://www.eset.com