FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour ANTONIO AYUDA CON SETFOCUS A UN MDI
Posts: 31
Joined: Tue Sep 16, 2008 03:27 PM
ANTONIO AYUDA CON SETFOCUS A UN MDI
Posted: Thu Oct 30, 2008 01:56 AM

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.....

Angel Stincone... Saludos...



FWH 8.08

XHARBOUR 1.1.0

VERCE 5.3

ADS 9.0
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
ANTONIO AYUDA CON SETFOCUS A UN MDI
Posted: Thu Oct 30, 2008 02:06 AM

si pudieras publicar el codigo pienso que seria mas facil ayudarte...

Posts: 31
Joined: Tue Sep 16, 2008 03:27 PM
ANTONIO AYUDA CON SETFOCUS A UN MDI
Posted: Thu Oct 30, 2008 02:34 AM
Saludos mcfox... te anexo el codigo...

//este es el browse que utilizo:
TWBrowse():= .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:= {|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:= {|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
Posts: 31
Joined: Tue Sep 16, 2008 03:27 PM
ANTONIO AYUDA CON SETFOCUS A UN MDI
Posted: Thu Oct 30, 2008 02:59 AM
Aqui anexo una imagen con las ventanas...

Angel Stincone... Saludos...



FWH 8.08

XHARBOUR 1.1.0

VERCE 5.3

ADS 9.0
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
ANTONIO AYUDA CON SETFOCUS A UN MDI
Posted: Thu Oct 30, 2008 11:38 AM
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
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
Posts: 31
Joined: Tue Sep 16, 2008 03:27 PM
ANTONIO AYUDA CON SETFOCUS A UN MDI
Posted: Thu Oct 30, 2008 11:54 AM

Ok amigo, Gracias....

Lo pruebo y te aviso.....

Angel Stincone... Saludos...



FWH 8.08

XHARBOUR 1.1.0

VERCE 5.3

ADS 9.0
Posts: 31
Joined: Tue Sep 16, 2008 03:27 PM
ANTONIO AYUDA CON SETFOCUS A UN MDI
Posted: Thu Oct 30, 2008 02:56 PM

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....

Angel Stincone... Saludos...



FWH 8.08

XHARBOUR 1.1.0

VERCE 5.3

ADS 9.0
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
ANTONIO AYUDA CON SETFOCUS A UN MDI
Posted: Thu Oct 30, 2008 03:46 PM

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

Posts: 31
Joined: Tue Sep 16, 2008 03:27 PM
ANTONIO AYUDA CON SETFOCUS A UN MDI
Posted: Thu Oct 30, 2008 04:00 PM

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....

Angel Stincone... Saludos...



FWH 8.08

XHARBOUR 1.1.0

VERCE 5.3

ADS 9.0
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
ANTONIO AYUDA CON SETFOCUS A UN MDI
Posted: Thu Oct 30, 2008 04:07 PM

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...

Continue the discussion