Lo que quiero es hacer algo similar al help de power builder, que cuando se va digitando algo van apareciendo una lista de opciones. Estoy trabajando con la version 7.0
1 respuesta
Respuesta de davidpy
1
1
davidpy, Licenciado en Analisis de Sistemas Informaticos
Tratare de ayudarte a resolver tu problema.. La solución que te doy es ... Al abrir tu ventana de búsqueda .. tienes que recuperar todos los registros que participan en la búsqueda... Supongamos que en la parte superior existe un SingleLineEdit que seria el objeto donde nuestros usuarios digitan los argumentos... y lo llamaremos "sle_buscar" En ese objeto crea un nuevo evento que lo llamaremos.. "ue_digitando" o el nombre que más te parezca.. y relacionaras ese evento con el Event Id "pbm_keyup" Lo que hará que este evento se ejecute cada vez que el usuario digite una tecla.. Dentro de este evento lo que haremos sera una búsqueda.. y utilizaremos este script... EVENTO UE_DIGITANDO ******************* string ls_busca, ls_columna integer li_fila,li_largo //tomamos el valor... ls_busca = trim(sle_buscar.text) li_largo=len(v_busca) //Siempre tomaremos la segunda columna como la de búsqueda.. o sea.. el campo donde buscaremos lo que se digita... li_columna = cdw_busqueda.Describe("#2.Name") //aqui agregaremos a un string todo el argumento de busqueda con los parametros... //Ejemplo: //Suponte que estamos buscando un nombre "DAVID".. y el usuario tipeo la letra "D" //ls_busca = Mid(nombre, 1, 1) = ls_busca //Si no sabes lo que hace la función MID puedas buscar en la Ayuda .. ahí explica muy claramente.. pero te adelanto que lo que hacemos es sacar un trozo de la palabra.. ls_busca = "Mid (" + v_columna + ",1," + string(li_largo)+ " ) = '" + ls_busca + "'" //quedaria como ls_busca = (D = D) y usamos el FIND li_fila = cdw_busqueda.Find (v_busca, 1, cdw_busqueda.rowcount()) IF li_fila > 0 THEN //si encontro algo con ese argumento.. lo lleva a esa fila... cdw_busqueda.setrow ( li_fila ) cdw_busqueda.ScrollToRow ( li_fila ) else //sino encontro nada con ese argumento nos lleva a la fila 1 cdw_busqueda.setrow (1) cdw_busqueda.ScrollToRow (1) END IF Es básicamente lo que necesitas.. podrías tener en cuenta otros controles.. como por ejemplo.. si la tecla que presiono son las flechas o el enter.. Espero te sirva de algo.. cualquier cosa no dudes en preguntar... Mucha suerte y saludos desde Paraguay.-