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 |