FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Problemas con on paint
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Problemas con on paint
Posted: Thu Dec 19, 2013 10:04 PM
Hola a todos, estoy haciendo unas pruebas con ventanas no MDI. Tengo una ventana principal y llamo a otra a la que quiero dibujar un rect谩ngulo, el problema es que este se dibuja detr谩s de la ventana que se abre. Aqu铆 el c贸digo en cuesti贸n.

Code (fw): Select all Collapse
#include 'fivewin.ch'
Static oWndChild
Static oWndMain

Function Main()

聽 聽 DefineEntorno()
聽 聽 Start()
聽 聽 Return 0
聽 聽 
/*----------------------------------------------------------------------------*/
Function Start()

聽 聽 Local oGet
聽 聽 Local oBtn := Array( 2, 0 )
聽 聽 Local oGrupo
聽 聽 Local cVar := Space( 30 )
聽 聽 
聽 聽 Define Window oWndMain Style nOr( WS_POPUP ) Color 0, CLR_HGRAY //nRgb( 240, 240, 255 )
聽 聽 
聽 聽 聽 聽 @ 10, 聽10 Group oGrupo To 600, 600 Pixel transparent
聽 聽 聽 聽 @ 80, 500 Btnbmp oBtn[ 1 ] Size 25, 25 Action OtraVentana() NoBorder Of oWndMain 
聽 聽 聽 聽 @ 80, 160 Get oGet Var cVar Of oWndMain Size 300, 20 Pixel
聽 聽 
聽 聽 Activate Window oWndMain Maximized On Init OtraVentana()
聽 聽 Return 0
聽 聽 
/*----------------------------------------------------------------------------*/
Function DefineEntorno()

聽 聽 Set Epoch To 1950
聽 聽 Set Date 聽To British
聽 聽 Set Delete 聽 On
聽 聽 Set Multiple Off
聽 聽 Set Autopen 聽On
聽 聽 Set Softseek On
聽 聽 Set Century 聽On
聽 聽 Set Confirm 聽On
聽 聽 Set Decimals To 2
聽 聽 Set Fixed Off
聽 聽 Set Exact on
聽 聽 Set Optimize On
聽 聽 Request HB_LANG_ES
聽 聽 Hb_LangSelect("ES")
聽 聽 Hb_SetCodePage( "ES" )
聽 聽 SetHandleCount( 250 )
聽 聽 Request DBFCDX
聽 聽 RddSetDefault( "DBFCDX" )
聽 聽 Return 0
聽 聽 
/*----------------------------------------------------------------------------*/聽 聽 
Function OtraVentana()


聽 聽 Define Window oWndChild From 10, 10 To 40, 50 Style nOr( WS_POPUP ) Color 0, CLR_WHITE
聽 聽 
聽 聽 聽 聽 oWndChild : bKeyDown := { | nKey | If( nKey == VK_ESCAPE, oWndChild : End(), ) }聽 聽 聽 聽 
聽 聽 
聽 聽 Activate Window oWndChild On Paint PintaBarra()
聽 聽 Return 0
聽 聽 
/*----------------------------------------------------------------------------*/
Function PintaBarra()

聽 聽 Local hPen
聽 聽 Local hOldPen
聽 聽 Local hDc := GetDc( oWndChild : hWnd )

聽 聽 hPen 聽 聽:= CreatePen( PS_SOLID, 1, CLR_BLUE )
聽 聽 hOldPen := SelectObject( hDc, hPen )
聽 聽 ? Rectangle( hDc, 100, 100, 150, 300, hPen )
聽 聽 ? DeleteObject( hOldPen )
聽 聽 ReleaseDc( hDc )
聽 聽 Return 0

Que estoy haciendo mal ??? Muchas gracias de antemano

Saludos
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Problemas con on paint
Posted: Thu Dec 19, 2013 11:48 PM
horacio wrote:Hola a todos, estoy haciendo unas pruebas con ventanas no MDI. Tengo una ventana principal y llamo a otra a la que quiero dibujar un rect谩ngulo, el problema es que este se dibuja detr谩s de la ventana que se abre. Aqu铆 el c贸digo en cuesti贸n.

Code (fw): Select all Collapse
#include 'fivewin.ch'
Static oWndChild
Static oWndMain

Function Main()

聽 聽 DefineEntorno()
聽 聽 Start()
聽 聽 Return 0
聽 聽 
/*----------------------------------------------------------------------------*/
Function Start()

