Era assim no visual basic

13/11/2008

Galera é o seguinte nesse chamado eu gostaria de saber umas coisas basicas que eu ainda nao tenho conhecimento como se faz no delfi     Exemplo la no visual basic ou dotnet que sou mais acustumado eu crio um modulo e coloca la tudo que eu vou usar em todo o projeto.Como funcoes, Rotinas e ate mesmo mensagem para o usurio do tipo erro , cadastro realizado com sucesso !   Gostaria de saber no delphi como eu vou fazer isso !   Eu sei que tem que ser em um unit , mais eu to fraco ainda no delphi , gostaria de um exemplo bem detalhado para matar a charada de uma vez , se for possivel que vc crie ai algumas rotinas , messagens de texto , funcoes para dessa vez eu dominar mesmo o negocio        
Carlos Faria

Carlos Faria

Curtidas 0

Respostas

Guinther Pauli

Guinther Pauli

13/11/2008

Carlos,     Você está no caminho certo, as rotinas devem ficar em unit. Para adicionar uma nova unit ao seu projeto vá até o menu  File>New>Unit do Delphi. Uma nova  unit será criada.  Como ela será um repositório de funções e rotinas a idéia é que ao salvá-la demos um nome significativo... por exemplo vamos utilizar o nome Global.pas. Então salve essa nova unit e dê o nome Global.pas Veja que uma unit vazia se apresenta desta forma: unit Global; interface implementation end. Vamos enteder essa estrutura.  Logo abaixo da palavra interface e antes da palavra implementation nós fazemos as declarações das funções, mensagens, etc.  E o código delas propriamente dito, colocamos abaixo da palavra implementation. As palavras interface e implementation delimitam as seções de uma unit, e são palavras reservadas. Vc não pode criar uma variável com o nome “interface” e nem “implementation”. Pra resumir declaramos na seção interface e codificamos na seção implementation. Você não está acostumado com essa coisa de declaração de funções. Em Delphi nós precisamos declarar na seção interface os nomes das funções, mensagens para que elas se tornem publicas para todo o sistema. Por exemplo, vamos declara uma função ContaLetras nessa unit. Essa função vai receber como parâmetro uma variável do tipo string e vai retornar a quantidade de letras que existem.   Sua unit global vai ficar assim:   unit Global; interface function ContaLetras(Palavra: string): integer; implementation end.   Agora nós precisamos implementer a função. Como eu disse antes, a declaração só torna a função visível a todo o sistema. O código da função nós colocamos na seção implementation. Sua unit Global vai ficar assim agora:   unit Global; interface function ContaLetras(Palavra: string): integer; implementation function ContaLetras(Palavra: string): integer; begin   result := Length(Palavra); end; end. E como podemos usar essa nova função ? Imagine que vc tem um formulário, digamos que ele se chame Form1. Nesse Form1 temos um botão e ao clicar nele você quer chamar a função ContaLetras para exibir em uma mensagem a quantidade de letras que tem a palavra CARLOS.  A primeira coisa é dar um clique duplo no botão para que o evento OnClick seja criado. Depois, dentro do evento vamos chamar a sua função, passando a palavra CARLOS como parâmetro e o retorno da função será exibido pela função do Delphi ShowMessage.  O clique do botão vai ficar assim: procedure TForm1.Button1Click(Sender: TObject); begin   ShowMessage(ContaLetras(CARLOS)); end; Tente rodar o programa. Você vai ver que não vai funcionar ainda. A mensagem de erro que será dada é a “Undeclared Identifier: ContaLetras”.  O Delphi está lhe dizendo que o Form1 não conhece a função ainda. Pra isso termo que adicionar uma referencia no Form1 que aponte para a unit Global. Pra isso o Delphi disponibiliza a seção USES. Nela você informa quais units o formulário vai usar pra achar as funções.  Assim, vamos incluir no USES do formulário a nossa unit Global. O código do Form1 vai ficar assim: unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls, Global;   type   TForm1 = class(TForm)     Button1: TButton;     procedure Button1Click(Sender: TObject);   private     { Private declarations }   public     { Public declarations }   end;   var   Form1: TForm1;   implementation   {$R *.dfm}   procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(IntToStr(ContaLetras(CARLOS))); end; end.   Tente executar novamente. Agora vc vai ver que deu certo. Sobre mensagens, se elas não forem mudar, podemos defini-las como constantes.  Uma constante é identificada na seção CONST. Voltando na unit Global vamos criar duas mensagens. Uma  com o texto “Este é um teste de mensagem” e outra com o texto “Esta é a mensagem 2”. O código vai ficar assim: unit Global;   interface   function ContaLetras(Palavra: string): integer;   const   MENSAGEM1 = Este é um teste de mensagem;   MENSAGEM2 = Esta é a mensagem 2;   implementation     function ContaLetras(Palavra: string): integer; begin   result := Length(Palavra); end;   end. Observe que a seção CONST é criada dentro da seção interface e é identificada pela palavra reservada const e cada mensagem recebe um nome único. É através desse nome que localizamos as mensagens. E como podemos usar essas mensagens ? Voltando lá no Form1, no click do botão, vamos exibir as mensagens usando o ShowMessage também. O código vai ficar assim:   procedure TForm1.Button1Click(Sender: TObject); begin   ShowMessage(IntToStr(ContaLetras(CARLOS)));   ShowMessage(MENSAGEM1);   ShowMessage(MENSAGEM2); end; Vamos criar agora uma rotina que troca o texto do botão que está no Form1. Qual é a primeira coisa que fazemos ? Declarar a rotina. Veja como fica abaixo: unit Global;   interface   function ContaLetras(Palavra: string): integer; procedure TrocaTextoBotao(botao: TButton); const   MENSAGEM1 = Este é um teste de mensagem;   MENSAGEM2 = Esta é a mensagem 2;   implementation   function ContaLetras(Palavra: string): integer; begin   result := Length(Palavra); end;   end   E agora vamos implementar.  Lembrando que o código fica na seção implementation. Abaixo temos o código. unit Global;   interface   function ContaLetras(Palavra: string): integer; procedure TrocaTextoBotao(botao: TButton);   const   MENSAGEM1 = Este é um teste de mensagem;   MENSAGEM2 = Esta é a mensagem 2;   implementation   function ContaLetras(Palavra: string): integer; begin   result := Length(Palavra); end;   procedure TrocaTextoBotao(botao: TButton); begin   botao.caption := Mudei o texto; end; end. Tente executar o programa agora. Você vai ver que não vai dar certo. Sabe porque ? Veja que a procedure TrocaTextoBotao recebe como parâmetro uma variável “botão” do tipo TButton.  A unit Global não conhece o tipo TButton. Pra fazer ela conhecer temos que adicionar uma referencia à unit que contém a declaração do TButton. Isso deve ser feito em uma seção Uses também. Abaixo temos o código. unit Global; interface uses StdCtrls; function ContaLetras(Palavra: string): integer; procedure TrocaTextoBotao(botao: TButton); . . Agora lá no click do botão no form 1 vamos chamar também a nossa procedure. Código: procedure TForm1.Button1Click(Sender: TObject); begin   ShowMessage(IntToStr(ContaLetras(CARLOS)));   ShowMessage(MENSAGEM1);   ShowMessage(MENSAGEM2);     TrocaTextoBotao(Button1); end;   Espero que com este exemplo tenha ficado claro como se criar e utilizar uma unit de funções globais.   Em anexo está o exemplo,   http://video.devmedia.com.br/PauloQuicoli/Consultoria/Codigo-Chamado419.zip   Aguardo seu retorno,   abs    
GOSTEI 0
Carlos Faria

