by 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