 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
vizca321 Lt


Registrado: 06 May 2008Mensajes: 83Ubicación: Mexico
|
Publicado: Lun 22 Ene, 2024 11:52 pm Asunto: Calcular Operaciones Basicas en Celda DBGrid |
|
|
Buen día, saludos a todos, necesito obtener el cálculo de operaciones básica dentro de una celda de un DBGrid parecido a Excel.
hice el siguiente código para un TEdit asociandolo al dbgrid en Draw y funciona de maravilla pero en Release no funciona me gustaría que hiciera la división del texto al dar enter ya que no lo he conseguido
| Código: | void __fastcall TForm1::ECalculadoraKeyUp(TObject *Sender, WORD &Key, TShiftState Shift)
{
double Result1 = 0;
double Result2 = 0;
String Operador = "";
String Resto;
int Pos,Largo,ejecuto;
int tagAnterior = 0;
String Cadena = ECalculadora->Text.SubString(ECalculadora->Tag,ECalculadora->Text.Length());
int length = Cadena.Length();
if(Key != 8){
if(ECalculadora->Text.SubString(ECalculadora->Text.Length(),1) == "="){
listaCalc->Clear();
//ECalculadora->Text="=";
ECalculadora->Tag = 2;
tagAnterior = ECalculadora->Tag;
}
else if(ECalculadora->Text.SubString(ECalculadora->Text.Length(),1) == "*"){
//Multiplicacion
ejecuto = 1;
Operador = "*";
Largo = Operador.Length();
Pos = Cadena.Pos(Operador);
tagAnterior = ECalculadora->Tag;
ECalculadora->Tag = ECalculadora->Text.Length() + Largo;
}
else if(ECalculadora->Text.SubString(ECalculadora->Text.Length(),1) == "+"){
//Suma
ejecuto = 1;
Operador = "+";
Largo = Operador.Length();
Pos = Cadena.Pos(Operador);
tagAnterior = ECalculadora->Tag;
ECalculadora->Tag = ECalculadora->Text.Length() + Largo;
}
else if(ECalculadora->Text.SubString(ECalculadora->Text.Length(),1) == "-"){
//Resta
ejecuto = 1;
Operador = "-";
Largo = Operador.Length();
Pos = Cadena.Pos(Operador);
tagAnterior = ECalculadora->Tag;
ECalculadora->Tag = ECalculadora->Text.Length() + Largo;
}
else if(ECalculadora->Text.SubString(ECalculadora->Text.Length(),1) == "/"){
//Divicion
ejecuto = 1;
Operador = "/";
Largo = Operador.Length();
Pos = Cadena.Pos(Operador);
tagAnterior = ECalculadora->Tag;
ECalculadora->Tag = ECalculadora->Text.Length() + Largo;
}
if(ejecuto == 1){
if(ECalculadora->Text.SubString(tagAnterior,Pos-1)!=""){
listaCalc->Add(ECalculadora->Text.SubString(tagAnterior,Pos-1));
listaCalc->Add(Operador);
}
else{
ECalculadora->Tag = ECalculadora->Text.Length();
}
Memo1->Lines->Assign(listaCalc);
}
}
if(Key==13){
if(listaCalc->Count!=NULL){
listaCalc->Add(ECalculadora->Text.SubString(ECalculadora->Tag,ECalculadora->Text.Length()));
Memo1->Lines->Assign(listaCalc);
String list = listaCalc->Strings[0].SubString(1,1);
if(list !="=" && list !="/" && list != "*" && list != "+"){
Result1 = listaCalc->Strings[0].ToDouble();
int par=1;
for(int s = 1; s < listaCalc->Count; s++){
if(par == 0){
par++;
list = listaCalc->Strings[s].SubString(1,1);
if(list!="+" && list!="*"&& list!="/"&& list!="="){
Result2 = listaCalc->Strings[s].ToDouble();
if(Operador == "+" && s > 1){
Result1 = Result1 + Result2;
}
else if(Operador == "*"&& s > 1){
Result1 = Result1 * Result2;
}
else if(Operador == "-"&& s > 1){
Result1 = Result1 - Result2;
}
else if(Operador == "/"&& s > 1){
if( Result2 != 0)
Result1 = Result1 / Result2;
else{
ShowMessage("No es posible dividir entre 0");
break;
}
}
else{
ShowMessage("Error en la formula");
break;
}
}
else{
ShowMessage("Error en la formula");
break;
}
}
else{
if(par == 1){
par--;
Operador = listaCalc->Strings[s];
}
}
}
}
else{
ShowMessage("Error en la formula");
}
ECalculadora->Text = String(Result1);
listaCalc->Clear();
ECalculadora->Tag = 2;
tagAnterior = ECalculadora->Tag;
}
}
} |
_________________ [code:1]//----------------Att Gabriel----------------
void Gracias(){
if (Respuesta == true){
Showmessage("Muchisimas Gracias!")
else
Showmessage("Ojala te sirva... ^_^ ");
}[/code:1] |
|
| Volver arriba |
|
 |
vizca321 Lt


Registrado: 06 May 2008Mensajes: 83Ubicación: Mexico
|
Publicado: Jue 25 Ene, 2024 10:35 pm Asunto: Re: Calcular Operaciones Basicas en Celda DBGrid |
|
|
Resuelto
| Código: | void __fastcall TForm1::ECalculadoraKeyPress(TObject *Sender, System::WideChar &Key)
{
TEdit *SpinEdit = (TEdit *) Sender ;
int PosPunto, MaxDecimales;
PosPunto = SpinEdit->Text.Pos(".");
if(PosPunto != NULL && Key == 46)
Key = 0x00;
else if(SpinEdit->SelStart > PosPunto || MaxDecimales == 0){
if (!((Key >= 42 && Key <= 57) || Key == 8 || Key == 61|| Key == 13)){
Key = 0x00;
}
}
double Result1 = 0;
double Result2 = 0;
String Operador = "";
int length = SpinEdit->Text.Length();
if(Key==13){
Memo1->Lines->Clear();
String Limitador = "-/*+";
int inicio,corte;
corte = -2;
inicio = 2;
for(int o = 2; o <= length;o++){
for(int l = 1; l < 5;l++){
if(SpinEdit->Text.SubString(o,1)==Limitador.SubString(l,1)){
Memo1->Lines->Add(SpinEdit->Text.SubString(inicio,o-inicio));
Memo1->Lines->Add(Limitador.SubString(l,1));
inicio = o+1;
}
}
}
Memo1->Lines->Add(SpinEdit->Text.SubString(inicio,length));
if(Memo1->Lines->Count!=NULL){
String list = Memo1->Lines->Strings[0].SubString(1,1);
if(list !="=" && list !="/" && list != "*" && list != "+"){
Result1 = Memo1->Lines->Strings[0].ToDouble();
int par=1;
for(int s = 1; s < Memo1->Lines->Count; s++){
if(par == 0){
par++;
list = Memo1->Lines->Strings[s].SubString(1,1);
if(list!="+" && list!="*"&& list!="/"&& list!="="){
Result2 = Memo1->Lines->Strings[s].ToDouble();
if(Operador == "+" && s > 1){
Result1 = Result1 + Result2;
}
else if(Operador == "*"&& s > 1){
Result1 = Result1 * Result2;
}
else if(Operador == "-"&& s > 1){
Result1 = Result1 - Result2;
}
else if(Operador == "/"&& s > 1){
if( Result2 != 0)
Result1 = Result1 / Result2;
else{
ShowMessage("No es posible dividir entre 0");
break;
}
}
else{
ShowMessage("Error en la formula");
break;
}
}
else{
ShowMessage("Error en la formula");
break;
}
}
else{
if(par == 1){
par--;
Operador = Memo1->Lines->Strings[s];
}
}
}
}
else{
ShowMessage("Error en la formula");
}
SpinEdit->Text = String(Result1);
Memo1->Lines->Clear();
}
} |
_________________ [code:1]//----------------Att Gabriel----------------
void Gracias(){
if (Respuesta == true){
Showmessage("Muchisimas Gracias!")
else
Showmessage("Ojala te sirva... ^_^ ");
}[/code:1] |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|