Carlos Faria

13/11/2008

Guinter   O que seria mais profissional , criar uma unit para guardas as funcoes globais ou um datamodule ?   Vc tem alguma unit ou datamodule com funcoes basicas ai de exemplo , funcoes como const (messagens para usuario) validação de cpf , etc
GOSTEI 0
Guinther Pauli

Guinther Pauli

13/11/2008

Carlos,   O ideal é deixar em uma unit global mesmo. Segue em anexo uma unit que utilizo, com algumas funções já  prontas. Você pode copiar essas funções e utilizá-las em suas aplicações.   http://video.devmedia.com.br/PauloQuicoli/Consultoria/419-Funcoes.zip Aguardo seu retorno, abs
GOSTEI 0
Guinther Pauli

Guinther Pauli

13/11/2008

Carlos,   Continuamos aguardando seu retorno para encerrarmos o chamado,   abs
GOSTEI 0
Guinther Pauli

Guinther Pauli

13/11/2008

Carlos,   Podemos encerrar esse chamado ?   abs
GOSTEI 0
Carlos Faria

Carlos Faria

13/11/2008

Ate com o seu exemplo deu certo mas eu fiz um funcao abre form       unit Global; interface uses
  SysUtils, Classes ,Forms  ; type
  TdmFuncoesSystem = class(TDataModule)
  private
    { Private declarations }
  public   procedure AbreForm (Aclasseform: TComponentClass; aform:Tform );
   function VerificaSenha (aUsuario ,Asenha :string ):Boolean ;     end; var
  dmFuncoesSystem: TdmFuncoesSystem; implementation uses UDMBUSCA, ufrmLogin, ufrmPrincipal; {$R *.dfm} procedure TdmFuncoesSystem.AbreForm(Aclasseform: TComponentClass; aform: Tform);
