Falla la alineación LEFT

Falla la alineación LEFT

Postby Xevi » Fri Dec 29, 2017 11:54 pm

Por cierto... no se si os habeis fijado, pero la alineacion de un control a LEFT no ocupa TODO el nWidth.

Las otras alineaciones, TOP, RIGHT, BOTTOM quadran a la perfección.
La que falla es LEFT
Me di cuenta el otro dia al alinear una ExplBar a LEFT, y pense que lo hacia mal yo... pero veo que también ocurre con un Panel dentro de un PANEL

Así pues...

Code: Select all  Expand view

//dado un contenedor PANEL
oPanel1 := TPanel():New( 125, 345, 125+300, 345+500, oWnd )

//Creo un PANEL dentro del PANEL1
#define alLEFT   3
   WITH OBJECT TPanel():New(,,30,, oPanel1 )
   :SetColor( 0, CLR_RED )
   :nAlign := alLEFT  //Le faltan unos pixeles en la parte inferior. Por lo visto no calcula bien el nHeight
   END WITH
 


vease imagen...

Image
Image
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
Xevi
 
Posts: 169
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: Falla la alineación LEFT

Postby cnavarro » Sat Dec 30, 2017 1:08 am

No se ve bien en tu imagen

Image
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
User avatar
cnavarro
 
Posts: 6498
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Falla la alineación LEFT

Postby Antonio Linares » Sat Dec 30, 2017 9:41 am

El problema viene de la función WndAdjLeft() que comprueba si el control tiene "abuelo" (padre de padre) :-)

Code: Select all  Expand view
  MoveWindow( hControl, 0, wTopHeight - ( GetParent( GetParent( hControl ) ) != 0 ) - 2,
               rctCtrl.right - rctCtrl.left,
               rct.bottom - rct.top + 1 +
               ( ! GetParent( GetParent( hControl ) ) )
               - wTopHeight - wBottomHeight,
               TRUE );


A ver que solución le podemos dar...

Aqui está el ejemplo completo propuesto por Xevi:
Code: Select all  Expand view
#include "FiveWin.ch"

#define alLEFT   3

function Main()

   //dado un contenedor PANEL
   local oWnd, oPanel1

   DEFINE WINDOW oWnd

   oPanel1 := TPanel():New( 125, 345, 125+300, 345+500, oWnd )
   oPanel1:SetColor( 0, CLR_BLUE )
   oPanel1:nAlign = alLEFT

   //Creo un PANEL dentro del PANEL1
   WITH OBJECT TPanel():New(,,30,, oPanel1 )
   :SetColor( 0, CLR_RED )
   :nAlign := alLEFT  //Le faltan unos pixeles en la parte inferior. Por lo visto no calcula bien el nHeight
   END WITH

   ACTIVATE WINDOW oWnd

return nil
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41205
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Falla la alineación LEFT

Postby Antonio Linares » Sat Dec 30, 2017 10:17 am

Con esta modificación en la función WndAdjLeft() parece funcionar bien:

Code: Select all  Expand view
  MoveWindow( hControl, 0, wTopHeight - 1,
               rctCtrl.right - rctCtrl.left,
               rct.bottom - rct.top + 1 +
               ( ! GetParent( GetParent( hControl ) ) )
               - wTopHeight - wBottomHeight,
               TRUE );


Habría que comprobar si esto produce algún efecto indeseado en otros controles (posiblemente buttonbars) ya
que ese código estaba ahí por algo :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41205
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Falla la alineación LEFT

Postby Antonio Linares » Sat Dec 30, 2017 10:28 am

Tal vez esta sea la solución correcta:

Code: Select all  Expand view
MoveWindow( hControl, 0, wTopHeight - ( GetParent( GetParent( hControl ) ) != 0 ),
               rctCtrl.right - rctCtrl.left,
               rct.bottom - rct.top + 1 +
               ( ! GetParent( GetParent( hControl ) ) )
               - wTopHeight - wBottomHeight,
               TRUE );


Agradezco vuestras pruebas y comentarios :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41205
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Falla la alineación LEFT

Postby Xevi » Mon Jan 01, 2018 4:13 pm

No es lo único que encuentro que falla...
cualquier alineación (he probado PANEL) en un DIALOG, no funciona.

