Page 4 of 7

Re: Fwh19.05 - New Class TDockPnel

PostPosted: Sat Apr 11, 2020 10:03 pm
by cnavarro
Es esto a lo que te refieres? ( Es mejor utilizar un control ACTIVEX de Fivewin que un CreateObject directamente como estoy haciendo yo, ya que el control ACTIVEX es más configurable a nivel de width, height, etc. )

Image

Code: Select all  Expand view

//----------------------------------------------------------------------------//
// ( C ) Cristobal Navarro - 2020
// TDockPnel with ActiveX
//----------------------------------------------------------------------------//

#include "Fivewin.ch"
#include "colores.ch"

//----------------------------------------------------------------------------//
//
//----------------------------------------------------------------------------//

Static oWindow
Static nWAncho
Static nWAlto
Static nCol  
Static nRow  

Static oFont
Static oFontB
Static oFontD
Static oFont1
Static oFont2
Static oFont3
Static oFont4
Static oFontE
Static oFontS
Static oFontCtrl
Static cPathApp

Static oDock1
Static oDock2
Static oDock3
Static oDock4
Static oDock5

Static cText := ""

//----------------------------------------------------------------------------//
//
//----------------------------------------------------------------------------//

Function Main()

   local cFont         := "Segoe UI Symbol" //TAHOMA   //CALIBRI

   DEFINE FONT oFont  NAME cFont SIZE 0,-11
   DEFINE FONT oFontB NAME cFont SIZE 0,-14 BOLD     //ARIAL NARROW
   DEFINE FONT oFont1 NAME cFont SIZE 0,-11 BOLD
   DEFINE FONT oFontE NAME cFont SIZE 0,-14
   DEFINE FONT oFont2 NAME cFont SIZE 0,-16
   DEFINE FONT oFont3 NAME cFont SIZE 0,-20 //BOLD
   DEFINE FONT oFont4 NAME "CALIBRI" SIZE 0,-16
   DEFINE FONT oFontCtrl NAME cFont SIZE 0, -9 BOLD
   DEFINE FONT oFontS NAME "FIXEDSYS" SIZE 0,-12

   TestDockPnel()

   oFont:End()
   oFont1:End()
   oFont2:End()
   oFont3:End()
   oFont4:End()
   oFontB:End()
   oFontE:End()
   oFontCtrl:End()
   oFontS:End()

Return nil

//----------------------------------------------------------------------------//
//
//----------------------------------------------------------------------------//

Static Function TestDockPnel()

   local nCol
   local nRow
   
   nWAncho   := Int( GetSysMetrics( 0 ) * 0.95 )
   nWAlto    := Int( GetSysMetrics( 1 ) * 0.95 )
   nCol      := Int( ( GetSysMetrics( 0 ) - nWAncho ) / 2 )
   nRow      := Int( ( GetSysMetrics( 1 ) - nWAlto  ) / 2 ) // + 2

   DEFINE WINDOW oWindow FROM nRow, nCol TO nWAlto + nRow, nWAncho + nCol ; //MDI ;
      PIXEL TITLE "Test TDockPnel Control - " + FWVERSION ;
      COLOR CLR_WHITE, Rgb( 182, 182, 182 )

      CreaDocks()

   ACTIVATE WINDOW oWindow

Return nil

//----------------------------------------------------------------------------//
//
//----------------------------------------------------------------------------//


