Declaração de campos dentro de uma classe

03/06/2008

1

Tenho 2 forms: Form1 e Form2. No Form1 eu declaro minhas classes e no Form2 eu Instancio-as. Eu queria declarar um método que fosse lido dois parâmetros de dois Edits. Então no Form2 quando eu colocar os 2 Edits no form para escrever meus códigos, eu não precisasse fazer assim:
var val1,val2: Integer; begin val1 := StrToint(Edit1.Text); ....

Mas quando chamar minha classe assim:
var
meu := TMinhaClasse.Create;
meu.soma(val1,val2);
Onde val1 e val2 são lidos de um Edit, mas gostaria que essa informação já fosse implementada na declaração da classe e quando eu chamasse, bastasse eu digitar 2 valores nos edits correspondentes e funcionar. Como faço isso?


Responder

Posts

04/06/2008

Brunodsr

Bom, pelo que eu entendi, vc quer que a sua classe já saiba de quem deve ler automáticamente, sem que vc tenha que passar o valor do componente.

Se for isso. Vc pode definir nomes de componente padrões para serem usados pela classe e utilizar a função findcomponent. Isso pra o caso de vc ter mais de um edit em tela e ferrar tudo. Vou fazer um exemplo aí procê:

Declaração da classe:
  teste = class
    bruno:string;
    constructor create(sender:TComponent);
    procedure AtribuiValores(sender:TForm);
  end;


Implementação dos procedimentos da classe:
//No construtor da classe eu passo o formulário que tá instanciando ela
constructor teste.create(sender:TComponent);
begin
  AtribuiValores(TForm(sender));
end;

procedure teste.AtribuiValores(sender:TForm);
begin
  //Sabendo quem é o formulário, eu procuro o meu componente lá
  //e atribuo o valor da minha variável ao valor do componente
  if Assign(sender.FindComponent(´bruno´)) then
    bruno := TEdit(sender.FindComponent(´bruno´)).Text;
end;


Agora o form que tem o meu componente usando a minha classe;
//Nesse caso eu tenho um edit na tela chamado ´bruno´.. 
procedure TForm1.Button1Click(Sender: TObject);
var t:teste;
begin
  t:= teste.create(self);
  showmessage(t.bruno);
end;


Para ficar mais legal, vc pode ao invés de engessar o nome dos componentes, escrever em arquivos INI o nome dos componentes que vc quer atribuir o valor. Daí fica dinâmico.

Espero ter ajudado.


Responder