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.
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???
******************************************** * 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 = ""
*********************************************** * 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
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
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..."