Function CreaDocks()

   local cUrl  := "www.google.es"

   oDock1  := TDockPnel():New( oWindow )
   WITH OBJECT oDock1
      :SetHeightCaption( 40 )
      :SetCoors( { | o | 10 }, { | o | 10 }, ;
                 { | o | Int( o:oWnd:nHeight / 2 ) + 54 }, ;
                 { | o | Int( o:oWnd:nWidth / 2 ) - XEVal( o:nLeft, o ) } )
      :SetCaption( { | o | cUrl } )
      :SetColors( CLR_WHITE, METRO_RED, Rgb( 88, 88, 88 ), CLR_WHITE )
      //:SetColors( METRO_RED, CLR_WHITE, Rgb( 88, 88, 88 ), CLR_HGRAY )
      :SetFont( oFont4 )
      :SetBorderSize( 1 )
      :SetImgsFiles( { { "..\bitmaps\16x16\options.bmp", { | o | MyPopupMnu( o ) }, "ToolTip" } } )
      :SetCtrlsPnel( { | o, nT, nL, nH, nW, oB | oB := ShowPageWeb( o, cUrl ), ;
                                                 SetParent( oB:hWnd, o:hWnd ) } )
      :Activate()
   END

   oDock2  := TDockPnel():New( oWindow )
   WITH OBJECT oDock2
      :SetHeightCaption( 40 )
      :SetCoors( { | o | XEval( o:oWnd:aControls[ 1 ]:nTop, o ) }, ;
                 { | o | XEval( o:oWnd:aControls[ 1 ]:nRight, o ) + 10 }, ;
                 { | o | XEval( o:oWnd:aControls[ 1 ]:nBottom, o ) }, ;
                 { | o | Int( o:oWnd:nWidth / 2 ) + XEval( o:nLeft, o ) - 40 } )
      :SetCaption( { | o | "https://www.scintilla.org/ScintillaDoc.html" } )
      :SetColors( CLR_WHITE, METRO_AMBER, METRO_AMBER, CLR_WHITE )
      :SetBorderSize( 1 )
      :SetFont( oFont4 )
      :SetImgsFiles( { { "..\bitmaps\16x16\options.bmp", { | o | MyPopupMnu( o ) }, "ToolTip" } } )
      :SetCtrlsPnel( { | o, nT, nL, nH, nW, oB | oB := ShowPageWeb( o, "https://www.scintilla.org/ScintillaDoc.html" ), ;
                                                 SetParent( oB:hWnd, o:hWnd ) } )
      :Activate()
   END

   //cUrl  := "http://wiki.fivetechsoft.com/doku.php"
   oDock3  := TDockPnel():New( oWindow )
   WITH OBJECT oDock3
      :SetHeightCaption( 40 )
      :SetCoors( { | o | XEval( o:oWnd:aControls[ 2 ]:nBottom, o ) + 10 }, ;
                 { | o | 10 }, ;
                 { | o | Int( o:oWnd:nHeight / 2 ) + XEval( o:oWnd:aControls[ 2 ]:nHeight, o ) - 94 }, ;
                 { | o | XEVal( o:oWnd:aControls[ 2 ]:nRight, o )  } )
      :SetCaption( { | o | "http://forums.fivetechsupport.com/index.php" } )
      :SetBorderSize( 4 )
      :SetColors( CLR_WHITE, METRO_OLIVE, Rgb( 88, 88, 88 ), CLR_WHITE )
      :SetFont( oFont4 )
      :SetImgsFiles( { { "..\bitmaps\16x16\options.bmp", { | o | MyPopupMnu( o ) }, "ToolTip" } } )
      :SetCtrlsPnel( { | o, nT, nL, nH, nW, oB | oB := ShowPageWeb( o, "http://forums.fivetechsupport.com/index.php" ), ;
                                                 SetParent( oB:hWnd, o:hWnd ) } )
      :Activate()
   END

Return nil

//----------------------------------------------------------------------------//
//
//----------------------------------------------------------------------------//

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 ;
      FONT oFont4

      MENUITEM "Info" ACTION MsgInfo( "Class TDockPnel" )
      SEPARATOR
      MENUITEM "Exit" ACTION o:oWnd:oWnd:End()

   ENDMENU
   ACTIVATE MENU oMnu AT nRow, nCol OF o:oWnd

Return oMnu

//----------------------------------------------------------------------------//
//
//----------------------------------------------------------------------------//

Function ShowPageWeb( oParent, cUrl )

   local oActX

   oActX := CreateObject( "InternetExplorer.Application" )
   WITH OBJECT oActX
      :Visible    := .t.
      :ToolBar    := .f.
      :StatusBar  := .f.
      :MenuBar    := .f.
      :FullScreen := .t.
      :Invoke( "Navigate", cURL )
   END

Return oActX

//----------------------------------------------------------------------------//
//
//----------------------------------------------------------------------------//

 

Re: Fwh19.05 - New Class TDockPnel

PostPosted: Sun Apr 12, 2020 10:13 am
by joseluispalma
Muchas gracias Cristóbal, espectacular.

Re: Fwh19.05 - New Class TDockPnel

PostPosted: Sun Apr 12, 2020 9:33 pm
by leandro
Genial :D

Re: Fwh19.05 - New Class TDockPnel

PostPosted: Mon Jun 29, 2020 11:27 pm
by Marcelo Roggeri
Ejemplo de DockPnel de Cristobal Navarro, en uno de mis sistemas en uso, con gráficos usando tGraph de FWH
Image
Saludos

Re: Fwh19.05 - New Class TDockPnel

PostPosted: Mon Jun 29, 2020 11:31 pm
by Marcelo Roggeri
Otro ejemplo de la DockPnel (Cristobal Navarro), haciendo un ABM en línea. EditInPlace
Image
Saludos

Re: Fwh19.05 - New Class TDockPnel

