ANTONIO AYUDA CON SETFOCUS A UN MDI

ANTONIO AYUDA CON SETFOCUS A UN MDI

Postby angstin » Thu Oct 30, 2008 1: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
angstin
 
Posts: 31
Joined: Tue Sep 16, 2008 3:27 pm
Location: Venezuela

Postby Daniel Garcia-Gil » Thu Oct 30, 2008 2:06 am

si pudieras publicar el codigo pienso que seria mas facil ayudarte...
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Postby angstin » Thu Oct 30, 2008 2:34 am

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
Angel Stincone... Saludos...

FWH 8.08
XHARBOUR 1.1.0
VERCE 5.3
ADS 9.0
angstin
 
Posts: 31
Joined: Tue Sep 16, 2008 3:27 pm
Location: Venezuela

Postby angstin » Thu Oct 30, 2008 2:59 am

Aqui anexo una imagen con las ventanas...

Image
Angel Stincone... Saludos...

FWH 8.08
XHARBOUR 1.1.0
VERCE 5.3
ADS 9.0
angstin
 
Posts: 31
Joined: Tue Sep 16, 2008 3:27 pm
Location: Venezuela

Postby Daniel Garcia-Gil » 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
Code: Select all  Expand view  RUN

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
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Postby angstin » 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
angstin
 
Posts: 31
Joined: Tue Sep 16, 2008 3:27 pm
Location: Venezuela

Postby angstin » Thu Oct 30, 2008 2: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
angstin
 
Posts: 31
Joined: Tue Sep 16, 2008 3:27 pm
Location: Venezuela

Postby Daniel Garcia-Gil » Thu Oct 30, 2008 3: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
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Postby angstin » Thu Oct 30, 2008 4: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
angstin
 
Posts: 31
Joined: Tue Sep 16, 2008 3:27 pm
Location: Venezuela

Postby Daniel Garcia-Gil » Thu Oct 30, 2008 4: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...
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 52 guests