[Tutorial] Functions/procedures/property/Private, etc...

14 de Julho de 2012
83
42
18
24
#1
Neste artigo que vou fazer agora é meio complicado.
Se você já sabe como criar Function e Procedure fica mais fácil.


Logo quando você inicia um form(formulário) você têm isso em mãos:

CODE

unit Unit1;
      
       interface
      
       uses
         Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
         Dialogs;
      
       type
         TForm1 = class(TForm)
         private
           { Private declarations }
         public
           { Public declarations }
         end;
      
       var
         Form1: TForm1;
      
       implementation
      
       {$R *.dfm}
      
       end.

Agora vou explicar cada linha:

CODE

// Aqui temos a linha em que indica qual arquivo esta salvo
       unit Unit1;
       // Aqui é onde fica os metodos do botoes e etc
       interface
       // Aqui são o que o formulario usa
       uses
         Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
         Dialogs;
       // Aqui é onde fica declarado as classes
       type
        //Aqui cria a classe do nosso formulario
         TForm1 = class(TForm)
         // Aqui são as funcions/var/proriedades/proc que so podem ser usadas nesse formulario
         private
           { Private declarations }
          // E aqui a que são vistas em todas OBS: Para usar você precisa colocar por exemplo:
          // form1.NOME_DA_FUNCTION
         public
           { Public declarations }
         end;
       // Aqui são as variaveis globais
       var
         Form1: TForm1;
       // E aqui os codigos :/
       implementation
       // Aqui são os arquivos incluidos, nesse caso, seria o dfm(arquivo onde fica os lugares do componentes).
       {$R *.dfm}
      
       end.

semi-globais
Bom espero que você já saibam utilizar function e etc. Agora vamos aprender como usar variáveis semi-globais.
Após public do form1 digite:

CODE

public
          var_publica: string;

Agora no Form2 clique duas vezes no formulário:

CODE

procedure TForm2.FormCreate(Sender: TObject);
      begin
         form1.var_publica := 'STRING';
      end;

Não se esqueçam de adicionar no uses do form2(Em qualquer um deles)

CODE

uses
        unit1;

Pronto!

USES
Agora vamos falar um pouco sobre uses
As uses são os arquivos que o código usa para compilar.
Após interface há uma. Essa você pode usar em qualquer lugar: Inclusive antes de implementation
Após implementation você pode adicionar outra. Essa somente pode ser utilizada após implementation

CLASS
Class são as coisas mais chatas e boas ao mesmo tempo!
Após type você declara as classes. Pode ser de vários jeitos, mas o que eu sei é assim:

CODE

type como_esta = (nadando, parado);

Agora no numa procedure qualquer:

CODE

procedure TForm1.Button1Click(Sender: TObject);
     var
       estado_do_meu_irmão: como_esta;
     begin
        estado_do_meu_irmão := nadando;
        if (estado_do_meu_irmão = nadando) then
           estado_do_meu_irmão := parado;
     end;

Pronto!

PROPERTY
Property são as propriedades do form1, aquelas mesmo, que aparecem na listinha.
Dependendo do lugar em que foi declarada fica igual o uses.
Faça o seguinte no form1:
Após:

CODE

public
        var_publica: string;
        { Public declarations }

Adicione:

CODE

property meu_nome: string read var_publica write var_publica;

Após(no form2):

CODE

form1.var_publica := 'STRING';

Adicione:

CODE

form1.meu_nome := 'STRIGN';

Ai você me pergunta, "Ué, não é a mesma coisa", e é mesmo. Porém.

Agora volte no form1 e após private adicione:

CODE

protected
        var_texto_protegido: string;

Ficando:

CODE

type como_esta = (nadando, parado);
      private
        { Private declarations }
      protected
        var_texto_protegido: string;
      public
        var_publica: string;
        { Public declarations }
      property meu_nome: string read var_texto_protegido write var_texto_protegido;
      end;

Agora você já pode modificar variáveis protegidas.

Agora modifique tudo por:

CODE

unit Unit1;
  
  interface
  
  uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls;
  
  type
    TForm1 = class(TForm)
      Button1: TButton;
      procedure Button1Click(Sender: TObject);
  
  type como_esta = (nadando, parado);
    private
      { Private declarations }
      function getVar: String;
      procedure setVar(texto: string);
    protected
      var_texto_protegido: string;
    public
      var_publica: string;
      { Public declarations }
    property meu_nome: string read getVar write setVar;
    end;
  
  var
    Form1: TForm1;
  
  implementation
  
  {$R *.dfm}
  
  procedure TForm1.Button1Click(Sender: TObject);
  var
    estado_do_meu_irmão: como_esta;
  begin
     estado_do_meu_irmão := nadando;
     if (estado_do_meu_irmão = nadando) then
        estado_do_meu_irmão := parado;
  end;
  
  function TForm1.getVar: String;
  begin
     Result := var_texto_protegido;
  end;
  
  procedure TForm1.setVar(texto: string);
  begin
     var_texto_protegido := texto;
  end;
  
  end.

Acho que irão entender


property meu_nome: string read getVar write setVar;

No Read é onde ele irá ler o valor, e no write é onde ele seta. Também podemos colocar mais um(que eu conheço)
property meu_nome: string read getVar write setVar default = 'nada';
Assim teremos como receber algum valor sem mesmo ser "setado"

Agora vamos modifcar a procedure setVar

CODE

procedure TForm1.setVar(texto: string);
  begin
     if (texto <> '') then
         var_texto_protegido := texto;
  end;

A mesma coisa com o getVar:

CODE

if (var_texto_protegido = 'nada') then
         Result := ''
    else
       Result := var_texto_protegido;

Pronto!

Achei um site em ingles a pouco tempo, ta melhor que meu tutorial:
Você não tem permissão para ver o link. Faça o login ou registre-se agora.
 
Editado por um moderador:
Curtidas: xSidnei