FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Actualizar Header Listbox
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
Actualizar Header Listbox
Posted: Wed Oct 04, 2006 08:09 PM

Estoy usando un listbox cuyos Header (31) defino en una matriz. Una de las opciones, es cambiar los Header, por lo que lo envi贸 a la funci贸n que crea la matriz y me devuelve correctamente los valores, pero al actualizar el listbox (oDlg:UPDATE(), oLbx:Refresh()) no me cambia nada.
驴Alguna idea?

Un saludo



Manuel
Posts: 592
Joined: Tue Mar 14, 2006 11:34 PM
Actualizar Header Listbox
Posted: Wed Oct 04, 2006 10:24 PM

Hola Manuel

Ya probaste con oLstBrw:aHeaders := aTuArreglo

Esto, usando el browse de Hernan.

Saludos

FWH 10.6 + xHarbour + Borland 582
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
Actualizar Header Listbox
Posted: Thu Oct 05, 2006 05:23 AM

Raymundo,

Muchas gracias. Funcion贸 perfectamente.

Un saludo



Manuel
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
Actualizar Header Listbox
Posted: Sun Oct 08, 2006 06:12 PM

Raymundo,

驴Los campos del listbox tambien los podia incluir en un arreglo?

He probado con oLbx:aItems:= aMiArreglo pero da error.

驴Alguna ayuda?

Un saludo



Manuel
Posts: 592
Joined: Tue Mar 14, 2006 11:34 PM
Actualizar Header Listbox
Posted: Mon Oct 09, 2006 07:38 PM

Hola Manuel

Supongo que los campos los deseas usar para mostrar sus valores en el browse verdad ?

REDEFINE LISTBOX lbSrcSis ;
FIELDS CATSISS->SNM ;
HEAD "NOMBRE" ;
ID 103 ;
ALIAS "CATSISS" ;
FONT oBrwFnt ;
OF oFldSrc:aDialogs[2]

lbSrcSis:nLineStyle  := 2
lbSrcSis:lDrawFocusRect := .F.
lbSrcSis:nClrLine    := CLR_WHITE
lbSrcSis:nClrPane   := { || IIF( CATSISS->(OrdKeyNo() )%2=0, CLR_A, CLR_B ) }

Saludos

FWH 10.6 + xHarbour + Borland 582
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
Actualizar Header Listbox
Posted: Mon Oct 09, 2006 08:13 PM
Raymundo,

El tema es un poco mas complicado. Se trata de actualizar (refrescar) un browse compuestos por bitmap, al cambiar la informaci贸n. Todo funciona bien, para al pulsar el bot贸n CALENDA (te lo se帽alo en rojo), el programa actualiza bien la base de datos (treservas), pero despues no refleja ese cambio en el browse, a pesar del refresh y del Updated. Gracias a tu idea, con oLbx:=aDia, consegu铆 actualizar las cabeceras, pero no logro actualizar los campos. Por eso te decia si puedo utilizar otra matriz. Este es el c贸digo:


FUNCTION RESERVAS ()
local oLbx, oDlg, oFont, oBmp, oBtn := ARRAY(10), ;
aDia := ARRAY (33), n, ofecha1, oSay1, lOk := .f.,;
dFecha1 := DATE()
local aBit := { LOADBitmap( GetResources(), "bverde" ), ;
LoadBitmap( GetResources(), "brojo" ), ;
LoadBitmap( GetResources(), "bCeles" ), ;
LoadBitmap( GetResources(), "bamari" ) }

FIELD CON_INM

aDia := C_RESERDIA( aDia, dFecha1 ) // calcula cabeceras listbox

DEFINE FONT oFont NAME "MS Sans Serif" SIZE 0, -14 BOLD

ABRE ("RESERVA", "RESERVA", "RESERVA" )
ORDSETFOCUS("CON_INM")

ABRE ( "inqui", "inqui", "inqui" )
ORDSETFOCUS("CON_INM")

