FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Busqueda increental?
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Busqueda increental?
Posted: Sat Sep 13, 2025 06:52 PM
Hola grupo del foro:

Sigo sin poder encontrar soluci贸n a mi inquietud

En un dialogo tengo un COMBO BOX con style DROPDOWN LIST lleno de nombres de personas, necesito hacer una BUSQUDA INCREMENTAL y
que el combo box siga el mismo comportamiento que el style SIMPLE, es decir

Que filtre los datos a medida que el usuario vaya tecleando el nombre a buscar, letra a letra, tal como lo hace el style SIMPLE,
el problema que tiene el style SIMPLE es que se presenta abierto (MUESTRO IMAGEN) y cuando pierde el foco sigue abierto tapando el resto de
controles que tiene el dialogo, esta situaci贸n no es as铆 con el style DROPDOWN LIST (MUESTRO SEGUNDA IMAGEN)

Imagen1


Imagen2


Saludos y gracias por el apoyo
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Busqueda increental?
Posted: Sun Sep 14, 2025 05:22 AM

Tendrias que hacer un oDlg:Refresh() cuando se cierra la lista

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Busqueda increental?
Posted: Sun Sep 14, 2025 05:18 PM
Maestro:

No doy pie con bola, este es mi c贸digo, nunca se cierra la lista
		REDEFINE LISTBOX aGets[04] VAR oAsi:NOM ID 105 OF oDlg UPDATE;
			PROMPTS acPrv;
                        VALID ValPrv(oDlg,aGets);
			MESSAGE "Elija el nombre del usuario"
STATIC FUNCTION ValPrv(oDlg,aGets)
   IF GetKeyState( VK_UP ) .AND. .NOT. GetKeyState( VK_RETURN ) .OR. ;
      GetAsyncKey( VK_SHIFT, VK_TAB ) .AND. .NOT. GETKEYSTATE( VK_RETURN )
		RETURN (.T.)
	ENDIF

	IF Empty(AllTrim(oAsi:NOM))
		MsgInfo("Debe elegir el nombre del usuario !",oApp:cAplicacion)
      RETURN(.F.)
	ENDIF

   FW_ReOpenRecordSet(oRsPrv,oApp:oCon,"SELECT " +;
                                          "* " +;
                                       "FROM " +;
                                          "Proveedores " +;
                                       "WHERE " +;
                                          "PRO_NOM = '" + oAsi:NOM + "'",adLockOptimistic,adOpenDynamic,0)
   IF oRsPrv == nil
		MsgStop("No pude abrir la tabla PROVEEDORES !",oApp:cAplicacion)
		FW_ShowAdoError(oApp:oCon)
      RETURN(.F.)
   ENDIF

	IF oRsPrv:BOF() .AND. oRsPrv:EOF()
      oAsi:PRV := 0
      oAsi:TEL := Space(25)   // Telefono
      oAsi:EMA := Space(50)   // e-mail
		oDlg:Update()
		MsgInfo("Nombre de usuario no registrado !",oApp:cAplicacion)
		RETURN(.F.)
	ELSE
		oRsPrv:MoveFirst()
      oAsi:PRV := oRsPrv:Fields("PRO_NUM"):Value      // Usuario
      oAsi:TEL := oRsPrv:Fields("PRO_TEL"):Value      // Telefono
      oAsi:EMA := oRsPrv:Fields("PRO_EMA"):Value      // e-mail
      oDlg:Refresh()
		aGets[05]:SetFocus()
	ENDIF
	IF oDlg <> NIL
		oDlg:Update()
	ENDIF
RETURN(.T.)
Gracias por el apoyo, saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Busqueda increental?
Posted: Sun Sep 14, 2025 05:30 PM

Si haces VALID .T. se cierra bien ?

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Busqueda increental?
Posted: Mon Sep 15, 2025 01:16 AM

Maestro Antonio:

No, no se cierra

Recordemos que es un LISTBOX

La b煤squeda incremental funciona de 100, pero no se cierra como lo hace un COMBOBOX. pero en el combo box

no me funciona la b煤squeda incremental.

De hecho en la segunda imagen del post anterior el foco ya esta en el get PUESTO y no se ha cerrado el LISTBOX.

Saludos

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Busqueda increental?
Posted: Mon Sep 15, 2025 04:21 AM

