Classes

Delphi

19/02/2008

Galera, estou com este probleminha abaixo...
o método SetUsuarios da classe TCadastro não esta sendo executada ...
alguem sabe o porque?

[b:8ea77ada8e]ClasseUsuarios.pas[/b:8ea77ada8e]
unit ClasseUsuarios;

interface

uses
  Windows, Forms;

Type
  TUsuarios = class
  private
    fNome: string;
    fIdade: Integer;
  published
    property Nome: string read fNome write fNome;
    property Idade: Integer read fIdade write fIdade;
  end;

  TCadastro = class
  private
    fUsuarios: TUsuarios;
    procedure SetUsuarios(const Value: TUsuarios);
  published
    property Usuario: TUsuarios read fUsuarios write SetUsuarios;
  public
    constructor Create;
    destructor Destroy;
end;


implementation

{ TCadastro }

constructor TCadastro.Create;
begin
  fUsuarios:= TUsuarios.Create;
end;

destructor TCadastro.Destroy;
begin
  fUsuarios.Free;
end;

procedure TCadastro.SetUsuarios(const Value: TUsuarios);
begin
  if (Value.Idade < 21) then
  begin
    Application.MessageBox(´Proibido cadastro de menores´,´Erro´, MB_OK + MB_ICONERROR);
  end else
  begin
    fUsuarios := Value;
    Application.MessageBox(´Cadastro realizado com sucesso!´,´Ok´, MB_OK + MB_ICONINFORMATION);
  end;
end;

end.


[b:8ea77ada8e]fCadastro.pas[/b:8ea77ada8e]
procedure TForm1.Button1Click(Sender: TObject);
var
  MeuCadastro: TCadastro;
  Teste: TUsuarios;
begin
  {MeuCadastro := TCadastro.Create;
  Teste       := TUsuarios.Create;
  Teste.Nome  := ´Rodrigo´;
  Teste.Idade := 18;
  MeuCadastro.Usuario:= Teste; } /// ********** DESTA FORMA AKI FUNCIONA **** ///


  MeuCadastro:= TCadastro.Create;
  MeuCadastro.Usuario.Nome:= ´Rodrigo´;
  MeuCadastro.Usuario.Idade:= 18;
end;



Output

Output

Curtidas 0

Respostas

Edjlle

Edjlle

19/02/2008

Não entendi a dúvida! Como exatamente não funciona?


GOSTEI 0
Edjlle

Edjlle

19/02/2008

Eu acho que é porque propriedades são diferentes de campos, nesse caso você está tentando acessar um campo de uma classe como ´Nome´ que é do tipo string, sendo que na verdade propriedade que você declarou e está acessando é do tipo TUsuários.
A ajuda do delphi diz o seguinte:
[i:e999a495d6]Properties are defined by their access specifiers. Unlike fields, properties cannot be passed as var parameters, nor can the @ operator be applied to a property. The reason is that a property doesn´t necessarily exist in memory. It could, for instance, have a read method that retrieves a value from a database or generates a random value.[/i:e999a495d6]


GOSTEI 0
POSTAR