#include "fivewin.ch"
REQUEST DBFCDX
static aVariantes := {}
static nFirstBtn := 0
function Main()
local oDlg, oFont, oBtnVariante[ 8 ], x, y, n
local cProduct := "0011"
OpenDBF()
SetProduct( cProduct )
DEFINE FONT oFont NAME "ARIAL" SIZE 0,-14
DEFINE DIALOG oDlg SIZE 800,400 PIXEL FONT oFont
x := 10
y := 10
for n := 1 to 8
oBtnVariante[ n ] := CreateVarBtn( x, y, n, oDlg, oFont )
x += 50
if x > 160
x := 10
y += 35
endif
next
@ 10, 220 BTNBMP PROMPT "UP" FLAT SIZE 40,30 PIXEL OF oDlg ;
WHEN nFirstBtn >= 4 ;
ACTION ( nFirstBtn := Max( 0, nFirstBtn - 8 ), oDlg:Update() )
@ 45, 220 BTNBMP PROMPT "DOWN" FLAT SIZE 40,30 PIXEL OF oDlg ;
WHEN nFirstBtn + 8 < Len( aVariantes ) ;
ACTION ( nFirstBtn := Min( Len( aVariantes ) - 8, nFirstBtn + 8 ), ;
oDlg:Update() )
@ 10, 270 BTNBMP PROMPT "Change Product" FLAT SIZE 40,65 PIXEL OF oDlg ;
ACTION ( cProduct := SelectProduct(), SetProduct( cProduct ), oDlg:Update() )
// For changing product ACTION ( SetProduct( cNewProduct ), oDlgUpdate() )
ACTIVATE DIALOG oDlg CENTERED
RELEASE FONT oFont
return nil
static function SetProduct( cProduct )
local nLen
aVariantes := VA->( FW_DbfToArray( "ALLTRIM(DESC1),PRECIO,VARIANTE", { || FIELD->PRODUCTO = cProduct } ) )
nLen := Len( aVariantes )
ASize( aVariantes, Max( 8, 4 * Max( 1, Ceiling( nLen / 4 ) ) ) )
AFill( aVariantes, { "", "", "" }, nLen + 1 )
nFirstBtn := 0
return nil
static function OpenDBF()
USE PRODUC NEW SHARED ALIAS PR VIA "DBFCDX"
SET ORDER TO TAG PRODUC1
GO TOP
USE VARIANTI NEW SHARED ALIAS VA VIA "DBFCDX"
SET ORDER TO TAG VARIANT1
GO TOP
return nil
function CreateVarBtn( x, y, nBtn, oDlg, oFont )
local oBtn
@ y, x BTNBMP oBtn ;
PROMPT { || aVariantes[ nFirstBtn + nBtn, 1 ] } SIZE 48,30 PIXEL OF oDlg 2007 UPDATE ;
COLOR CLR_WHITE,RGB( 120,136,85 ) FONT oFont ;
WHEN !Empty( aVariantes[ nFirstBtn + nBtn, 1 ] ) ;
ACTION ( ::GoDown(), ;
OnActionVariantes( aVariantes[ nFirstBtn + nBtn, 3 ] ), ;
::GoUp() )
oBtn:bPainted := { || oBtn:SayText( cValToChar(aVariantes[ nFirstBtn + nBtn, 2 ]), { 8, nil, nil, -8 } , "TR" ) }
oBtn:bClrGrad := { |l,oBtn| If( oBtn:lMOver, {{ 1, RGB( 120,136,85 ), nRgb(255,255,255) }}, ;
If( oBtn:lPressed, RGB( 180,136,85 ), RGB( 120,136,85 ) ) ) }
oBtn:bClrGrad := { |l,oBtn| If( oBtn:lActive, If( oBtn:lMOver, {{ 1, RGB( 120,136,85 ), nRgb(255,255,255) }}, ;
If( oBtn:lPressed, RGB( 180,136,85 ), RGB( 120,136,85 ) ) ), CLR_GRAY ) }
oBtn:bClrGrad := < |u,oBtn|
local clr := CLR_GRAY
if oBtn:lActive
if oBtn:lMOver
clr := {{ 1, RGB( 120,136,85 ), nRgb(255,255,255) }}
elseif oBtn:lPressed
clr := RGB( 180,136,85 )
else
clr := RGB( 120,136,85 )
endif
endif
return clr
>
return oBtn
function OnActionVariantes( c )
MsgInfo ( c )
return nil
function SelectProduct()
local cRet := PR->PRODUCTO
XBROWSER "PR" SELECT cRet := PR->PRODUCTO
return cRet