Bom eu tinha feito o demo, mas vi que o Toledo disponibilizou outro quase com o mesmo conteúdo. A diferença está em que o Toledo utilizou o ThisWindow.Name eliminando a necessidade do parâmetro do cForm e o de cValue, mas esqueceu de colocar no evento OnEnter, pois alguns usuários ainda utilizam essa prática para mudar de campo (vicio do antigo sist. Clipper).
Paulo, analise as funções do Toledo e minha (estas ultimas) e verá onde você errou. Lembre, em GUI são objetos, não são variáveis. O teu erro estava no terceiro parâmetro (no primeiro exemplo que postei). Observe o
SET NAVIGATION EXTENDED pois ele dará o efeito de mudar de campo.
De todas formas disponibilizo o demo que tinha preparado.
#include "hmg.ch"
Function Main()
SET NAVIGATION EXTENDED
DEFINE WINDOW Form_1 AT 219 , 253 WIDTH 458 HEIGHT 246 ;
TITLE "Auto prenchimento de zeros" ICON NIL MAIN
DEFINE TEXTBOX Text_1
ROW 50
COL 130
WIDTH 120
HEIGHT 24
FONTNAME "Arial"
FONTSIZE 9
TOOLTIP ""
ONCHANGE Nil
ONGOTFOCUS Nil
ONLOSTFOCUS Completa(ThisWindow.Name,This.Name,This.Value,9)
ONENTER Completa(ThisWindow.Name,This.Name,This.Value,9)
INPUTMASK "999999999"
FORMAT Nil
VALUE ""
END TEXTBOX
DEFINE TEXTBOX Text_2
ROW 150
COL 130
WIDTH 120
HEIGHT 24
FONTNAME "Arial"
FONTSIZE 9
TOOLTIP ""
ONCHANGE Nil
ONGOTFOCUS Nil
ONLOSTFOCUS Completa(ThisWindow.Name,This.Name,This.Value,9)
ONENTER Completa(ThisWindow.Name,This.Name,This.Value,9)
INPUTMASK "999999999"
FORMAT Nil
VALUE ""
END TEXTBOX
END WINDOW
CENTER WINDOW Form_1
ACTIVATE WINDOW Form_1
Return Nil
Function Completa( cForm, cComp, cVal, nTam )
Local cValor:=GetProperty(cForm,cComp,cVal)
cValor:=StrZero(Val(cVal),nTam,0)
SetProperty(cForm,cComp,"Value",cValor)
Return Nil
De fato é bom a diversidade de exemplos, pois cada um tem o seu jeito. Eu preferi manter a lógica inicial para que o aprendizado servisse o bom entendimento. Pois colocando os campos como parâmetro, você consegue entender melhor.