ABRE ("fincas", "fincas", "fincas" )
SET RELA TO CON_INM INTO inqui

// calcula la informacion del listbox
MSGRUN (" ", "Cuadro Reservas.", ;
{ | oDlg | C_RESERVA ( oDlg, dFecha1, .t. ) } )

SELE tReserva
DBGOTOP()
DEFINE DIALOG oDlg ;
TITLE "Cuadro de Reservas" ;
FROM 5, 2 TO 32, 99

@ 0.1, 11.0 SAY oSay1 VAR dFecha1 SIZE 80, 8 UPDATE
@ 0.1, 20.0 SAY "Ocupado" SIZE 24,8
@ 0.25,18.5 BITMAP oBmp OF oDlg RESOURCE "brojo" NOBORDER ;
SIZE 8,8

@ 0.1, 31.0 SAY "Libre" SIZE 15,8
@ 0.25, 25.5 BITMAP oBmp OF oDlg RESOURCE "bverde" NOBORDER ;
SIZE 8,8

@ 0.1, 40.0 SAY "Entrada" SIZE 20,8
@ 0.25, 33.0 BITMAP oBmp OF oDlg RESOURCE "bamari" NOBORDER ;
SIZE 8,8

@ 0.1, 50.0 SAY "Salida" SIZE 15,8
@ 0.25, 40.0 BITMAP oBmp OF oDlg RESOURCE "bCeles" NOBORDER ;
SIZE 8,8

@ 1,1 LISTBOX oLbx ;
FIELDS tReserva->FINCA , ;
Num2Str(tReserva->DORM,1,0), ;
aBit[Max(1,treserva->D01+1)], ;
aBit[Max(1,treserva->D02+1)], ;
aBit[Max(1,treserva->D03+1)], ;
aBit[Max(1,treserva->D04+1)], ;
aBit[Max(1,treserva->D05+1)], ;
aBit[Max(1,treserva->D06+1)], ;
aBit[Max(1,treserva->D07+1)], ;
aBit[Max(1,treserva->D08+1)], ;
aBit[Max(1,treserva->D09+1)], ;
aBit[Max(1,treserva->D10+1)], ;
aBit[Max(1,treserva->D11+1)], ;
aBit[Max(1,treserva->D12+1)], ;
aBit[Max(1,treserva->D13+1)], ;
aBit[Max(1,treserva->D14+1)], ;
aBit[Max(1,treserva->D15+1)], ;
aBit[Max(1,treserva->D16+1)], ;
aBit[Max(1,treserva->D17+1)], ;
aBit[Max(1,treserva->D18+1)], ;
aBit[Max(1,treserva->D19+1)], ;
aBit[Max(1,treserva->D20+1)], ;
aBit[Max(1,treserva->D21+1)], ;
aBit[Max(1,treserva->D22+1)], ;
aBit[Max(1,treserva->D23+1)], ;
aBit[Max(1,treserva->D24+1)], ;
aBit[Max(1,treserva->D25+1)], ;
aBit[Max(1,treserva->D26+1)], ;
aBit[Max(1,treserva->D27+1)], ;
aBit[Max(1,treserva->D28+1)], ;
aBit[Max(1,treserva->D29+1)], ;
aBit[Max(1,treserva->D30+1)], ;
aBit[Max(1,treserva->D31+1)] ;
FIELDSIZES 95, 15, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, ;
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, ;
20, 20, 20, 20, 20, 20 ;
SIZE 366,138 FONT oFont OF oDlg UPDATE;
ON DBLCLICK ( FINCAS( "Reserva", tReserva->CON_INM) , ;
C_RESERVA (oDlg, dFecha1, .f.), oDlg:REFRESH() )

oLbx:={|| IIF((oLbx:cAlias)->(OrdKeyNo())% 2==0,CELE,GRIS)}
oLbx:nClrForeHead := AZUL // gracias Raymundo
oLbx:={|nK| IIF ( nK != VK_RETURN, , (FINCAS( "Reserva", tReserva->CON_INM) , oDlg:End()))}
oLbx:=aDia

**


@ 165,198 BUTTONBMP oBtn[4] OF oDlg ;
SIZE 42,16 PIXEL ;
ACTION ( dFecha1 := CALENDAR(dFecha1), ;
aDia := C_RESERDIA( aDia, dFecha1 ), ;
C_RESERVA (oDlg, dFecha1, .f., .t. ), ;
oLbx:REFRESH(), oDlg:UPDATED() ) ;
MESSAGE " Ver calendario." ;
PROMPT SPACE(3) + "&Calenda" ;
BITMAP "calendar1" TEXTRIGHT


@ 165,258 BUTTONBMP oBtn[6] OF oDlg ;
SIZE 42,16 PIXEL ;
ACTION Fayuda( cChmFich, "reservas.htm#cuadro") ;
MESSAGE " Ayuda" ;
PROMPT SPACE(5) + "a&Yuda" ;
BITMAP "Ayuda" TEXTRIGHT

@ 165,318 BUTTONBMP oBtn[7] OF oDlg ;
SIZE 42,16 PIXEL ;
ACTION (oDlg:End()) ;
MESSAGE " Salir de esta ventana" ;
PROMPT SPACE(4) + "&Salir" ;
BITMAP "salir1" TEXTRIGHT


ACTIVATE DIALOG oDlg CENTERED ;
ON INIT (oDlg:lHelpIcon:=.f., ;
PonBarra(oDlg, " Cuadro de reservas.",.f.) )

CLOSE tReserva
CLOSE fincas
CLOSE reserva
RETURN nil

///////////////////////////////////////////////
/// calculo de la cabecera listbox
///////////////////////////////////////////////
STATIC FUNCTION C_RESERDIA( aDia, dFecha )
local n := 3 // , aDia := ARRAY (31)
aDia[1] := "Fincas"
aDia[2] := "D"

WHILE n <= 33
aDia[n] := Str( DAY (dFecha), 2, 0 )
n++
dFecha++
ENDD

RETURN aDia

///////////////////////////////////////////////
/// calculo del Cuadro de Reservas (planin)
///////////////////////////////////////////////
STATIC FUNCTION C_RESERVA( oDlg, dFecha1, lOpcion, lCalendar)
local N, dF, dFecha2 := (dFecha1 + 31), aDbf := {}, nRec1 := 0
Default lCalendar := .f.

if lOpcion // inicio o cambio de dia
//
// primero, vamos a preparar un fichero temporal
//
AADD(aDbf,{"CON_INM" ,"N", 6, 0}) // control inmueble
AADD(aDbf,{"FINCA" ,"C", 10, 0}) // direccion del inmueble
AADD(aDbf,{"DORM" ,"N", 1, 0}) // numero dormitorios
AADD(aDbf,{"D01" ,"N", 1, 0})
AADD(aDbf,{"D02" ,"N", 1, 0})
AADD(aDbf,{"D03" ,"N", 1, 0})
AADD(aDbf,{"D04" ,"N", 1, 0})
AADD(aDbf,{"D05" ,"N", 1, 0})
AADD(aDbf,{"D06" ,"N", 1, 0})
AADD(aDbf,{"D07" ,"N", 1, 0})
AADD(aDbf,{"D08" ,"N", 1, 0})
AADD(aDbf,{"D09" ,"N", 1, 0})
AADD(aDbf,{"D10" ,"N", 1, 0})
AADD(aDbf,{"D11" ,"N", 1, 0})
AADD(aDbf,{"D12" ,"N", 1, 0})
AADD(aDbf,{"D13" ,"N", 1, 0})
AADD(aDbf,{"D14" ,"N", 1, 0})
AADD(aDbf,{"D15" ,"N", 1, 0})
AADD(aDbf,{"D16" ,"N", 1, 0})
AADD(aDbf,{"D17" ,"N", 1, 0})
AADD(aDbf,{"D18" ,"N", 1, 0})
AADD(aDbf,{"D19" ,"N", 1, 0})
AADD(aDbf,{"D20" ,"N", 1, 0})
AADD(aDbf,{"D21" ,"N", 1, 0})
AADD(aDbf,{"D22" ,"N", 1, 0})
AADD(aDbf,{"D23" ,"N", 1, 0})
AADD(aDbf,{"D24" ,"N", 1, 0})
AADD(aDbf,{"D25" ,"N", 1, 0})
AADD(aDbf,{"D26" ,"N", 1, 0})
AADD(aDbf,{"D27" ,"N", 1, 0})
AADD(aDbf,{"D28" ,"N", 1, 0})
AADD(aDbf,{"D29" ,"N", 1, 0})
AADD(aDbf,{"D30" ,"N", 1, 0})
AADD(aDbf,{"D31" ,"N", 1, 0})
DBCREATE( cDirEsta + "TRESERVA.DBF", aDbf, "DBFCDX")

