Page 1 of 1
COMANDO READVAR EN FIVEWIN
Posted: Fri Oct 31, 2008 2:33 pm
by karinha
Buenas Maestro, duda:
Estoy usando MACRO SUSBSTITUCION y me genera erro al hacer esto:
Llamada de un GET y dispara para una function validadora...
Code: Select all
IF WYC = 0
VCOD := READVAR() //-> Cual es el comando en FIVEWIN?? -> No funciona
ELSE
VCOD := "PRODU" + STRZERO( WYC, 2, 0 ) + "A" //-> Funciona perfecto
ENDIF
Regards, saludos
Posted: Fri Oct 31, 2008 11:29 pm
by Antonio Linares
Puedes hacer lo siguiente:
Code: Select all
REDEFINE GET aGetFat[13] VAR &YPRODU ID IDYPRODU PICTURE "@!" ;
OF oFld:aDialogs[1] UPDATE WHEN( lPesquisa ) ;
FONT oFont COLORS CLR_BLACK, CLR_HCYAN ;
VALID PESQPRODU2( 0 ) //-> Validar o codigo do produto
aGetFat[13]:oGet:Name = YPRODU
Code: Select all
FUNCTION ReadVar()
LOCAL nWnd := AScan( GetAllWin(),;
{ | oWnd | oWnd:lFocused .and. oWnd:ClassName() == "TGET" } )
RETURN If( nWnd != 0, GetAllWin()[ nWnd ]:oGet:Name, Nil )
Posted: Mon Nov 03, 2008 12:18 pm
by karinha
Maestro Antonio, No funciona... Mas alguna cosa??
Code: Select all
FUNCTION PRODUTOS()
//-> Inicializa os N£meros dos ID's - Folder 1
IDYPRODU := 40 //-> ID's dos Get's dos Codigos do Produto
YC := 0
WHILE YC<9
SYSREFRESH()
YC := YC+1
YLIN := YLIN+1
YCC := STRZERO(YC,2,0)+"A"
YCAMPO := "PRODU"+STRZERO(YC,2,0)
YVPRODU := "VPRODU"+YCC
YPRODU := "PRODU"+YCC //-> codigo do produto
YQT := "QT"+YCC
YVRUN := "VRUN"+YCC
YTRIES := "TRIES"+YCC
YALICM := "ALICM"+YCC
YALICI := "ALICI"+YCC
YWALICI := "WALICI"+YCC
YDEST := "DEST"+YCC
YMOVES := "MOVES"+YCC
YVMOVES := "VMOVES"+YCC
YPNOME := "PNOME"+YCC
YWTLP := "WTLP"+YCC
oProdu := "oProdu"+YCC
IF .NOT. WALTPED
//DO SAYCOMDT WITH YPRODU,YLIN,02,"@!"
ELSE
REDEFINE GET aGetFat[13] VAR &YPRODU ID IDYPRODU PICTURE "@K!" ;
OF oFld:aDialogs[1] UPDATE WHEN( lPesquisa ) ;
FONT oFont COLORS CLR_BLACK, CLR_HCYAN ;
VALID PESQPRODU2( 0 )
//-> By Antonio Linares
aGetFat[13]:oGet:Name := YPRODU //-> No Funciona
//aGetFat[13]:oGet:Name := &YPRODU //-> No Funciona
ENDIF
//-> ID's - Codigo do Produto
IDYPRODU := IDYPRODU + 1
ENDDO
RETURN NIL
//
//-> Pesquisa o Codigo do Produto, se READVAR funcionar.
//
FUNCTION PESQPRODU2()
PARA WYC
IF WYC=0
//-> Funcao READVAR, Incorporada em 03/11/2008
// By Antonio Linares
VCOD := READVAR() //-> VCOD retorna vacio... ????
? VCOD //-> Retorna VACIO... Generando erro de VARIABLE...
ELSE
VCOD := "PRODU"+STRZERO(WYC,2,0)+"A"
ENDIF
RETURN( .T. )
//-> By Antonio Linares: Puedes hacer lo siguiente: em: 03/11/2008
FUNCTION ReadVar()
LOCAL nWnd := AScan( GetAllWin(),;
{ | oWnd | oWnd:lFocused .and. oWnd:ClassName() == "TGET" } )
RETURN IF( nWnd != 0, GetAllWin()[ nWnd ]:oGet:Name, Nil )
//-> FIM DO PROGRAMA
Un Abrazo.
Regards, saludos.
Posted: Mon Nov 03, 2008 1:38 pm
by Antonio Linares
Joao,
Siempre redefines el mismo objeto GET:
Deberias aumentar 13+... en cada iteración del bucle para que sean objetos distintos
Posted: Mon Nov 03, 2008 3:00 pm
by karinha
Maestro Antonio:
Code: Select all
REDEFINE GET &oProdu VAR &YPRODU ID IDYPRODU PICTURE "@K!" ;
OF oFld:aDialogs[1] UPDATE WHEN( lPesquisa ) ;
FONT oFont COLORS CLR_BLACK, CLR_HCYAN ;
VALID PESQPRODU2( 0, YPRODU )
&oProdu:oGet:Name := YPRODU
? oProdu //-> Hace correcto, incrementa el objecto del GET
FUNCTION PESQPRODU2( WYC, YPRODU )
IF WYC=0
VCOD := READVAR()
? YPRODU, VCOD //-> Muestra siempre el ULTIMO Produto y no el PRIMERO.
ENDIF
Maestro como hago para pegar el OBJETO en FOCO??
Posted: Mon Nov 03, 2008 5:52 pm
by karinha
Code: Select all
IF WYC=0
WFOLDER=oFld:nOption
DO CASE
CASE WFOLDER=1
oCtl:=oFld:aDialogs[1]:oCtlFocus()
//-> Asi, no funciona
IF ( oCtl:hWnd = &oProdu:hWnd )
msginfo('O objeto get selecionado é "+&oProdu+" que corresponde ao foco onde o cursor se encontra no momento!')
return(.t.)
ENDIF
Asi:
//Error BASE/1004 Class: 'CHARACTER' has no exported method: HWND
IF (oCtl:hWnd = oProdu:hWnd)
msginfo('O objeto get selecionado é "+&oProdu+" que corresponde ao foco onde o cursor se encontra no momento!')
return(.t.)
ENDIF
CASE WFOLDER=2
oCtl:=oFld:aDialogs[2]:oCtlFocus()
CASE WFOLDER=3
oCtl:=oFld:aDialogs[3]:oCtlFocus()
ENDCASE
ELSE
VCOD := "PRODU"+STRZERO(WYC,2,0)+"A"
ENDIF
Porfa Maestro que hago mal???
Saludos.
Posted: Mon Nov 03, 2008 7:20 pm
by Daniel Garcia-Gil
prueba esto
Code: Select all
&oProdu:bValid = GenValid( YPRODU )
function GenValid( YPRODU )
return( {|| PESQPRODU2( YPRODU ) } )
FUNCTION PESQPRODU2( YPRODU )
? &YPRODU, YPRODU
RETURN .T.
espero te sirva de camino
Posted: Mon Nov 03, 2008 7:53 pm
by karinha
mcfox wrote:prueba esto
Code: Select all
&oProdu:bValid = GenValid( YPRODU )
function GenValid( YPRODU )
return( {|| PESQPRODU2( YPRODU ) } )
FUNCTION PESQPRODU2( YPRODU )
? &YPRODU, YPRODU
RETURN .T.
espero te sirva de camino
Gracias Daniel, Voy testar.
Regards, saludos.
Posted: Mon Nov 03, 2008 8:34 pm
by Antonio Linares
João,
Aqui tienes un ejemplo completo y funcionando:
test.prg
Code: Select all
#include "FiveWin.ch"
function Main()
local oDlg, aValues[ 4 ], n, oGet
SET KEY VK_F2 TO ShowInfo()
DEFINE DIALOG oDlg RESOURCE "Test" TITLE "Pulsa F2 para ReadVar()"
for n = 1 to 4
aValues[ n ] = PadL( Str( n ), 20 )
oGet = TGet():Redefine( 100 + ( n - 1 ) * 10, GenSetGet( aValues, n ), oDlg )
oGet:oGet:Name = "aValues[" + AllTrim( Str( n ) ) + "]"
next
ACTIVATE DIALOG oDlg CENTERED
return nil
function GenSetGet( aValues, n )
return bSETGET( aValues[ n ] )
function ShowInfo()
MsgInfo( ReadVar() )
return nil
function ReadVar()
local nWnd := AScan( GetAllWin(),;
{ | oWnd | oWnd:lFocused .and. oWnd:ClassName() == "TGET" } )
return If( nWnd != 0, GetAllWin()[ nWnd ]:oGet:Name, Nil )
test.rc
Code: Select all
test DIALOG 119, 76, 194, 119
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Test"
FONT 8, "MS Sans Serif"
{
EDITTEXT 100, 53, 10, 108, 14
EDITTEXT 110, 53, 29, 108, 14
EDITTEXT 120, 53, 48, 108, 14
EDITTEXT 130, 53, 67, 108, 14
DEFPUSHBUTTON "OK", IDOK, 72, 96, 50, 14
}
Posted: Tue Nov 04, 2008 6:22 pm
by giba_f
Antonio Linares wrote:Puedes hacer lo siguiente:
Code: Select all
REDEFINE GET aGetFat[13] VAR &YPRODU ID IDYPRODU PICTURE "@!" ;
OF oFld:aDialogs[1] UPDATE WHEN( lPesquisa ) ;
FONT oFont COLORS CLR_BLACK, CLR_HCYAN ;
VALID PESQPRODU2( 0 ) //-> Validar o codigo do produto
aGetFat[13]:oGet:Name = YPRODU
Code: Select all
FUNCTION ReadVar()
LOCAL nWnd := AScan( GetAllWin(),;
{ | oWnd | oWnd:lFocused .and. oWnd:ClassName() == "TGET" } )
RETURN If( nWnd != 0, GetAllWin()[ nWnd ]:oGet:Name, Nil )
e, como fazer igual pro ComboBox ??
Obrigado
Posted: Tue Nov 04, 2008 6:24 pm
by Antonio Linares
Giba,
> e, como fazer igual pro ComboBox ??
Puedes usar oComboBox[ ... ]:Cargo en vez de oGet[ ... ]:oGet:Name
Posted: Wed Nov 05, 2008 1:18 pm
by karinha
Buenos dias...
Después posto la respuesta correcta.
Abrazos y muchas gracias.