Code: Select all  Expand view

#include "FiveWin.ch"

#define alNONE   1
#define alTOP    2
#define alLEFT   3
#define alBOTTOM 4
#define alRIGHT  5
#define alCLIENT 6

Static oWnd

FUNCTION Main()

   DEFINE DIALOG oWnd FROM 1, 1 TO 800, 1450 PIXEL

   WITH OBJECT TPanel():New()
   :SetColor( 0, CLR_BLUE )
   :nHeight := 43
   :nAlign := alNONE//alCLIENT//alRIGHT//alLEFT//alTOP//alBOTTOM
   END WITH

   ACTIVATE DIALOG oWnd

Return Nil
 


He probado TODAS las alineaciones, lo que hacen es que no se muestra la ventana, corre la aplicación en modo Hide()
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
Xevi
 
Posts: 169
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: Falla la alineación LEFT

Postby Xevi » Mon Jan 01, 2018 4:17 pm

Con un FolderEX... lo mismo

Code: Select all  Expand view

#include "FiveWin.ch"

#define alCLIENT 6

Static oWnd

FUNCTION Main()
   local oFldr

   DEFINE DIALOG oWnd FROM 1, 1 TO 800, 1450 PIXEL

   oFldr := TFolderEx():New( 0, 0,,, oWnd,, .F., .F., {"Prime","Segu","Terce","Quart","Five","Coses Meves"},,, 0,,,,, .F., 0,,, .F., "TOP",,, .F.,,, .T.,, .F.,, "oFldr" )
   oFldr:nAlign := alCLIENT//alRIGHT

   ACTIVATE DIALOG oWnd

Return Nil
 
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
Xevi
 
Posts: 169
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: Falla la alineación LEFT

Postby cnavarro » Mon Jan 01, 2018 6:09 pm

Prueba asi

Code: Select all  Expand view


   oWnd:oClient  := oFldr    // oTop, oLeft, oRight, oBottom

 
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
User avatar
cnavarro
 
Posts: 6498
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Falla la alineación LEFT

Postby Xevi » Mon Jan 01, 2018 6:57 pm

No funciona.

Se ejecuta, se visualiza... pero no hace al Align
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
Xevi
 
Posts: 169
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: Falla la alineación LEFT

Postby cnavarro » Mon Jan 01, 2018 7:05 pm

Cómo quieres alinearlo?
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
User avatar
cnavarro
 
Posts: 6498
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Falla la alineación LEFT

Postby Xevi » Mon Jan 01, 2018 7:06 pm

Cristobal,

pues como está funcionando en una WINDOW.

Si le digo alLEFT, pues a la izquierda,
alCLIENT, ocupar toda el área libre... y así pues con el resto de alineaciones, que SI funcionan con una WINDOW.
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
Xevi
 
Posts: 169
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: Falla la alineación LEFT

Postby Xevi » Tue Jan 02, 2018 5:19 pm

¿?¿?
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
Xevi
 
Posts: 169
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: Falla la alineación LEFT

Postby karinha » Wed Jan 03, 2018 5:34 pm

Mira c:\fwh\samples\testfx5.prg se ayuda.

Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7154
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Falla la alineación LEFT

Postby Antonio Linares » Thu Jan 04, 2018 9:34 am

Xevi,

Un diálogo no se crea realmente hasta que no se activa, por lo que no puedes crear
controles antes. La solución es crearlos desde la claúsula ON INIT del ACTIVATE DIALOG:

Code: Select all  Expand view
#include "FiveWin.ch"

#define alLEFT 3

FUNCTION Main()

   local oWnd, oPanel

   DEFINE DIALOG oWnd FROM 1, 1 TO 800, 1450 PIXEL

   ACTIVATE DIALOG oWnd ;
      ON INIT ( oPanel := TPanel():New(),;
                oPanel:SetColor( 0, CLR_BLUE ),;
                oPanel:nHeight := 43,;
                oPanel:nAlign := alLEFT, .T. )

Return Nil
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41205
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Falla la alineación LEFT

Postby Xevi » Thu Jan 04, 2018 10:01 am

Perfecto!!!

Voy a tomar nota y crearme mis OnInitialize() en los Forms

Gracias.
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
Xevi
 
Posts: 169
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 7 guests