Prezados,
Vou passar para a comunidade um passo a passo de como criar um calendário para por em seu sistema podendo ser modificado e melhorado pela comunidade. Espera contribuições do fonte desse exemplo para a melhoria continua do mesmo.
Segue a tela do projeto:
Segue código Fonte:
Global da Tela, definição das variáveis:
STCalendario is structure
Dia is string
Mes is string
Ano is string
MesNome is string
DiaSemana is string
MsgTopo is string
Seleciona is string
InicioFim is string
MsgBase is string
CorAtual is string
DataCalendario is Date
END
arrCalendario is array of STCalendario
ok is boolean = False
DataInicial, DataFinal is string = ""
MesNomeAnterior, MesNomeAtual, MesNomePosterior, MsgCima, sMsgBaixo is string = ""
SimplesClick01, SimplesClick02, DuploClick01, DuploClick02 is int = 0
MesClick01, AnoClick01, MesClick02, AnoClick02 is string = ""
Open da janela
ok = True
IF ok = False THEN
Info("Erro ao criar a base de dados do calendario")
Close()
ELSE
AmontagemCalendario()
END
Procedure ACargaInicial(LOCAL QtdeAnosAntecessores)
StructCalendario is STCalendario
BTN_DataAtual..Value = "Selecione o intervalo de datas"
Verifica is boolean = False
nErros is int = 0
ValorDecimal is real = 0
ValorInteiro is int = 0
DataCalendario is Date = ""
nDiaAtual is int = Middle(DateSys(),7,2)
nMesAtual is int = Middle(DateSys(),5,2)
AnoAtual is int = Val(Middle(DateSys(),1,4)) - QtdeAnosAntecessores
QtdeDiasMes is int = 0
ContadorDia is int = 0
Mes is int = 0
LOOP (QtdeAnosAntecessores*2)
Mes = 0
AnoAtual += 1
LOOP (12)
Mes += 1
IF Mes = 1 THEN
QtdeDiasMes = 31
ContadorDia = 0
LOOP (QtdeDiasMes)
ContadorDia += 1
DataCalendario = StringToDate(AnoAtual + NumeroComZeroDireita(Mes,"00") + NumeroComZeroDireita(ContadorDia,"00"),"YYYYMMDD")
StructCalendario.Dia = ContadorDia
StructCalendario.Mes = Mes
StructCalendario.Ano = AnoAtual
StructCalendario.DiaSemana = RetornaDiaSemana(ContadorDia,Mes,AnoAtual,"","")
StructCalendario.MesNome = "Jan"
StructCalendario.DataCalendario = DataCalendario
StructCalendario.InicioFim = ""
StructCalendario.MsgBase = ""
StructCalendario.MsgTopo = "Jan"
StructCalendario.Seleciona = ""
StructCalendario.CorAtual = ""
arrCalendario[StructCalendario:DataCalendario] = StructCalendario
IF Verifica = False THEN
nErros += 1
END
END
ELSE IF Mes = 2
ValorDecimal = AnoAtual / 4
ValorInteiro = AnoAtual / 4
IF ValorDecimal <> ValorInteiro
QtdeDiasMes = 28
ELSE IF ValorDecimal = ValorInteiro
QtdeDiasMes = 29
END
ContadorDia = 0
LOOP (QtdeDiasMes)
ContadorDia += 1
DataCalendario = StringToDate(AnoAtual + NumeroComZeroDireita(Mes,"00") + NumeroComZeroDireita(ContadorDia,"00"),"YYYYMMDD")
StructCalendario.Dia = ContadorDia
StructCalendario.Mes = Mes
StructCalendario.Ano = AnoAtual
StructCalendario.DiaSemana = RetornaDiaSemana(ContadorDia,Mes,AnoAtual,"","")
StructCalendario.MesNome = "Fev"
StructCalendario.DataCalendario = DataCalendario
StructCalendario.InicioFim = ""
StructCalendario.MsgBase = ""
StructCalendario.MsgTopo = "Fev"
StructCalendario.Seleciona = ""
StructCalendario.CorAtual = ""
arrCalendario[StructCalendario:DataCalendario] = StructCalendario
IF Verifica = False THEN
nErros += 1
END
END
ELSE IF Mes = 3
QtdeDiasMes = 31
ContadorDia = 0
LOOP (QtdeDiasMes)
ContadorDia += 1
DataCalendario = StringToDate(AnoAtual + NumeroComZeroDireita(Mes,"00") + NumeroComZeroDireita(ContadorDia,"00"),"YYYYMMDD")
StructCalendario.Dia = ContadorDia
StructCalendario.Mes = Mes
StructCalendario.Ano = AnoAtual
StructCalendario.DiaSemana = RetornaDiaSemana(ContadorDia,Mes,AnoAtual,"","")
StructCalendario.MesNome = "Mar"
StructCalendario.DataCalendario = DataCalendario
StructCalendario.InicioFim = ""
StructCalendario.MsgBase = ""
StructCalendario.MsgTopo = "Mar"
StructCalendario.Seleciona = ""
StructCalendario.CorAtual = ""
arrCalendario[StructCalendario:DataCalendario] = StructCalendario
IF Verifica = False THEN
nErros += 1
END
END
ELSE IF Mes = 4
QtdeDiasMes = 30
ContadorDia = 0
LOOP (QtdeDiasMes)
ContadorDia += 1
DataCalendario = StringToDate(AnoAtual + NumeroComZeroDireita(Mes,"00") + NumeroComZeroDireita(ContadorDia,"00"),"YYYYMMDD")
StructCalendario.Dia = ContadorDia
StructCalendario.Mes = 1
StructCalendario.Ano = AnoAtual
StructCalendario.DiaSemana = RetornaDiaSemana(ContadorDia,Mes,AnoAtual,"","")
StructCalendario.MesNome = "Abr"
StructCalendario.DataCalendario = DataCalendario
StructCalendario.InicioFim = ""
StructCalendario.MsgBase = ""
StructCalendario.MsgTopo = "Abr"
StructCalendario.Seleciona = ""
StructCalendario.CorAtual = ""
arrCalendario[StructCalendario:DataCalendario] = StructCalendario
IF Verifica = False THEN
nErros += 1
END
END
ELSE IF Mes = 5
QtdeDiasMes = 31
ContadorDia = 0
LOOP (QtdeDiasMes)
ContadorDia += 1
DataCalendario = StringToDate(AnoAtual + NumeroComZeroDireita(Mes,"00") + NumeroComZeroDireita(ContadorDia,"00"),"YYYYMMDD")
StructCalendario.Dia = ContadorDia
StructCalendario.Mes = Mes
StructCalendario.Ano = AnoAtual
StructCalendario.DiaSemana = RetornaDiaSemana(ContadorDia,Mes,AnoAtual,"","")
StructCalendario.MesNome = "Mai"
StructCalendario.DataCalendario = DataCalendario
StructCalendario.InicioFim = ""
StructCalendario.MsgBase = ""
StructCalendario.MsgTopo = "Mai"
StructCalendario.Seleciona = ""
StructCalendario.CorAtual = ""
arrCalendario[StructCalendario:DataCalendario] = StructCalendario
IF Verifica = False THEN
nErros += 1
END
END
ELSE IF Mes = 6
QtdeDiasMes = 30
ContadorDia = 0
LOOP (QtdeDiasMes)
ContadorDia += 1
DataCalendario = StringToDate(AnoAtual + NumeroComZeroDireita(Mes,"00") + NumeroComZeroDireita(ContadorDia,"00"),"YYYYMMDD")
StructCalendario.Dia = ContadorDia
StructCalendario.Mes = Mes
StructCalendario.Ano = AnoAtual
StructCalendario.DiaSemana = RetornaDiaSemana(ContadorDia,Mes,AnoAtual,"","")
StructCalendario.MesNome = "Jun"
StructCalendario.DataCalendario = DataCalendario
StructCalendario.InicioFim = ""
StructCalendario.MsgBase = ""
StructCalendario.MsgTopo = "Jun"
StructCalendario.Seleciona = ""
StructCalendario.CorAtual = ""
arrCalendario[StructCalendario:DataCalendario] = StructCalendario
IF Verifica = False THEN
nErros += 1
END
END
ELSE IF Mes = 7
QtdeDiasMes = 31
ContadorDia = 0
LOOP (QtdeDiasMes)
ContadorDia += 1
DataCalendario = StringToDate(AnoAtual + NumeroComZeroDireita(Mes,"00") + NumeroComZeroDireita(ContadorDia,"00"),"YYYYMMDD")
StructCalendario.Dia = ContadorDia
StructCalendario.Mes = Mes
StructCalendario.Ano = AnoAtual
StructCalendario.DiaSemana = RetornaDiaSemana(ContadorDia,Mes,AnoAtual,"","")
StructCalendario.MesNome = "Jul"
StructCalendario.DataCalendario = DataCalendario
StructCalendario.InicioFim = ""
StructCalendario.MsgBase = ""
StructCalendario.MsgTopo = "Jul"
StructCalendario.Seleciona = ""
StructCalendario.CorAtual = ""
arrCalendario[StructCalendario:DataCalendario] = StructCalendario
IF Verifica = False THEN
nErros += 1
END
END
ELSE IF Mes = 8
QtdeDiasMes = 31
ContadorDia = 0
LOOP (QtdeDiasMes)
ContadorDia += 1
DataCalendario = StringToDate(AnoAtual + NumeroComZeroDireita(Mes,"00") + NumeroComZeroDireita(ContadorDia,"00"),"YYYYMMDD")
StructCalendario.Dia = ContadorDia
StructCalendario.Mes = Mes
StructCalendario.Ano = AnoAtual
StructCalendario.DiaSemana = RetornaDiaSemana(ContadorDia,Mes,AnoAtual,"","")
StructCalendario.MesNome = "Ago"
StructCalendario.DataCalendario = DataCalendario
StructCalendario.InicioFim = ""
StructCalendario.MsgBase = ""
StructCalendario.MsgTopo = "Ago"
StructCalendario.Seleciona = ""
StructCalendario.CorAtual = ""
arrCalendario[StructCalendario:DataCalendario] = StructCalendario
IF Verifica = False THEN
nErros += 1
END
END
ELSE IF Mes = 9
QtdeDiasMes = 30
ContadorDia = 0
LOOP (QtdeDiasMes)
ContadorDia += 1
DataCalendario = StringToDate(AnoAtual + NumeroComZeroDireita(Mes,"00") + NumeroComZeroDireita(ContadorDia,"00"),"YYYYMMDD")
StructCalendario.Dia = ContadorDia
StructCalendario.Mes = Mes
StructCalendario.Ano = AnoAtual
StructCalendario.DiaSemana = RetornaDiaSemana(ContadorDia,Mes,AnoAtual,"","")
StructCalendario.MesNome = "Set"
StructCalendario.DataCalendario = DataCalendario
StructCalendario.InicioFim = ""
StructCalendario.MsgBase = ""
StructCalendario.MsgTopo = "Set"
StructCalendario.Seleciona = ""
StructCalendario.CorAtual = ""
arrCalendario[StructCalendario:DataCalendario] = StructCalendario
IF Verifica = False THEN
nErros += 1
END
END
ELSE IF Mes = 10
QtdeDiasMes = 31
ContadorDia = 0
LOOP (QtdeDiasMes)
ContadorDia += 1
DataCalendario = StringToDate(AnoAtual + NumeroComZeroDireita(Mes,"00") + NumeroComZeroDireita(ContadorDia,"00"),"YYYYMMDD")
StructCalendario.Dia = ContadorDia
StructCalendario.Mes = Mes
StructCalendario.Ano = AnoAtual
StructCalendario.DiaSemana = RetornaDiaSemana(ContadorDia,Mes,AnoAtual,"","")
StructCalendario.MesNome = "Out"
StructCalendario.DataCalendario = DataCalendario
StructCalendario.InicioFim = ""
StructCalendario.MsgBase = ""
StructCalendario.MsgTopo = "Out"
StructCalendario.Seleciona = ""
StructCalendario.CorAtual = ""
arrCalendario[StructCalendario:DataCalendario] = StructCalendario
IF Verifica = False THEN
nErros += 1
END
END
ELSE IF Mes = 11
QtdeDiasMes = 30
ContadorDia = 0
LOOP (QtdeDiasMes)
ContadorDia += 1
DataCalendario = StringToDate(AnoAtual + NumeroComZeroDireita(Mes,"00") + NumeroComZeroDireita(ContadorDia,"00"),"YYYYMMDD")
StructCalendario.Dia = ContadorDia
StructCalendario.Mes = Mes
StructCalendario.Ano = AnoAtual
StructCalendario.DiaSemana = RetornaDiaSemana(ContadorDia,Mes,AnoAtual,"","")
StructCalendario.MesNome = "Nov"
StructCalendario.DataCalendario = DataCalendario
StructCalendario.InicioFim = ""
StructCalendario.MsgBase = ""
StructCalendario.MsgTopo = "Nov"
StructCalendario.Seleciona = ""
StructCalendario.CorAtual = ""
arrCalendario[StructCalendario:DataCalendario] = StructCalendario
IF Verifica = False THEN
nErros += 1
END
END
ELSE IF Mes = 12
QtdeDiasMes = 31
ContadorDia = 0
LOOP (QtdeDiasMes)
ContadorDia += 1
DataCalendario = StringToDate(AnoAtual + NumeroComZeroDireita(Mes,"00") + NumeroComZeroDireita(ContadorDia,"00"),"YYYYMMDD")
StructCalendario.Dia = ContadorDia
StructCalendario.Mes = Mes
StructCalendario.Ano = AnoAtual
StructCalendario.DiaSemana = RetornaDiaSemana(ContadorDia,Mes,AnoAtual,"","")
StructCalendario.MesNome = "Dez"
StructCalendario.DataCalendario = DataCalendario
StructCalendario.InicioFim = ""
StructCalendario.MsgBase = ""
StructCalendario.MsgTopo = "Dez"
StructCalendario.Seleciona = ""
StructCalendario.CorAtual = ""
arrCalendario[StructCalendario:DataCalendario] = StructCalendario
IF Verifica = False THEN
nErros += 1
END
END
END
END
END
IF Verifica = False OR nErros > 0 THEN
ok = False
ELSE
ok = True
END
FOR EACH StructCalendario OF arrCalendario
Info("Dia = " + StructCalendario:Dia)
Info("Mes = " + StructCalendario:Mes)
Info("Ano = " + StructCalendario:Ano)
END
RESULT(ok)
Procedure AmontagemCalendario()
nHoje is int = Middle(DateSys(),7,2)
MsgCima = ""
nAnoAnterior is int = Val(Middle(DateSys(),1,4)) - 1
nAnoAtual is int = Val(Middle(DateSys(),1,4))
nAnoPosterior is int = Val(Middle(DateSys(),1,4)) + 1
AnoClick01 = nAnoAtual
AnoClick02 = nAnoAtual
nMesAnterior is int = Val(Middle(DateSys(),5,2)) - 1
IF nMesAnterior > 0
nMesAnterior = Val(Middle(DateSys(),5,2)) - 1
ELSE
nMesAnterior = 12
END
MesNomeAnterior = RetornaNomeMes(nMesAnterior)
nMesAtual is int = Val(Middle(DateSys(),5,2))
MesNomeAtual = RetornaNomeMes(nMesAtual)
nMesPosterior is int = Val(Middle(DateSys(),5,2)) + 1
IF nMesPosterior <= 12
nMesPosterior = Val(Middle(DateSys(),5,2)) + 1
ELSE
nMesPosterior = 1
END
MesNomePosterior = RetornaNomeMes(nMesPosterior)
EscondeTracos()
LimpaTodasPalavrasSuperiores()
LimpaTodasPalavrasInferiores()
PintaTudodePretoBranco()
PintaSabadoDomingo()
QteDiasMesAnterior is int = CalcQtdeDiasMes(nMesAnterior, nAnoAtual)
DefineDiasMesAnterior(QteDiasMesAnterior)
QteDiasMesAtual is int = CalcQtdeDiasMes(nMesAtual, nAnoAtual)
BotaoInicial is int = DefineDiasMesAtual(QteDiasMesAtual)
QteDiasMesPosterior is int = CalcQtdeDiasMes(nMesAtual, nAnoAtual)
DefineDiasMesPosterior(QteDiasMesPosterior,BotaoInicial)
MesdoBotao(MesNomeAnterior, MesNomeAtual, QteDiasMesAtual, MesNomePosterior)
Procedure CalcQtdeDiasMes(LOCAL Mes, LOCAL Ano)
nQtdeDiasMes is int = 0
IF Mes = 01 THEN
nQtdeDiasMes = 31
ELSE IF Mes = 02 THEN
ValorDecimal is real = Ano / 4
ValorInteiro is int = Ano / 4
IF ValorDecimal <> ValorInteiro
nQtdeDiasMes = 28
ELSE IF ValorDecimal = ValorInteiro
nQtdeDiasMes = 29
END
ELSE IF Mes = 03 THEN
nQtdeDiasMes = 31
ELSE IF Mes = 04 THEN
nQtdeDiasMes = 30
ELSE IF Mes = 05 THEN
nQtdeDiasMes = 31
ELSE IF Mes = 06 THEN
nQtdeDiasMes = 30
ELSE IF Mes = 07 THEN
nQtdeDiasMes = 31
ELSE IF Mes = 08 THEN
nQtdeDiasMes = 31
ELSE IF Mes = 09 THEN
nQtdeDiasMes = 30
ELSE IF Mes = 10 THEN
nQtdeDiasMes = 31
ELSE IF Mes = 11 THEN
nQtdeDiasMes = 30
ELSE IF Mes = 12 THEN
nQtdeDiasMes = 31
END
RESULT(nQtdeDiasMes)
Procedure ClickDuplo(LOCAL NumeroBotao)
NomeBotao is string = "BTN_Dia" + NumeroComZeroDireita(NumeroBotao,"000")
MesBotao is string = "STC_MsgCima" + NumeroComZeroDireita(NumeroBotao,"000")
IF DuploClick01 = 0 AND DuploClick02 = 0
DuploClick01 = NumeroBotao
DuploClick02 = 0
{NomeBotao, indControl}..BrushColor = RGB(49,159,218)
MesClick01 = {MesBotao,indControl}..Value
ExibeTracoInicio(NumeroBotao)
DataInicial = {NomeBotao,indControl}..Value
ELSE IF DuploClick01 <> 0 AND DuploClick02 = 0
DuploClick02 = NumeroBotao
{NomeBotao, indControl}..BrushColor = RGB(49,159,218)
MesClick02 = {MesBotao,indControl}..Value
PintaIntervalo(DuploClick01,DuploClick02)
ExibeTracoFim(NumeroBotao)
DataFinal = {NomeBotao,indControl}..Value
ELSE IF DuploClick01 <> 0 AND DuploClick02 <> 0
DuploClick01 = 0
DuploClick02 = 0
{NomeBotao, indControl}..BrushColor = White
PintaTudodePretoBranco()
PintaSabadoDomingo()
EscondeTracos()
ELSE
DuploClick01 = 0
DuploClick02 = 0
{NomeBotao, indControl}..BrushColor = White
PintaTudodePretoBranco()
PintaSabadoDomingo()
EscondeTracos()
END
IF DataInicial <> "" AND DataFinal <> ""
BTN_DataAtual..Value = "De "+ DataInicial +"/"+ MesClick01 +"/"+ AnoClick01 + " até " + DataFinal + "/" + MesClick02 +"/"+ AnoClick02
ELSE
BTN_DataAtual..Value = "Selecione o intervalo de datas"
END
Procedure ClickSimples(LOCAL NumeroBotao)
NomeBotao is string = "BTN_Dia" + NumeroComZeroDireita(NumeroBotao,"000")
MesBotao is string = "STC_MsgCima" + NumeroComZeroDireita(NumeroBotao,"000")
IF SimplesClick01 = 0 AND SimplesClick02 = 0
SimplesClick01 = NumeroBotao
SimplesClick02 = 0
{NomeBotao, indControl}..BrushColor = RGB(49,159,218)
MesClick01 = {MesBotao,indControl}..Value
ExibeTracoInicio(NumeroBotao)
DataInicial = {NomeBotao,indControl}..Value
ELSE IF SimplesClick01 <> 0 AND SimplesClick02 = 0
SimplesClick02 = NumeroBotao
{NomeBotao, indControl}..BrushColor = RGB(49,159,218)
MesClick02 = {MesBotao,indControl}..Value
PintaIntervalo(SimplesClick01,SimplesClick02)
ExibeTracoFim(NumeroBotao)
DataFinal = {NomeBotao,indControl}..Value
ELSE IF SimplesClick01 <> 0 AND SimplesClick02 <> 0
SimplesClick01 = 0
SimplesClick02 = 0
{NomeBotao, indControl}..BrushColor = White
PintaTudodePretoBranco()
PintaSabadoDomingo()
EscondeTracos()
ELSE
SimplesClick01 = 0
SimplesClick02 = 0
{NomeBotao, indControl}..BrushColor = White
PintaTudodePretoBranco()
PintaSabadoDomingo()
EscondeTracos()
END
IF DataInicial <> "" AND DataFinal <> ""
BTN_DataAtual..Value = "De "+ DataInicial +"/"+ MesClick01 +"/"+ AnoClick01 + " até " + DataFinal + "/" + MesClick02 +"/"+ AnoClick02
ELSE
BTN_DataAtual..Value = "Selecione o intervalo de datas"
END
Procedure DefineDiasMesAnterior(LOCAL QtdeDiasMesAnterior)
Contador is int = 0
BTN_Dia is string = "BTN_Dia"
MenosQuinzeDias is int = QtdeDiasMesAnterior - 15
LOOP (15)
Contador += 1
MenosQuinzeDias += 1
BTN_Dia = "BTN_Dia"
BTN_Dia = BTN_Dia + NumeroComZeroDireita(Contador,"000")
{BTN_Dia, indControl}..Value = MenosQuinzeDias
END
Procedure DefineDiasMesAtual(LOCAL QtdeDiasMesAtual)
Contador is int = 15
BTN_Dia is string = "BTN_Dia"
TodosDias is int = 0
LOOP (QtdeDiasMesAtual)
Contador += 1
TodosDias += 1
BTN_Dia = "BTN_Dia"
BTN_Dia = BTN_Dia + NumeroComZeroDireita(Contador,"000")
{BTN_Dia, indControl}..Value = TodosDias
END
BotaoInicial is int = Contador
RESULT(BotaoInicial)
Procedure DefineDiasMesPosterior(LOCAL QtdeDiasMesPosterior, LOCAL BotaoInicial)
Contador is int = BotaoInicial
BTN_Dia is string = "BTN_Dia"
TodosDias is int = 0
LOOP (QtdeDiasMesPosterior)
Contador += 1
IF Contador > 70 THEN
BREAK
END
TodosDias += 1
BTN_Dia = "BTN_Dia"
BTN_Dia = BTN_Dia + NumeroComZeroDireita(Contador,"000")
{BTN_Dia, indControl}..Value = TodosDias
END
Procedure EscondeTracos()
Contador is int = 0
TracoInicio, TracoFim is string = ""
LOOP (70)
Contador += 1
TracoInicio = "STC_Inicio"
TracoInicio = TracoInicio + NumeroComZeroDireita(Contador,"000")
{TracoInicio, indControl}..Visible = False
TracoFim = "STC_Fim"
TracoFim = TracoFim + NumeroComZeroDireita(Contador,"000")
{TracoFim, indControl}..Visible = False
END
Procedure ExibeTracoFim(LOCAL NumeroBotao)
TracoFim is string = ""
TracoFim = "STC_Fim"
TracoFim = TracoFim + NumeroComZeroDireita(NumeroBotao,"000")
{TracoFim, indControl}..Visible = True
Procedure ExibeTracoInicio(LOCAL NumeroBotao)
TracoInicio is string = ""
TracoInicio = "STC_Inicio"
TracoInicio = TracoInicio + NumeroComZeroDireita(NumeroBotao,"000")
{TracoInicio, indControl}..Visible = True
Procedure LimpaTodasPalavrasInferiores()
Contador is int = 0
MsgBaixo is string = ""
LOOP (70)
Contador += 1
MsgBaixo = "STC_MsgBaixo"
MsgBaixo = MsgBaixo + NumeroComZeroDireita(Contador,"000")
{MsgBaixo, indControl}..Value = ""
END
Procedure LimpaTodasPalavrasSuperiores()
Contador is int = 0
MsgBaixo is string = ""
LOOP (70)
Contador += 1
MsgBaixo = "STC_MsgCima"
MsgBaixo = MsgBaixo + NumeroComZeroDireita(Contador,"000")
{MsgBaixo, indControl}..Value = ""
END
Procedure MesdoBotao(LOCAL MesAnterior, LOCAL MesAtual, LOCAL QtdeDiasMesAtual, LOCAL MesPosterior)
Contador, cont is int = 0
QtdeDiasMesAtual = QtdeDiasMesAtual + 16
QtdeDiasMesAtualMaisUm is int = QtdeDiasMesAtual
MsgCima = ""
LOOP (70)
Contador += 1
MsgCima = "STC_MsgCima"
MsgCima = MsgCima + NumeroComZeroDireita(Contador,"000")
IF Contador < 16
{MsgCima, indControl}..Value = MesAnterior
ELSE IF Contador >= 16 AND Contador <= QtdeDiasMesAtual AND Contador < QtdeDiasMesAtualMaisUm
{MsgCima, indControl}..Value = MesAtual
cont+=1
ELSE IF Contador >= QtdeDiasMesAtualMaisUm AND Contador <= 70
{MsgCima, indControl}..Value = MesPosterior
END
END
Procedure NumeroComZeroDireita(LOCAL Numero, LOCAL nQtdeCasasMascara)
sNumComZeros is string = Numero
IF Numero <> "" THEN
nQtdeCasasNumero is int = Length(Numero)
nQtdeMascara is int = Length(nQtdeCasasMascara)
nDiferenca is int = nQtdeMascara - nQtdeCasasNumero
IF nDiferenca > 0 THEN
Zeros is string = ""
LOOP (nDiferenca)
Zeros += "0"
END
sNumComZeros = Zeros + sNumComZeros
END
END
RESULT(sNumComZeros)
Procedure PintaIntervalo(LOCAL Inicio, LOCAL Fim)
Total, Contador is int = 0
IF Val(Fim) > Val(Inicio)
Total = Val(Fim) - Val(Inicio) - 1
ELSE IF Val(Fim) < Val(Inicio)
PintaTudodePretoBranco()
ELSE
Total = 0
END
Contador = Inicio
LOOP (Total)
Contador += 1
IF Contador > 70 THEN
BREAK
END
NomeBotao is string = "BTN_Dia" + NumeroComZeroDireita(Contador,"000")
{NomeBotao, indControl}..BrushColor = RGB(102,204,255)
END
Procedure PintaSabadoDomingo()
NomeBotao is string = ""
NomeBotao = "BTN_Dia001"
{NomeBotao, indControl}..BrushColor = RGB(255,128,0)
NomeBotao = "BTN_Dia008"
{NomeBotao, indControl}..BrushColor = RGB(255,128,0)
NomeBotao = "BTN_Dia015"
{NomeBotao, indControl}..BrushColor = RGB(255,128,0)
NomeBotao = "BTN_Dia022"
{NomeBotao, indControl}..BrushColor = RGB(255,128,0)
NomeBotao = "BTN_Dia029"
{NomeBotao, indControl}..BrushColor = RGB(255,128,0)
NomeBotao = "BTN_Dia036"
{NomeBotao, indControl}..BrushColor = RGB(255,128,0)
NomeBotao = "BTN_Dia043"
{NomeBotao, indControl}..BrushColor = RGB(255,128,0)
NomeBotao = "BTN_Dia050"
{NomeBotao, indControl}..BrushColor = RGB(255,128,0)
NomeBotao = "BTN_Dia057"
{NomeBotao, indControl}..BrushColor = RGB(255,128,0)
NomeBotao = "BTN_Dia064"
{NomeBotao, indControl}..BrushColor = RGB(255,128,0)
NomeBotao = "BTN_Dia007"
{NomeBotao, indControl}..BrushColor = RGB(255,128,0)
NomeBotao = "BTN_Dia014"
{NomeBotao, indControl}..BrushColor = RGB(255,128,0)
NomeBotao = "BTN_Dia021"
{NomeBotao, indControl}..BrushColor = RGB(255,128,0)
NomeBotao = "BTN_Dia028"
{NomeBotao, indControl}..BrushColor = RGB(255,128,0)
NomeBotao = "BTN_Dia035"
{NomeBotao, indControl}..BrushColor = RGB(255,128,0)
NomeBotao = "BTN_Dia042"
{NomeBotao, indControl}..BrushColor = RGB(255,128,0)
NomeBotao = "BTN_Dia049"
{NomeBotao, indControl}..BrushColor = RGB(255,128,0)
NomeBotao = "BTN_Dia056"
{NomeBotao, indControl}..BrushColor = RGB(255,128,0)
NomeBotao = "BTN_Dia063"
{NomeBotao, indControl}..BrushColor = RGB(255,128,0)
NomeBotao = "BTN_Dia070"
{NomeBotao, indControl}..BrushColor = RGB(255,128,0)
Procedure PintaTudodePretoBranco()
Contador is int = 0
NomeBotao is string = ""
LOOP (70)
Contador += 1
NomeBotao = "BTN_Dia"
NomeBotao = NomeBotao + NumeroComZeroDireita(Contador,"000")
{NomeBotao, indControl}..BrushColor = White
END
Contador = 0
NomeBotao = ""
LOOP (70)
Contador += 1
NomeBotao = "BTN_Dia"
NomeBotao = NomeBotao + NumeroComZeroDireita(Contador,"000")
{NomeBotao, indControl}..Color = Black
END
Procedure RetornaDiaSemana(LOCAL sDia , LOCAL sMes , LOCAL sAno, LOCAL DiaMesAno, LOCAL AnoMesDia)
DiaSemana, dDataConsulta is string = ""
IF (sDia <> "" AND sMes <> "" AND sAno <> "") OR (DiaMesAno <> "") OR (AnoMesDia <> "") THEN
IF (sDia <> "" AND sMes <> "" AND sAno <> "") AND (DiaMesAno = "") AND (AnoMesDia = "")
dDataConsulta = Val(sAno + NumeroComZeroDireita(sMes,"00") + NumeroComZeroDireita(sDia,"00"))
ELSE IF (sDia = "" AND sMes = "" AND sAno = "") AND (DiaMesAno <> "") AND (AnoMesDia = "")
dDataConsulta = Val( Middle(DiaMesAno,5,4) + Middle(DiaMesAno,3,2) + Middle(DiaMesAno,1,2))
ELSE IF (sDia = "" AND sMes = "" AND sAno = "") AND (DiaMesAno = "") AND (AnoMesDia <> "")
dDataConsulta = Val(AnoMesDia)
END
SWITCH DateToDay(dDataConsulta)
CASE 1
DiaSemana = "Seg"
CASE 2
DiaSemana = "Ter"
CASE 3
DiaSemana = "Qua"
CASE 4
DiaSemana = "Qui"
CASE 5
DiaSemana = "Sex"
CASE 6
DiaSemana = "Sab"
CASE 7
DiaSemana = "Dom"
END
END
RESULT(DiaSemana)
Procedure RetornaNomeMes(LOCAL Mes)
NomeMes is string = ""
IF Mes = 1 THEN
NomeMes = "Jan"
ELSE IF Mes = 2
NomeMes = "Fev"
ELSE IF Mes = 3
NomeMes = "Mar"
ELSE IF Mes = 4
NomeMes = "Abr"
ELSE IF Mes = 5
NomeMes = "Mai"
ELSE IF Mes = 6
NomeMes = "Jun"
ELSE IF Mes = 7
NomeMes = "Jul"
ELSE IF Mes = 8
NomeMes = "Ago"
ELSE IF Mes = 9
NomeMes = "Set"
ELSE IF Mes = 10
NomeMes = "Out"
ELSE IF Mes = 11
NomeMes = "Nov"
ELSE IF Mes = 12
NomeMes = "Dez"
END
RESULT(NomeMes)
Procedure RetornaNumeroMes(LOCAL NomeMes)
NumeroMes is string = ""
IF NomeMes = "Jan" THEN
NumeroMes = "01"
ELSE IF NomeMes = "Fev" THEN
NumeroMes = "02"
ELSE IF NomeMes = "Mar" THEN
NumeroMes = "03"
ELSE IF NomeMes = "Abr" THEN
NumeroMes = "04"
ELSE IF NomeMes = "Mai" THEN
NumeroMes = "05"
ELSE IF NomeMes = "Jun" THEN
NumeroMes = "06"
ELSE IF NomeMes = "Jul" THEN
NumeroMes = "07"
ELSE IF NomeMes = "Ago" THEN
NumeroMes = "08"
ELSE IF NomeMes = "Set" THEN
NumeroMes = "09"
ELSE IF NomeMes = "Out" THEN
NumeroMes = "10"
ELSE IF NomeMes = "Nov" THEN
NumeroMes = "11"
ELSE IF NomeMes = "Dez" THEN
NumeroMes = "12"
END
RESULT(NumeroMes)
botão cancelar
MesClick01 = RetornaNumeroMes(MesClick01)
MesClick02 = RetornaNumeroMes(MesClick02)
gsDataInicial = DataInicial +"/"+ MesClick01 +"/"+ AnoClick01
gsDataFinal = DataFinal +"/"+ MesClick02 +"/"+ AnoClick02
Info("Selecionou esse intervalo de data:",gsDataInicial,gsDataFinal)
Close()
Código de cada Botão do Calendario
Exemplo botão 01
Exemplo botão 02
Lista de Objetos
Resultado Final
Selecionando um intervalo de datas
Lembro que o Windev possui nativo o controle de calendário e agenda, o exemplo acima é apenas para treinar a técnica de programação.
Sendo assim qualquer dúvida entrem em contato.
--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/