USE (cDirEsta + "TRESERVA") NEW
ENDI

IF lCalendar
SELE tReserva
DBGOTOP()
ENDI

SELE fincas // indice por nombres
while !eof()
nRec1++
// refresca msgrun
oDlg:cMsg := "Alta recibo "+ LTrim( Str( nRec1 ) )
oDlg:Refresh()
SysRefresh()

SELE tReserva
IF lOpcion // alta
ALTA_R(5)
tReserva->CON_INM := fincas->CON_INM
ELSE
BLOQ_R(5)
ENDI
tReserva->DORM := fincas->DORMITORIO
tReserva->FINCA := fincas->NOMBRE

// fincas ocupadas
IF fincas->INQUILIN > 0
dF := dFecha1
N := 4
WHILE dF <= dFecha2
IF dF < inqui->VTO // hasta el dia antes del vto
IF dF = inqui->FINI
tReserva->(FIELDPUT(n, 3))
ELSEIF dF > inqui->FINI
tReserva->(FIELDPUT(n, 1))
ENDI
ELSEIF dF = inqui->VTO
tReserva->(FIELDPUT(n, 2))
ENDI
n++
dF++
IF dF > inqui->VTO
EXIT
ENDI
ENDD
ENDI

// anota las reservas
SELE reserva
ORDSETFOCUS("CON_INM") // control inmuebles
DBSEEK(fincas->CON_INM)
IF FOUND()
WHILE reserva->CON_INM = fincas->CON_INM
IF reserva->FENTRA <= dFecha2 .and. reserva->FSALE >= dFecha1
dF := dFecha1
N := 4
WHILE dF <= dFecha2
IF dF >= reserva->FENTRA .and. dF < reserva->FSALE
IF dF = reserva->FENTRA
tReserva->(FIELDPUT(n, 3))
ELSE
tReserva->(FIELDPUT(n, 1))
ENDI
ELSEIF dF = reserva->FSALE
tReserva->(FIELDPUT(n, 2))
ENDI
n++
dF++
IF dF > reserva->FSALE
EXIT
ENDI
ENDD
ENDI
SELE reserva
DBSKIP()
ENDD
ENDI
SELE tReserva
UNLOCK
IF lOpcion .or. lCalendar
SELE fincas
DBSKIP()
ELSE
EXIT
ENDI
ENDD

RETURN nil
Un saludo



Manuel
Posts: 94
Joined: Tue Mar 28, 2006 04:09 PM
Actualizar Header Listbox
Posted: Tue Oct 10, 2006 02:26 PM

manuel especificamente que es lo que hace este modulo ?

me puedes mostrar una pantalla para darme una idea ?

saludos

Luis Fernando Rubio Rubio
Tequila, Jalisco, Mexico.

Luis Fernando Rubio Rubio
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
Actualizar Header Listbox
Posted: Tue Oct 10, 2006 09:27 PM