Copia aqui el RC que est谩s usando para el di谩logo, gracias

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Busqueda increental?
Posted: Mon Sep 15, 2025 01:18 PM

Estimado Armando

Y porque mejor no usas un xBrowse

Saludos,



Adhemar C.
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Busqueda increental?
Posted: Mon Sep 15, 2025 04:32 PM
Maestro Antonio:

Este es el RC
// RESOURCE SCRIPT generated by "Pelles C for Windows, version 7.00".

#include <windows.h>
#include <commctrl.h>
#include <richedit.h>

LANGUAGE LANG_SPANISH,SUBLANG_SPANISH_MEXICAN

UPDASI DIALOG DISCARDABLE 5, 15, 496, 253
STYLE WS_POPUP|WS_THICKFRAME|WS_CAPTION|WS_SYSMENU|WS_VISIBLE
CAPTION "Detalle de la asignaci贸n"
FONT 8, "MS Sans Serif"
{
  CONTROL "", 105, "ListBox", LBS_SORT|LBS_NOTIFY|LBS_WANTKEYBOARDINPUT|WS_BORDER|WS_TABSTOP, 89, 28, 199, 189, WS_EX_TRANSPARENT
  CONTROL ":Asignaci贸n", 102, "Button", BS_AUTORADIOBUTTON, 160, 16, 50, 10
  CONTROL ":Prestamo", 103, "Button", BS_AUTORADIOBUTTON, 215, 16, 50, 10
  CONTROL "", 104, "SysDateTimePick32", WS_TABSTOP, 365, 14, 65, 12
  CONTROL "", 106, "Edit", ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP, 331, 29, 127, 12
  CONTROL "", 107, "Edit", ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP, 90, 43, 199, 12
  CONTROL "", 108, "Edit", ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP, 331, 43, 85, 12
  CONTROL "", 109, "Edit", ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP, 90, 57, 130, 12
  CONTROL "", 110, "Edit", ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP, 265, 57, 130, 12
  CONTROL "", 111, "ComboBox", WS_BORDER|CBS_DROPDOWNLIST|WS_VSCROLL|WS_TABSTOP, 89, 79, 97, 251  <========= AQU脥
  CONTROL "", 112, "ComboBox", WS_BORDER|CBS_DROPDOWNLIST|WS_VSCROLL|WS_TABSTOP, 221, 80, 206, 251
  CONTROL "", 113, "ComboBox", WS_BORDER|CBS_DROPDOWNLIST|WS_VSCROLL|WS_TABSTOP, 90, 94, 206, 251
  CONTROL "", 114, "Edit", ES_MULTILINE|ES_WANTRETURN|WS_BORDER|WS_TABSTOP, 336, 94, 91, 12
  CONTROL "", 115, "Edit", ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP, 90, 109, 63, 12
  CONTROL "", 116, "Edit", ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP, 183, 109, 63, 12
  CONTROL "", 117, "Edit", ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP, 283, 110, 70, 12
  CONTROL "", 118, "Edit", ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP, 90, 123, 92, 12
  CONTROL "", 119, "Edit", ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP, 221, 123, 76, 12
  CONTROL "", 120, "Edit", ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP, 330, 123, 76, 12
  CONTROL "", 121, "Edit", ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP, 90, 137, 76, 12
  CONTROL "", 122, "Edit", ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP, 221, 138, 76, 12
  CONTROL "", 123, "Edit", ES_RIGHT|ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP, 328, 138, 76, 12
  CONTROL "", 124, "Edit", ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP, 90, 152, 206, 12
  CONTROL "", 125, "Edit", ES_MULTILINE|WS_VSCROLL|WS_BORDER|WS_TABSTOP, 90, 167, 368, 30
  CONTROL "", 901, "TBtnBmp", WS_TABSTOP, 83, 220, 90, 18
  CONTROL "", 902, "TBtnBmp", WS_TABSTOP, 332, 220, 80, 18
  CONTROL "", 101, "SysDateTimePick32", WS_TABSTOP, 90, 14, 65, 12
  CONTROL "", -1, "Static", SS_BITMAP|SS_CENTERIMAGE|WS_BORDER, 0, 209, 496, 3
  CONTROL "Usuario:", 13, "Static", SS_RIGHT|WS_GROUP, 56, 29, 30, 8
  CONTROL "Equipo:", 22, "Static", SS_RIGHT|WS_GROUP, 301, 96, 31, 8
  CONTROL "Modelo:", 27, "Static", SS_RIGHT|WS_GROUP, 189, 124, 28, 8
  CONTROL "Resguardo:", 23, "Static", SS_RIGHT|WS_GROUP, 47, 110, 39, 8
  CONTROL "Serie:", 19, "Static", SS_RIGHT|WS_GROUP, 58, 82, 28, 8
  CONTROL "Adscripci贸n:", 17, "Static", SS_RIGHT|WS_GROUP, 45, 59, 41, 8
  CONTROL "Ubicaci贸n:", 18, "Static", SS_RIGHT|WS_GROUP, 220, 59, 41, 8
  CONTROL "Color:", 28, "Static", SS_RIGHT|WS_GROUP, 304, 124, 22, 8
  CONTROL "Fecha de entrega:", 11, "Static", SS_RIGHT|WS_GROUP, 26, 16, 60, 8
  CONTROL "Puesto:", 14, "Static", SS_RIGHT|WS_GROUP, 300, 31, 27, 8
  CONTROL "Solicita:", 20, "Static", SS_RIGHT|WS_GROUP, 191, 82, 27, 8
  CONTROL "Cocrreo:", 15, "Static", SS_RIGHT|WS_GROUP, 45, 45, 41, 8
  CONTROL "Celular:", 16, "Static", SS_RIGHT|WS_GROUP, 300, 45, 27, 8
  CONTROL "Autoriza:", 21, "Static", SS_RIGHT|WS_GROUP, 54, 96, 32, 8
  CONTROL "Pin:", 24, "Static", SS_RIGHT|WS_GROUP, 160, 110, 19, 8
  CONTROL "I.P.:", 25, "Static", SS_RIGHT|WS_GROUP, 260, 111, 19, 8
  CONTROL "Marca:", 26, "Static", SS_RIGHT|WS_GROUP, 56, 124, 30, 8
  CONTROL "Condici贸n:", 29, "Static", SS_RIGHT|WS_GROUP, 46, 139, 40, 8
  CONTROL "Service TAG:", 30, "Static", SS_RIGHT|WS_GROUP, 170, 140, 47, 8
  CONTROL "Costo:", 31, "Static", SS_RIGHT|WS_GROUP, 302, 140, 22, 8
  CONTROL "Cargador:", 32, "Static", SS_RIGHT|WS_GROUP, 46, 154, 40, 8
  CONTROL "Comentarios:", 33, "Static", SS_RIGHT|WS_GROUP, 43, 169, 43, 8
  CONTROL "Fecha de devoluci贸n:", 12, "Static", SS_RIGHT|WS_GROUP, 289, 16, 72, 8
}
Saludos y muchas gracias por el apoyo
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Busqueda increental?
Posted: Mon Sep 15, 2025 04:33 PM

