|
Software Development Kit to the Delphi-Win32 and Free Pascal compilers |
| Home > Wiki > br/ProjetoAgenda/Artigo1 |
br/ProjetoAgenda/Artigo1english (en) | português (pt)
Este é o primeiro de uma série de artigos que apresentam os passos necessários para criar uma aplicação funcional com PressObjects. Este primeiro artigo apresenta como criar o projeto, corrigir dependências e como criar a parte visual.
[edit] Pré requisitos
[edit] InstalaçãoDescompacte o PressObjects e configure o projeto ou a IDE de forma que as pastas {press}\Source\Core e {press}\Source\Brokers possam ser encontradas pelo compilador. No Delphi, coloque as pastas no Library Path da IDE ou em Project | Options | Directories | Search Path do projeto. No Lazarus, coloque as pastas no campo Project | Compiler Options | Other Unit Files. Faça também a instalação do componente de conexão, caso não tenha sido feito, ou ao menos indique o caminho das units. O PressObjects não exige a instalação do componente de conexão, precisa apenas encontrar suas units para que a aplicação possa ser compilada. Crie a seguinte árvore de diretórios para o projeto (sugestão):
+-{agenda}
+-Source
+-Core
| +-Main
| | +-vcl5 (ou sua versão de Delphi)
| | +-lcl
| +-Custom
| | +-vcl5
| | +-lcl
| +-Contato
| | +-vcl5
| | +-lcl
+-Metadata
| +-Firebird
| +-Oracle
| +-PostgreSQL
+-Projects
+-D5 (ou sua versão do Delphi)
+-Laz
[edit] ProjetoCrie um novo projeto, informe o path para localizar o PressObjects (caso necessário, vide informações na área Instalação) e altere o nome do form principal para MainForm. Dê um File | Save All para gravar os arquivos do projeto:
Utilize nome de pasta e extensão do arquivo do projeto conforme IDE utilizada. Caso utilize FastMM, altere o .dpr e inclua a unit FastMM4 antes de todas as outras units. Nenhum form terá código, com exceção de um. Crie um método para o evento OnKeyDown do MainForm e implemente:
...
implementation
uses
Dialogs, Clipbrd, PressOPF;
procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (Key = Ord('9')) and (Shift = [ssShift, ssAlt]) then
begin
Clipboard.AsText := PressOPFService.CreateDatabaseStatement;
ShowMessage('Metadata do banco de dados copiado para o Clipboard');
end;
end;
end.
A combinação de teclas Shift + Alt + 9 irá copiar o metadata de criação do banco para a área de transferência. Passe a propriedade KeyPreview do Form para True para que este evento funcione. Crie uma nova unit (apenas o .pas, sem form), grave em {agenda}\Source\Core\Main\Brokers.pas e coloque o seguinte conteúdo: unit Brokers; interface implementation uses PressSubject, PressAttributes, PressUIBBroker, // e/ou o negociador para o seu componente de conexão PressMessages_ptbr; initialization PressModel.ClassIdStorageName := 'ModelClasses'; PressModel.DefaultGeneratorName := 'gen_agenda'; PressModel.DefaultKeyType := TPressInteger; end. PressUIBBroker é a unit que registra o conector para o framework OPF. É possível utilizar mais de um conector no mesmo projeto e escolher qual deles irá utilizar através do arquivo de configuração (que será abordado no terceiro artigo). Dê um build all no projeto a fim de verificar se todas as dependências foram encontradas. Talvez ocorra um erro de compilação na unit MainFrm. Escolha entre fazer uma limpeza no cabeçalho da área interface, ou remover Dialogs da área implementation. Quando a compilação ocorrer com sucesso neste ponto, provavelmente não ocorrerá mais problema relacionado às dependências do PressObjects em qualquer outro ponto do projeto. [edit] FormsCrie os forms para a agenda com os seguintes nomes e pastas. Note que os exemplos usam a pasta vcl5, utilize a pasta conforme a versão do Delphi, ou lcl caso esteja construindo o projeto no Lazarus. Dentro dos parênteses estão o nome do form e de qual form ele herda, quando aplicável. [edit] CustomEditForm
Crie com pelo menos um botão Gravar (GravarButton) e um Cancelar (CancelarButton). Retire alguns excessos do form, tal como a área private e public da classe e a variável que apontaria para a instância. Eles não são necessários. No final da unit, inclua:
uses
PressVCLBroker, CustomMVP; // ou PressLCLBroker caso utilize o Lazarus
initialization
PressVCLForm(TCustomEditPresenter, TCustomEditForm); // ou PressLCLForm
// caso utilize o Lazarus, mantenha o código {$I...} gerado pela IDE
end.
Este trecho de código é usado para registrar o form no framework MVP. [edit] CustomQueryForm
Crie este form com um TStringGrid (QueryStringGrid) e um botão Pesquisar (PesquisarButton). Atenção para o nome dos componentes, eles devem ser idênticos aos indicados entre parênteses. É através deste nome que o MVP irá encontrá-los mais tarde. Adicionar o registro no MVP, da mesma forma que foi feito com o form CustomEditForm, no entanto apontando para as classes TCustomQueryPresenter e TCustomQueryForm. [edit] ContatoEditForm
Atenção para a herança de CustomEditForm. Além dos botões herdados, coloque também um TEdit junto com Label para Nome (NomeEdit), Endereço (EnderecoEdit), mais um TComboBox para a Cidade (CidadeComboBox) e um TStringGrid para os telefones (FonesStringGrid). Configure a propriedade FocusControl dos Labels para seus respectivos controles. Não use componentes que possuem Label, use TEdit, do contrário o framework MVP não o reconhecerá (no entanto você poderá criar uma view para ele a fim de utilizá-lo em seu projeto). Sempre observe o nome dos componentes, é necessário declará-los corretamente para fazer o mapeamento na unit que controla o MVP, e que será escrito mais tarde. Não esquecer de registrar o Form junto ao framework MVP, referenciando as classes TContatoEditPresenter e TContatoEditForm, e utilizando a unit ContatoMVP:
uses
PressVCLBroker, ContatoMVP; // ou PressLCLBroker caso utilize o Lazarus
initialization
PressVCLForm(TContatoEditPresenter, TContatoEditForm); // ou PressLCLForm
// caso utilize o Lazarus, mantenha o código {$I...} gerado pela IDE
end.
[edit] ContatoQueryForm
Coloque um TEdit para entrar o nome do contato que será pesquisado (NomeEdit) e um TComboBox para filtrar por cidade (CidadeComboBox). Crie também os Labels e sempre observe o nome dos componentes para evitar erros em runtime. Registrar o form no final da unit, idêntico ao form ContatoEditForm, no entanto referenciando as classes TContatoQueryPresenter e TContatoQueryForm. [edit] ContatoFoneEditForm
Coloque um TComboBox para o tipo (TipoFoneComboBox), um TEdit para o número (NumeroEdit). O registro do form referencia as classes TContatoFoneEditPresenter e TContatoFoneEditForm. Lembre que nenhum dos forms precisa da área private, public, nem da variável que receberia o endereço da instância. A unit ContatoFoneEditForm fica assim:
unit ContatoFoneEditFrm;
interface
uses
CustomEditFrm, Classes, Controls, StdCtrls;
type
TContatoFoneEditForm = class(TCustomEditForm)
TipoFoneLabel: TLabel;
TipoFoneComboBox: TComboBox;
NumeroLabel: TLabel;
NumeroEdit: TEdit;
end;
implementation
{$R *.DFM}
uses
PressVCLBroker, ContatoMVP; // ou PressLCLBroker caso utilize o Lazarus
initialization
PressVCLForm(TContatoFoneEditPresenter, TContatoFoneEditForm); // ou PressLCLForm
// caso utilize o Lazarus, mantenha o código {$I...} gerado pela IDE
end.
[edit] CidadeEditForm
Coloque um TEdit para o nome (NomeEdit) e outro para o estado (UFEdit) da cidade. O registro do form referencia as classes TCidadeEditPresenter e TCidadeEditForm. [edit] CidadeQueryForm
Coloque um TEdit para o nome (NomeEdit) da cidade para pesquisa, e registre o form no final da unit referenciando as classes TCidadeQueryPresenter e TCidadeQueryForm. [edit] MainFormPor fim crie quatro botões no MainForm: Novo Contato (NovoContatoButton), Pesquisar Contato (PesqContatoButton), Pesquisar Cidade (PesqCidadeButton) e Fechar (FecharButton). A parte visual está pronta. O próximo post irá apresentar como escrever a parte lógica (objetos de negócio e MVP), criar o banco, configurar o conector e finalmente testar a aplicação. [edit] ObservaçõesNormalmente a ordem de construção de uma aplicação é:
Este artigo colocou os forms antes das classes de negócio e classes MVP, para que a parte mais familiar ao programador Delphi/Lazarus fosse apresentada primeiro. O próximo artigo apresentará a construção destas classes. Neste ponto não é possível compilar o projeto porque os forms dependem das classes MVP, que por sua vez dependem das classes de negócio. O projeto poderá ser compilado novamente no final do segundo artigo.
|
Personal tools |