Clipper On Line • Ver Tópico - Adicionar elementos na rotina

Adicionar elementos na rotina

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Adicionar elementos na rotina

Mensagempor Paulo_CPV » 13 Mar 2013 14:57

Boa tarde!

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
Paulo_CPV
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 178
Data de registro: 07 Mar 2013 10:27
Cidade/Estado: Jacarei/SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Adicionar elementos na rotina

Mensagempor Pablo César » 13 Mar 2013 18:51

Se é isto que eu entendi:
Tela84.PNG

Não e dificil de fazer, apenas um pouco laborioso. Utilizando a IDE você pode fazer a sua tela. Foi o que eu fiz, segue o código fonte alterado:
#include <hmg.ch>

Function Main()
Local aRows:={{0,0,0}}

DEFINE WINDOW Form_1 ;
   AT 126,66 WIDTH 272 HEIGHT 343 ;
   TITLE 'Teste de Função' ;
   ICON '' ;
   NOMAXIMIZE ;
   NOSIZE ;
   MAIN ;
   BACKCOLOR {236,233,216} ;
   FONT 'Arial' SIZE 10

   ON KEY ESCAPE ACTION Form_1.Release
   
   DEFINE LABEL Label_1
        ROW    20
        COL    10
        WIDTH  50
        HEIGHT 20
        VALUE "Inicio:"
        FONTNAME "Arial"
        FONTSIZE 12
        TOOLTIP ""
        FONTBOLD .T.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        HELPID Nil
        VISIBLE .T.
        TRANSPARENT .F.
        ACTION Nil
        AUTOSIZE .F.
        BACKCOLOR Nil
        FONTCOLOR Nil
        RIGHTALIGN .T.
    END LABEL
   
    DEFINE DATEPICKER DatePicker_1
       ROW    16
        COL    70
       WIDTH  108
       HEIGHT 24
      FONTNAME "Arial"
      FONTSIZE 12
      VALUE CTOD('')
      TOOLTIP ""
        ONCHANGE Nil
      SHOWNONE .F.
      VISIBLE .T.
   END DATEPICKER

    DEFINE LABEL Label_2
        ROW    54
        COL    10
        WIDTH  50
        HEIGHT 24
        VALUE "Final:"
        FONTNAME "Arial"
        FONTSIZE 12
        TOOLTIP ""
        FONTBOLD .T.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        HELPID Nil
        VISIBLE .T.
        TRANSPARENT .F.
        ACTION Nil
        AUTOSIZE .F.
        BACKCOLOR Nil
        FONTCOLOR Nil
        RIGHTALIGN .T.
    END LABEL
       
   DEFINE DATEPICKER DatePicker_2
       ROW    50
        COL    70
       WIDTH  108
       HEIGHT 24
      FONTNAME "Arial"
      FONTSIZE 12
      VALUE CTOD('')
      TOOLTIP ""
        ONCHANGE Nil
      SHOWNONE .F.
      VISIBLE .T.
   END DATEPICKER

    DEFINE BUTTON Button_1
        ROW    30
        COL    190
        WIDTH  60
        HEIGHT 28
        ACTION {|| AdiItem()}
        CAPTION "Inserir"
        FONTNAME "Arial"
        FONTSIZE 9
        TOOLTIP ""
        FONTBOLD .T.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        HELPID Nil
        FLAT .F.
        TABSTOP .T.
        VISIBLE .T.
        TRANSPARENT .F.
        MULTILINE .F.
        PICTURE Nil
        PICTALIGNMENT TOP
    END BUTTON

   @ 95,19 GRID grid_1 ;
        WIDTH 230 ;
        HEIGHT 126 ;
        HEADERS {'Ano','Mês','Dia'} ;
        WIDTHS  {75,75,75} ;
        ITEMS aRows ;
      FONT 'Arial' ;
      SIZE 10 ;
      EDIT VALUE {1,1} ;
      ON CHANGE Muda() ;
      ON DBLCLICK Nil ;
      CELLNAVIGATION ;
      COLUMNCONTROLS { {'TEXTBOX','NUMERIC','999'} , {'TEXTBOX','NUMERIC','999'} , {'TEXTBOX','NUMERIC','999'} } ;
      COLUMNVALID { { || Muda() }, { || Muda() }, { || Muda() } } ;
        JUSTIFY {BROWSE_JTFY_CENTER,BROWSE_JTFY_CENTER,BROWSE_JTFY_CENTER}

   @ 231,12 FRAME frame_2 ;
      CAPTION "Total" ;
      WIDTH 239 ;
      HEIGHT 52 ;
      BOLD OPAQUE

   @ 252,19 LABEL Label_3 ;
      WIDTH 220 ;
      HEIGHT 24 ;
      FONT 'Arial' ;
      SIZE 10 ;
      FONTCOLOR {204,0,0} ;
      BACKCOLOR {236,233,216} ;
      BOLD ;
      CENTERALIGN

END WINDOW
CENTER WINDOW Form_1
ACTIVATE WINDOW Form_1

Function Muda()
If IsControlDefined(Label_3,Form_1)
   SetProperty("Form_1","Label_3","Value",SomaRegistro())
   
Endif
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.Grid_1.Refresh
Return cRet

Function AdiItem()
Local dDataI:=Form_1.DatePicker_1.Value, dDataF:=Form_1.DatePicker_2.Value
Local a, m, d, nFim, nDias

If dDataF<dDataI
   MsgStop("A data inicial não pode ser mais antigas que a data final")
   Form_1.DatePicker_1.SetFocus
   Return Nil
Endif
nDias:=dDataF-dDataI
a:=Int(nDias/365)
nSobra:=nDias-(a*365)
m:=Int(nSobra/30)
d:=nSobra-(m*30)

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})
If nFim>1
   Form_1.Label_3.Value := SomaRegistro()
Endif
// DoMethod("Form_1","DatePicker_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})
Return Nil
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Adicionar elementos na rotina

Mensagempor Paulo_CPV » 13 Mar 2013 20:39

Boa noite!

Pablo, gostei na sua colaboração, mas eu acho que eu não fui objetivo de novo. No seu exemplo só ficou faltando incluir a data de inicio e final dentro da GRID, como imagem abaixo:

Tela Exemplo1.fw.png


Agora eu espero ter sido bem objetivo Pablo, desde já agradeço a sua atenção. A imagem certa é esta.

[]'s
Paulo - Jacareí/SP
Paulo_CPV
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 178
Data de registro: 07 Mar 2013 10:27
Cidade/Estado: Jacarei/SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Adicionar elementos na rotina

Mensagempor Pablo César » 15 Mar 2013 10:46

Oi Paulo, coincidentemente no fórum oficial da HMG acabaram de postar um exemplo que me pareceu mais acertado, pois conta com os verdadeiros números de dias de acordo cada mês, isto é, não considera como fixo 30 dias como um mês, a tela é esta:
Tela85.PNG
Tela85.PNG (11.71 KiB) Visualizado 593 vezes

E o link para baixar é este: http://hmgforum.com/viewtopic.php?p=25470#p25470

Observação: O meu exemplo anterior utiliza o MonthClaendar que dá um ar mais profissional.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes




Retornar para MiniGui

Quem está online

Usuários vendo este fórum: malcarli e 4 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro