Page 1 of 1
Falla la alineación LEFT
Posted: Fri Dec 29, 2017 11:54 pm
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...
Re: Falla la alineación LEFT
Posted: Sat Dec 30, 2017 1:08 am
by cnavarro
No se ve bien en tu imagen
Re: Falla la alineación LEFT
Posted: Sat Dec 30, 2017 9:41 am
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
Re: Falla la alineación LEFT
Posted: Sat Dec 30, 2017 10:17 am
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
Re: Falla la alineación LEFT
Posted: Sat Dec 30, 2017 10:28 am
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
Re: Falla la alineación LEFT
Posted: Mon Jan 01, 2018 4:13 pm
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()
Re: Falla la alineación LEFT
Posted: Mon Jan 01, 2018 4:17 pm
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
Re: Falla la alineación LEFT
Posted: Mon Jan 01, 2018 6:09 pm
by cnavarro
Prueba asi
Code: Select all
oWnd:oClient := oFldr // oTop, oLeft, oRight, oBottom
Re: Falla la alineación LEFT
Posted: Mon Jan 01, 2018 6:57 pm
by Xevi
No funciona.
Se ejecuta, se visualiza... pero no hace al Align
Re: Falla la alineación LEFT
Posted: Mon Jan 01, 2018 7:05 pm
by cnavarro
Cómo quieres alinearlo?
Re: Falla la alineación LEFT
Posted: Mon Jan 01, 2018 7:06 pm
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.
Re: Falla la alineación LEFT
Posted: Tue Jan 02, 2018 5:19 pm
by Xevi
¿?¿?
Re: Falla la alineación LEFT
Posted: Wed Jan 03, 2018 5:34 pm
by karinha
Mira c:\fwh\samples\testfx5.prg se ayuda.
Saludos.
Re: Falla la alineación LEFT
Posted: Thu Jan 04, 2018 9:34 am
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
Re: Falla la alineación LEFT
Posted: Thu Jan 04, 2018 10:01 am
by Xevi
Perfecto!!!
Voy a tomar nota y crearme mis OnInitialize() en los Forms
Gracias.