Trocar de moeda em tempo de execução. Dolares para Reais...

Delphi

16/03/2006

Olá a todos,

estou a desenvolver um aplicação, em que o objectivo e trabalhar em multi moeda, sendo que um utilizador esta num determinado formulário e ao pressionar um tecla Exemplo F12 o programa tem que ir os campos definidos como moeda e fazer a conversao para a moeda selecciona exemplo o utilizador esta num janela com os campos moedas eu Dolares e teclou F12, passou para Reais fazendo o respectivo cambio.
Para isso na base dados sera gravado sempre os valores em reias, para o qual tenho o campo Preço,totalpagar,Taxa Cambio,Data Cambio. O meu problema e como faça para que o programa percorra todos os campos moeda do Form e faça o cambio e mostre o valor na moeda seleccionada. Alguem tem alguma ideia ou algum exemplo. O delphi tem algum propriedade. ou tenho que percorrer todos os componentes e ver se são moeda e chamar a função para fazer a troca. Para ver se são moeda como faço, dou um nome que contenha sempre ´moeda´ exemplo DBmoedaPVP.


Porty

Porty

Curtidas 0

Respostas

Aroldo Zanela

Aroldo Zanela

16/03/2006

Colega,

Se eu entendi, basta você utilizador um ´sinalizador´ (flag) para identificar em qual moeda se está trabalhando, desta forma, você pode utilizar uma tabela de câmbio para consultar sempre que necessário.
Se puder, adicione um fragmento do código ou mais detalhes para entendermos melhor.


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

16/03/2006

você pode nomear o componente ou alterar a propriedade TAG para marcar determinados componentes como moeda.

uma boa maneira seria, ao abrir o formulario, ler todos os componentes e guardar os que têm a TAG alterada. assim o acesso seria muito rápido no caso de precisar trocar de moeda várias vezes numa mesma sessão.

por exemplo: todos os componentes que têm TAG=6 serão os componentes ´moeda´.
criei um form com componentes RxCalcEdit só para exemplificar, sendo que meu RxCalcEdit8 é a cotação de câmbio.
explicações dadas, vamos ao exemplo... no OnCreate do form, faça:
procedure TForm1.FormCreate(Sender: TObject);
var
  i: integer;
begin
  // ObjsMoeda é privativo ao form
  ObjsMoeda := TStringList.Create;

  for i := 0 to ComponentCount - 1 do
    if Components[i].Tag = 6 then
      ObjsMoeda.AddObject(Components[i].Name,Components[i]);
end;
pronto! todos os objetos moeda já são conhecidos. no meu exemplo eu instanciei por volta de 50 objetos, porém somente 7 com a característica ´moeda´, e somente esses 7 foram guardados em ObjsMoeda.
até esse momento não preciso saber de que classe são esses objetos.

agora, no momento do câmbio, faça:
procedure TForm1.Button_CambioClick(Sender: TObject);
var
  i: integer;
begin
  for i := 0 to ObjsMoeda.Count - 1 do
    TRxCalcEdit(ObjsMoeda.Objects[i]).Value := TRxCalcEdit(ObjsMoeda.Objects[i]).Value * RxCalcEdit8.Value;
end;
dessa forma serão percorridos somente os objetos conhecidos (aqueles 7) - o que tornará o processo muito, mas muito rápido.
note que eu utilizei componentes RxCalcEdit para o exemplo e por isso estou utilizando TRxCalcEdit(ObjsMoeda.Objects[i]).Value. utilize a classe e a propriedade correta do seu objeto.

espero que seja disso que você precisa. boa sorte.


GOSTEI 0
POSTAR