Em primeiro lugar quero agradecer aos colegas que me ajudaram a solucionar o meu problema em especial ao Pablo que fez este exemplo do código abaixo, mais agora estou necessitando de alterar um pouco esta rotina tirar os três TEXTBOX e alterar para dois TEXTBOX com a data inicial e data final e do lado um LABEL com o tempo convertido (ano,meses e dias) do perÃodo que o usuário digitou e outro LABEL para mostrar o total das entradas e depois inserir na GRID:
Data Inicial Data Final Ano Mês Dia
17/04/1972 07/08/1973 1 3 21
#include "minigui.ch"
Function Main()
LOCAL aRows
DEFINE WINDOW Form_1 ;
AT 126,66 WIDTH 271 HEIGHT 410 ;
TITLE 'Teste de Função' ;
ICON '' ;
NOMAXIMIZE ;
NOSIZE ;
MAIN ;
BACKCOLOR {236,233,216} ;
FONT 'Arial' SIZE 10
ON KEY ESCAPE ACTION Form_1.Release
aRows:={{0,0,0}}
@ 21,11 FRAME frame_1 ;
CAPTION "Ano / Mês / Dia" ;
WIDTH 116 ;
HEIGHT 52 ;
OPAQUE
Form_1.frame_1.fontbold:=.T.
Form_1.frame_1.fontcolor:={ 0, 0, 0}
Form_1.frame_1.backcolor:={236,233,216}
Form_1.frame_1.fontname:='Arial'
Form_1.frame_1.fontsize:= 9
@ 40,20 TEXTBOX Text_ano ;
HEIGHT 24 ;
WIDTH 25 ;
Font 'Arial' ;
BOLD ;
size 10 ;
MAXLENGTH 2 ;
ON ENTER {||Keybd_TAB()}
// Form_1.Text_ano.fontbold:=.T.
// Form_1.Text_ano.fontcolor:={ 0, 0, 0}
// Form_1.Text_ano.backcolor:={255,255,255}
@ 40,56 TEXTBOX Text_mes ;
HEIGHT 24 ;
WIDTH 25 ;
Font 'Arial' ;
size 10 ;
BOLD ;
MAXLENGTH 2 ;
ON ENTER {||Keybd_TAB()}
// Form_1.Text_mes.fontbold:=.T.
// Form_1.Text_mes.fontcolor:={ 0, 0, 0}
// Form_1.Text_mes.backcolor:={255,255,255}
@ 40,94 TEXTBOX Text_dia ;
HEIGHT 24 ;
WIDTH 25 ;
Font 'Arial' ;
BOLD ;
size 10 ;
MAXLENGTH 2 ;
ON ENTER {|| AdiItem(val(Form_1.Text_ano.Value),Val(Form_1.Text_mes.Value),Val(Form_1.Text_dia.Value)),InputAtGrid()}
// Form_1.Text_dia.fontbold:=.T.
// Form_1.Text_dia.fontcolor:={ 0, 0, 0}
// Form_1.Text_dia.backcolor:={255,255,255}
@ 85,9 GRID grid_1 ;
WIDTH 230 ;
HEIGHT 120 ;
HEADERS {'Ano','Mês','Dia'} ;
WIDTHS {75,75,75} ;
ITEMS aRows ;
FONT 'Arial' ;
SIZE 10 ;
BOLD ;
EDIT ;
JUSTIFY {BROWSE_JTFY_CENTER,BROWSE_JTFY_CENTER,BROWSE_JTFY_CENTER} ;
CELLNAVIGATION ;
COLUMNCONTROLS { {'TEXTBOX','NUMERIC','999'} , {'TEXTBOX','NUMERIC','999'} , {'TEXTBOX','NUMERIC','999'} }
// ON CHANGE GridChange(This.Value)
// Form_1.grid_1.fontcolor:={0,0,0}
// Form_1.grid_1.backcolor:={255,255,255}
@ 231,9 FRAME frame_2 ;
CAPTION "Total" ;
WIDTH 239 ;
HEIGHT 52 ;
OPAQUE
Form_1.frame_2.fontbold:=.T.
Form_1.frame_2.fontcolor:={ 0, 0, 0}
Form_1.frame_2.backcolor:={236,233,216}
Form_1.frame_2.fontname:='Arial'
Form_1.frame_2.fontsize:= 9
@ 252,19 LABEL label_1 ;
WIDTH 220 ;
HEIGHT 24 ;
FONT 'Arial' ;
SIZE 10 ;
FONTCOLOR {204,0,0} ;
BACKCOLOR {236,233,216} ;
BOLD ;
CENTERALIGN
// Form_1.label_1.fontbold:=.T.
// Form_1.label_1.fontcolor:={ 0, 0, 0}
DEFINE BUTTON button_1
ROW 290
COL 9
WIDTH 100
HEIGHT 24
CAPTION "Nova Soma"
FONTNAME "Arial"
FONTSIZE 10
FONTBOLD .T.
ACTION {|| Novo()}
END BUTTON
END WINDOW
CENTER WINDOW Form_1
ACTIVATE WINDOW Form_1
*********************************************************************
Function InPutAtGrid()
Form_1.label_1.Value := SomaRegistro()
Return Nil
*********************************************************************
Function SomaRegistro()
Local nCount1, nCount2, cRet, nFim:=Form_1.Grid_1.ItemCount
Local aRet:={0,0,0}, aTupla, aSoma:={0,0,0}, nSobra
For nCount1=1 To nFim
aTupla:=Form_1.Grid_1.Item( nCount1 )
For nCount2=1 To 3
aSoma[nCount2]:=aSoma[nCount2]+aTupla[nCount2]
Next
Next
aDia := INT(aSoma[3] / 30)
aMes := INT(aSoma[2] / 12)
aRet[3] := IF(aDia <> 0 , aSoma[3] - (aDia * 30) , aSoma[3])
aRet[2] := IF(aMes = 0 , IF(aMes = 0 ,IF(aSoma[2] + aDia = 12 , 0 , aSoma[2] + aDia) , aSoma[2] + aDia - (aDia * 12)) , IF(aMes = 1 , aSoma[2] + aDia - (aMes * 12) , aSoma[2] + aDia - (aMes * 12)))
aRet[1] := IF(aMes = 0 , IF(aMes = 0 , IF(aSoma[2] + aDia = 12, aSoma[1] + 1 , aSoma[1]) , aSoma[1] + aDia) , IF(aMes = 1 , aSoma[1] + aMes , aSoma[1] + aMes))
cRet:=hb_ValToExp(aRet[1])+" Anos / "+hb_ValToExp(aRet[2])+" Meses / "+hb_ValToExp(aRet[3])+" Dias"
Form_1.Text_ano.SetFocus
Return cRet
*********************************************************************
Function AdiItem(a,m,d)
Local nFim
nFim:=Form_1.Grid_1.ItemCount
aTupla:=Form_1.Grid_1.Item( nFim )
If aTupla[1]=0 .and. aTupla[2]=0 .and. aTupla[3]=0
Form_1.Grid_1.DeleteItem(nFim)
EnDif
Form_1.Grid_1.AddItem({a,m,d})
nFim:=Form_1.Grid_1.ItemCount
SetProperty("Form_1","Grid_1","Value",{nFim,1})
// Form_1.Text_ano.SetFocus
Return Nil
*********************************************************************
Function DelItem(aRec)
Local nFim, nRec:=aRec[1]
Form_1.Grid_1.DeleteItem(nRec)
nFim:=Form_1.Grid_1.ItemCount
SetProperty("Form_1","Grid_1","Value",{If(nRec>nFim,nFim,nRec),1})
// Form_1.Text_ano.SetFocus
Return Nil
*********************************************************************
Function Novo()
Form_1.Grid_1.DeleteAllItems
Form_1.Text_Ano.Value := ""
Form_1.Text_Mes.Value := ""
Form_1.Text_Dia.Value := ""
Form_1.Label_1.Value := ""
aRows := {{0,0,0}}
*InPutAtGrid()
Form_1.Text_Ano.SetFocus
Return Nil
#pragma BEGINDUMP
#include <shlobj.h>
#include <windows.h>
#include <commctrl.h>
#include <richedit.h>
#include <wingdi.h>
#include "hbapi.h"
#include "hbapiitm.h"
#include "hbvm.h"
#include "hbstack.h"
#include "winreg.h"
#include "tchar.h"
#include "Winuser.h"
#include "winbase.h"
#include "item.api"
HB_FUNC( KEYBD_TAB )
{
keybd_event(
VK_TAB, // virtual-key code
0, // hardware scan code
0, // flags specifying various function options
0 // additional data associated with keystroke
);
}
#pragma ENDDUMP
Espero que alguém me ajude a solucionar este problema, pois deu um branco e não estou conseguindo ver a solução e espero que eu tenho sido objetivo.
[]'s
Paulo - JacareÃ/SP