Amigo Adhemar:

Tienes algpun peque帽o ejemplo que puedas compartir?

Saludos

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Busqueda increental?
Posted: Mon Sep 15, 2025 04:53 PM
Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Busqueda increental?
Posted: Mon Sep 15, 2025 05:57 PM

Estimado Armando,

Usas un control ListBox pero este control no se va a cerrar. Un ListBox no se "cierra":

CONTROL "", 105, "ListBox", LBS_SORT|LBS_NOTIFY|LBS_WANTKEYBOARDINPUT|WS_BORDER|WS_TABSTOP, 89, 28, 199, 189, WS_EX_TRANSPARENT

En todo caso podrias cambiarle su altura al perder el foco:

oListBox:bLostFocus = { || oListBox:SetSize( 80, 20 ) }

oListBox:bGotFocus = { || oListBox:SetSize( 80, 200 ) }

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Busqueda increental?
Posted: Mon Sep 15, 2025 08:39 PM
Aqu铆 un ejemplo usando xBrowse
 REDEFINE GET oGet VAR cNITCI ID 105 OF oDlgP BITMAP "BUSCAR" PICTURE "@!" ACTION (BuscaCliente(oGet,oDlgP))
/* ..... */ 

FUNCTION BuscaCliente(oGet,oDlgP)
   Local oDlgM, oBrw3, lOk:= .F.,nTopD:=oGet:nTop(),nLeftD:=oGet:nLeft(),aRect:= GetWndRect( oDlgP:hWnd )
   Private oClie
   
   If lSql
    oClie:=oCn:RowSet( "SELECT * FROM CLIENTES ORDER BY CLIENTE")
   Else
    USE CLIENTES ALIAS NITS NEW SHARED
    INDEX ON NITCI   TAG NITCI FOR !Deleted() TEMPORARY
    INDEX ON CLIENTE TAG CLIENTE FOR !Deleted() TEMPORARY
    DATABASE oClie
   EndIf
  
    DEFINE DIALOG oDlgM FROM 0,0 TO 221,265 PIXEL STYLE nOr( WS_VISIBLE, WS_POPUP ) 
 
    @0,0 xBrowse oBrw3 Of oDlgM AUTOSORT DATASOURCE oClie
    oBrw3:nMarqueeStyle:=5
    oBrw3:lHScroll:= .f.
    oBrw3:nRowDividerStyle:= 0
    oBrw3:lRecordSelector := .f.
    oBrw3:lIncrFilter:= .t.
    oBrw3:lSeekWild  := .t.
    oBrw3:bLDblClick:={ || ( SysWait(.2),__KeyBoard(Chr(13)) ) }
	  	  
   oCol:=oBrw3:AddCol()
    oCol:bStrData := { || oClie:CLIENTE }
    oCol:cHeader  := "NOMBRE"
    oCol:nWidth:=172
    oCol:cSortOrder:="CLIENTE"
    oCol:bLClickHeader:= {|| ( oBrw3:GoTop(),oBrw3:Refresh() ) }
   
    oCol:=oBrw3:AddCol()
    oCol:bStrData := { || oClie:NITCI }
    oCol:cHeader  := "NIT/CI "
    oCol:cSortOrder:="NIT"
    oCol:nHeadStrAlign:=AL_CENTER
    oCol:nWidth:=66
    oCol:nDataStrAlign := AL_RIGHT
    oCol:cSortOrder:="NITCI"
    oCol:bClrStd:={|| {CLR_WHITE,CLR_GRAY} }
    oCol:bLClickHeader:= {|| ( oBrw3:GoTop(),oBrw3:Refresh() ) }

    oBrw3:CreateFromCode()
	
    @2,30 SAY oBrw3:oSeek PROMPT oBrw3:cSeek OF oDlgM Size 40,7 UPDATE PICTURE "@!"
    oBrw3:bKeyDown := {|nKey| iif( nKey == VK_ESCAPE, (oDlgM:End()),Nil ), iif( nKey == VK_RETURN,(lOk:=.T.,oDlgM:End()), )}
	 
    ACTIVATE DIALOG oDlgM ON INIT (oDlgM:Move(aRect[1]+nTopD+44,aRect[2]+nLeftD+3),oBrw3:Move(0,0,oDlgM:nWidth(),oDlgM:nHeight()-3));
                 VALID ( iif( lOk, (oGet:VarPUT(oClie:NITCI),oGet:Refresh()), ), .T. )
  oClie:End()
Return Nil
Saludos,



Adhemar C.
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Busqueda increental?
Posted: Tue Sep 16, 2025 01:23 AM

Maestro Antonio:

Efectivamente, uso LISTBOX y no se cierra, intente con COMBOBOX que s铆 se cierra pero no me funciona la busqueda incremental.

Me parece buena idea reducir/agrandar el tama帽o del LISTBOX, lo voy a intentar, aunque me parece buena idea que

el combobox tuviera la b煤squeda incremental, ser谩 posible?

Amigos Karinha y Adhemar:

As铆 lo tenia pero el cliente quiere la b煤squeda incremental desde el control.

Saludos

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Busqueda increental?
Posted: Tue Sep 16, 2025 01:50 AM

Maestro antonio:

Reducir/Agrandar el listbox funciona muy bien, excepto que si el usuario elige un nombre que esta en la l铆nea 10,

al reducir el listbox se queda con el primer nombre aunque la variable s铆 conserva el nombre elegido.

Espero haberme dado a entender

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Busqueda increental?
Posted: Tue Sep 16, 2025 02:43 AM
podrias hacer oListbox:Skip( nRecords ) para posicionarte en el elemento seleccionado :?:
regards, saludos

Antonio Linares
www.fivetechsoft.com