Linguagem de Programação II

Desenvolvimento em VFP



Cadastro de Professores Criação de Classes
Cadastro de Horários Cadastro de Relações
Relatórios Consulta com SQL

Cadastro de Professores

Estrutura da Tabela
Alterações Iniciais
Ambiente de Dados
Botões de Consulta
Form Activate
Inclusão
Alteração
Exclusão
Botão Ok
Botão Cancela
Botão Encerra
Form Error Event
Início da Pagina



Estrutura da Tabela Professores

CampoTipoTamanho
ProfessorCaracter5
NomeCaracter30
EnderecoCaracter30
BairroCaracter20
CidadeCaracter5
CursoCaracter5








Início da Página  Professores









Alterações Iniciais

O formulário será criado dentro do projeto HORARIO, no diretorio F:\usuarios\alunoxx. Após abrir este projeto, clique em Documentos / Formulário para criarmos um novo Form. Para o nosso conhecimento inicial, a única tabela criada é PROFESSORES. Para iniciarmos o formulário de Cadastramento, altere algumas opções do form inicial: 1) Aumente um pouco o formulário na sua altura e largura (Height = 305 e Width = 520); 2) Altere o Caption para "Manutenções" 3) Insira um objeto Label com o Caption "Cadastro de Professores": Font Size = 16 FontBold = .t. FontItalic = .t. 4) Coloque o form para ser executado sempre no centro da tela (Autocenter = .t.) 5) Agora, o form está pronto para receber os objetos da tabela, pelo Ambiente de Dados. Início da Página Professores

Ambiente de Dados

Sobre o formulário, tecle o botão direito do mouse e escolha Ambiente de Dados. Assim: 1) Adicione a tabela Professores clicando em Adicionar. Depois de adicionada, clique em Fechar. 2) Selecione a tabela e altere a propriedade Order para Professor. 3) Para criarmos os objetos de cadastramento de cada campo da tabela no form é simples: Arraste campo a campo sobre o formulário. Cada campo criará um objeto Label com o nome do campo e um objeto texto com as características do campo. 4) Após arrastar todos os campos, clique no formulário para o Ambiente de Dados fechar. 5) Não ligue se, arrastando, os objetos ficam desorganizados. Selecione apenas os labels dos campos, ative a barra de ferramentas LAYOUT e escolha um dos dois primeiros botões desta barra (Alinhar laterais à esquerda ou Alinhar laterais à direita). 6) Faça o mesmo para os objetos textos da tabela. 7) Para vermos o resultado até agora, execute o formulário, escolha um nome (CadProf) e, para voltar, clique no Fechar do Windows (X).

Início da Página Professores

Botões de Consulta

Os objetos Command (Botões de comando) para localização utilizam figuras com extensão .ICO ou .BMP para sua identificação. A ordem depende da propriedade Order no Ambiente de Dados. Siga as seguintes ações: 1) Crie quatro botões com tamanho adequado (Width = 22); disponha-os como no exemplo; 2) Retire o Caption dos quatro botões; 3) Para cada botão, insira na propriedade Picture o arquivo .ICO adequado e digite na propriedade Click (dê duplo-clique) o código de cada botão: 3.1- Início 3.2- Fim go top go bottom thisform.refresh thisform.refresh 3.3- Anterior 3.4- Próximo skip -1 skip if bof() if eof() go top go bottom endif endif thisform.refresh thisform.refresh Início da Página Professores

Form Activate

Vamos iniciar algumas propriedades no início da execução do Formulário. Para isso, digite o código seguinte no método Activate do Form (dê duplo-clique no form vazio): public opcao && declaracao de variavel opcao = 0 set date brit && data britancia dd/mm/aa with thisform && auxilia na digitação dos nomes .command1.setfocus && O botão INCLUSÃO recebe o foco .txtprofessor.readonly = .t. .txtnome.readonly = .t. .txtendereco.readonly = .t. && os campos estarão desabilitados .txtbairro.readonly = .t. .txtcidade.readonly = .t. .txtcurso.readonly = .t. endwith OBSERVACAO: Observe o nome de cada botão (Propriedade Name): Inclusão : Command1 Início : Command5 OK : Command2 Fim : Command6 Cancela : Command3 Anterior: Command7 Encerra : Command4 Próximo : Command8 Alteração: Command9 Exclusão: Command10 Início da Página Professores

Botão de Inclusão

