Page 1 of 1

SetFocus en un oLbx

Posted: Wed Feb 15, 2006 11:45 pm
by servicomver
Hola a todos:
Como puedo saber si un Objeto Olbx tiene o no en un momento dado el foco
es decir:
tengo un ListBox con ciertos articulos cuando el usuario quiere eliminar uno de la lista debe de accionar el boton "borrar" necesito verificar si realmente selecciono un registro del listbox y esto se observa cuando la linea del registro esta "azul" (cuando pierde el foco el listbox se pone la linea gris) , el caso es que cuando oprime el boton de borrado como debo hacer para saber si el listbox esta seleccionado o tiene el foco ???

espero haberme explicado bien, de antemano gracias por su ayuda
salu2
veracruz, mexico

Posted: Thu Feb 16, 2006 7:08 am
by DanielPuente
servicomver:

La variable para saber si un control tiene el foco es oControl:lFocused pero no te va a servir de mucho preguntar por ejemplo if(oBrw:lFocused) en el action de un boton porque en ese momento el browse ya no tiene el foco, lo tiene el boton.

Por lo general es suficiente con hacer:

Code: Select all


 	oBcli:bKeydown := {|nK| if( nK==VK_INSERT,(Fedit(.t.,vFecha),oBCli:Setfocus(),oBCli:Refresh(),oBCli:Gotop()),;
                        if(nK==VK_DELETE,(E_Detalle(oBcli), oBcli:Refresh()),;
                        if(nK==VK_F12,IF(MSGYESNO("Confirma los datos de la Factura Fiscal ?","Confirme"),if(Imprime_Comprobante(cMovil,cNomMovil,cAtiende,cNomAtiende,OT:cCodCondVta),;
													Limpia(@cAtiende,@cNomAtiende,@cMovil,@cNomMovil,oBcli,oDlg,oNrocomprob),),),))) }


  REDEFINE SBUTTON oEl ID 602 ;
  		         RESOURCE "B_BOR","B_BOR";//, "B_REG2","B_REG2","B_REG2" ;
  		         OF oDlg ;
  		  	   	 BORDER ;
 			 				 PROMPT "&Borrar (Delete)" ;
							 COLORS { |oBtn| If( oBtn:lMouseOver.or.oBtn:lFocused,RGB(215,0,0),CLR_BLACK ) },;
							 RGB(196, 190, 185);
  		         TOOLTIP OEMTOANSI("Borra el registro");
  		         MESSAGE OEMTOANSI("Borrar Registro");
							 ACTION (E_Detalle(oBcli), oBcli:Refresh())

Static Function E_Detalle()

If MsgNoYes(oemtoansi("Elimina el Art¡culo ")+ CRLF +LLOSTKTR->MDES+" ?","Atención")
		aTot[1]-=1
		aTot[2]-=LLOSTKTR->MCAN
		aTot[3]-=LLOSTKTR->MCAN*LLOSTKTR->MPREV
		LLOSTKTR->(DBDELETE())
    LLOSTKTR->(dbgotop())
Endif

return nil

O sea pedir confirmacion porque en el browse siempre estas parado en algun registro de la dbf, por mas que cambie el color de la barra y listo.

Saludos,

Posted: Thu Feb 16, 2006 5:44 pm
by R.F.
No matemos pulgas a cañonazos:

oBrwse:BGotFocus := {|| oBoton:Enable()}
oBrwse:BLostFocus :={|| oBoton:Disable()}

Posted: Thu Feb 16, 2006 11:42 pm
by servicomver
Hola Daniel
probe con la variable if(oLbx:lFocused) pero sucede lo siguiente

tengo una tecla de acceso rapido de esta forma
SetKey( VK_F3, {|| Borra(oLbx,oSay1,oSay2)})

y en un boton le asigno a la ACTION la misma funcion
ACTION Borra(oLbx,oSay1,oSay2)

el caso es q en la funcion inicio asi para probarlo:

Function Borra(oLbx,oSay1,oSay2)
if(oLbx:lFocused)
msgalert("si borra") //esta el foco en olbx es azul la linea
Else
msgalert("no borra") //no tiene el foco el registro esta marcado en gris
Endif

Return Nil


Cuando lo hago presionando F3 lo hace bien, es decir marca .T. o .F. segun el caso,

pero cuando lo hago Pulsando el Boton (es la misma funcion) marca en _ .F.

Como puedo solucionarlo ???

salu2
VEracruz, Mexico

Posted: Fri Feb 17, 2006 2:11 am
by servicomver
tal vez me este complicando de mas (es lo mas seguro)

que clase debo de usar para meter registros a una base de datos en forma de listbox, como si fueran articulos de una factura
donde se captura cantidad, clave (con ayuda de busqueda) yo uso listbox y 2 gets uno de cantidad y otro de clave
tal vez x ahi esta el problema, ya q x mas que he buscado el listbox no puedo hacer que haga lo q arriba mencione, ojala me haya explicado lo suficiente

gracias x su tiempo
salu2
veracruz, mexico