No artigo de hoje, vou mostrar como mudar o título de um dia na montagem de um FWCalendar.
Esse artigo foi montado com a ajuda do grande Alexandre Behling ( LinkedIn ).
Antes de começarmos o tutorial, se você nunca usou FWCalendar, segue um artigo com exemplo completo – Exemplo de tela com FWCalendar.
Agora vindo para nosso exemplo, em uma tela feito com FWCalendar, usuários me perguntaram se existia a possibilidade de alterar o título de um dia, para identificar se é um Feriado ou um Fim de Semana.
Então na montagem do calendário, a lógica seria a seguinte:
- Durante o laço de repetição que percorre todos os dias
- Pega o dia atual, e deixa com dois dígitos
- Se o dia atual não for uma data válida
- Se o dia da semana for 1 (domingo) ou 7 (sábado), terá o texto FDS, senão terá o texto Feriado
- Define o texto e a cor do texto como vermelho
- Se a data for válida, será apenas o dia e a cor do texto em azul
Abaixo um print de exemplo do mês de Janeiro de 2021:
E abaixo o código fonte desenvolvido:
dDataAtu := oCalend:aCell[nCell][DATADIA] cObsText := "" cDia := StrZero(Day(dDataAtu), 2) //Se a data não for válida If DataValida(dDataAtu) != dDataAtu //Se for domingo ou sábado, será FDS senão será FERIADO If Dow(dDataAtu) == 1 .Or. Dow(dDataAtu) == 7 cObsText := "FDS" Else cObsText := "FERIADO" EndIf //Define o título da célula cHtml := '<html><p style="color: #ff0000;"><b>' + cDia + ' - ' + cObsText + '</b></p></html>' oCalend:aCell[nCell][OBJETO]:oEditTitle:cTitle := cHtml Else //Define o título da célula cHtml := '<html><p style="color: #0000ff;"><b>' + cDia + '</b></p></html>' oCalend:aCell[nCell][OBJETO]:oEditTitle:cTitle := cHtml EndIf
Bom pessoal, por hoje é só.
Abraços e até a próxima.

Tem o código fonte atualizado deste calendário? Gostaria de saber o código para criar o link para altera o Mês / Ano do calendário. O fonte disponibilizado não contém essa funcionalidade.
Bom dia Francisco. Tenho sim, basicamente a lógica é assim:
1. Crie um label que ficará entre os dois botões de navegação, e esse label terá uma função quando clicar nele (obs.: crie a variável oMesAtual como Private no começo da função)
2. Nessa função, você adiciona um Pergunte ou ParamBox solicitando a data
3. O usuário confirmando, ai você aciona a função para atualizar o mês/ano
4. Por último, na função de mudar o mês e o ano, você atualiza o label
Abaixo os trechos conforme a lógica acima:
//1. Crie um label que ficará entre os dois botões de navegação, e esse label terá uma função quando clicar nele //....... oMesAtual := TSay():New(0, 0, {|| }, oPanTitulo, , , , , , .T., 20, 20, , , , , , , , .T.) oMesAtual:Align := CONTROL_ALIGN_ALLCLIENT oMesAtual:nClrPane := nCorFundo oMesAtual:bLClicked := {|| FwMsgRun(Nil, {|| fMudMesAno()}, Nil, "Montando calendário...")} //...... //2. Nessa função, você adiciona um Pergunte ou ParamBox solicitando a data Static Function fMudMesAno() Local aArea := GetArea() Local aPergs := {} Local dData := sToD(cAno + cMes + "01") Local nMonth := 0 Local nYear := 0 //Adiciona os parâmetros aAdd(aPergs, {09, "Selecione uma data para atualizar o calendário", 200, 40, .T.}) aAdd(aPergs, {01, "Data", dData, "", ".T.", "", ".T.", 80, .T.}) //Se a pergunta for confirmada If ParamBox(aPergs, "Informe os parâmetros", /*aRet*/, /*bValid*/, /*aButtons*/, /*lCentered*/, /*nPosX*/, /*nPosY*/, /*oDlgWizard*/, /*cLoad*/, .F., .F.) nMonth := Month(MV_PAR02) nYear := Year(MV_PAR02) //3. O usuário confirmando, ai você aciona a função para atualizar o mês/ano oCalend:SetCalendar( oPanCalend, cValToChar(nMonth), cValToChar(nYear) ) fMesAno(nMonth, nYear) EndIf RestArea(aArea) Return 4. Por último, na função de mudar o mês e o ano, você atualiza o label //......... cMesAno := Capital(MesExtenso(nMonth)) + " / " + cValToChar(nYear) cTexto += '<p align="center">' cTexto += '<font face="' + cFontUti + '" color="#000000" style="font-size:14px"><strong>' + cMesAno + '</strong> (<u>clique aqui</u> para mudar mês/ano)</font>' cTexto += '</p>' oMesAtual:SetText(cTexto) //.........