PostPosted: Tue Jun 30, 2020 7:00 am
by AngelSalom
Se ve excelente Marcelo, enhorabuena.

Re: Fwh19.05 - New Class TDockPnel

PostPosted: Tue Jun 30, 2020 2:59 pm
by Marcelo Roggeri
Gracias Angel vi que tu tambien haz hecho con la tCalex, me gustaria contactarte para hacerte algunas preguntas puntuales al respecto si es que se puede.
Un saludo
Marcelo

Re: Fwh19.05 - New Class TDockPnel

PostPosted: Tue Jun 30, 2020 3:37 pm
by AngelSalom
Claro, mi correo angel [at] visionwin [dot] com

Re: Fwh19.05 - New Class TDockPnel

PostPosted: Sat Aug 22, 2020 8:10 pm
by leandro
Buenas tardes para todos

Cristobal, sera que me puedes ayudar con algo. Lo que pasa es que requiero colocar un get en la parte de abajo del xbrowse, pero la verdad es que la graficación por coordenadas no se me da. (Me acostumbre a los recursos). Adjunto imagen para ilustrar mas lo que requiero hacer.

De antemano gracias,

Image

Code: Select all  Expand view

   oDock1  := TDockPnel():New( oWChRgr1 )
   WITH OBJECT oDock1
      :SetHeightCaption( 50 )
      :SetCoors( { | o | 10 }, ;
                 { | o | 10 }, ;
                 { | o | Int( o:oWnd:nHeight / 2 ) - 10 }, ;
                 { | o | Int( o:oWnd:nWidth / 2 ) - XEVal( o:nLeft, o ) } )
      :SetCaption( { | o | "Saldos Acumulados Cuenta Contable" } )
      :SetColors( CLR_WHITE, Rgb( 0,120,215 ) , Rgb( 88, 88, 88 ), CLR_HGRAY )
      :SetFont( oFont4 )
      :lLeftImgs   := .F.
      :SetBorderSize( 4 )
      :SetCtrlsPnel( { | o, nT, nL, nH, nW, oB | oB := fSaldoCtas( o, nT, nL, nH-10, nW ) } )
      :SetImgsFiles( { { "C:\FWH1909\bitmaps\16x16\options.bmp", { | o | fParamGrafico1() }, "Opciones del Informe" } } )
      :bRClicked   := { || MsgInfo( oDock1:oWnd:aControls[ 1 ]:ClassName() ) }
      :Activate()
   END
 


Code: Select all  Expand view


function fSaldoCtas(oP, nT, nL, nH, nW)
Local cQry

Define Font oFont  Name "Calibri" Size 0,-13 BOLD
Define Font oFont1 Name "Calibri" Size 0,-13
Define Font oFont2 Name "Calibri" Size 0,-20 BOLD

cQry := "SELECT CAT.*,CONCAT(TER.t_razons,' ',TER.t_prinom,' ',TER.t_segnom,' ',TER.t_priape,' ',TER.t_segape) AS nombre"+;
        " FROM "+oLamcla:tCtas+" CAT LEFT JOIN "+oLamcla:tTerc+" TER "+;
        "ON CAT.bb_tercer=TER.t_tercer ORDER BY CAT.bb_cuenta,CAT.bb_tercer"
oRsCta := FW_OPENRECORDSET(oCnMes,cQry,adLockOptimistic,adOpenKeyset)
aCtas := RsToHash( oRsCta )
oRsCta:close()

oBrwMs := TXBrowse():New( oP )
oBrwMs:nTop                        := nT
oBrwMs:nLeft                       := nL
oBrwMs:nHeight                   := nH
oBrwMs:nWidth                    := nW

oBrwMs:nMarqueeStyle         := MARQSTYLE_HIGHLROW
oBrwMs:nRowDividerStyle      := LINESTYLE_LIGHTGRAY
oBrwMs:nColDividerStyle      := LINESTYLE_LIGHTGRAY
oBrwMs:nHeaderLines          := 1
oBrwMs:lColDividerComplete   := .t.
oBrwMs:lRecordSelector       := .t.
oBrwMs:l2007                 := .f.
oBrwMs:oFont                 := oFont1  
oBrwMs:nStretchCol           := STRETCHCOL_LAST
oBrwMs:bClrRowFocus    := { || { CLR_BLACK, RGB( 185, 220, 255 ) } }
oBrwMs:bClrStd      := {|| {Rgb( 88, 88, 88 ), if( aCtas[oBrwMs:nArrayAt]["bb_tipcta"] ="T",;
                                    nRGB(219,219,219),CLR_WHITE) }  }