Agora, crie um botão com o Caption = "Inclusão" e digite o seguinte código (com duplo-clique): opcao = 1 && Variavel informa que é uma inclusão if txnlevel() = 0 && só executa se não há nenhuma transação begin transaction && Inicia uma transação de comandos append blank in professores && insere registro em branco na tabela with thisform .txtprofessor.readonly = .f. .txtnome.readonly = .f. .txtendereco.readonly = .f. .txtbairro.readonly = .f. && Libera campos para digitação .txtcidade.readonly = .f. .txtcurso.readonly = .f. .txtprofessor.setfocus && Inicia digitação no código .command1.enabled = .f. .command9.enabled = .f. && desabilita botões Inclusão/Alteração/Exclusão .command10.enabled = .f. .refresh endwith endif Início da Página Professores

Botão de Alteração

Agora, crie um botão com o Caption = "Alteração" e digite o seguinte código (com duplo-clique): opcao = 2 begin transaction with thisform .txtnome.setfocus .txtnome.readonly = .f. .txtendereco.readonly = .f. .txtbairro.readonly = .f. .txtcidade.readonly = .f. .txtcurso.readonly = .f. .command1.enabled = .f. .command9.enabled = .f. .command10.enabled = .f. endwith Início da Página Professores

Botão de Exclusão

Agora, crie um botão com o Caption = "Exclusão" e digite o seguinte código (com duplo-clique): opcao = 3 if messagebox('Tem Certeza da Exclusão do Registro?',4,'Exclusão') = 6 delete skip +1 if eof() go bottom endif thisform.refresh endif MESSAGEBOX 1º Parâmetro: Mensagem a ser exibida 2º Parâmetro: Caixa de diálogo (botões). Exemplo: 4 = SIM e NÃO 0 = OK 3º Parâmetro: Mensagem do Caption da janela de mensagem. A função messagebox retorna valores numéricos, dependendo do botão escolhido. Exemplo: 6-SIM 7-NÃO 1-OK 2-CANCELAR Início da Página Professores

Botão OK

if txnlevel() # 0 with thisform if val(thisform.txtprofessor.value) < 1 messagebox('Código do Professor inválido!','Erro') .txtprofessor.setfocus return endif if empty(thisform.txtnome.value) messagebox('Nome do Professor não pode ser vazio!','Erro') .txtnome.setfocus return endif end transaction .txtprofessor.readonly = .t. .txtnome.readonly = .t. .txtendereco.readonly = .t. .txtbairro.readonly = .t. .txtcidade.readonly = .t. .txtcurso.readonly = .t. .command1.enabled = .t. .command9.enabled = .t. .command10.enabled = .t. endwith Início da Página Professores endif

Botão Cancela

if txnlevel() # 0 rollback if opcao # 2 go top endif with thisform .txtprofessor.readonly = .t. .txtnome.readonly = .t. .txtendereco.readonly = .t. .txtbairro.readonly = .t. .txtcidade.readonly = .t. .txtcurso.readonly = .t. .command1.enabled = .t. .command9.enabled = .t. .command10.enabled = .t. .refresh endwith endif Início da Página Professores

Botão Encerra

if txnlevel() # 0 rollback endif thisform.release Início da Página Professores

Error Event (No Form)

LPARAMETERS nError, cMethod, nLine if nerror = 1884 messagebox('Professor já existe!','Erro') thisform.txtprofessor.setfocus endif Início da Página Professores

Criação de Classes

Conceitos Criação do Form Caixa de Combinação Início da Página

Conceitos

Encapsulamento Oculta a complexidade desnecessária. Se possuimos um objeto criado como classe, algumas características e execuções não precisam ser exibidas, apenas executadas. Exemplo: Para guiar um carro, precisamos trocar as marchas. Porém, não há nenhuma neces- sidade saber como funciona o mecanismo da caixa de marcha. O benefício de poder ignorar o código interno de um objeto é chamado Abstração. O encapsulamento, que envolve o empaco- tamento do código contribui para a abstração. Polimorfismo (SubClasses) É o reaproveitamento de uma classe já desenvolvida. Podemos acrescentar mais códigos ou propriedades de uma classe (também com códigos iniciais) e salvá-la como uma nova classe. Assim, esta nova classe (subclasse) herdará as caracte- rísticas da classe pai, mas possuindo seus próprios códigos. Quando houver uma alteração na primeira classe, a subclasse também receberá as alterações. Herança Faz com que se torne eficiente a manutenção do código. Se fizermos uma altera- ção em uma classe, essa alteração se refletirá em todas as subclasses baseadas na classe. Se possuirmos uma subclasse com erro de código e, com certeza, esta subclasse é utilizada em vários programas, em vez de irmos a cada subclasse para alterar o código, vamos apenas uma vez na classe pai e a alteração se propagará por todas as subclasses. Exemplo Início da Página Classes

Exemplo de Classe

1- Crie um novo formulário. Ele não será utilizado no projeto final. 2- Insira um objeto Botão de Comando. Altere a caption para Encerra; 3- Selecione o botão e no menu Arquivo, salve o botão como classe definindo: Nome: Encerrar Arquivo: Crie no diretório Horario a biblioteca Horario; Descrição: Encerra um Formulário. 4- Grave o Form como FormTeste e encerre-o; Em Bibliotecas de Classes, selecione o botão Encerrar e escolha Modificar; 5- No evento click coloque o comando Thisform.Release. Grave-o e volte para o FormTeste 6- Ao lado do botão Encerra, insira o botão classe Encerrar (clique em Exibir classes, um ícone com três livros e adicione a biblioteca Horario). Escolha o botão Encerrar; 7- Note que os dois botões são idênticos (veja o evento click). Execute o form; 8- Até agora vimos o Encapsulamento (código oculto). Selecione a classe encerrar e salve como classe (Nome: Fechar Arquivo: Horario); 9- Feche o form, selecione a classe Encerrar e escolha modificar; 10- Escolha no menu Classes a opção Novo Método e crie: Nome: Antes Descrição: Executar antes do Release. Adicione e Feche. No evento Click, antes do thisform.release, digite this.antes; 11- Salve a classe encerrar, abra a classe fechar e no método Antes, digite: messagebox('Saída do Formulário','Fechar') 12- Salve a classe, volte para o FormTeste e insira a classe Fechar. Execute o Form. 13- Agora vimos a Herança e Polimorfismo. Início da Página Classes

Criação do Form

Na biblioteca de classes, possuimos atualmente os botões Encerrar e Fechar. Vamos criar um form padrão que, se houver necessidade de uma alteração geral (algumas características) alteraremos a classe e não form por form do projeto. Execute: 1- Crie um novo form (pode utilizar o próprio FormTeste); 2- Altere algumas características do form. Aumente um pouco a altura, largura e altere: BackColor: 128,128,192 (ou a cor que desejar); Caption: nenhum Icon: sun.ico 3- Salve o form como classe (Nome: Basico Arquivo.: Horario) 4- Agora que o form foi gerado como classe, coloque o Basico como Form Inicial: Escolha no menu a opção Ferramentas / Opções / Formulários / Formulario ... (escolha a bi- blioteca Horario / classe Basico. Agora todos os novos forms serão gerados como Ba- sico. Aproveitando, Crie um novo form e salve-o como uma classe chamada Cadastro. É nesta classe que vamos criar os objetos já conhecidos (inclusão,alteração,etc) e também criá-las como classes. Início da Página Classes

Caixa de Combinação

No cadastro principal, onde possuímos duas chaves estrangeiras (secundárias), normalmente criamos um objeto combobox no lugar de um objeto edit comum, já que assim não há necessidade de um código de crítica da existência da informação secundária. Vamos seguir os passos para criarmos uma Caixa de combinação para o código da cidade no formulário de Professores: 1- Exclua do form o campo do código da cidade (guarde o nome do objeto); 2- Adicione no lugar um objeto combobox (Caixa de Combinação); 3- Altere o nome na propriedade NAME para o antigo nome do objeto (txtcidade); 4- Clique sobre o objeto com o botão direiro e escolha Construtor; 5- Itens da Lista: Escolha a tabela cidades e selecione os campos Nome e Cidade; 6- Estilo: Tridimensional, Lista Suspensa (não deixa alterar), Ativar busca incr.; 7- Layout: Ajustar largura do nome da cidade e esconda o código da cidade (se quiser); 8- Valor: Retornar campo CIDADE para armazenar em PROFESSORES.CIDADE; 9- OK. Execute o formulário e confira. Faça para o curso também. Início da Página Classes

Classe Localizar

A imagem do form desta página, em "Criação de Classes", é o resultado final da nossa classe Basico. A primeira classe que criaremos para este form será a classe localizar. São os 4 botões de navegação pela tabela. Para adiantar nosso serviço, faça uma seleção múltipla no form de cadastro de Professores nos 4 botões e salve como classe Localizar. Abra a classe Cadastro e insira a classe Localizar. Início da Página Classes
Hosted by www.Geocities.ws

1