Mas de Novato.

Mas de Novato.

Postby AndresZaragoza » Tue Dec 19, 2006 9:55 am

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:
AndresZaragoza
 
Posts: 28
Joined: Wed Dec 13, 2006 6:07 pm

Postby Carles » Tue Dec 19, 2006 11:02 am

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
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
Skype -> https://join.skype.com/cnzQg3Kr1dnk
User avatar
Carles
 
Posts: 1137
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona

Postby Antonio Linares » Tue Dec 19, 2006 11:15 am

Andrés,

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

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42111
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Fuente y preguntas

Postby AndresZaragoza » Tue Dec 19, 2006 11:40 am

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
AndresZaragoza
 
Posts: 28
Joined: Wed Dec 13, 2006 6:07 pm

Postby Antonio Linares » Tue Dec 19, 2006 11:48 am

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()
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42111
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Antonio Linares » Tue Dec 19, 2006 11:50 am

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
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42111
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Antonio Linares » Tue Dec 19, 2006 11:53 am

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.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42111
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Carles » Tue Dec 19, 2006 12:17 pm

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.
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
Skype -> https://join.skype.com/cnzQg3Kr1dnk
User avatar
Carles
 
Posts: 1137
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona

fuente

Postby AndresZaragoza » Tue Dec 19, 2006 12:38 pm

Aquí va la ubicación:
http://www.uploading.com/files/GOF9MIZV/Clientes.zip

Antonio:
Gracias por las respuestas.
AndresZaragoza
 
Posts: 28
Joined: Wed Dec 13, 2006 6:07 pm

Grid

Postby AndresZaragoza » Tue Dec 19, 2006 12:46 pm

Carles

Muy agradecido. lo pruebo.
AndresZaragoza
 
Posts: 28
Joined: Wed Dec 13, 2006 6:07 pm


Return to FiveWin para Pocket PC

Who is online

Users browsing this forum: No registered users and 11 guests