Fórum Metodos de Classe #296399
21/09/2005
0
Tiago Malveira
Curtir tópico
+ 0Posts
21/09/2005
Michael
Ficou meio obscuro a sua dúvida. Não há limite de métodos de classe que vc possa criar.
Vc pode colocar seu código aqui?
[]´s
Gostei + 0
21/09/2005
Henriquell
unit P1;
interface
uses.....
type MinhaClasse = class
protected
x : integer;
y : string;
...
...
...
public
function minhaFuncao(z : integer) : boolean;
procedure minhaProcedure;
...
...
...
end;
implementation
function MinhaClasse.minhaFuncao(z : boolean) : boolean;
begin
result := not z;
end;
procedure MinhaClasse.minhaProcedure;
begin
writeln(´executou minhaProcedure´);
end;
end.
Abrços
Gostei + 0
21/09/2005
Tiago Malveira
Gostei + 0
21/09/2005
Tiago Malveira
Gostei + 0
21/09/2005
Massuda
begin
with [color=red:c7dfbc851b]self[/color:c7dfbc851b].create(nil) do begin
...
end;
end;[/quote:c7dfbc851b]Em um class function/procedure não existe a variável Self. Isso porque como a função/procedure é da classe toda, ela não se aplica a uma determinada instância da classe (que é o que o valor Self representa).
Fora isso, Self.Create() não faz muito sentido (pode até compilar, mas não deve executar). Será que você poderia explicar melhor o que pretende fazer pois tenho a impressão que o caminho que você está seguindo não seria o usual.
Gostei + 0
21/09/2005
Tiago Malveira
Estou fazendo uma pesquisa simples em um banco de dados e o resultado da pesquisa estou passando como parametro para uma class procedure para q eu possa mostrar um form com os dados logo ao criar o form. Eu crio o form, faço um select com os dados q passei como parametro e atribuo a edits os resultados do select
por exemplo
class procedure TfrmPesquisa.Open(AId: integer);
begin
with TfrmPesquisa.Create( nil ) do begin
sdsPesq.CommandText := ´SELECT *...´
edit := FieldByName(´id´).AsInteger;
...
end; //with
end;
dessa maneira consigo preencher os dados do meu formulario de pesquisa no momento q o crio, pois essa pesquisa eh feita de outro form...
Gostei + 0
21/09/2005
Tiago Malveira
Self, como usei no meu primeiro exemplo e funciona normalmente!
mas minha duvida eh qto ao uso de mais de uma class procedure/function em uma mesma classe pq ha vezes q tento usar e naum consigo, outras vezes q consigo, e eu gostaria de saber se tem alguma maneira especial de usar esse tipo de metodo...
Gostei + 0
21/09/2005
Massuda
Por exemplo, este código, equivalente ao seu, não deve funcionar (embora compile)...
var Lista: TStringList; .... with Lista.Create do begin Add(´Teste´); Free; end;
var Lista: TStringList; .... Lista := TStringList.Create; with Lista do begin Add(´Teste´); Free; end;
Quando você chama o Create para um objeto já criado, isso equivale a reiniciar o objeto, não criar um novo objeto.
Gostei + 0
22/09/2005
Isabelct
var Lista: TStringList; .... with Lista.Create do begin Add(´Teste´); Free; end;
E por que não funcionaria? Por mais estranho e não usual que seja, ele funciona sim. Eu é que não gosto muito desse tipo de instrução, primeiro porque você não tem uma referência ao ponteiro, e segundo porque eu, particularmente, não gosto de usar a instrução ´with´.
Gostei + 0
22/09/2005
Massuda
var Lista: TStringList; .... Lista := TStringList.Create; // <- isto faz funcionar with Lista.Create do // <- isto reinicia a lista begin Add(´Teste´); Free; end;
PS: Também não uso o with no meu dia-a-dia, mas assim o exemplo fica parecido com o código que foi postado originalmente pelo Tiago.
Gostei + 0
22/09/2005
Tiago Malveira
As vezes, por eu criar uma instancia de uma classe sem ter um ponteiro q referencia essa instancia tenho problemas em acessar esse objeto...
Para esse meu problema, uma alternativa seria criar uma class function q retorne o endereço do meu objeto... Faço isso da seguinte maneira...
class function TfrmPesquisa.OpenForm(AId:integer):TfrmPesquisa;
begin
with self.Create( nil ) do begin
show;
...
end;//with
Result := @self;
end;
Eu gostaria de saber se tem alguma maneira de eu obter o endereço desse objeto se essa rotina fosse uma procedure e eu naum retornasse o endereço da minha nova instancia...
Gostei + 0
22/09/2005
Massuda
Gostei + 0
22/09/2005
Massuda
class function TfrmPesquisa.OpenForm(AId:integer):TfrmPesquisa; begin Result := self.Create( nil ); with Result do begin show; ... end;//with end;
[quote:4c66ea130f=´Tiago Malveira´]...tem alguma maneira de eu obter o endereço desse objeto se essa rotina fosse uma procedure e eu naum retornasse o endereço da minha nova instancia...[/quote:4c66ea130f]Se não retornar a referência ao form recém criado, você vai precisar ter algum outro mecanismo para localizar o form; uma possibilidade seria dar um nome ao form (propriedade Name) e quando precisar do form, buscar na lista Screen.Forms[] (Screen é uma variável global do Delphi).
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)