Luis Fernando,

Esta es la pantalla:

http://hyperupload.com/download/02061b7 ... 6.bmp.html

La funci贸n realiza lo siguiente:

1) Carga los Headers con aDia := C_RESERDIA( aDia, dFecha1 )

2) Crea una dbf temporal (tReserva) con los datos, C_RESERVA(oDlg, dFecha1)

3) Carga el Listbox

Hasta aqui todo correcto. Pero si a trav茅s del bot贸n CALENDA, cambio la fecha de inicio (dFecha1), y vuelve a realizar C_RESERDIA + C_RESERVA
y refresco el listbox, refresca los headers correctamente, el fichero lo actualiza con los nuevos valores pero NO REFRESCA LAS BOLITAS DEL LISTBOX.

Agradeceria cualquier ayuda.

Un saludo



Manuel
Posts: 592
Joined: Tue Mar 14, 2006 11:34 PM
Actualizar Header Listbox
Posted: Tue Oct 10, 2006 11:43 PM

Manuel

Quizas no sea la mas elegante, pero creo que tiene que funcionar :

Ya cheque algo que hice parecido, ( claro, con menos bitmaps ) :wink: y es esto :

Si tomas los datos de una DBF para mostrar en el browse, lo modificas y lo grabas a la DBF, solo bastaria con que "vaciaras" el contenido del browse y vuelvas a llenarlo.

Ya que las columnas ( bolitas de color ) no tiene relacion directa a campos, sino a una condicion relacionada a los mismos. Por eso no cambian de color se tendria que revalidar para hacerlo.

Espero me haya explicado 8)

Saludos

FWH 10.6 + xHarbour + Borland 582
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
Actualizar Header Listbox
Posted: Wed Oct 11, 2006 05:16 AM
Raymundo Islas M. wrote:Manuel

Ya cheque algo que hice parecido, ( claro, con menos bitmaps ) :-) y es esto :

Si tomas los datos de una DBF para mostrar en el browse, lo modificas y lo grabas a la DBF, solo bastaria con que "vaciaras" el contenido del browse y vuelvas a llenarlo.



Raymundo,

驴Podrias enviarme un c贸digo de ejemplo con lo que tienes hecho?

Quiero ver como "vacias y llenas" el browse.

Muchas gracias.
Un saludo



Manuel
Posts: 298
Joined: Fri Oct 07, 2005 05:20 AM
Actualizar Header Listbox
Posted: Wed Oct 11, 2006 02:34 PM
Manuel Valdenebro wrote:
Raymundo Islas M. wrote:Manuel

Ya cheque algo que hice parecido, ( claro, con menos bitmaps ) :-) y es esto :

Si tomas los datos de una DBF para mostrar en el browse, lo modificas y lo grabas a la DBF, solo bastaria con que "vaciaras" el contenido del browse y vuelvas a llenarlo.



Raymundo,

驴Podrias enviarme un c贸digo de ejemplo con lo que tienes hecho?

Quiero ver como "vacias y llenas" el browse.

Muchas gracias.


Manuel :

Si estas trabajando con arreglos en un browse, por que no usas el m茅todo SetArray() para cambiar el contenido de tu vista.
Vikthor
Posts: 592
Joined: Tue Mar 14, 2006 11:34 PM
Actualizar Header Listbox
Posted: Wed Oct 11, 2006 03:27 PM
Manuel

Realiza una busqueda en el foro con la palabra iBackUp y descargate el codigo, ahi esta lo que te comento.

Efectivamente, como dice Vikthor, trabajandolo sobre Arrays, se facilita mas el asunto. :-)


Saludos
FWH 10.6 + xHarbour + Borland 582
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
Actualizar Header Listbox
Posted: Thu Oct 12, 2006 10:34 AM

Muchas gracias Raymundo y Vikthor.- Todo se ha solucionado.

Un saludo



Manuel

Continue the discussion