Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Calcular Operaciones Basicas en Celda DBGrid

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Calcular Operaciones Basicas en Celda DBGrid Responder citando

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
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Re: Calcular Operaciones Basicas en Celda DBGrid Responder citando

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
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
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


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.