聽 聽 Local oGet
聽 聽 Local oBtn := Array( 2, 0 )
聽 聽 Local oGrupo
聽 聽 Local cVar := Space( 30 )
聽 聽 
聽 聽 Define Window oWndMain Style nOr( WS_POPUP ) Color 0, CLR_HGRAY //nRgb( 240, 240, 255 )
聽 聽 
聽 聽 聽 聽 @ 10, 聽10 Group oGrupo To 600, 600 Pixel transparent
聽 聽 聽 聽 @ 80, 500 Btnbmp oBtn[ 1 ] Size 25, 25 Action OtraVentana() NoBorder Of oWndMain 
聽 聽 聽 聽 @ 80, 160 Get oGet Var cVar Of oWndMain Size 300, 20 Pixel
聽 聽 
聽 聽 Activate Window oWndMain Maximized On Init OtraVentana()
聽 聽 Return 0
聽 聽 
/*----------------------------------------------------------------------------*/
Function DefineEntorno()

聽 聽 Set Epoch To 1950
聽 聽 Set Date 聽To British
聽 聽 Set Delete 聽 On
聽 聽 Set Multiple Off
聽 聽 Set Autopen 聽On
聽 聽 Set Softseek On
聽 聽 Set Century 聽On
聽 聽 Set Confirm 聽On
聽 聽 Set Decimals To 2
聽 聽 Set Fixed Off
聽 聽 Set Exact on
聽 聽 Set Optimize On
聽 聽 Request HB_LANG_ES
聽 聽 Hb_LangSelect("ES")
聽 聽 Hb_SetCodePage( "ES" )
聽 聽 SetHandleCount( 250 )
聽 聽 Request DBFCDX
聽 聽 RddSetDefault( "DBFCDX" )
聽 聽 Return 0
聽 聽 
/*----------------------------------------------------------------------------*/聽 聽 
Function OtraVentana()


聽 聽 Define Window oWndChild From 10, 10 To 40, 50 Style nOr( WS_POPUP ) Color 0, CLR_WHITE
聽 聽 
聽 聽 聽 聽 oWndChild : bKeyDown := { | nKey | If( nKey == VK_ESCAPE, oWndChild : End(), ) }聽 聽 聽 聽 
聽 聽 
聽 聽 Activate Window oWndChild On Paint PintaBarra()
聽 聽 Return 0
聽 聽 
/*----------------------------------------------------------------------------*/
Function PintaBarra()

聽 聽 Local hPen
聽 聽 Local hOldPen
聽 聽 Local hDc := GetDc( oWndChild : hWnd )

聽 聽 hPen 聽 聽:= CreatePen( PS_SOLID, 1, CLR_BLUE )
聽 聽 hOldPen := SelectObject( hDc, hPen )
聽 聽 ? Rectangle( hDc, 100, 100, 150, 300, hPen )
聽 聽 ? DeleteObject( hOldPen )
聽 聽 ReleaseDc( hDc )
聽 聽 Return 0

Que estoy haciendo mal ??? Muchas gracias de antemano

Saludos


Sin probarlo pero seguramente tenga algo que ver: (f铆jate en el OF de la definicion de la ventana)

Code (fw): Select all Collapse
Function OtraVentana()


聽 聽 Define Window oWndChild From 10, 10 To 40, 50 Style nOr( WS_POPUP ) Color 0, CLR_WHITE OF oWndMain
聽 聽 
聽 聽 聽 聽 oWndChild : bKeyDown := { | nKey | If( nKey == VK_ESCAPE, oWndChild : End(), ) }聽 聽 聽 聽 
聽 聽 
聽 聽 Activate Window oWndChild On Paint PintaBarra()
聽 聽 Return 0


o

Code (fw): Select all Collapse
Function OtraVentana()


聽 聽 Define Window oWndChild From 10, 10 To 40, 50 Style nOr( WS_POPUP ) Color 0, CLR_WHITE
聽 聽 
聽 聽 聽 聽 oWndChild : bKeyDown := { | nKey | If( nKey == VK_ESCAPE, oWndChild : End(), ) }聽 聽 聽 聽 
聽 聽 
聽 聽 Activate Window oWndChild On Init ( SetParent( oWndChild:hWnd, oWndMain:hWnd) ) On Paint PintaBarra()
聽 聽 Return 0
Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noci贸n del tiempo

El secreto de la felicidad no est谩 en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Re: Problemas con on paint
Posted: Fri Dec 20, 2013 04:30 PM

Gracias Crist贸bal por tu respuesta. No funciona con ninguna de las dos propuestas. He a帽adido una buttonbar en la segunda ventana y sucede exactamente lo mismo. Aparentemente el estilo "WS_POPUP" no muestra correctamente los controles, tampoco puedo pintar la ventana con el comando On Paint. Pareciese que no respeta el handle de la ventana ya que las coordenadas del rect谩ngulo se pintan fuera de los limites de la ventana a la que se supone pertenece, adem谩s de pintarse por detr谩s de la misma. Lo he probado en FWH 7.12 Y FWH 12.04 y tienen el mismo comportamiento. Es una pena porque quer铆a hacer un cambio radical en el aspecto de mis aplicaciones pero con estos problemas dudo que siga adelante.

Saludos

Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Problemas con on paint
Posted: Fri Dec 20, 2013 05:55 PM

Horacio
Puedes indicar que aspecto pretendias darle a tus aplicaciones o una imagen que lo aclare?

Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noci贸n del tiempo

El secreto de la felicidad no est谩 en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Re: Problemas con on paint
Posted: Fri Dec 20, 2013 08:02 PM

Estoy por portar una aplicaci贸n a Sql y de paso darle un front end diferente a los que vengo utilizando y me parec铆a viable utilizar este tipo de estilo ( WS_POPUP ) para darle una funcionalidad de ventanas independientes. Pero evidentemente este no es el camino. Gracias Cristobal por tu atenci贸n.

Saludos

Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Problemas con on paint
Posted: Fri Dec 20, 2013 09:10 PM
Horacio
Creo que el problema viene de crear la "barra" en el On Paint en lugar de en el On Init, en este caso si funciona correctamente, si es que he entendido lo que necesitas



Code (fw): Select all Collapse
#include 'fivewin.ch'
Static oWndChild
Static oWndMain

Function Main()

聽 聽 DefineEntorno()
聽 聽 Start()
聽 聽 Return 0
聽 聽 
/*----------------------------------------------------------------------------*/
Function Start()

聽 聽 Local oGet
聽 聽 Local oBtn := Array( 2, 0 )
聽 聽 Local oGrupo
聽 聽 Local cVar := Space( 30 )
聽 聽 
聽 聽 Define Window oWndMain Style nOr( WS_POPUP ) Color 0, CLR_HGRAY //nRgb( 240, 240, 255 )
聽 聽 
聽 聽 聽 聽 @ 10, 聽10 Group oGrupo To 600, 600 Pixel transparent OF oWndMain
聽 聽 聽 聽 @ 80, 500 Btnbmp oBtn[ 1 ] Size 25, 25 Action OtraVentana() NoBorder Of oWndMain 
聽 聽 聽 聽 @ 80, 160 Get oGet Var cVar Of oWndMain Size 300, 20 Pixel
聽 聽 
聽 聽 Activate Window oWndMain Maximized On Init OtraVentana()
聽 聽 Return 0
聽 聽 
/*----------------------------------------------------------------------------*/
Function DefineEntorno()

聽 聽 Set Epoch To 1950
聽 聽 Set Date 聽To British
聽 聽 Set Delete 聽 On
聽 聽 Set Multiple Off
聽 聽 Set Autopen 聽On
聽 聽 Set Softseek On
聽 聽 Set Century 聽On
聽 聽 Set Confirm 聽On
聽 聽 Set Decimals To 2
聽 聽 Set Fixed Off
聽 聽 Set Exact on
聽 聽 Set Optimize On
聽 聽 //Request HB_LANG_ES
聽 聽 //Hb_LangSelect("ES")
聽 聽 //Hb_SetCodePage( "ES" )
聽 聽 SetHandleCount( 250 )
聽 聽 //Request DBFCDX
聽 聽 //RddSetDefault( "DBFCDX" )
聽 聽 Return 0
聽 聽 
/*----------------------------------------------------------------------------*/ 聽 聽
Function OtraVentana()

聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 
聽 聽 Define Window oWndChild From 10, 10 To 40, 50 Style nOr( WS_POPUP ) Color 0, CLR_WHITE //OF oWndMain
聽 聽 
聽 聽 聽 聽 oWndChild : bKeyDown := { | nKey | If( nKey == VK_ESCAPE, oWndChild : End(), ) } 聽 聽 聽 聽
聽 聽 聽 聽 

聽 聽 Activate Window oWndChild On Init PintaBarra() 
聽 聽 Return 0
聽 聽 
/*----------------------------------------------------------------------------*/
Function PintaBarra()

聽 聽 Local hPen
聽 聽 Local hOldPen
聽 聽 Local hDc := GetDc( oWndChild : hWnd )

聽 聽 hPen 聽 聽:= CreatePen( PS_SOLID, 1, CLR_BLUE )
聽 聽 hOldPen := SelectObject( hDc, hPen )
聽 聽 Rectangle( hDc, 100, 100, 150, 300, hPen )
聽 聽 DeleteObject( hOldPen )
聽 聽 ReleaseDc( hDc )
聽 聽 Return 0
Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noci贸n del tiempo

El secreto de la felicidad no est谩 en hacer lo que te gusta, sino en que te guste lo que haces

Continue the discussion