oBrwMs:nColorPen       := CLR_HGRAY
oBrwMs:bClrHeader      := { || { CLR_BLACK, CLR_WHITE, CLR_HGRAY } }
oBrwMs:bClrFooter      := { || { CLR_BLACK, CLR_WHITE, CLR_HGRAY } }
oBrwMs:lFullGrid       := .T.
oBrwMs:lRecordSelector := .T.
oBrwMs:lHScroll        := .F.
oBrwMs:lVScroll        := .F.
oBrwMs:lFitGridHeight  := .T.
oBrwMs:nHeaderHeight   := 21
oBrwMs:nRowHeight      := 21
oBrwMs:bChange         := {|| actualizames(aCtas[oBrwMs:nArrayAt]) }

//Calculamos el Ancho del xBrowse
nAnchoCols := (oBrwMs:nWidth-15)/4

oCol          = oBrwMs:AddCol()
oCol:bStrData := {|| if(Len( aCtas ) > 0 , cTipoCuenta(aCtas[oBrwMs:nArrayAt]["bb_tipcta"]) ,"" ) }
oCol:cHeader  = "Tipo"
oCol:nWidth   = nAnchoCols
oCol:nHeadStrAlign = AL_LEFT
oCol:nDataStrAlign = AL_LEFT   
oCol:oHeaderFont = oFont

oCol          = oBrwMs:AddCol()
oCol:bStrData := {|| if(Len( aCtas ) > 0 , aCtas[oBrwMs:nArrayAt]["bb_cuenta"] ,"" ) }
oCol:cHeader  = "Cuenta"
oCol:nWidth   = nAnchoCols
oCol:nHeadStrAlign = AL_LEFT
oCol:nDataStrAlign = AL_LEFT   
oCol:oHeaderFont = oFont


oCol          = oBrwMs:AddCol()
oCol:bStrData := {|| if(Len( aCtas ) > 0 , IF( aCtas[oBrwMs:nArrayAt]["bb_tipcta"] = "T",;
                                                aCtas[oBrwMs:nArrayAt]["nombre"] ,;
                                                aCtas[oBrwMs:nArrayAt]["bb_nombre"])  ,"" ) }
oCol:cHeader  = "Nombre Cuenta"
oCol:nWidth   = nAnchoCols
oCol:nHeadStrAlign = AL_LEFT
oCol:nDataStrAlign = AL_LEFT   
oCol:oHeaderFont = oFont

oBrwMs:SetArray( aCtas )
oBrwMs:CreateFromCode()


Return oBrwMs

Re: Fwh19.05 - New Class TDockPnel

PostPosted: Sat Aug 22, 2020 9:32 pm
by cnavarro
Leandro, al final de la function fSaldoCtas, después del CreateFromCode, intenta esto

Code: Select all  Expand view

@ oBrwMs:nBottom + 2, 2 GET oGet .......
 

Re: Fwh19.05 - New Class TDockPnel

PostPosted: Sat Aug 22, 2020 10:02 pm
by leandro
Gracias por la pronta respuesta,

Pero... sigue sin funcionar, asumo que coloca el xbrowse encima del GET.

Code: Select all  Expand view


oBrwMs:SetArray( aCtas )
oBrwMs:CreateFromCode()

@ oBrwMs:nBottom + 2, 2 GET oGbsCta VAR cGbsCta OF oP PICTURE "@N"

msginfo("Pausa")
Return oBrwMs
 


Image

Re: Fwh19.05 - New Class TDockPnel

PostPosted: Sat Aug 22, 2020 10:30 pm
by cnavarro
Prueba, sustituyendo
oBrwMs:nBottom + 2


por

nH - 20


y dime qué te hace ahora

Re: Fwh19.05 - New Class TDockPnel

PostPosted: Sun Aug 23, 2020 11:28 am
by cnavarro
Leandro, lo he probado y funciona correctamente como te dije en mi primera respuesta

Image

Code: Select all  Expand view

