Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Conversor de Monedas Online (https://www.clubdelphi.com/foros/showthread.php?t=97463)

navbuoy 16-05-2025 17:56:37

Conversor de Monedas Online
 
Me dio por trastear un poco con otra API web y decidí hacer este conversor de Moneda
Utilizo los alpha components para temas del Skin

os paso el codigo (obviamente faltaria el API Key claro, la modalidad gratuita de la web de Currencies creo que permite 100 consultas por mes)

utilizo el componente NetHttpClient para la consulta al API

Unit1.h

Código:

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <System.Net.HttpClient.hpp>
#include <System.Net.HttpClientComponent.hpp>
#include <System.Net.URLClient.hpp>
#include "sSkinManager.hpp"
#include <Vcl.ExtCtrls.hpp>
#include <Vcl.Imaging.jpeg.hpp>
#include "sComboBox.hpp"
#include "sCustomComboEdit.hpp"
#include "sEdit.hpp"
#include "sMaskEdit.hpp"
#include <Vcl.Mask.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:        // IDE-managed Components
        TLabel *Label1;
        TButton *Button1;
        TNetHTTPClient *NetHTTPClient1;
        TMemo *Memo1;
        TImage *Image1;
        TsSkinManager *sSkinManager1;
        TsEdit *Edit1;
        TsComboBox *ComboBox1;
        TsComboBox *ComboBox2;
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall FormCreate(TObject *Sender);
private:        // User declarations
public:                // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


Código:

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <System.JSON.hpp>
#include <System.Net.HttpClient.hpp>
#include <System.Net.URLClient.hpp>
#include <System.Net.HttpClientComponent.hpp>

#include <System.SysUtils.hpp> // Asegúrate de incluir esto


//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "sSkinManager"
#pragma link "sComboBox"
#pragma link "sCustomComboEdit"
#pragma link "sEdit"
#pragma link "sMaskEdit"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

String getSimboloMoneda(String codigo) {
    if (codigo == "USD") return "$";
    if (codigo == "EUR") return "€";
    if (codigo == "GBP") return "£";
    if (codigo == "JPY") return "¥";
    if (codigo == "COP") return "$"; // Peso colombiano también usa $
    if (codigo == "ARS") return "$"; // Peso argentino
    if (codigo == "BRL") return "R$";
    return codigo; // Por defecto, muestra el código
}

  // Conversor de Divisas usando C++ Builder y ExchangeRate-API
// Este ejemplo asume que usas un Form con:
// - ComboBox1: moneda origen
// - ComboBox2: moneda destino
// - Edit1: cantidad a convertir
// - Button1: botón "Convertir"
// - Label1: resultado
// Asegúrate de agregar TNetHTTPClient desde la Tool Palette


void __fastcall TForm1::Button1Click(TObject *Sender)
{

        String fromCurrency = ComboBox1->Text;
        String toCurrency = ComboBox2->Text;
        double cantidad = StrToFloatDef(Edit1->Text, -1);

TFormatSettings formato;
GetLocaleFormatSettings(0, formato); // Carga valores predeterminados

// Ahora forzamos los europeos
formato.DecimalSeparator = ',';
formato.ThousandSeparator = '.';
formato.CurrencyString = "€"; // Opcional si vas a mostrar moneda
formato.CurrencyFormat = 3;  // Simbolito después del número


        if (cantidad < 0) {
                ShowMessage("Cantidad no válida");
                return;
        }

  String url = "https://api.apilayer.com/currency_data/convert?to=" + toCurrency + "&from=" + fromCurrency + "&amount=" + FloatToStr(cantidad);

                        TNetHeaders headers;
                        headers.set_length(1);
                        headers[0].Name = "apikey";
                        headers[0].Value = " ";  //Aqui tu clave de API



        try {
                  String respuesta = NetHTTPClient1->Get(url, NULL, headers)->ContentAsString();
                //ShowMessage(respuesta);  // Aquí puedes hacer parseo del JSON
                Memo1->Text = respuesta;

                TJSONValue *json = TJSONObject::ParseJSONValue(respuesta);
                TJSONObject *root = dynamic_cast<TJSONObject*>(json);

          if (root && root->GetValue("result"))
          {
                        TJSONValue *valor = root->GetValue("result");
                        TJSONNumber *num = dynamic_cast<TJSONNumber*>(valor);

                if (num)
                {
                        double resultado = num->AsDouble;
                        String simbolo = getSimboloMoneda(toCurrency);

                        Label1->Caption = FloatToStr(cantidad) + " " + fromCurrency + " is: " + FormatFloat("#,##0.00", resultado, formato) + " " + toCurrency + simbolo;
                } else {
                                ShowMessage("Error: 'result' no es numérico");
                                }
          } else {
                          ShowMessage("No se encontró el campo 'result'");
                                }

delete json;
        }
        catch (Exception &e) {
                ShowMessage("Error al obtener datos: " + e.Message);
        }
}

//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
        ComboBox1->Items->Add("USD");
        ComboBox1->Items->Add("EUR");
        ComboBox1->Items->Add("ARS");
        ComboBox1->Items->Add("BRL");
        ComboBox1->Items->Add("COP");
        ComboBox1->Items->Add("GBP");
        ComboBox1->Items->Add("JPY");
        ComboBox1->Items->Add("MXN");

        ComboBox2->Items->Add("USD");
        ComboBox2->Items->Add("EUR");
        ComboBox2->Items->Add("ARS");
        ComboBox2->Items->Add("BRL");
        ComboBox2->Items->Add("COP");
        ComboBox2->Items->Add("GBP");
        ComboBox2->Items->Add("JPY");
        ComboBox2->Items->Add("MXN");

        ComboBox1->ItemIndex = 0;
        ComboBox2->ItemIndex = 2; // Por ejemplo ARS
}
//---------------------------------------------------------------------------





Casimiro Noteví 16-05-2025 18:31:00

^\||/^\||/^\||/

Neftali [Germán.Estévez] 19-05-2025 08:49:14

Gracias por el código.
^\||/


La franja horaria es GMT +2. Ahora son las 03:20:36.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi