Page 1 of 1

Mas de Novato.

PostPosted: Tue Dec 19, 2006 9:55 am
by AndresZaragoza
Hola a todos. Siguiendo con mi aprendizaje me surgen las siguientes dudas que os comento para ver si alguna alama caritativa me pone el el camino.

Estoy con un mantenimiento de clientes sobre un fold. cada vez que me muevo por un grid de la primera pestaña, podría pulsar la segunda pestaña y editar el registro. Bien. Como puedo refrescar los campos de las pestañas, ya que siempre tengo el primer registro lo he probado con ON CHANGE de LISTBOX pero nada.

Me puede alguien facilitar un ejemplo de como funciona tbtnbmp, creo haber leido que se usa para habilitar y deshabilitar botones.

Muchas gracias de antemano :oops:

PostPosted: Tue Dec 19, 2006 11:02 am
by Carles
Hola,

1.- Si te refieres a refrescar los datos del mismo registro una vez editado el campo haz objeto:DrawSelect()

2.- .\samples\tutor12.prg

Debes de probasr todos los ejemplos de samples. Ahi lo tienes practicamente todo

PostPosted: Tue Dec 19, 2006 11:15 am
by Antonio Linares
Andrés,

Pon aqui el código del ejemplo que estes haciendo y te ayudamos a que funcione, gracias.

Fuente y preguntas

PostPosted: Tue Dec 19, 2006 11:40 am
by AndresZaragoza
Antonio:
Necesitos estas respuestas si eres tan amable.

Preguntillas:
1 Existen 2 botones (grabar y cancelar) que quiero que se vean pero desactivados, ya que cuando se cambie algun campo se activarán entonces. He leido que se usa con tbtnbmp pero no se como trabajarlo, no se si hay ejemplos.

2 Cada vez que arranco la aplicación Indexo, Con el fin de no reindexar siempre ¿como abro un fichero de indices (si existe) y uso los indices. Lo he intentado pero cuando cambio de indice me dice que no existe.

3 La edición que comento, segun me comenta Carles con el ejemplo, claro! es desde un botón pero yo quiero que sea automático, esto es conforme me muevo en el grid, puedo ir a la pestaña donde está la ficha y editar.

4 Al arrancar la aplicación ¿como mando el foco al Grid?.
5 Se puede deshabilitar/habilitar pestañas de un fold???


Gracias.



#include "FWCE.ch"

FUNCTION Main()
local cAlias, nRecno

nRecno = 0
ctexto = space(20)
cSearch = ""
lNuevo = .F.
lEditando = .F.

* Control de programa
IF IsExeRunning( cFileName( HB_ArgV( 0 ) ) )
MsgInfo( "No puedes abrir dos veces el programa", SISTEMA)
Return Nil
ENDIF


DEFINE WINDOW oWnd TITLE "Clientes"

*Configuracion Inicial del sistema
Configura()
AbrirFicheros()
PonBotones()

***************************************************
* GRID
***************************************************
@ 2.2,0 FOLDER oFld PROMPTS "Indice", "Ficha", "Más datos", "Económicos" SIZE 240, 200
@ 0.5,0 LISTBOX oBrw FIELDS cprvcod,cprvome,cprvnom COLSIZES 50,200,200 ;
OF oFld:aDialogs[1] HEADERS "Código","Nombre Comercial","Nombre Fiscal" SIZE 235,200 ;
ON CHANGE DibujaFichas()
*****************************
* búsqueda incremental sobre el grid
oBrw:bKeyChar = { | nKey, nFlags | BusquedaIncremental(nKey, @cSearch), oBrw:Refresh()}
*****************************

ACTIVATE WINDOW oWnd

DbCloseAll()
RETURN nil


*****************************************
* Botonaje de edición
*****************************************
FUNCTION PonBotones
@ 0, 0 BTNBMP FILE CurDir() + "\bmp\nuevo.bmp" SIZE 25, 25
@ 0, 25 BTNBMP FILE CurDir() + "\bmp\buscar.bmp" SIZE 25, 25 ACTION BuscaCliente()
@ 0, 50 BTNBMP FILE CurDir() + "\bmp\delete.bmp" SIZE 25, 25
@ 0, 100 BTNBMP FILE CurDir() + "\bmp\ok.bmp" SIZE 25, 25
@ 0, 125 BTNBMP FILE CurDir() + "\bmp\cancelar.bmp" SIZE 25, 25
@ 0, 220 BTNBMP FILE CurDir() + "\bmp\close.bmp" SIZE 25, 25;
ACTION IF( MsgYesNo( '¿ Desea salir ?', 'Aviso' ), oWnd:End(), )
RETURN NIL


