Ajuda sobre total de matrizes (ARRAY)
Enviado: 08 Mar 2013 09:28
Ué o meu segundo exemplo, não serviu eiPaulo_CPV escreveu:se você tiver alguma ideia de como resolver o meu problema, desde já agradeço a sua atenção.
Em homenagem a Paulo Cesar Toledo
https://pctoledo.org/
Ué o meu segundo exemplo, não serviu eiPaulo_CPV escreveu:se você tiver alguma ideia de como resolver o meu problema, desde já agradeço a sua atenção.
Código: Selecionar todos
#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 / Ano" ;
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' ;
size 10 ;
MAXLENGTH 2 ;
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 ;
MAXLENGTH 2 ;
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' ;
size 10 ;
MAXLENGTH 2 ;
ON ENTER {|| AdiItem()} ;
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 240 ;
HEIGHT 120 ;
HEADERS {'Ano','Mês','Ano'} ;
WIDTHS {60,60,60} ;
ITEMS aRows ;
FONT 'Arial' ;
SIZE 10 ;
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
@ 249,19 LABEL label_1 ;
WIDTH 150 ;
HEIGHT 24 ;
FONT 'Arial' ;
SIZE 10 ;
BACKCOLOR {236,233,216} ;
BOLD ;
CENTERALIGN ;
Form_1.label_1.fontbold:=.T.
Form_1.label_1.fontcolor:={ 0, 0, 0}
END WINDOW
CENTER WINDOW Form_1
ACTIVATE WINDOW Form_1
*********************************************************************
Function GridChange(aRec)
Form_1.label_1.Value := PadC(SomaRegistro(aRec),54)
Return Nil
*********************************************************************
Function SomaRegistro(aRec)
Local nCount1, nCount2, cRet, nFim:=Form_1.Grid_1.ItemCount
Local aRet:={0,0,0}, nRec:=aRec[1], aTupla, aSoma:={0,0,0}, nSobra
For nCount=1 To nFim
aTupla:=Form_1.Grid_1.Item( nCount )
For nCount2=1 To 3
aSoma[nCount2]:=aSoma[nCount2]+aTupla[nCount2]
Next
Next
aRet[3] := Int( (( aSoma[3] / 30 ) - Int( aSoma[3] / 30 )) * 30 )
nSobra := Int( aSoma[3] / 30 )
aRet[2] := Int((((aSoma[2] + nSobra) / 12 ) - Int( (aSoma[2] + nSobra) / 12 )) * 12 )
nSobra := Int( ((aSoma[2] + nSobra) / 12 ) )
aRet[1] := aSoma[1]+nSobra
cRet:=hb_ValToExp(aRet[1])+" Anos / "+hb_ValToExp(aRet[2])+" Meses / "+hb_ValToExp(aRet[3])+" Dias"
Form_1.Grid_1.SetFocus
Return cRet
*********************************************************************
Function AdiItem()
Local nFim
Form_1.Grid_1.AddItem({0,0,0})
nFim:=Form_1.Grid_1.ItemCount
SetProperty("Form_1","Grid_1","Value",{nFim,1})
Form_1.Grid_1.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.Grid_1.SetFocus
Return NilPaulo, o que apresenta na tela é o mesmíssimo código que você postou... o que eu fiz foi compilar com HMG.Paulo_CPV escreveu:você poderia me disponibilizar o fonte deste último exemplo
Então você tinha mencionado errado ?Paulo_CPV escreveu:é assim que eu quero
Gostaria de uma ajuda de vocês para resolver o meu problema. É o seguinte eu
tenho um TEXTBOX que o usuário entra com o seguinte dado: 00 00 00 (estes dadps
são anos meses e dias separados por espaço)
Você não entendeu ? A ultima imagem que postei corresponde ao mesmíssimo código fonte que você chegou a postar. Sem erro de compilação, Só falta implementar e na minha opinião ainda não está claro pois seria ANO / MES / DIA e você colocou ANO / MES / ANO ainda perguntei e você diz que é assim que quer ?Ah! Pablo, a fonte que eu digo é da última imagem que você postou.
Você esqueceu de mencionar qual seria a linha 115. Aqui pelo que mostra a tela essa linha está vazia...Date: 03/08/13 Time: 13:16:09
Error BASE/1068 Argument error: array access
Called from SOMAREGISTRO(115)
Pablo na sua mensagem escreveu:É assim que você deveria complementar, mencionando a linha toda:
Local aRet:={0,0,0}, nRec:=aRec[1], aTupla, aSoma:={0,0,0}, nSobra
Aqui não há erro nenhum !
Código: Selecionar todos
#include <hmg.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 / Ano" ;
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((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 240 ;
HEIGHT 120 ;
HEADERS {'Ano','Mês','Ano'} ;
WIDTHS {60,60,60} ;
ITEMS aRows ;
FONT 'Arial' ;
SIZE 10 ;
EDIT ;
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
@ 249,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}
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
aRet[3] := Int( (( aSoma[3] / 30 ) - Int( aSoma[3] / 30 )) * 30 )
nSobra := Int( aSoma[3] / 30 )
aRet[2] := Int((((aSoma[2] + nSobra) / 12 ) - Int( (aSoma[2] + nSobra) / 12 )) * 12 )
nSobra := Int( ((aSoma[2] + nSobra) / 12 ) )
aRet[1] := aSoma[1]+nSobra
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
#pragma BEGINDUMP
#include <windows.h>
#include "hbapi.h"
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 ENDDUMPGostei da sua resposta, apesar de que podia ter feito apenas um botão para adicionar os dados ou até mesmo definindo a tecla de setinha pra baixo para acionar o AdiItem. Eu também penso que o programa deve trabalhar para o usuário e não o usuário para o programa... (lamentavelmente, nem todos pensam assim).Paulo_CPV escreveu:o por que da colocação dos TEXTBOX é para dar uma maior agilidade para o usuário, pois quanto mais fácil a entrada de dados para o usuário será melhor