DESENVOLVIMENTO DE SOFTWARE AULA 07 Editor de Texto Simples – VB .NET Editor de Texto Simples TEORIA Livro: Microsoft Visual Basic 2010 de Michael Halvorson Editora Bookman, 2011. Cap. 04, págs.. 125 – 147 Cap. 17. págs.. 443 – 464 ADS/REDES/ENGENHARIA Prof.CelsoCandido 1 DESENVOLVIMENTO DE SOFTWARE AULA 07 Editor de Texto Simples – VB .NET Áreas Funcionais: Menus de acesso; Barra de Ferramentas; Teclas de acesso; Atalhos de menus; Área de digitação; Armazenamento dinâmico de imagens; Formatação de fontes; Visualização de Impressão; Impressão; Configuração de página para impressão. ADS/REDES/ENGENHARIA Prof.CelsoCandido 2 DESENVOLVIMENTO DE SOFTWARE AULA 07 Editor de Texto Simples – VB .NET Objetos de Controles: ImageList – Lista de imagens; SaveFileDialog – Caixa de diálogo para salvar arquivos; OpenFileDialog – Caixa de diálogo para abrir arquivos; ToolStrip – Barra de Ferramentas de acesso rápido; PrintDocument – Impressão de documentos ativos; PrintDialog – Caixa de diálogo para configurar impressora e especificar as página a ser impressas; PrintPreviewDialog – Caixa de visualização de impressão; PageSetupDialog – Caixa de configuração de página simples; MenuStrip – Adicionar menus ao programa; FontDialog – Caixa de diálogo para formatar as fontes; ColorDialog para criação de caixas de diálogo padrão. ADS/REDES/ENGENHARIA Prof.CelsoCandido 3 DESENVOLVIMENTO DE SOFTWARE AULA 07 Editor de Texto Simples – VB .NET Até agora usamos vários controles do Microsoft Visual Studio Express 2008, na maioria para coletar entrada do usuário, enquanto utilizávamos um programa. Agora iremos conhecer a criação de menus, barras de ferramentas e caixas de diálogo. Um menu geralmente está localizado em uma “barra de menus” e contém uma lista de comando relacionados. Uma barra de ferramentas contém botões e outras ferramentas que realizam trabalho útil em um programa. A maioria dos comandos de menu e da barra de ferramentas são executadas imediatamente depois de clicados. ADS/REDES/ENGENHARIA Prof.CelsoCandido 4 DESENVOLVIMENTO DE SOFTWARE AULA 07 Editor de Texto Simples – VB .NET Como exemplo podemos citar quando o usuário clica no comando “Copiar” do menu “Editar”, as informações são imediatamente copiadas para a “Área de Transferência” e armazenadas na memória. Mas se o comando de menu for seguido por reticências “...”, clicar no comando, geralmente exibe uma caixa de diálogo que solicitará informações adicionais antes do comando ser executado. Incialmente veremos a utilização dos controles MenuStrip e ToolStrip e mais adiante como processar: os comando de menu, barra de ferramentas e caixas de diálogo. ADS/REDES/ENGENHARIA Prof.CelsoCandido 5 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle MenuStrip O controle MenuStrip é uma ferramenta que adiciona menus aos programas, podendo ser personalizado através das configurações de suas propriedades. Com o MenuStrip além adicionar será possível modificar, reordenar, excluir e criar atalhos. O MenuStrip irá criar somente a parte visível dos menus, submenus e comandos, precisando após tudo isso, escrever os procedimentos de eventos no “Editor de Código”. Quanto a localização dos itens do menu, o Visual Studio estará se encarregando de posiciona‐los. ADS/REDES/ENGENHARIA Prof.CelsoCandido 6 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle MenuStrip O objeto menu não será mostrado no formulário, pois são denominados objetos não visíveis, como menus e timers. Sua visualização só é visível na IDE (Integrated Devolopment Environment) em um painel separado, chamado de bandeja de componentes (component tray). Objeto MenuStrip A partir desse painel, poderemos configurar suas propriedades ou excluí‐los. Também teremos uma representação visual do objeto MenuStrip que se encontra na bandeja, na parte superior do formulário. ADS/REDES/ENGENHARIA Prof.CelsoCandido 7 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle MenuStrip A tag Digite Aqui ou Type Here, solicita que seja clicado na tag e seja inserido o título do menu. Após a inserção do primeiro título de menu, será habilitada a inserção do próximo menu ou um conjunto de submenus, bastando para isso clicar nos locais indicados, “Digite Aqui”. Caso seja necessário a mudança dos nome dos menus e submenus, poderão ser alterados, simplesmente renomeando. A interface do MenuStrip é completamente personalizável e com um pouco de imaginação poderá ser criado um conjunto de menus próximos aos das janelas do Windows. ADS/REDES/ENGENHARIA Prof.CelsoCandido 8 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle MenuStrip Se não desejarmos ter muito trabalho podemos também usar a “Inserção automática” de menus padrões Windows. Esse tipo de inserção cria os principais menus e seus submenus. Veja os passos necessários demonstrados na imagem abaixo: Exemplo: ADS/REDES/ENGENHARIA Prof.CelsoCandido 9 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle MenuStrip – Teclas de Atalho Adicionando teclas de atalho a comandos de menu ADS/REDES/ENGENHARIA Prof.CelsoCandido 10 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle MenuStrip – Teclas de Atalho Serve para executar comandos do menu apenas utilizando o teclado através de comandos de teclas, conhecido como atalhos de teclado. Selecionamos um dos menus e em sua propriedade “Text” adicionamos um “&” antes do caractere que receberá o atalho. Exemplo: “&Arquivo”. A tecla de acesso configurada pelo “&” em um item de menu será identificada com um traço de sublinhar na sua parte inferior. Exemplo: Arquivo”. Após configurada a etapa anterior, selecionamos novamente o menu “Arquivo”, caso não esteja mais selecionado, e passamos para a propriedade “Shortcukeys”, mostrada no próximo slide. ADS/REDES/ENGENHARIA Prof.CelsoCandido 11 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle MenuStrip – Teclas de Atalho A tecla “Alt” é pressionada em conjunto com a tecla “A”. O caractere sublinhado na palavra “Arquivo”, ou seja, a tecla “A”, é chamada de tecla de acesso, que trabalhará em conjunto com a tecla “Alt”. ADS/REDES/ENGENHARIA Prof.CelsoCandido 12 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle MenuStrip – Teclas de Atalho Para as demais teclas dos menus e submenus o procedimento é o mesmo: No Menu Designer, na visualização do “Form1”, selecionamos o menu que receberá a tecla de acesso e o atalho de teclado; Digitamos um “e comercial (&)” antes do caractere que será nossa tecla de acesso na propriedade “Text” e configuramos o atalho de teclado na propriedade “Shortcukeys”. Para atalhos dos itens dos menus o único procedimento diferente é o uso da tecla “Ctrl” em vez do “Alt”, como na imagem do próximo slide. ADS/REDES/ENGENHARIA Prof.CelsoCandido 13 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle MenuStrip – Teclas de Atalho A tecla “Ctrl” é pressionada em conjunto com a tecla “N”. O caractere sublinhado na palavra “Novo”, ou seja, a tecla “N”, é chamada de tecla de acesso, que trabalhará em conjunto com a tecla “Ctrl”. ADS/REDES/ENGENHARIA Prof.CelsoCandido 14 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle MenuStrip – Teclas de Atalho Nomes mais comuns de uma barra de menus, como a primeira letra sempre em maiúsculo são: Arquivo, Editar, Exibir, Formatar e Ajuda. Ao se criar itens de menus, siga algumas diretrizes: Use sempre legendas curtas e específicas, no máximo duas palavras; Sempre que necessário atribua a cada item do menu uma tecla de acesso, se possível sempre a primeira letra de cada item; Se um comando é utilizado como um alternador dos estados ativado e desativados, devemos colocar uma marca de seleção à esquerda do item quando este estiver ativo; ADS/REDES/ENGENHARIA Prof.CelsoCandido 15 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle MenuStrip – Teclas de Atalho Para se adicionar uma marca de seleção precisamos configurar a propriedade “Checked” do comando de menu como “True” na janela “Properties ou Propriedades”, referente ao item do menu. Colocar reticências (...) depois de um comando de menu indica que poderá ser aberta uma caixa de diálogo ao ser selecionada pelo usuário. Ao se finalizar a montagem dos menus e comando, estes passam a fazer parte do objeto “MenuStrip”. O próximo passo é começar a desenvolver suas funcionalidades escrevendo os procedimentos de eventos. ADS/REDES/ENGENHARIA Prof.CelsoCandido 16 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle MenuStrip Adicionando Barra de Ferramentas com o Controle ToolStrip ADS/REDES/ENGENHARIA Prof.CelsoCandido 17 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle ToolStrip Poderá se trabalhar paralelamente através do controle “MenuStrip” do VB .NET para adicionar rapidamente barras de ferramentas à interface do seu programa. É o controle “ToolStrip”, que é inserido em um formulário do VB .NET e fica ativo na bandeja de componentes do IDE, não aparecendo na execução do aplicativo, exatamente como o “MenuStrip”, na figura ao lado. Esses recursos quando usados para trabalhar juntos, poderemos adicionar vários recursos às barras de ferramentas. ADS/REDES/ENGENHARIA Prof.CelsoCandido 18 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle ToolStrip Então para adicionarmos um menu padrão Windows como o da figura 01, devemos usar um controle de tarefas ToolStrip seguindo os passos da figura 02: Figura 02 ADS/REDES/ENGENHARIA Figura 01 Incialmente clicamos na “Marca Inteligente” e depois em “Inserir Itens Padrão” e teremos nosso menu padrão inserido de forma automática. Prof.CelsoCandido 19 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle de Caixa de Diálogo O Visual Studio para o VB, contém oito controles de caixa de diálogo padrão nas guias “Dialogs” da Toolbox, que se encontram no namespace (espaço de nomes) System.IO e que precisa ser importada para a primeira linha do “código fonte” antes do “Public Class”. Exemplo: “Imports System.IO”. Essas caixas de diálogos estão prontas, portanto, não será necessário criar botões para essas funções e nem personalizar esses comando para as tarefas mais comuns nos aplicativos Windows, como abrir, salvar e imprimir arquivos. O que será necessário é o de escrever os códigos de procedimentos dos eventos que conecta essas caixas de diálogos ao programa em desenvolvimento. ADS/REDES/ENGENHARIA Prof.CelsoCandido 20 DESENVOLVIMENTO DE SOFTWARE Controle de Caixa de Diálogo AULA 07 UM RESUMO RÁPIDO DOS CONTROLES DE CAIXA DE DIÁLOGO Nome do Controle Finalidade OpenFileDialog Obtém a unidade, o nome de pasta e o nome de arquivo para um arquivo existente. SaveFileDialog Obtém a unidade, o nome de pasta e o nome de arquivo para um arquivo novo. FontDialog Permite ao usuário escolher um novo tipo de fonte e estilo. ColorDialog Permite ao usuário selecionar cores em um paleta. FolderBrowserDialog Permite ao usuário navegar pela estrutura de pastas de um computador e selecionar uma pasta. PrintDialog Permite ao usuário configurar opções de impressão. PrintPreviewDialog Exibe uma caixa de diálogo para visualizar impressão semelhante ao modo de exibição do programa Word. PageSetupDialog Permite ao usuário controlar opções de configuração de página: como margens, tamanho do papel e layout. ADS/REDES/ENGENHARIA Prof.CelsoCandido 21 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle de Caixa de Diálogo O OpenFileDialog necessita de mais algumas informações referentes a suas propriedades. Selecionando o controle OpenFileDialog que foi arrastado para o projeto temos algumas propriedades que precisam no geral sempre serem configuradas, são elas: (Name) – Nome do controle que aparece no código fonte; DefaultExt – Estabelece a extensão padrão do aplicativo. Exemplo: “txt”; FileName – Padrão em branco. Se for colocado um nome qualquer neste campo, por exemplo, “Arquivo”, toda vez que formos abrirmos um arquivo aparecerá na janela “Abrir” em seu campo “Nome:” a palavra “Arquivo”; ADS/REDES/ENGENHARIA Prof.CelsoCandido 22 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle de Caixa de Diálogo Filter – Aqui teremos que digitar em uma determinada ordem de leitura para que possa ser apresentado os arquivos para abertura na área de trabalho do programa. Exemplo de instrução: “Todos os Arquivos (*.*)|*.*|Textos (*.txt)|*.txt|WorPad (*.rtf)|*.rtf”, onde temos: o Três tipos de procura de arquivos: *.*, *.txt e *.rtf; o Várias barras “|” separando as informações; o O item “Todos os Arquivos (*.*)|*.* está indicando para VB duas informações interligadas: • Todos os Arquivos (*.*) – Primeira informação, esta que será apresentada na janela “Abrir”; • *.* – Segunda informação, esta indica o tipo de arquivo a abrir. InitialDirectory – Indica o diretório onde a busca se inicia. Exemplo: “C:\”. ADS/REDES/ENGENHARIA Prof.CelsoCandido 23 DESENVOLVIMENTO DE SOFTWARE Controle de Impressão AULA 07 Classe PrintDocument Leitura de Impressão – PrintPage Configuração de página – PageSetupDialog Visualização de Impressão – PrintPreviewDialog ADS/REDES/ENGENHARIA Prof.CelsoCandido 24 DESENVOLVIMENTO DE SOFTWARE Controle de Impressão AULA 07 Esta é nossa última etapa sobre as informações sobre designers das interfaces. Todas as informações passadas até este momento, mostravam um aplicativo estático sem interação com outros componentes, como: Configuração de página para a impressão; Configuração e escolher a impressora; Visualizar como deverá sair a impressão. Produzir uma saída impressa para um programa qualquer, não costuma ser um processo comum, trivial, a técnica a usar depende necessariamente do tipo e quantidade de saída impressa a gerar. ADS/REDES/ENGENHARIA Prof.CelsoCandido 25 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle de Impressão O mecanismo fundamental que faz ser possível e que regula a impressão no VB .NET é a classe PrintDocument, podendo ser criada em um projeto de duas maneiras: 1. Adicionando o controle PrintDocument a um formulário; 2. Definindo seus procedimentos de eventos nas linhas do código fonte, no Editor de Código; A classe PrintDocument encontra‐se no namespace (espaço de nomes) System.Drawing.Printing, fornecendo várias classes úteis para imprimir textos e gráficos, precisando ser importada para a primeira do “código fonte” antes do “Public Class”. Exemplo: “Imports System.Drawing.Printing”. ADS/REDES/ENGENHARIA Prof.CelsoCandido 26 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle de Impressão - PrintPage As técnicas de impressão do objeto PrintDocument é limitada, servindo somente para impressões simples de apenas uma página, não permitindo linhas longas de impressão e não quebra as linhas automaticamente quando alcançam a margem do papel. Uma outra dificuldade é o de não entender o que seria uma página de texto, simplesmente enviando o texto para a impressora padrão. Se o texto for muito longo não irá conseguir se ajustar em uma única página, sendo que o texto excedido não será impresso. Para tratarmos o problema de impressão de várias páginas, precisamos criar uma página de texto virtual chamada “PrintPage” e assim adicionar texto até o limite da página de impressão. ADS/REDES/ENGENHARIA Prof.CelsoCandido 27 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle de Impressão - PrintPage Quando a página estiver cheia ou no seu limite de impressão, será enviada a impressora, continuando esse processo até não haver mais textos e imprimindo quantas páginas forem necessárias para seu fim. Como comentado no slide anterior, um dos mecanismos que nos possibilita a impressão de várias páginas é evento “PrintPage”, ocorre quando uma página é impressa. O “PrintPage” recebe um argumento do tipo “PrintPageEventsArgs” que fornece as dimensões e características da página atual para impressão. Um outro mecanismo é o método “Graphics.MeasureString”, que pode ser usado para determinar quantos caracteres e linhas podem caber em uma área retangular da página. ADS/REDES/ENGENHARIA Prof.CelsoCandido 28 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle de Impressão - PrintPage Para que o evento “PrintPage” possa ocorrer normalmente não podemos usar um “TextBox” para digitação ou apresentação de algum arquivo de texto, mas sim, um “RichTextBox”. O controle “RichTextBox” é uma versão mais completa, robusta, do controle “TextBox” para se exibir textos diversos. Também precisaremos usar o controle “PrintDialog” para que o programa possa exibir um caixa de diálogo “Print” padrão do Windows e assim especificar várias configurações de impressão. Outro controle que trabalho em conjunto com os já mencionados, é o “OpenFileDialog”, que permitirá selecionar um arquivo de texto para impressão, já comentado. ADS/REDES/ENGENHARIA Prof.CelsoCandido 29 DESENVOLVIMENTO DE SOFTWARE Controle de Impressão - PrintPage AULA 07 Detalhes de configuração principais do objeto “PrintDialog”: AllowCurrentPage – Habilita e desabilita o botão de opção da página atual; AllowPrintToFile – Ativa e desativa a caixa de seleção imprimir em arquivo; AllowSelection – Habilita e desabilita o botão de opção Seleção; AllowSomePage – Habilita e desabilita o botão de opção Páginas. A seguir alguns exemplos de telas sobre “PrintPage”. ADS/REDES/ENGENHARIA Prof.CelsoCandido 30 DESENVOLVIMENTO DE SOFTWARE AULA 07 ADS/REDES/ENGENHARIA Controle de Impressão - PrintPage Prof.CelsoCandido 31 DESENVOLVIMENTO DE SOFTWARE AULA 07 ADS/REDES/ENGENHARIA Controle de Impressão - PrintPage Prof.CelsoCandido 32 DESENVOLVIMENTO DE SOFTWARE AULA 07 ADS/REDES/ENGENHARIA Controle de Impressão - PrintPage Prof.CelsoCandido 33 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle de Impressão - PrintPage PrintPreviewDialog PageSetupDialog ADS/REDES/ENGENHARIA Prof.CelsoCandido 34 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle de Impressão - PrintPage Na Toolbox do VB .NET temos dois controles de impressão suplementares que irão melhorar as opções para configuração do documento que será impresso, são: 1. O controle “PrintPreviewDialog que exibe uma caixa de diálogo para visualização da impressão; 2. O controle “PageSetupDialog” que exibe uma caixa de diálogo para configuração da página a ser impressa. ADS/REDES/ENGENHARIA Prof.CelsoCandido 35 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle de Impressão - PrintPage Exemplo de código para o botão “Abrir – btnAbrir1” do menu “Arquivo”: Dim abreArquivo As String 'Exibe a caixa de diálogo "Abrir" e seleciona o arquivo de texto. OpenFileDialog1.Filter = "Todos os Arquivos (*.*)|*.*“ OpenFileDialog1.ShowDialog() 'Se o botão "Cancelado" não tiver sido selecionado, carrega a variáriavel " abreArquivo ". If OpenFileDialog1.FileName <> "" Then abreArquivo = OpenFileDialog1.FileName Try 'Irá ler o arquivo selecionado e carregar no RichTextBox1. Dim selecionaArq As New FileStream (abreArquivo, FileMode.Open) RichTextBox1.LoadFile (selecionaArq, RichTextBoxStreamType.PlainText) selecionaArq.Close() 'Inicializa a string para impressão. StringtoPrint = rtbEditor.Text 'Ativa o botão de impressão. btnImprimir1.Enabled = True Continua... ADS/REDES/ENGENHARIA Prof.CelsoCandido 36 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle de Impressão - PrintPage btnSetup.Enabled = True btnPreview.Enabled = True Catch ex As Exception 'Exibe uma mensagem de erro. MessageBox.Show("Houve um erro de impressão.") End Try End If Quando o botão “Abrir” é clicado, temos a exibição de uma caixa de diálogo “Abrir”, usando um filtro para arquivos do tipo “txt”. Ao selecionar um arquivo para abertura, teremos o nome do arquivo atribuído a uma variável string pública “abreArquivo”, declara no procedimento “Dim”. ADS/REDES/ENGENHARIA Prof.CelsoCandido 37 DESENVOLVIMENTO DE SOFTWARE Controle de Impressão - PrintPage AULA 07 Esse procedimento de evento então usa uma rotina de tratamento de erro “Try...Catch” para carregar o arquivo de texto no objeto RichTextBox1. Para garantir o processo de carregamento foi usada a classe “FileStream” para a abertura do arquivo, que estará colocando o conteúdo completo do arquivo de texto na variável criada de nome “selecionaArq”. Dim selecionaArq As New FileStream (abreArquivo, FileMode.Open) Por final o procedimento de evento irá ativar o botão Print (btnPrint) para que possa ser impresso o arquivo. Em resumo teremos um arquivo aberto e será ativado o botão de impressão no formulário. ADS/REDES/ENGENHARIA Prof.CelsoCandido 38 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle de Impressão - PrintPage Exemplo de código para PageSetupSettings: Try ‘Carrega as config. de pág. e exibe a caixa de diálogo de config. de página. PageSetupDialog1.PageSettings = PrintPageSettings PageSetupDialog1.ShowDialog() Catch ex As Exception MessageBox.Show("Ocorreu um erro.”) End Try Uma variável qualquer declara no início do código fonte, apenas como exemplo, armazena as informações de definição da página atual, quando atribuídas à propriedade “PageSettings” do objeto “PageSetupDialog1”, o método “ShowDialog” carregará automaticamente uma caixa de diálogo permitindo modificar o que o programa selecionou com orientação de página padrão, margens e assim por diante. ADS/REDES/ENGENHARIA Prof.CelsoCandido 39 DESENVOLVIMENTO DE SOFTWARE AULA 07 Controle de Impressão - PrintPage Exemplo de código para PrintPreviewDialog: Try ‘Especifica as configurações de página atual. PrintDocument1.DefaultPageSettings = PrintPageSettings ‘Especifica um documento para a caixa de diálogo de visualização de impressão e exibe. StringtoPrint = RichTextBox1.Text PrintPreviewDialog1.Document = PrintDocument1 PrintPreviewDialog1.ShowDialog() Catch ex As Exception MessageBox.Show("Ocorreu um erro. Não é possível abrir a caixa de diálogo.") End Try O procedimento de evento btnPreview_Click atribui a variável PrintPageSettings à propriedade DefaultPageSettings do objeto PrintDocument1, em seguida copia o texto para a varável StringtoPrint e abre a caixa de diálogo PrintPreview, este último, usa automaticamente os dados de configurações de página para exibir uma representação visual de como o documento será impresso. ADS/REDES/ENGENHARIA Prof.CelsoCandido 40 DESENVOLVIMENTO DE SOFTWARE AULA 07 AULAS DE APOIO Estarão disponibilizadas nos descritos a baixo para downloads os arquivos nos formatos: PowerPoints ou Word das aulas. Alguns estarão disponíveis para impressão, outros, somente para leitura, mas não para edição. Em alguns casos em que se fizer necessário a impressão, o professor estará liberando para um melhor desenvolvimento dos trabalhos a ser solicitados. www.aulasprof.6te.net ou www.profcelso.orgfree.com/ Contato: [email protected] ADS/REDES/ENGENHARIA Prof.CelsoCandido 41 DESENVOLVIMENTO DE SOFTWARE AULA 07 FIM ADS/REDES/ENGENHARIA Prof.CelsoCandido 42