Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-06-2012
CrazySoft CrazySoft is offline
Miembro
 
Registrado: abr 2005
Posts: 96
Poder: 20
CrazySoft Va por buen camino
evaluar expresion en dbgrid

Estimados amigos tengo una duda como puedo evaluar una expresión numérica dentro de un dbgrid o que componente puedo usar
Por ejemplo
Que en un campo de tipo numérico ingrese 12-3 o 2*3 o 100*10/3-5 y que devuelva el resultado en el mismo o permita realizar el cambio del resultado mediante otra operacion

Gracias

Última edición por CrazySoft fecha: 10-06-2012 a las 05:02:21.
Responder Con Cita
  #2  
Antiguo 10-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Mira este hilo, creo que es lo que buscas.
Responder Con Cita
  #3  
Antiguo 10-06-2012
CrazySoft CrazySoft is offline
Miembro
 
Registrado: abr 2005
Posts: 96
Poder: 20
CrazySoft Va por buen camino
Gracias, pero lo que quiero es que me perimita realizarlo en la grilla, que sea parte de la grilla
Responder Con Cita
  #4  
Antiguo 10-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No lo entiendo, en el dbgrid aparece lo que hay en la base de datos. Si en la base de datos has guardado "12*(3/5)", entonces en el dbgrid aparecerá exactamente eso.
Ahora tú debes tomar ese texto y hacer el cálculo (para eso sirve la función que te he enlazado antes) y ahora puedes presentar el resultado en una columna calculada del dbgrid o donde quieras, eso ya depende de lo que quieras hacer.
Responder Con Cita
  #5  
Antiguo 10-06-2012
CrazySoft CrazySoft is offline
Miembro
 
Registrado: abr 2005
Posts: 96
Poder: 20
CrazySoft Va por buen camino
Perdon lo que quiero es que se evalue automaticamte la expresion que le de y me almacene solo el valor no la expresion, lo que hice hasta el momento es usar el componente CalcExpress, y un edit que lo inclui al DBGrid, mi problema esta en que no puedo salir de la celda con las teclas de cursor o una ves terminado de editar

lo que hice fue a un dbgrid

Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
const IsChecked: array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
Begin
        if (Column.Field.FieldName = 'Expresion') then
            with Expresion do begin
                Left := Rect.Left + DBGrid1.Left + 1;
                Top := Rect.Top + DBGrid1.Top + 1;
                Width := Rect.Right - Rect.Left + 2;
                Width := Rect.Right - Rect.Left + 2;
                Height := Rect.Bottom - Rect.Top + 2;
                text := FloatToStr(ADOTable1Expresion.Value);
                Visible := True;
            end;
end;

procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin

    if (DBGrid1.SelectedField.FieldName = 'Expresion') then Expresion.Visible := False;
end;

procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
    if (key = Chr(9)) then Exit;

    if (DBGrid1.SelectedField.FieldName = 'Expresion')
        then
    begin
        Expresion.SetFocus;
        SendMessage(Expresion.Handle, WM_Char, word(Key), 0);
    end;

end;

procedure TForm1.ExpresionClick(Sender: TObject);
begin
    DBGrid1.DataSource.Edit;

end;
procedure TForm1.ExpresionKeyPress(Sender: TObject; var Key: Char);
var
    CalcExpress1: TCalcExpress;
    args: array[0..100] of extended;
begin
    if key = #13 then
    begin
        CalcExpress1 := TCalcExpress.Create(self);
        CalcExpress1.Formula := Expresion.text;

        if DBGrid1.DataSource.State in [dsEdit, dsInsert] then
            ADOTable1Expresion.Value := CalcExpress1.calc(args);

        Expresion.text := floattostr(CalcExpress1.calc(args));
        CalcExpress1.free;
    end;
end;


mas conctratmente aqui esta el ejemplo

http://crazy-soft.net/descargas/DBGridExpresion.rar

Gracias, o hay algun componente que me realice lo que estoy hacendo
Responder Con Cita
  #6  
Antiguo 10-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Sí, más o menos se entiende lo que estás haciendo, pero realmente, ¿qué es lo quieres hacer?, lo mismo hay otras opciones más cómodas para hacer lo que quieres.
Responder Con Cita
  #7  
Antiguo 10-06-2012
CrazySoft CrazySoft is offline
Miembro
 
Registrado: abr 2005
Posts: 96
Poder: 20
CrazySoft Va por buen camino
poder realizar una simple operacion de suma, resta, multiplicacion o division en la grilla

o que otra opcion mas sencilla hay

gracias
Responder Con Cita
  #8  
Antiguo 10-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Si lo haces en el dbgrid estás accediendo directamente a los datos en la base de datos, seguramente la mejor opción (si quieres hacerlo en el dbgrid) sea usar los métodos gettext y settext del mismo, busca por esos términos. Básicamente es "interceptar" lo escrito y hacer el cálculo y que al dbgrid (al dataset, realmente) le lleguen los datos ya calculados.
Responder Con Cita
  #9  
Antiguo 10-06-2012
CrazySoft CrazySoft is offline
Miembro
 
Registrado: abr 2005
Posts: 96
Poder: 20
CrazySoft Va por buen camino
Gracias, pero hice la prueba y no me permite el ingreso de los operadores * y / para poder calcular
o hay un ejemplo bajo la manga
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ayuda con error! expresion demasiado compleja en la expresion de consulta escorpionrojo43 SQL 8 16-07-2011 22:03:16
Expresion regular Ivan_25 .NET 2 13-04-2009 09:58:47
Expresion Regular D-MO Varios 3 30-06-2007 18:51:59
Expresión FormatNumeric davidgaldo Impresión 3 12-05-2005 18:00:25
expresion matematicas Irina Impresión 4 21-05-2003 00:49:51


La franja horaria es GMT +2. Ahora son las 05:07:06.


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