begin //procedure para abrir formulario
Application.createform (Aclasseform ,aform ) ;
try
   aform.showmodal ; finally
   FreeAndNil(aform) ; end;
end;
function TdmFuncoesSystem.VerificaSenha(aUsuario, Asenha: string): Boolean;
begin with DMBUSCA.cdsVerificaUsuario do ; DMBUSCA.cdsVerificaUsuario.Close ;
DMBUSCA.cdsVerificaUsuario.Params [0].AsString := UpperCase(aUsuario);
DMBUSCA.cdsVerificaUsuario.Params [1].AsString := UpperCase(Asenha);
DMBUSCA.cdsVerificaUsuario.Open ;
Result := (DMBUSCA.cdsVerificaUsuario.RecordCount > 0) ;         end; end.     Aqui no datamodule ela ate que funcionou , mais na unit nao funciona o que falta para funcionar na unit ?       qual maneira mais profissional de trabalhar eu guarda as variaveis global em uma unit ou em datamodule ?      
GOSTEI 0
Guinther Pauli

Guinther Pauli

13/11/2008

Carlos,   Se você reler o texto explicativo, verá que menciono que na unit global também é necessário adicionar  referências à outras units.    Provalmente esse é o problema.   Quanto ao onde ficar as variáveis globais, não existe uma regra. Você coloca onde você achar melhor. Eu particularmente coloco em uma unit global. Aguardo seu retorno para encerrarmos esse chamado,   abs
GOSTEI 0
Carlos Faria

Carlos Faria

13/11/2008

Fecha ai professor ?   tudo ok     uma pergunta fora do assunto eu sou desenvolvedor em vb6 modestia parte com conhecimentos avançados eu baixei um software de video aulas aqui e gostei do negocio ?   como eu faço para criar um mini curso exemplo migrando do vb6 para o visual studio 2008 e divulgar no site da devmedia ?   as aulas sao revisadas ?   Eu poderia criar esse projeto e te enviar ?   Acho que muitos hoje tem esse duvida , migrar do vb6 para o visual studio                      
GOSTEI 0
Guinther Pauli

Guinther Pauli

13/11/2008

Carlos, Entre em contato através do email: editordevmedia@gmail.com   (Rogério)   Ele é o responsável sobre essa parte de vídeos,     abs      
GOSTEI 0
POSTAR