Falla la alineación LEFT

Post Reply
User avatar
Xevi
Posts: 168
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Falla la alineación LEFT

Post by Xevi »

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

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

Re: Falla la alineación LEFT

Post by cnavarro »

No se ve bien en tu imagen

Image
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Falla la alineación LEFT

Post by Antonio Linares »

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

Code: Select all

   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

#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: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Falla la alineación LEFT

Post by Antonio Linares »

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

Code: Select all

   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: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Falla la alineación LEFT

Post by Antonio Linares »

Tal vez esta sea la solución correcta:

Code: Select all

 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
Xevi
Posts: 168
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: Falla la alineación LEFT

Post by Xevi »

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

Code: Select all

#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: 168
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: Falla la alineación LEFT

Post by Xevi »

Con un FolderEX... lo mismo

Code: Select all

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

Re: Falla la alineación LEFT

Post by cnavarro »

Prueba asi

Code: Select all


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

 
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
Xevi
Posts: 168
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: Falla la alineación LEFT

Post by Xevi »

No funciona.

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

Aprendiz de la vida!!!
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Falla la alineación LEFT

Post by cnavarro »

Cómo quieres alinearlo?
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
Xevi
Posts: 168
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: Falla la alineación LEFT

Post by Xevi »

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: 168
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: Falla la alineación LEFT

Post by Xevi »

¿?¿?
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Falla la alineación LEFT

Post by karinha »

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

Saludos.
João Santos - São Paulo - Brasil
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Falla la alineación LEFT

Post by Antonio Linares »

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

#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
Xevi
Posts: 168
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: Falla la alineación LEFT

Post by Xevi »

Perfecto!!!

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

Gracias.
Un Saludo,
Xevi.

Aprendiz de la vida!!!
Post Reply