Edit_Virgula_to_Ponto


Primeiro exemplo: O Exemplo a seguir leva dois Buttons e um Edit no Form. Quando o usuário cola qualquer coisa no Edit ou dá um clique no mesmo, qualquer vírgula será convertida em ponto. Esse exemplo não usa arrays dinâmicos.


//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Edit1MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
char buffer[100];

  // converte Text de AnsiString para char*
strcpy (buffer, Edit1->Text.c_str());
for(int i = 0; i < (int)Edit1->Text.Length(); i++)
{
if(buffer[i] == ',')
buffer[i] = '.';
Edit1 -> Text = buffer;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char buffer[100];

// converte Text de AnsiString para char*
strcpy (buffer, Edit1->Text.c_str());  
for(int i = 0; i < (int)Edit1->Text.Length(); i++)
{
if(buffer[i] == ',')
buffer[i] = '.';
Edit1 -> Text = buffer;
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
double a = 2.44, b = 3.55456;

/*resultado que será exibido no Edit (com vírgula)*/
Edit1 -> Text = a + b;  

/*o código abaixo substitui vírgulas por ponto*/
char buffer[101];  /*vetor para 100 caracteres*/

/*converte Text de AnsiString para char[] */
strcpy (buffer, Edit1->Text.c_str());

  /* i incremeta-se até o nº de caracteres de Edit1*/
for(int i = 0; i < (int)Edit1->Text.Length(); i++) 
{
if(buffer[i] == ',') /* verifica se o caracter é vírgula*/
buffer[i] = '.';  /* se for vírgula, o substitui por ponto*/

/* coloca o novo texto em Edit1 (com as devidas substituições*/
Edit1 -> Text = buffer; 
}
}



Segundo exemplo:



O Exemplo a seguir leva um Button e três Edits no Form. Esse exemplo usa arrays dinâmicos, para poupar memória e prevenir bug:



//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
//double a = 2.44, b = 3.554563337;
//Edit1 -> Text = a + b;  /*resultado que será exibido no Edit (com vírgula)*/

/*o código abaixo substitui vírgulas por ponto*/


/*constante para array dinâmica*/
const int n = (((int)Edit1->Text.Length()) + 1); 

/*vetor dinâmico que comporta todos os caracteres de Edit1 mais o NULL*/
char* buffer = new char[n];  

/*converte Text de AnsiString para char[] */
strcpy (buffer, Edit1->Text.c_str());  

/* i incremeta-se até o nº de caracteres de Edit1*/
for(int i = 0; i < (int)Edit1->Text.Length(); i++) 
{
/* verifica se o caracter é vírgula*/
if(buffer[i] == ',') 

/* se for vírgula, o substitui por ponto*/
buffer[i] = '.';  

/* coloca o novo texto em Edit2 (com as devidas substituições*/
Edit2 -> Text = buffer; 
}

for(int i = 0; i < (((int)Edit1->Text.Length()) + 1); i++)  
{       /*Laço para deletar a array dinâmica*/

delete [i] buffer;

}

/*demonstra que o array dinâmico foi deletado*/
Edit3 -> Text = buffer; 
/*ou, para verificar o tamanho: (((int)Edit1->Text.Length()) + 1);*/

}
//---------------------------------------------------------------------------


Terceiro exemplo:

O Exemplo a seguir leva apenas um Edit no Form:

//--------------------------------------------------------------------------- void __fastcall TForm1::Edit1Change(TObject *Sender) { /*o código abaixo substitui vírgulas por ponto*/ /*constante para array dinâmica*/ const int n = (((int)Edit1->Text.Length()) + 1); /*vetor dinâmico que comporta todos os caracteres de Edit1 mais o NULL*/ char* buffer = new char[n]; /*converte Text de AnsiString para char[] */ strcpy (buffer, Edit1->Text.c_str()); /* i incremeta-se até o nº de caracteres de Edit1*/ for(int i = 0; i < (int)Edit1->Text.Length(); i++) { /* verifica se o caracter é vírgula*/ if(buffer[i] == ',') /* se for vírgula, o substitui por ponto*/ buffer[i] = '.'; /* coloca o novo texto em Edit1 (com as devidas substituições*/ Edit1 -> Text = buffer; /*Evita o deslocamento do cursor para o início do Text*/ Edit1 -> SelStart = Edit1 -> Text.Length(); } for(int i = 0; i < (((int)Edit1->Text.Length()) + 1); i++) { /*Laço para deletar a array dinâmica*/ delete [i] buffer; } } //---------------------------------------------------------------------------

HOME || MAPA DO SITE || CURSOS || TUTORIAIS || LINKS || FORUM || CONTATO