Function Test1( oP, nT, nL, nH, nW )

   local oBrw
   local oGet
   local cVar  := Space( 40 )
   local oBar
   local aData := {  { "JAN", 1000, 1200,  900,  400,  700,  400 },  ;
                     { "FEB", 1100, 1300, 1000,  500,  800,  500 },  ;
                     { "MAR", 1050, 1800, 1900,  700, 1400, 1600 },  ;
                     { "APR", 1825, 1975, 1850,  675, 1100, 1425 },  ;
                     { "MAY", 2000, 1670, 1550,  675, 1100, 1425 },  ;
                     { "JUN", 0970, 1025, 1100,  675, 1100, 1425 },  ;
                     { "JUL", 1150, 1600, 1750,  675, 1100, 1425 },  ;
                     { "AUG", 1250, 1700, 1850,  675, 1100, 1425 },  ;
                     { "SEP", 1150, 1320, 1450,  675, 1100, 1425 },  ;
                     { "OCT", 1250, 1700, 1850,  675, 1100, 1425 },  ;
                     { "NOV", 1250, 1700, 1850,  675, 1100, 1425 },  ;
                     { "DEC", 1250, 1700, 1850,  675, 1100, 1425 }   ;
                  }

   @ nT, nL XBROWSE oBrw ;
      SIZE nW, nH - 25 OF oP PIXEL ;
      DATASOURCE aData ;
      COLUMNS 1, 2, 3, 4, 5, 6 ;
      HEADERS "MONTH", "USA", "EUROPE", "ASIA", "OTHERS", "REST" ;
      AUTOSORT LINES STYLE FLAT // NOBORDER

   WITH OBJECT oBrw
      :lRecordSelector := .F.
      :lHScroll        := .F.
      :lVScroll        := .F.
      :l2007           := .F.
      :nStretchCol     :=  1
      :lFitGridHeight  := .T.
      :nHeaderHeight   := 32
      :nRowHeight      := 27
      :nMarqueeStyle   := MARQSTYLE_HIGHLROW
      :bClrRowFocus    := { || { CLR_BLACK, RGB( 185, 220, 255 ) } }
      :bClrStd         := { || { Rgb( 88, 88, 88 ), CLR_WHITE } }
      :nColorPen       := CLR_HGRAY
      :bClrHeader      := { || { CLR_BLACK, CLR_WHITE, CLR_HGRAY } }
      :lFullGrid       := .T.
      :SetFont( oFontCtrl )
      AEVal( :aCols, { | o | o:cEditPicture := "999,999.99", o:nWidth := Int( o:oBrw:nWidth / 6 ) }, 2, Len( :aCols ) )
      AEVal( :aCols, { | o | o:oHeaderFont := oFont1 } )
      :CreateFromCode()
   END

   @ oBrw:nBottom + 1, nL GET oGet VAR cVar PICTURE "@!" OF oP SIZE nW, 24 PIXEL

Return oBrw
 


Este es el DOCK
Code: Select all  Expand view

   oDock1  := TDockPnel():New( oWindow )
   WITH OBJECT oDock1
      :SetHeightCaption( 40 )
      :SetCoors( { | o | 10 }, { | o | 10 }, ;
                 { | o | Int( o:oWnd:nHeight / 2 ) + 54 }, ;
                 { | o | Int( o:oWnd:nWidth / 3 ) - XEVal( o:nLeft, o ) } )
      :SetCaption( { | o | "Title" } )
      :SetColors( METRO_RED, CLR_WHITE, Rgb( 88, 88, 88 ), CLR_HGRAY )
      :SetFont( oFont4 )
      :SetBorderSize( 1 )
      :SetImgsFiles( { { "..\bitmaps\16x16\panel.bmp", ;
                        { || oDock1:aBtnBmps[ 1 ]:SetImages( if( oDock1:lSelected, "..\bitmaps\16x16\panel.bmp", "\Fwh\bitmaps\16x16\check.bmp" ) ), ;
                             oDock1:lSelected := !oDock1:lSelected }, "ToolTip" } } )
      :SetCtrlsPnel( { | o, nT, nL, nH, nW, oB | oB := Test1( o, nT, nL, nH, nW ) } )
      :bRClicked   := { || MsgInfo( oDock1:oWnd:aControls[ 1 ]:ClassName() ) }

      //
      // Controls predefined in :oPnelH ( interior Panel )
      //
      :lBottomH    := .F.
      :SetTypeCtrl( 2 )                    // Control TTitle
      :SetHeightCtrl( 32 )
      :SetColorsCtrl( CLR_WHITE, METRO_OLIVE )
      :aRectText   := { 8, 60 }
      :cTitH       := "Control Title - " + if( !:lBottomH, "TOP", "BOTTOM" )
      :Activate()
   END
 

Re: Fwh19.05 - New Class TDockPnel

PostPosted: Sun Aug 23, 2020 4:30 pm
by leandro
Muchas gracias Cristobal, quedo solucionado. Me toco cambiar las sintaxis, pero funciono correctamente.

:D :D :D :D :D

Re: Fwh19.05 - New Class TDockPnel

PostPosted: Sun Aug 23, 2020 4:44 pm
by cnavarro
Te faltaba la clausula PIXEL en el GET ? :D :D :D :D :D :D