PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 24 → WX - Controle Calendario Boller
WX - Controle Calendario Boller
Iniciado por adrianoboller, mai., 09 2016 8:35 PM - 2 respostas
Membro registado
2.949 mensagems
Popularité : +89 (91 votes)
Publicado em maio, 09 2016 - 8:35 PM
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:

//Globais do Calendário

//////////////////////////////////////////////////////////////////////
//Queue
//////////////////////////////////////////////////////////////////////
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
//////////////////////////////////////////////////////////////////////

//Variaveis

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

//Carga de inicio do calendario

//ok = ACargaInicial(3)

ok = True

IF ok = False THEN
Info("Erro ao criar a base de dados do calendario")
Close()
ELSE
AmontagemCalendario()
END



Procedure ACargaInicial(LOCAL QtdeAnosAntecessores)

//3 Anos Antes - 3 Anos Depois

//QUEUE GLOBAL - Inicializacao
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

//Dias de Janeiro
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

//Bissexto
ValorDecimal = AnoAtual / 4
ValorInteiro = AnoAtual / 4
IF ValorDecimal <> ValorInteiro
QtdeDiasMes = 28 //365 dias
ELSE IF ValorDecimal = ValorInteiro
QtdeDiasMes = 29 //366 dias
END

//Dias de Fevereiro
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

//Dias de Março
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

//Dias de Abril
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

//Dias de Maio
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

//Dias de junho
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

//Dias de Julho
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

//Dias de Agosto
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

//Dias de Setembro
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

//Dias de Outubro
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

//Dias de Novembro
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

//Dias de Dezembro
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

//Validade do processamento se ocorreu tudo certo
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()

//Variaveis
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

//Mes Anterior
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)

//Mes Atual
nMesAtual is int = Val(Middle(DateSys(),5,2))
MesNomeAtual = RetornaNomeMes(nMesAtual)

//Mes Anterior
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)

//Esconder todos os tracos de inicio e fim
EscondeTracos()

//Limpa a palavra superior
LimpaTodasPalavrasSuperiores()

//Limpa a palavra inferior
LimpaTodasPalavrasInferiores()

//Preto e Branco
PintaTudodePretoBranco()

//Pinta de laranja Sabado e Domingo
PintaSabadoDomingo()

//15 dias do Mes Anterior
QteDiasMesAnterior is int = CalcQtdeDiasMes(nMesAnterior, nAnoAtual)
DefineDiasMesAnterior(QteDiasMesAnterior)

//28/29/30/31 do mes atual
QteDiasMesAtual is int = CalcQtdeDiasMes(nMesAtual, nAnoAtual)
BotaoInicial is int = DefineDiasMesAtual(QteDiasMesAtual)

//15 dias do Mes Posterior
QteDiasMesPosterior is int = CalcQtdeDiasMes(nMesAtual, nAnoAtual)
DefineDiasMesPosterior(QteDiasMesPosterior,BotaoInicial)

//Meses nos botoes
MesdoBotao(MesNomeAnterior, MesNomeAtual, QteDiasMesAtual, MesNomePosterior)


//Cor de Fundo do Botao Hoje
// NomeBotao = "BTN_Dia016"
// {NomeBotao, indControl}..BrushColor = White
// {NomeBotao, indControl}..BrushColor = RGB(51,153,255) //Vai ser azul quando for hj ou estiver na selecao
// {NomeBotao, indControl}..Color = White
// {NomeBotao, indControl}..Text = nHoje
// TracoInicio = "STC_Inicio016"
// {TracoInicio, indControl}..Visible = true
// MsgCima = "STC_MsgBaixo016"
// {MsgCima, indControl}..Value = "Hoje"
// MsgBaixo = "STC_MsgCima016"
// {MsgBaixo, indControl}..Value = MesNomeAtual



Procedure CalcQtdeDiasMes(LOCAL Mes, LOCAL Ano)

nQtdeDiasMes is int = 0

IF Mes = 01 THEN

nQtdeDiasMes = 31

ELSE IF Mes = 02 THEN

//Bissexto
ValorDecimal is real = Ano / 4
ValorInteiro is int = Ano / 4
IF ValorDecimal <> ValorInteiro
nQtdeDiasMes = 28 //365 dias
ELSE IF ValorDecimal = ValorInteiro
nQtdeDiasMes = 29 //366 dias
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
//Pinta intervalo
PintaIntervalo(DuploClick01,DuploClick02)
ExibeTracoFim(NumeroBotao)
DataFinal = {NomeBotao,indControl}..Value
ELSE IF DuploClick01 <> 0 AND DuploClick02 <> 0
//Branqueia Tudo e muda para azul esse campo
DuploClick01 = 0
DuploClick02 = 0
{NomeBotao, indControl}..BrushColor = White
PintaTudodePretoBranco()
PintaSabadoDomingo()
EscondeTracos()
ELSE
//Branqueia Tudo inclusive esse campo
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
//Pinta intervalo
PintaIntervalo(SimplesClick01,SimplesClick02)
ExibeTracoFim(NumeroBotao)
DataFinal = {NomeBotao,indControl}..Value
ELSE IF SimplesClick01 <> 0 AND SimplesClick02 <> 0
//Branqueia Tudo e muda para azul esse campo
SimplesClick01 = 0
SimplesClick02 = 0
{NomeBotao, indControl}..BrushColor = White
PintaTudodePretoBranco()
PintaSabadoDomingo()
EscondeTracos()
ELSE
//Branqueia Tudo inclusive esse campo
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)

//QtdeDiasMesAnterior

Contador is int = 0

BTN_Dia is string = "BTN_Dia"

MenosQuinzeDias is int = QtdeDiasMesAnterior - 15 //28 - 15 = 13

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)

//QtdeDiasMesAnterior

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)

//QtdeDiasMesAnterior

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)
//1, 00

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) //azul claro da selecao

END



Procedure PintaSabadoDomingo()

NomeBotao is string = ""

//Domingo 1, 8 , 15, 22, 29, 36, 43, 50, 57, 64
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)

//Sabado 7, 14, 21, 28, 35, 42, 49, 56, 63, 70
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()

//Cor Branca de Fundo de Todos
Contador is int = 0
NomeBotao is string = ""
LOOP (70)
Contador += 1
NomeBotao = "BTN_Dia"
NomeBotao = NomeBotao + NumeroComZeroDireita(Contador,"000")
{NomeBotao, indControl}..BrushColor = White
END

//Cor Preta da letra de Todos
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

//Data Selecionada

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.

:merci:

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
2.949 mensagems
Popularité : +89 (91 votes)
Publicado em maio, 24 2016 - 7:20 PM
Prezados,

Outro exemplo






ou

//Exemplo
i est un entier = 1
sChaine est une chaîne
sChaine1 est une chaîne
ResChamp est une chaîne
ResChamp = EnumèreChamp(MaFenêtre, i)
TANTQUE ResChamp <> ""
i++
SI {ResChamp}..Type = typFil ALORS
sChaine = {ResChamp}..ChampDépart
sChaine1 = {ResChamp}..ChampArrivée
Trace(ResChamp + " ChampDépart/Arri : " + sChaine + "/"+ sChaine1)
FIN
ResChamp = EnumèreChamp(MaFenêtre, i)
FIN



:merci:

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Mensagem modificada, maio, 24 2016 - 7:24 PM
Membro registado
2.949 mensagems
Popularité : +89 (91 votes)
Publicado em julho, 27 2016 - 12:24 AM
Link complementar:

http://doc.windev.com/en-US/…

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/