*****************************************
* Apertura de ficheros
*****************************************
FUNCTION AbrirFicheros
Request DbfCdx
Request DbfFpt
RddSetDefault ('DbfCdx')
Request Hb_Lang_PLWIN
Request Hb_CodePage_PLWIN

**********
* Clientes
**********
IF .NOT. USED("Efth010")
USE (CurDir()+"\Efth010") NEW
ELSE
SELECT Efth010
ENDIF

INDEX ON CprvCod TO CODIGO ADDI
INDEX ON CprvNom TO FISCAL ADDI
INDEX ON CprvOme TO COMERCIAL ADDI

Efth010->( OrdSetFocus( "CODIGO" ) )
Efth010->( DbGoTop() )


RETURN nil

********************************************
* Sets
********************************************
FUNCTION PonSets()
HB_LANGSELECT( "ESWIN" )
SET DELETED ON
SET DATE TO ITALIAN
SET SOFTSEEK ON
SET CENTURY ON
SET EPOCH TO 2000
SET CONFIR ON
RETU nil


********************************************
* Configuración inicial del sistema
********************************************
FUNCTION Configura()
PonSets()

HB_LANGSELECT("ESWIN")
*Hb_LangSelect ('PL')
*Hb_SetCodePage ('PLWIN')
REQUEST HB_LANG_ES // Para establecer español para Mensajes, fechas, etc..
REQUEST HB_CODEPAGE_ESWIN // Para establecer código de página a Español (Ordenación, etc..)
HB_LangSelect('ES')
HB_SetCodePage("ESWIN") // Para ordenación (arrays, cadenas, etc..)
RETURN nil


***********************************************
* Busca un cliente y se posiciona en el browse
***********************************************
FUNCTION BuscaCliente
LOCAL cValue
cValue = 'Nombre Comercial'

//RGB(155,255,200)
DEFINE DIALOG oBuscar TITLE 'Busqueda de cliente' SIZE 220,100 OF oWnd COLOR "N/G"
@ 0, 0 GET cTexto SIZE 98, 12
@ 0, 97 BTNBMP FILE CurDir() + "\bmp\ok.bmp" SIZE 14, 12 ;
ACTION(iif(.NOT. EMPTY(ctexto),BuscaCl(cValue, cTexto),msginfo("El campo no puede estar vacio","Aviso")))

@ 1, 1 SAY "Tipo de búsqueda" SIZE 100,15 of oBuscar COLOR "W/G"
@ 2.3, 1 COMBOBOX cValue ITEMS { "Nombre Comercial", "Nombre Fiscal", "Código Cliente" } SIZE 100, 60 ;
ON CHANGE MsgBeep() of oBuscar

ACTIVATE DIALOG oBuscar CENTERED
RETURN nil

***********************************************
* Busca por campo
***********************************************
FUNCTION BuscaCl(lpIndice, lpTexto)
SELECT Efth010
DO CASE
CASE lpIndice = "Nombre Comercial"
Efth010->(OrdSetFocus("COMERCIAL"))
CASE lpIndice = "Nombre Fiscal"
Efth010->(OrdSetFocus("FISCAL"))
CASE lpIndice = "Código Cliente"
Efth010->(OrdSetFocus("CODIGO"))
ENDCASE

* Cada vez que busco elimino la cadena de búsqueda incremental
cSearch = ""

Efth010->(DbSeek(lpTexto, .t.))
oBrw:refresh()
RETURN nil


***********************************************
* Aviso general
* Ej ->Avisa('Hola caracola', oWnd)
***********************************************
FUNCTION Avisa(lpTexto, lpVentana)
DEFINE DIALOG oAviso TITLE 'Aviso' SIZE 220,22 OF lpVentana
@ 0, 0 SAY lpTexto SIZE 98, 12
ACTIVATE DIALOG oAviso CENTERED
RETURN nil

***********************************************
* Diseño de las pestañas de datos
***********************************************
FUNCTION DibujaFichas
LOCAL ogetCodigo, ogetNC, ogetNF, lcCodigo, lcNombreC, lcNombreF

lcCodigo = ("Efth010")->cprvcod
lcNombreC = ("Efth010")->cprvOme
lcNombreF = ("Efth010")->cprvcod

