Página 1 de 1

Retornar valor processado em um Formulário

Enviado: 26 Mar 2015 10:38
por Cavalo Marinho
Bom dia todos
Não sei se é possível mas aí vai a minha dúvida: Em clipper eu tinha uma função que recebia alguns parametros fazia o processamento e me retornava algum valor, seja pelo return ou por referencia, e nesta função eu podia ter uma tela onde entrava alguns dados processava algo e retornava o valor para quem a chamou, na programação gui sei que não funciona desta maneira, teria aluma maneira de eu poder chamar um formulário passando um ou mais parametros mesmo que por referencia (@param) e apos eu clicar num botão que feche e encerre este formulário chamado conseguir obter o valor desta variável????
em clipper fazia assim:

nRetorno := MinhaFuncao()
Function MinhFauncao()
z := y := 0
@ 10, 5 get z
@ 12, 5 get y
read
x := z + y
return(x)

ou assim

cCampo := ""
MinhaFuncao(@cCampo)

Function MinhaFuncao(@cTeste)
campoDigitado := space(20)
@ 10, 5 get campoDigitado
read
cTeste := campoDigitado
return(.t.)
Das duas maneiras eu obteria os valores de nRetorno ou de cCampo na função de chamada, E EM MINIGUI/HARBOUR tem com fazer lembrando que MinhaFuncao vai exibir um formulário onde sera inserido informações e estas serão processadas para obter o valor do retorno.
Desde já fico agradecido.

Retornar valor processado em um Formulário

Enviado: 26 Mar 2015 12:04
por Pablo César
Se você utilizar GetProperty(<Formulario>,<Controle>,"Value"), você poderá obter os valores dos TextBoxes (por exemplo) nessa sua função que imagino que também irá ser fechada através de um botão (por exemplo). Mas no final da função você faz o return com os valores obtidos pelo GetProperty. Claro que terá que abrir variáveis para serem retornadas.

Eu fiz este exemplo, que na verdade tem duas opções de fazer algo parecido com o que você quer. Uma está comentado:

Código: Selecionar todos

#include <hmg.ch>

Function Main()
DEFINE WINDOW Form_1 AT 132 , 235 WIDTH 550 HEIGHT 350 TITLE "Main" MAIN ON INIT MsgDebug(MinhaFuncao())
/*
    DEFINE LABEL Label_1
        ROW    120
        COL    100
        WIDTH  90
        HEIGHT 20
        VALUE "Resultado:"
        FONTNAME "Arial"
        FONTSIZE 12
        FONTBOLD .T.
    END LABEL

    DEFINE TEXTBOX Text_1
        ROW    120
        COL    210
        WIDTH  120
        HEIGHT 24
        NUMERIC .T. 
		READONLY .T.
        VALUE 0
    END TEXTBOX
	
	DEFINE BUTTON Button_1
        ROW    220
        COL    230
        WIDTH  100
        HEIGHT 28
        ACTION MinhaFuncao()
        CAPTION "Ver resultado"
        FONTNAME "Arial"
        FONTSIZE 9
    END BUTTON
	*/
	
END WINDOW
Center   WINDOW Form_1
Activate WINDOW Form_1
Return Nil

Function MinhaFuncao()
Local x:= z := y := 0
Local aResultado:=InputWindow("MinhaFuncao",{"Get Z:","Get Y:"},{0,0},{10,10})

x:=aResultado[1]+aResultado[2]
If IsControlDefined ( Text_1, Form_1 )
   SetProperty("Form_1","Text_1","Value",x)
Endif
Return x
Pode remover os comentários "/*" para ver como funcionaria.
Mas não tem como tratar de forma sequencial as telas que em GUI são tratadas como objetos...

Retornar valor processado em um Formulário

Enviado: 26 Mar 2015 21:22
por Cavalo Marinho
Boa noite.
Obrigado por responder Pablo César, vou iniciar os testes, diante do que você postou já me abriu mais a mente.