Con el ejemplo de que incluye scrooll.
La única variación que he realizado es incluir la creación de un cuadro de dialogo en la función DefDialog
- Code: Select all Expand view RUN
- #include "Fivewin.ch"
Static aRes
Static oDock0
Function Main()
local oWnd
local nRow := 2
local nCol := 2
local nWAlto := 760
local nWAncho := 1360
local oPanel
aRes := { GetSysMetrics(0), GetSysMetrics(1) }
DEFINE WINDOW oWnd FROM nRow, nCol TO nWAlto + nRow, nWAncho + nCol ;
PIXEL TITLE "Movimentos do Dia "+Dtoc( Date() ) ;
COLOR CLR_WHITE, Rgb( 182, 182, 182 ) STYLE WS_POPUP
ACTIVATE WINDOW oWnd MAXIMIZED ON INIT ( CreaDocks0( oWnd ) )
Return nil
//----------------------------------------------------------------------------//
//
//----------------------------------------------------------------------------//
Function CreaDocks0( oWnd )
oDock0 := TDockPnel():New( oWnd )
WITH OBJECT oDock0
:SetHeightCaption( 40 )
:SetBorderSize( 1 )
:SetCoors( { | o | 2 }, ;
{ | o | 2 }, ;
{ | o | o:oWnd:nBottom - o:oWnd:nTop - 2 }, ;
{ | o | o:oWnd:nRight - o:oWnd:nLeft - 2 } )
:SetCaption( { | o | "Test TDockPanel Class - " + FWVERSION + " -" } )
//:SetPosTitle( .T. ) // Title at bottom
:SetStyle( 30 )
:SetModeHorz( 2 ) // TScrollPanel
:SetImgsFiles( { { 57678, { | o | MyPopupMnu( o ) }, } } )
:SetCtrlsPnel( { | o, nT, nL, nH, nW | CreateDocks( o ) } )
:Activate()
END
Return oDock0
//----------------------------------------------------------------------------//
//
//----------------------------------------------------------------------------//
Function MyPopupMnu( o )
local oMnu
local nRow := o:nTop + Int( o:nHeight / 2 )
local nCol := o:nLeft + Int( o:nWidth / 2 )
MENU oMnu POPUP 2013 ;
COLORSELECT METRO_STEEL, METRO_STEEL, CLR_WHITE ;
COLORMENU CLR_WHITE, CLR_BLUE ;
COLORSEPARATOR METRO_STEEL ;
COLORLEFT CLR_WHITE
MENUITEM "Info" ACTION MsgInfo( o:ClassName() )
MENUITEM "Exit" ACTION o:oWnd:oWnd:End()
ENDMENU
ACTIVATE MENU oMnu AT nRow, nCol OF o:oWnd
Return oMnu
//----------------------------------------------------------------------------//
//
//----------------------------------------------------------------------------//
STATIC FUNCTION CreateDocks(oWnd)
LOCAL aPos:={},oFnt,oDock[4]
DEFINE FONT oFnt NAME "CALIBRI" SIZE 0,-16
Aadd(aPos,{ 014, 005, 370, 278 } )
Aadd(aPos,{ 014, 300, 360, aRes[1] - 10 } )
Aadd(aPos,{ 390, 300, aRes[2]/3 + 390, aRes[1] - 10 + 300 } )
oDock[1] := TDockPnel():New( oWnd )
WITH OBJECT oDock[1]
:SetCoors( aPos[1,1], aPos[1,2], aPos[1,3], aPos[1,4] )
:SetHeightCaption( 40 )
:SetBorderSize( 4 )
:SetCaption( "Calendário" )
:SetColors( CLR_WHITE, METRO_OLIVE, , )
:SetFont( oFnt )
:cAlignText := "CC"
:SetCtrlsPnel( { | o, nT, nL, nH, nW | DefDialog( o, nT, nL, nH, nW, 1 ) } )
:Activate()
END
oDock[2] := TDockPnel():New( oWnd )
WITH OBJECT oDock[2]
:SetCoors( aPos[2,1], aPos[2,2], Int( aRes[ 1 ] / 6 ), aPos[2,4] - if( oWnd:WinStyle( WS_VSCROLL ), 20, 0 ) )
:SetHeightCaption( 40 )
:SetBorderSize( 4 )
:SetCaption( "Autorizações" )
:SetColors( CLR_WHITE, METRO_OLIVE, , )
:SetFont( oFnt )
:cAlignText := "CC"
:SetCtrlsPnel( { | o, nT, nL, nH, nW | DefDialog( o, nT, nL, nH, nW, 2 ) } )
:Activate()
END
oDock[3] := TDockPnel():New( oWnd )
WITH OBJECT oDock[3]
:SetCoors( { | o | XEval( o:oWnd:aControls[ 2 ]:nBottom + 10, o ) }, ;
{ | o | XEval( o:oWnd:aControls[ 2 ]:nLeft, o ) }, ;// { | o | Int( 2 * aRes[ 1 ] / 6 ) + 20 }, ;
{ | o | XEval( o:oWnd:aControls[ 2 ]:nBottom + 10 + Int( aRes[ 2 ] / 2 ) , o ) }, ;
{ | o | XEval( o:oWnd:aControls[ 2 ]:nRight, o ) } )
// :SetCoors( aPos[3,1], aPos[3,2], aPos[3,3], aPos[3,4] )
:SetHeightCaption( 40 )
:SetBorderSize( 4 )
:SetCaption( "Faturamento" )
:SetColors( CLR_WHITE, METRO_OLIVE, , )
:SetFont( oFnt )
:cAlignText := "CC"
:SetCtrlsPnel( { | o, nT, nL, nH, nW | DefDialog( o, nT, nL, nH, nW, 3 ) } )
:Activate()
END
oDock[4] := TDockPnel():New( oWnd )
WITH OBJECT oDock[4]
:SetCoors( { | o | XEval( o:oWnd:aControls[ 3 ]:nBottom + 10, o ) }, ;
{ | o | XEval( o:oWnd:aControls[ 3 ]:nLeft, o ) }, ; // { | o | Int( 3 * aRes[ 1 ] / 6 ) + 30 }, ;
{ | o | XEval( o:oWnd:aControls[ 3 ]:nBottom + 10 + Int( aRes[ 2 ] / 2 ) , o ) }, ;
{ | o | XEval( o:oWnd:aControls[ 3 ]:nRight, o ) } )
:SetHeightCaption( 40 )
:SetBorderSize( 4 )
:SetCaption( "Baixas" )
:SetColors( CLR_WHITE, METRO_OLIVE, , )
:SetFont( oFnt )
:cAlignText := "CC"
:SetCtrlsPnel( { | o, nT, nL, nH, nW | DefDialog( o, nT, nL, nH, nW, 4 ) } )
:Activate()
END
oFnt:End()
RETURN nil
STATIC FUNCTION DefDialog( oP, nT, nL, nH, nW, nD )
local oWnd, oImage, oFontSay
local oNameUser, oPassword
local oBtn1, oBtn2
local oFontI, oFontBtn
local cNameUser := space( 40 )
local cPassword := SPACE( 40 )
DEFINE FONT oFontI NAME "CALIBRI" SIZE 0,-15
DEFINE FONT oFontBtn NAME "VERDANA" SIZE 0,-17 BOLD
DEFINE FONT oFontSay NAME "VERDANA" SIZE 0,-25 BOLD //ITALIC
DEFINE DIALOG oWnd STYLE nOr( 0, WS_CHILD ) COLOR CLR_BLACK, nRGB( 253, 254, 254 ) ;
FROM nT, nL TO nH, nW PIXEL TRUEPIXEL OF oP
@ 15, 0 SAY "Cristóbal Navarro ( ® ) " PIXEL SIZE 400,30 OF oWnd ;
FONT oFontSay CENTER TRANSPARENT
@ 45, 0 SAY Upper( "FiveTech: ") + "Enter your Credentials" PIXEL ;
SIZE 400,30 OF oWnd FONT oFontI CENTER TRANSPARENT
@ 110, 50 GET oNameUser VAR cNameUser OF oWnd;
COLOR Rgb( 128, 128, 128 ), CLR_WHITE PICTURE "@!" ;
CUEBANNER "User" PIXEL BOTTOMBORDER ;
FONT oFontBtn ;
INFIELD INFONT oFontI INCLRTXT CLR_GRAY INCLRBORDER Rgb( 204, 204, 204 ) ;
INCLRLINE CLR_RED DYNAMIC //GROUP
@ 110, 50 GET oPassword VAR cPassword OF oWnd;
COLOR Rgb( 128, 128, 128 ), CLR_WHITE;
CUEBANNER "Enter Password" PASSWORD PIXEL BOTTOMBORDER ;
FONT oFontBtn PICTURE "@40" ;
INFIELD INFONT oFontI INALIGN 0
@ 260, 40 FLATBTN oBtn1 PROMPT "Access" OF oWnd SIZE 140, 40 ;
FONT oFontBtn;
COLOR CLR_WHITE, METRO_STEEL ;
ACTION ( oFontI:End(), oFontBtn:End(), oFontSay:End(), oWnd:End() )
@ 260,210 FLATBTN oBtn2 PROMPT "Exit" OF oWnd SIZE 140, 40 ;
FONT oFontBtn;
COLOR CLR_WHITE, METRO_STEEL ;
ACTION ( oFontI:End(), oFontBtn:End(), oFontSay:End(), oWnd:End() )
ACTIVATE DIALOG oWnd ON INIT ( oNameUser:SetFocus() ) NOWAIT
RETURN nil
Tengo 2 dudas.
1ª.- Veo que el desplazamiento se realiza hasta que el úlimo objeto definido alcance la cabecera (imagen 1)
Sin embargo, quizás lo correcto sería realizarlo hasta que el último objeto definido alcance la parte inferior. (imagen 2)
2ª.- Al definir un dialogo dentro de los dock, no permite siempre el desplazamiento pulsando y arrastrando dentro del dock que tiene definido el diálogos .
Al probarlo en una pantalla táctil, se puede mover con el dedo pulsando en cualquier sitio. Pero si dejas la aplicación quieta (sin hacer nada) unos 7 segundos, ya no permite desplazar con el dedo dentro de los diálogos.
Sí lo permite si hace en el espacio vacio (sin docks), pero dentro no.
Una vez que vuelve a mover con el dedo desde el espacio vacio, ya se puede volver a mover pulsando dentro de los diálogos definidos