@ 1, 1 SAY "Código:" OF oFld:aDialogs[2] SIZE 45, 15
@ 1, 8 GET ogetCodigo VAR lcCodigo OF oFld:aDialogs[2] SIZE 70, 18
ogetCodigo:bGotFocus := {|| ogetCodigo:SetColor(RGB( 0, 0, 0), RGB(155,255,200)),ogetCodigo:Refresh}

@ 2.5, 1 SAY "Nombre C:" OF oFld:aDialogs[2] SIZE 45, 15
@ 2.7, 8 GET ogetNC VAR lcNombreC OF oFld:aDialogs[2] SIZE 160, 18
ogetNC:bGotFocus := {|| ogetNC:SetColor(RGB( 0, 0, 0), RGB(155,255,200)),ogetNC:Refresh}

@ 4, 1 SAY "Nombre F:" OF oFld:aDialogs[2] SIZE 45, 15
@ 4.7, 8 GET ogetNF VAR lcNombreF OF oFld:aDialogs[2] SIZE 160, 18
ogetNF:bGotFocus := {|| ogetNF:SetColor(RGB( 0, 0, 0), RGB(155,255,200)),ogetNF:Refresh}

// @ 6, 2 BUTTON "Actualiza" OF oFld:aDialogs[2] SIZE 45, 15 ACTION Dale()

RETURN nil


//FUNCTION dale
//Efth010->cprvcod := "9999999"
//obrw:refresh()
//RETURN nil


FUNCTION BusquedaIncremental( nKey, cSearch )
IF nKey = 8
cSearch = SubStr( cSearch, 1, Len( cSearch ) - 1 )
ELSE
cSearch += Upper(Chr(nKey ) )
ENDIF
Efth010->(DbSeek(cSearch,.t.) )
return nil




//function salir
// DbCloseAll()
// oWnd:End()
// MsgYesNo( "¿Salir de clientes?" )
//return nil

//function mensaje
// DEFINE DIALOG oDlg TITLE 'Aviso' SIZE 200,200
// ACTIVATE DIALOG oDlg CENTERED
// @ 2,2 SAY 'Hola'
//return nil

PostPosted: Tue Dec 19, 2006 11:48 am
by Antonio Linares
Andrés,

Cualquier control se puede desactivar haciendo <oControl>:Disable() y <oControl>:Enable() para activarlo.

Por ejemplo en tu código tendrías que hacer:

@ 6, 2 BUTTON oBtn1 PROMPT "Actualiza" ...

oBtn1:Disable()

y cuando quieras activarlo:

oBtn1:Enable()

PostPosted: Tue Dec 19, 2006 11:50 am
by Antonio Linares
Andrés,

Por favor prepara un ZIP con tu ejemplo, incluyendo las DBFs, índices, y los bitmaps usados, y súbelo a www.uploading.com y pon aqui la dirección que te dé de descarga, gracias

PostPosted: Tue Dec 19, 2006 11:53 am
by Antonio Linares
Andrés,

> 4 Al arrancar la aplicación ¿como mando el foco al Grid?.

oBrowse:SetFocus()

> 5 Se puede deshabilitar/habilitar pestañas de un fold???

oFolder:aEnable = { .T., .F. }

Esto deshabilitaría la segunda pestaña.

PostPosted: Tue Dec 19, 2006 12:17 pm
by Carles
Andres,

No te habia entendido bien el tema de la edicion (ahora creo q si).

La manera correcta de trabajar es:

Crear ventana
Crear folder
Crear Dialogos de folder

A partir de aqui la idea es que si tengo un browse en una pestaña, quiero q se actualicen los datos de otra pestaña. La solucion esta en REFRESCAR los controles de la 2 pestaña.

Si tu tienes definidos los controles de la 2 pestaña p.e.

@1,1 GET oGet1 VAR cVar1 OF oFld:aDialogs[2]

En el browse bastaria hacer:

ON CHANGE ( cVar1 := nuevo valor, oGet1:refresh() )

Lo que haces tu es crear cada vez controles nuevos.

Espero q te sirva.

Siau.

fuente

PostPosted: Tue Dec 19, 2006 12:38 pm
by AndresZaragoza
Aquí va la ubicación:
http://www.uploading.com/files/GOF9MIZV/Clientes.zip

Antonio:
Gracias por las respuestas.

Grid

PostPosted: Tue Dec 19, 2006 12:46 pm
by AndresZaragoza
Carles

Muy agradecido. lo pruebo.