ANTONIO AYUDA CON SETFOCUS A UN MDI
ANTONIO AYUDA CON SETFOCUS A UN MDI
Saludos antonio...
Tengo el siguiente problema estoy trabajando con el wbrowse de hernan en un entorno MDI-MDICHILD al momento de editar una celda verifico si el valor de uBuffer esta vacio y si es asi llamo a una funcion que me arma otra mdi con la empresa, de ahi debo seleccionar la empresa y traerme ese valor para luego guardarlo en la celda que tengo en edicion. El detalle esta en que me abre la ventana de empresas pero no me le da el focus ya que me queda en el modo de edicion del wbrowse....
Espero me puedan ayudar gracias.....
Tengo el siguiente problema estoy trabajando con el wbrowse de hernan en un entorno MDI-MDICHILD al momento de editar una celda verifico si el valor de uBuffer esta vacio y si es asi llamo a una funcion que me arma otra mdi con la empresa, de ahi debo seleccionar la empresa y traerme ese valor para luego guardarlo en la celda que tengo en edicion. El detalle esta en que me abre la ventana de empresas pero no me le da el focus ya que me queda en el modo de edicion del wbrowse....
Espero me puedan ayudar gracias.....
Angel Stincone... Saludos...
FWH 8.08
XHARBOUR 1.1.0
VERCE 5.3
ADS 9.0
FWH 8.08
XHARBOUR 1.1.0
VERCE 5.3
ADS 9.0
- Daniel Garcia-Gil
- Posts: 2365
- Joined: Wed Nov 02, 2005 11:46 pm
- Location: Isla de Margarita
- Contact:
si pudieras publicar el codigo pienso que seria mas facil ayudarte...
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Saludos mcfox... te anexo el codigo...
//este es el browse que utilizo:
TWBrowse():lHScroll:= .F.
@ 6, 2 LISTBOX Brw1 ;
FIELDS "" ;
ALIAS (CALIAS) ;
OF oWndChild ;
UPDATE
Brw1:SetCols( bro_campo, bro_subtit)
Brw1:bDropOver = { | uDropInfo, nRow, nCol, nKeyFlags | ;
Brw1:Add( uDropInfo ), MsgBeep() }
Brw1:lCellStyle = .T.
Brw1:lAutoEdit = .T.
Brw1:lAutoSkip = .T.
Brw1:ladjlastcol:=.F.
Brw1:lDrawFocusRect:=.F.
Brw1:nLineStyle:= 2
Brw1:Set3DStyle()
Brw1:nHeaderHeight := 18
Brw1:nLineHeight := 15
Brw1:bLogicLen = { || ( Brw1:CALIAS ) -> ( adskeycount() ) } // ( ORDKeyCount() )
Brw1:nClrPane := {|| IIF((Brw1:CALIAS)->(adskeyno()) % 2 == 0 ,RGB(193,221,255),RGB(221,245,255) )}
Brw1:SetSize( oWnd:nWidth-80, oWnd:nHeight-200, .t. )
Brw1:bBkColor:= {|nRow,nCol,nStyle| ;
if( nStyle==3 .OR. nStyle=0, if( nCol==1,GetSysColor( COLOR_BTNFACE ),),) }
Brw1:bTextColor:= {|nRow,nCol,nStyle| ;
if( nStyle==3 .OR. nStyle=0, if( nCol==1,RGB( 192,192,192 ),),) }
Brw1:bKeyChar := {|nK| if( nK==VK_RETURN,Brw1:Edit(Brw1:nColAct,.t.),) }
Brw1:bEdit:= {|nCol, cBuffer, lFirstEdit|;
EDICION( Brw1, nCol, cBuffer, CALIAS, lFirstEdit, xCols, oWnd ) }
//la funcion de edicion:
STATIC Function EDICION( Brw1, nCol, cBuffer, CALIAS, lFirstEdit, xCols, oWnd )
LOCAL aResult, uBuffer, lContinue:= .T.
LOCAL bValid, aItems, bAction, nClrFore, nClrBack
nClrFore := RGB(0,0,0)
nClrBack := RGB(149,198,147)
FOR nCol := 1 TO xCols
Do Case
Case nCol == 2 // ID COM
uBuffer := (CALIAS)->id_com
bValid := {|| IF(EMPTY(aResult:=SELECEMPRE(@uBuffer)),.F.,.T.)}
IF lContinue:= Brw1:lEditCol( nCol, @uBuffer, "@!", bValid, nClrFore, nClrBack)
IF !EMPTY(uBuffer)
IF(WndSetFocus("Compañias",oWnd))
REPLACE (Brw1:CALIAS)->id_com WITH uBuffer
ENDIF
ENDIF
ENDIF
ENDDO
NEXT nCol
//la funcion SELECEMPRE() me llama a otra funcion es la que me arma
//la ventana MDI de empresas:
FUNCTION SELECEMPRE( xVar )
LOCAL aRetorno
aRetorno := COMP0101( @xVar )
RETURN aRetorno
// esta funcion la uso para darle el focus al windows por el ctitle
FUNCTION WndSetFocus(cTitle,oWnd)
*------------------------------------------------------*
local i:=0,lSuccess:=.f.
cTitle:=upper(cTitle)
FOR i=1 to len(oWnd:oWndClient:aWnd)
IF upper( oWnd:oWndClient:aWnd[i]:cCaption )=cTitle
oWnd:oWndClient:aWnd[i]:SetFocus()
lSuccess:=.t.
ENDIF
NEXT
RETURN lSuccess
//este es el browse que utilizo:
TWBrowse():lHScroll:= .F.
@ 6, 2 LISTBOX Brw1 ;
FIELDS "" ;
ALIAS (CALIAS) ;
OF oWndChild ;
UPDATE
Brw1:SetCols( bro_campo, bro_subtit)
Brw1:bDropOver = { | uDropInfo, nRow, nCol, nKeyFlags | ;
Brw1:Add( uDropInfo ), MsgBeep() }
Brw1:lCellStyle = .T.
Brw1:lAutoEdit = .T.
Brw1:lAutoSkip = .T.
Brw1:ladjlastcol:=.F.
Brw1:lDrawFocusRect:=.F.
Brw1:nLineStyle:= 2
Brw1:Set3DStyle()
Brw1:nHeaderHeight := 18
Brw1:nLineHeight := 15
Brw1:bLogicLen = { || ( Brw1:CALIAS ) -> ( adskeycount() ) } // ( ORDKeyCount() )
Brw1:nClrPane := {|| IIF((Brw1:CALIAS)->(adskeyno()) % 2 == 0 ,RGB(193,221,255),RGB(221,245,255) )}
Brw1:SetSize( oWnd:nWidth-80, oWnd:nHeight-200, .t. )
Brw1:bBkColor:= {|nRow,nCol,nStyle| ;
if( nStyle==3 .OR. nStyle=0, if( nCol==1,GetSysColor( COLOR_BTNFACE ),),) }
Brw1:bTextColor:= {|nRow,nCol,nStyle| ;
if( nStyle==3 .OR. nStyle=0, if( nCol==1,RGB( 192,192,192 ),),) }
Brw1:bKeyChar := {|nK| if( nK==VK_RETURN,Brw1:Edit(Brw1:nColAct,.t.),) }
Brw1:bEdit:= {|nCol, cBuffer, lFirstEdit|;
EDICION( Brw1, nCol, cBuffer, CALIAS, lFirstEdit, xCols, oWnd ) }
//la funcion de edicion:
STATIC Function EDICION( Brw1, nCol, cBuffer, CALIAS, lFirstEdit, xCols, oWnd )
LOCAL aResult, uBuffer, lContinue:= .T.
LOCAL bValid, aItems, bAction, nClrFore, nClrBack
nClrFore := RGB(0,0,0)
nClrBack := RGB(149,198,147)
FOR nCol := 1 TO xCols
Do Case
Case nCol == 2 // ID COM
uBuffer := (CALIAS)->id_com
bValid := {|| IF(EMPTY(aResult:=SELECEMPRE(@uBuffer)),.F.,.T.)}
IF lContinue:= Brw1:lEditCol( nCol, @uBuffer, "@!", bValid, nClrFore, nClrBack)
IF !EMPTY(uBuffer)
IF(WndSetFocus("Compañias",oWnd))
REPLACE (Brw1:CALIAS)->id_com WITH uBuffer
ENDIF
ENDIF
ENDIF
ENDDO
NEXT nCol
//la funcion SELECEMPRE() me llama a otra funcion es la que me arma
//la ventana MDI de empresas:
FUNCTION SELECEMPRE( xVar )
LOCAL aRetorno
aRetorno := COMP0101( @xVar )
RETURN aRetorno
// esta funcion la uso para darle el focus al windows por el ctitle
FUNCTION WndSetFocus(cTitle,oWnd)
*------------------------------------------------------*
local i:=0,lSuccess:=.f.
cTitle:=upper(cTitle)
FOR i=1 to len(oWnd:oWndClient:aWnd)
IF upper( oWnd:oWndClient:aWnd[i]:cCaption )=cTitle
oWnd:oWndClient:aWnd[i]:SetFocus()
lSuccess:=.t.
ENDIF
NEXT
RETURN lSuccess
Angel Stincone... Saludos...
FWH 8.08
XHARBOUR 1.1.0
VERCE 5.3
ADS 9.0
FWH 8.08
XHARBOUR 1.1.0
VERCE 5.3
ADS 9.0
- Daniel Garcia-Gil
- Posts: 2365
- Joined: Wed Nov 02, 2005 11:46 pm
- Location: Isla de Margarita
- Contact:
has verificado que FUNCTION WndSetFocus(cTitle,oWnd) este haciendo el trabajo correcto?
puedes ahcer esto:
bValid := {|| IF(EMPTY(aResult:=SELECEMPRE(@uBuffer)),.F.,.T.)}
con aResult no estas haciendo nada ya que esa variable toma el valor de FUNCTION SELECEMPRE( xVar ), has que esta funcion COMP0101( @xVar ) te retorne el Objeto window MDICHILD
o si no... ya que tienes el objeto de la mdichild has oWndEmp:SetFocus() directamente...
espero te sirva
puedes ahcer esto:
bValid := {|| IF(EMPTY(aResult:=SELECEMPRE(@uBuffer)),.F.,.T.)}
con aResult no estas haciendo nada ya que esa variable toma el valor de FUNCTION SELECEMPRE( xVar ), has que esta funcion COMP0101( @xVar ) te retorne el Objeto window MDICHILD
Code: Select all | Expand
bValid := {|| IF(EMPTY(oWndEmp:=SELECEMPRE(@uBuffer)),.F.,.T.)}
...
IF lContinue:= Brw1:lEditCol( nCol, @uBuffer, "@!", bValid, nClrFore, nClrBack)
IF !EMPTY(uBuffer)
IF (WndSetFocus(oWndEmp:cTitle,oWnd)) //cambia aqui
REPLACE (Brw1:CALIAS)->id_com WITH uBuffer
ENDIF
ENDIF
ENDIF
...
FUNCTION SELECEMPRE( xVar )
LOCAL oWndEmp
oWndEmp := COMP0101( @xVar )
RETURN oWndEmp
o si no... ya que tienes el objeto de la mdichild has oWndEmp:SetFocus() directamente...
espero te sirva
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
mcfox...
no me funcion me sigue el mismo problema, el detalle esta en que llamo a comp0101 y el me arma el otro mdi donde debo seleccionar la compañia y devolverme con ese valor, pero despues que llamo a comp0101 el me pasa al siguiente codigo, como hago para que que se me quede en la ventana de compañia hasta que seleccione y luego me devuelva a la ventana donde tengo la celda en edicion....
no me funcion me sigue el mismo problema, el detalle esta en que llamo a comp0101 y el me arma el otro mdi donde debo seleccionar la compañia y devolverme con ese valor, pero despues que llamo a comp0101 el me pasa al siguiente codigo, como hago para que que se me quede en la ventana de compañia hasta que seleccione y luego me devuelva a la ventana donde tengo la celda en edicion....
Angel Stincone... Saludos...
FWH 8.08
XHARBOUR 1.1.0
VERCE 5.3
ADS 9.0
FWH 8.08
XHARBOUR 1.1.0
VERCE 5.3
ADS 9.0
- Daniel Garcia-Gil
- Posts: 2365
- Joined: Wed Nov 02, 2005 11:46 pm
- Location: Isla de Margarita
- Contact:
cuando crees el MDI en comp0101 en el comando ACTIVATE en la clausula ON INT dale el foco al wbrowse
ACTIVATE oWndChild ON INIT oBrw:SetFocus()
o sino intenta esto tambien en comp0101
oWndChild:bGotFocus:={|| oBrw:SetFocus() }
oWndChild = el nombre de tu objeto window/dialog
oBrw = nombre de tu objeto Wbrowse
ACTIVATE oWndChild ON INIT oBrw:SetFocus()
o sino intenta esto tambien en comp0101
oWndChild:bGotFocus:={|| oBrw:SetFocus() }
oWndChild = el nombre de tu objeto window/dialog
oBrw = nombre de tu objeto Wbrowse
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
mcfox...
El foco me lo hace bien siempre y cuando no deje en modo de edicion la celda en el listbox desde donde lo estoy llamando. y necesito mantenerla en edicion por que a lo que seleccione la compañia me debe traer ese valor y colocarmelo en esa celda....
El foco me lo hace bien siempre y cuando no deje en modo de edicion la celda en el listbox desde donde lo estoy llamando. y necesito mantenerla en edicion por que a lo que seleccione la compañia me debe traer ese valor y colocarmelo en esa celda....
Angel Stincone... Saludos...
FWH 8.08
XHARBOUR 1.1.0
VERCE 5.3
ADS 9.0
FWH 8.08
XHARBOUR 1.1.0
VERCE 5.3
ADS 9.0
- Daniel Garcia-Gil
- Posts: 2365
- Joined: Wed Nov 02, 2005 11:46 pm
- Location: Isla de Margarita
- Contact:
elimina la edicion y asignale el valor a la fila desde donde haces la llamada, es decir, si haces la llamada desde la fila 4, le vas a asignar el valor a la fila 4 y columna 2 ( donde tienes el codigo ), si quieres hablamos por msn...
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9