Tengo 2 problemas en el código adjunto:
1) ¿Como hago para personalizar el ancho de cada columna? Salen todas del mismo ancho.
2) ¿Se puede usar y como, los metodos KeyDown() o LButtonDown() para marcar, en vez de un button?
Se agradece cualquier ayuda a mi problema...
DEFINE DIALOG oDlg TITLE hb_strtoutf8(cTitle) SIZE 510, 350
@ 1, 1 BROWSE oBrw OF oDlg ;
HEADERS hb_strtoutf8("Selección"), hb_strtoutf8("Descripción"), hb_strtoutf8("Archivo") ;
FIELDS If( vdbf_[ oBrw:nAt ][ 1 ], "X", " " ), vdbf_[ oBrw:nAt ][ 2 ], vdbf_[ oBrw:nAt ][ 3 ]
oBrw:SetArray( vdbf_ )
oBrw:nRowPos = 2
oBrw:nAt = 2
@31, 3 BUTTON "Seleccionar" OF oDlg SIZE 120, 33 ACTION ( vdbf_[ oBrw:nRowPos ][ 1 ] := ! vdbf_[ oBrw:nRowPos ][ 1 ], oBrw:Refresh() )
@31, 19 BUTTON "Aceptar" OF oDlg SIZE 120, 33 ACTION ( lModal:=.F., aSeleccion := {cValor}, oDlg:End() )
@31, 36 BUTTON "Cancelar" OF oDlg SIZE 120, 33 ACTION ( lModal:=.F., lRetorno:=.F., aSeleccion:={}, oDlg:End() )
ACTIVATE DIALOG oDlg CENTERED
Problemas con @ browse FiveLinux-harbour
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Problemas con @ browse FiveLinux-harbour
Jorge,
Si revisas FiveLinux/include/FiveLinux.ch verás que el comando BROWSE admite las siguientes claúsulas:
luego puedes especificar:
@ ..., ... BROWSE ... COLSIZES 30, 80, 70 ...
un valor para cada ancho de columna
Si revisas FiveLinux/include/FiveLinux.ch verás que el comando BROWSE admite las siguientes claúsulas:
Code: Select all
#xcommand @ <nRow>, <nCol> BROWSE <oBrw> ;
[ <of: OF, WINDOW, DIALOG> <oWnd> ] ;
[ <headers: HEAD, HEADER, HEADERS, TITLE> <cHeading,...> ] ;
[ FIELDS <Expr1> [,<ExprN>] ] ;
[ <sizes: FIELDSIZES, SIZES, COLSIZES> <aColSizes,...> ] ;
[ FIELDS <Expr1> [,<ExprN>] ] ;
[ ALIAS <cAlias> ] ;
[ SIZE <nWidth>, <nHeight> ] ;
[ <update: UPDATE> ] ;
=> ;
[ <oBrw> := ] TWBrowse():New( <nRow>, <nCol>,;
[<oWnd>], [\{<cHeading>\}], [\{<aColSizes>\}],;
\{ \{|o|<Expr1>\} [ ,\{|o|<ExprN>\} ] \}, <cAlias>,;
<nWidth>, <nHeight>, <.update.> )
@ ..., ... BROWSE ... COLSIZES 30, 80, 70 ...
un valor para cada ancho de columna
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Problemas con @ browse FiveLinux-harbour
Para poder seleccionar usando el teclado, tenemos que modificar el método KeyDown() para que evalúe bKeyDown en caso de estar definido:
De igual forma hay que modificar el método LButtonDown() para que procese bLClicked en caso de estar definido:
Vamos a incorporar _ en FiveLinux y te enviamos las nuevas librerias
Code: Select all
METHOD KeyDown( nKey ) CLASS TWBrowse
do case
case nKey == K_DOWN
::GoDown()
::oVScroll:SetValue( ::oVScroll:GetValue() + 1 )
case nKey == K_UP
::GoUp()
::oVScroll:SetValue( ::oVScroll:GetValue() - 1 )
case nKey == K_HOME
::GoTop()
::oVScroll:SetValue( 1 )
case nKey == K_END
::GoBottom()
case nKey == K_PAGEUP
::PageUp()
case nKey == K_PAGEDOWN
::PageDown()
case nKey == K_LEFT
::GoLeft()
::oHScroll:SetValue( ::oHScroll:GetValue() - 1 )
case nKey == K_RIGHT
::GoRight()
::oHScroll:SetValue( ::oHScroll:GetValue() + 1 )
endcase
if ! Empty( ::bKeyDown )
Eval( ::bKeyDown, nKey, Self )
endif
return nil
Code: Select all
METHOD LButtonDown( nRow, nCol ) CLASS TWBrowse
local nRowSize := ::nHeight / ::nRowCount()
local nRowAt := Int( nRow / nRowSize )
local nRowPos := ::nRowPos
local nSkipped
::SetFocus()
if nRowAt == 0 .or. nRowAt == nRowPos
return nil
endif
::DrawLine( nRowPos )
if ( nSkipped := ::Skip( nRowAt - nRowPos ) ) != 0
::nRowPos = nRowAt
::oVScroll:SetValue( ::oVScroll:GetValue() + ( nRowAt - nRowPos ) )
if ! Empty( ::bLClicked )
Eval( ::bLClicked, nRowAt, nCol, Self )
endif
endif
::DrawSelect()
return nil
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Problemas con @ browse FiveLinux-harbour
El ejemplo quedaría asi:
Code: Select all
// Using a browse to display a multidimensional array
#include "FiveLinux.ch"
function Main()
local oWnd, oBrw, aTest := { { .F., "one", "two" }, { .F., "three", "four" }, { .F., "five", "six" } }
DEFINE WINDOW oWnd TITLE "Testing Browses" SIZE 522, 317
@ 2, 2 BROWSE oBrw OF oWnd ;
HEADERS "Selected", "First", "Second" ;
FIELDS If( aTest[ oBrw:nAt ][ 1 ], "X", " " ), aTest[ oBrw:nAt ][ 2 ], aTest[ oBrw:nAt ][ 3 ]
oBrw:SetArray( aTest )
oBrw:nRowPos = 2
oBrw:nAt = 2
oBrw:bKeyDown = { | nKey | If( nKey == 32, ( aTest[ oBrw:nRowPos ][ 1 ] := ! aTest[ oBrw:nRowPos ][ 1 ], oBrw:Refresh() ),) }
oBrw:bLClicked = { | nRowAt, nCol | If( nCol < 80, ( aTest[ oBrw:nRowPos ][ 1 ] := ! aTest[ oBrw:nRowPos ][ 1 ], oBrw:Refresh() ),) }
@ 28, 2 BUTTON "_Ok" OF oWnd ACTION oWnd:End()
@ 28, 30 BUTTON "Add" OF oWnd ACTION ( AAdd( aTest, { .F., "five", "six" } ), oBrw:SetArray( aTest ), oBrw:GoTop(), oBrw:Refresh() )
@ 28, 40 BUTTON "Select" OF oWnd ACTION ( aTest[ oBrw:nRowPos ][ 1 ] := ! aTest[ oBrw:nRowPos ][ 1 ], oBrw:Refresh() )
ACTIVATE WINDOW oWnd
return nil
Re: Problemas con @ browse FiveLinux-harbour
Ok Antonio, una vez mas todo bien.
Resulto perfecto.
Se agradece.
Resulto perfecto.
Se agradece.