Clipper/FiveWin - Mensaje para skaigualker

 
Vista:

Mensaje para skaigualker

Publicado por Marina (3 intervenciones) el 03/07/2001 23:20:48
Leí una respuesta tuya a una pregunta del foro donde decís lo siguiente:

Yo me hice un programa que lee la estructura de los campos de la base de datos activa, le pide al usuario por pantalla que campos dentro de los de la tabla quiere editar, luego manipule para que el usuario con F10 cambie el indice activo, y cuando el usuario pulsa teclas va buscando la palabra por el indice activo. Tambien dejo que el usuario cambie la opcion "set delete", asi puede ver y recuperar los registros que borro por error.

Yo estoy usando TBrowse para todas mis consultas y necesito hacer búsquedas que a medida que el usuario va presionando letras se vaya posicionando en la descripción encontrada (obviamente tengo activo el índice por descripción).

Por ejemplo, dadas las siguientes descripciones:

Compras
Gastos Luz
Gastos TE
Ventas bienes uso
Ventas comunes

Al ingresar las letras : Ven se posicionará en Ventas bienes uso
Al ingresar Ventas c: se posicionará en Ventas comunes

Podrías ayudarme?, desde ya te lo agradezco mucho

Marina
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Objeto tBrowse

Publicado por skaigualker (210 intervenciones) el 04/07/2001 10:53:26
Hola Marina:

Voy a intentar ayudarte, aunque aquí en el foro el tamaño máximo de los mensajes me lo dificulta un poco. Aun así escribiré mi respuesta en varios mensajes y así la puede consultar cualquier persona en el foro y añadir, corregir o comentar lo que estime oportuno.

Como decimos en España “Cada maestrillo tiene su librillo” y esta es mi ejemplo y seguro que hay otros muchos.

Lo primero y para simplificar un poco el asunto, yo partí del archivo de ejemplo “BROWSE.PRG” que venia con la versión 5.1 de Clipper y sobre el lo modifique a mi gusto. Si no disponéis de este archivo con gusto os lo envío, aunque supongo que sirve con cualquier otro ejemplo de objeto TBROWSE que tengáis.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Modificaciones Iniciales

Publicado por skaigualker (210 intervenciones) el 04/07/2001 11:04:51
Lo primero que yo modifique fue la pantalla del objeto browse. El motivo es que quiero dejar una línea superior donde mostrar el texto que el usuario me esta escribiendo y que es el texto a buscar, y en la línea inferior del browse quiero mostrar el índice activo por el cual esta buscando el usuario. Por tanto en la función StatLine modifique para que mostrara el status mas a la derecha y en esa línea a la izda yo muestro la variable que el usuario va tecleando.

Lo segundo que modifique fue para que el usuario pueda seleccionar los campo que desea. Para ello tengo una tabla que contiene un registro por cada tabla de mi programa y otra tabla por cada campo de cada tabla que usa mi programa. En una función con dbedit le enseño al usuario las tablas y el la selecciona. Inmediatamente creo el objeto tbrowse, muestro los campos de esa tabla con dbedit y según el usuario selecciona añado objetos columna a mi objeto browse, cuando el usuario termina tengo creado el objeto tbrowse con las columnas que el usuario desea. Entonces llamo a la función browse para que edite este objeto. Al principio de esa función creo una variable “BUSCALO” vacía donde voy a ir guardando las pulsaciones del usuario para ir buscando en la tabla.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Modificaciones Iniciales

Publicado por skaigualker (210 intervenciones) el 04/07/2001 11:06:13
Todo el resto de las modificaciones que yo hice están localizadas en la función Browse del archivo de ejemplo, mas en concreto en la parte donde comprueba que tecla ha pulsado el usuario. Este bloque de código comienza con las siguientes instrucciones:

Do case
Case (nKey == K_Down )

Bien aclarar que el programa llega aquí cuando el usuario ha pulsado una tecla cualquiera en el teclado, y en la variable nKey tenemos el código Inkey de dicha tecla. El programa evalúa que tecla ha pulsado el usuario y actúa en consecuencia.

Las teclas de desplazamiento las deje tal y como venían en el ejemplo. Solo cambie las siguientes partes del programa:

En el original si el usuario pulsa la tecla intro (K_RETURN) el programa entra en modo edición del campo actual del registro actual y a mi esto no me gustaba. Es muy fácil que el usuario pulse intro y modifique sin querer el contenido de un campo y estropee un registro. Yo lo cambie por Ctrl+Intro (K_CTRL_RET), que es una combinación de teclas que ningún usuario va a pulsar por error y así evito problemas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Modificaciones Iniciales

Publicado por nomedejaponermasmensajes (1 intervención) el 04/07/2001 11:30:30
Sobre el ejemplo añadí el control sobre las siguientes teclas:

K_F10: La tecla F10 la utilizo para que el usuario cambie de índice. Si mi tabla tiene 4 índices comienzo la edición con el primero activo y si el usuario pulsa F10 cambio al 2º, y si vuelve a pulsar cambio al 3º y así cíclicamente. Si estoy en el ultimo de los índices de la tabla y el usuario pulsa F10 paso al primero. El código que añadí y que hace esto es el siguiente:

QORD:=INDEXKEY(0) // Guardo el índice actual
DBSETORDER(IF(INDEXKEY(INDEXORD()+1)="",1,INDEXORD()+1))
// En la línea anterior cambio al siguiente índice, y si al cambiar veo que el índice no existe activo el 1º
BUSCALO="" // al cambiar de índice borro todo lo que el usuario haya tecleado
oB:GOTOP() // me posición en el primer registro por este índice
@23,56 SAY SPACE(20) // borro en la ultima línea el índice anterior
@23,56 SAY SUBSTR(INDEXKEY(0),1,20) // muestro en la ultima línea el índice que se acaba de activar para que el usuario lo vea

K_F8: Utilizo esta tecla para que el usuario cambie el modo SET DELETE así puede cambiar y ver los registros borrados o no verlos. El código es el siguiente:

case ( nKey == K_F8 )
BORRADOS:=IF(BORRADOS,.F.,.T.) //utilizo la variable borrados como
SET DELETE (BORRADOS)
FreshOrder(oB)

K_BS: Si el usuario pulsa la tecla BackSpace tengo que borrar la ultima pulsación de tecla de la variable BUSCALO. El código es el siguiente:

case ( nKey == K_BS)
BUSCALO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Modificaciones Iniciales

Publicado por ahorasipuedocontinuar (1 intervención) el 04/07/2001 11:32:09
(El mensaje anterior quedo cortado lo repito aqui)

K_BS: Si el usuario pulsa la tecla BackSpace tengo que borrar la ultima pulsación de tecla de la variable BUSCALO. El código es el siguiente:

case ( nKey == K_BS)
BUSCALO=SUBSTR(BUSCALO,1,LEN(BUSCALO)-1)
@ 1,12 SAY BUSCALO+SPACE(30-LEN(BUSCALO)) // Muestro en la primera línea la variable para que el usuario la vea
DBSEEK(BUSCALO) //BUSCO EN LA TABLA
FreshOrder(oB)

Lo ultimo a modificar es el bloque Otherwise que es donde va cuando el usuario pulsa cualquier tecla no contemplada hasta ahora. El código es el siguiente:

otherwise
if ( nKey >= 32 .and. nKey <= 255 )
// RECIBE PULSACION DE TECLA, LEE DE LA BASE DE DATOS
// PARA POSICIONARSE EN UN REGISTRO
BUSCALO=BUSCALO+CHR(nKey) // añado esta tecla a la variable para buscar
@ 1,12 SAY BUSCALO+SPACE(30-LEN(BUSCALO)) //La muestro al usuario
DBSEEK(BUSCALO)
FreshOrder(oB)

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Si tienes alguna duda...

Publicado por skaigualker (210 intervenciones) el 04/07/2001 11:38:41
Con dificultades, pero he conseguido introducir todos los mensajes.

Estas fueron mas o menos las modicaciones que yo introduje en el programa. Revisalas y si tienes alguna duda preguntame que con gusto te ayudare.

Saludos.-
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar