Função multiparametros
olá galera!
Bem, trabalhei com clipper muitos alguns anos e nele tinha um comando muito util chamado STORE, que servia para atribuir um valor(númerico ou string) a varias variaveis ao mesmo tempo.
Ex: store 98 to a,b,c,d,e,i,j
ou seja, assim como a=98, os outros também seriam
store ´MARIA DA SILVA´ to a,b,c,d,e,i,j
Estou querendo criar uma função em delphi onde eu passase o primeiro parametro como o Texto ou Valor e os outros parametros as variaveis que eu vo atribuir: store(´MARIA DA SILVA´,a,b,c,d).
alguém sabe como???
Bem, trabalhei com clipper muitos alguns anos e nele tinha um comando muito util chamado STORE, que servia para atribuir um valor(númerico ou string) a varias variaveis ao mesmo tempo.
Ex: store 98 to a,b,c,d,e,i,j
ou seja, assim como a=98, os outros também seriam
store ´MARIA DA SILVA´ to a,b,c,d,e,i,j
Estou querendo criar uma função em delphi onde eu passase o primeiro parametro como o Texto ou Valor e os outros parametros as variaveis que eu vo atribuir: store(´MARIA DA SILVA´,a,b,c,d).
alguém sabe como???
Ricardoif
Curtidas 0
Respostas
Beppe
18/04/2005
Cara, complicado o que quer...terá que fazer via ponteiros, uma rotina para cada tipo:
Na chamada, passe ponteiros para as variáveis:
PS: Não testei, se não funcionar, posta aqui para corrigirmos o erro.
procedure Store(const V: String; A: array of Pointer); overload; var I: Integer; begin for I := Low(A) to High(A) do String(P^) := S; end; procedure Store(const V: Integer; A: array of Pointer); overload; var I: Integer; begin for I := Low(A) to High(A) do Integer(P^) := S; end;
Na chamada, passe ponteiros para as variáveis:
Store(98, [@a, @b, @c, @d, @e, @i, @j]); Store(´MARIA DA SILVA´, [@a, @b, @c, @d]);
PS: Não testei, se não funcionar, posta aqui para corrigirmos o erro.
GOSTEI 0
Ricardoif
18/04/2005
Olha tentei mas não consegui, vou tentar novamente, e obridado pela atencao!
procedure TForm1.Store(const V: String; A: array of Pointer);
var
i: Integer;
p: ^String;
begin
for I := Low(A) to High(A) do
String(P^) := V;
end;
procedure TForm1.Store(const V: Integer; A: array of Pointer);
var
i: Integer;
p: ^Integer;
begin
for I := Low(A) to High(A) do
Integer(P^) := v;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
a,b,c: string;
e,f,g: integer;
begin
store(´Maria MADALENA´,[@a,@b,@c]);
Label1.caption:=a;
msg(a);
msg(b);
msg(c);
store(1550,[@e,@f,@g]);
msg(e);
msg(f);
msg(g);
end;
procedure TForm1.Store(const V: String; A: array of Pointer);
var
i: Integer;
p: ^String;
begin
for I := Low(A) to High(A) do
String(P^) := V;
end;
procedure TForm1.Store(const V: Integer; A: array of Pointer);
var
i: Integer;
p: ^Integer;
begin
for I := Low(A) to High(A) do
Integer(P^) := v;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
a,b,c: string;
e,f,g: integer;
begin
store(´Maria MADALENA´,[@a,@b,@c]);
Label1.caption:=a;
msg(a);
msg(b);
msg(c);
store(1550,[@e,@f,@g]);
msg(e);
msg(f);
msg(g);
end;
GOSTEI 0
Marcelo Saviski
18/04/2005
Em vez de [color=green:fcf1ed133d]P^[/color:fcf1ed133d] não deveria ser [color=green:fcf1ed133d]A[I]^ [/color:fcf1ed133d]?
GOSTEI 0
Beppe
18/04/2005
[quote:3dc3bb1ee4=´Marcelo Saviski´]Em vez de [color=green:3dc3bb1ee4]P^[/color:3dc3bb1ee4] não deveria ser [color=green:3dc3bb1ee4]A[I]^ [/color:3dc3bb1ee4]?[/quote:3dc3bb1ee4]
Exatamente isso! :oops: :wink:
Exatamente isso! :oops: :wink:
GOSTEI 0