Usando o Controle MonthView com ADO e MSHFlexGrid
O Visual Basic 6 trouxe alguns controles novos. Dentre eles temos o controle MonthView que permite ao usuário uma interface com um calendário quando fazemos entradas/tratamento de datas.
Para usar este controle você tem que incluir o arquivo MSCOMCT2.OCX - Microsoft Windows Commons Controls - ao seu projeto, e quando você for distribuir sua aplicação esta OCX deverá estar presente no diretório System do Windows.(Voce deverá providenciar a instalação da Ocx durante a instalação do aplicativo...)
É muito fácil configurar a aparência deste controle , pois ele possui muitos atributos para cores :
Se você quiser pode exibir mais de um mês usando o controle. Para isto basta definir as propriedades MonthRows e MonthColumns com valores de forma que seu produto seja seja menor ou igual a 12. Assim definindo MonthRows=2 e MonthColumns=2 teremos :
A propriedade Value do controle MonthView retorna a data atual selecionada. Assim para você capturar a data selecionada pelo usuário quando ele clicar no 'calendário' basta usar a propriedade Value . Ex: MonthView.Value retorna a data definida no formato aa/mm/yyyy.
As propriedades day , month e year retorna respectivamente o dia , o mês e o ano selecionado pelo usuário ao clicar no controle MonthView. Ex: MonthView1.day , MonthView1.Month , MonthView1.Year
Você pode permitir a seleção de uma faixa de dates
contínuas definindo a propriedade MultiSelect como True e especificando
o número de dias que podem ser selecionados através da propriedade MaxSelProperty.
As propriedades SelStart e SelEnd retornam o dia inicial e o dia
final da seleção. Ex:
MonthView1.Value = "31/10/97"
, MonthView1.MaxSelCount = 3 , MonthView1.SelStart = "25/10/97"
MonthView1.SelEnd = "31/10//97"
Além disto as propriedades MinDate , MaxDate definem a data mínima e a data máxima permitida.
A propriedade StartOfWeek permite que você defina o dia que irá ser exibido na primeira coluna da esquerda do calendário. Os valores permitidos são: Ex: MonthView1.StartOfWeek = mvwSunday
Constante | Valor |
Descrição |
mvwSunday | 1 | (Default) Sunday - Domingo |
mvwMonday | 2 | Monday - Segunda |
mvwTuesDay | 3 | Tuesday - Terça |
mvwWednesday | 4 | Wednesday - Quarta |
mvwThursday | 5 | Thursday - Quinta |
mvwFriday | 6 | Friday - Sexta |
mvwSaturday | 7 | Saturday - Sabado |
Você pode usar os eventos DateClick e/ou DateDblClicked para retornar a data selecionada pelo usuário através do valor de DateClicked e DateDblClicked retornados respectivamente pelos citados eventos.
Um exemplo Prático
Vamos mostrar agora um exemplo prático usando o controle MonthView . Neste exemplo estaremos exibindo em um controle MSHFlexGrid os dados de um banco de dados - Pacientes.mdb - estes dados são as consultas marcadas dos pacientes que estão presentes na tabela Consultas.mdb. O usuário irá selecionar as datas para as quais deseja ver se há consultas marcadas através de um controle MonthView . Imediatamente as consultas para a data selecionada será exibida no controle MSHFlexGrid.
A estrutura da tabela Consulta é a seguinte:
-Inicie um novo projeto no Visual Basic e no formulário padrão inclua os seguintes controles: MSHFlexGrid , MonthView , Label e CommandButton , conforme figura abaixo:
Na seção General Declarations iremos definir as variáveis que devem ser visíveis em todo o formulário:
Dim cnPacientes As
ADODB.Connection Dim rsConsultas As ADODB.Recordset Option Explicit |
A seguir no evento Load do formulário, abrimos a conexão com o banco de dados e estamos 'forçando' o controle a iniciar com a mês e o ano atual , e , a seguir chamamos a procedure - ExibeConsultas.
Private Sub Form_Load() Dim sConexao As String Set cnPacientes = New ADODB.Connection sConexao = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Pacientes.mdb" cnPacientes.Open (sConexao) With MonthView1 |
A procedure ExibeConsultas cria o objeto recordset , a instrução SQL e abre o recordset. A seguir preenche o MSHFlexGrid com os dados do recordset.
Private Sub ExibeConsultas_Click() Dim SQL As String Dim icol As Integer Set rsConsultas = New ADODB.Recordset SQL = "SELECT * FROM Consultas ORDER BY ConsultaData, ConsultaHora " Set rsConsultas.ActiveConnection = cnPacientes rsConsultas.Open SQL With MSHFlexGrid1 ' aqui damos nome aos
cabeçalhos das colunas .TextMatrix(0, 0) = "Código" |
O código do evento Click do controle MonthView irá ocorrer quando o usuário clica em um dia do calendário para selecionar uma data. O código abaixo seleciona através de uma instrução SQL as consultas referente ao dia selecionado e as exibe no grid.
Private Sub MonthView1_DateClick(ByVal DateClicked As Date) Dim SQL As String Dim AppDate Dim icol As Integer Set rsConsultas = New ADODB.Recordset SQL = "SELECT * From Consultas WHERE ConsultaData =#" & SQLData(DateClicked) & "#" & " ORDER BY ConsultaData, ConsultaHora" & ";" Set rsConsultas.ActiveConnection = cnPacientes rsConsultas.Open SQL With MSHFlexGrid1 .Rows = 1 .Cols = rsConsultas.Fields.Count For icol = 0 To rsConsultas.Fields.Count - 1 .Col = icol .Text = rsConsultas.Fields(icol).Name Next While Not rsConsultas.EOF ' preenche o grid com os dados do recordset .Rows = .Rows + 1 .Row = .Rows - 1 For icol = 0 To rsConsultas.Fields.Count - 1 .Col = icol .Text = rsConsultas(icol) & "" Next rsConsultas.MoveNext Wend .TextMatrix(0, 0) = "Código" |
A procedure que ajusta as células do grid ao tamanho dos campos a serem exibidos é a seguinte:
Private Sub AjustaColunas(ByVal flx As MSHFlexGrid) Dim max_wid As Single Dim wid As Single Dim max_row As Integer Dim r As Integer Dim c As Integer max_row = flx.Rows - 1 For c = 0 To flx.Cols - 1 max_wid = 0 For r = 0 To max_row wid = TextWidth(flx.TextMatrix(r, c)) If max_wid < wid Then max_wid = wid Next r flx.ColWidth(c) = max_wid + 400 Next c End Sub |
Finalmente a procedure SQLData - que ajusta as datas para o formato (mm/dd/aaaa) e a retorna a data como uma string - é exibida a seguir:
Public Function SQLData(ConverteData As Date) As String SQLData = Format(ConverteData, "mm/dd/yyyy") End Function |
Ao executar a aplicação teremos:
Quando o usuário clicar numa data no calendário , por exemplo no dia 20, iremos obter:
Preciso falar mais alguma coisa ? Tchau....