Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-12-2011
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Sumar 2 valores ubicados en 2 celdas de sendos grids en diferentes ventanas.

Tenemos 2 ventanas hijas que descienden del mismo ancestro, son idénticas en todo solo que la información que muestran puede variar por cuestion de fechas. Ambas contienen un grid que muestra exactamente las mismas columnas. ¿Como se podría hacer que al seleccionar una celda de una de ellas y luego una de la otra ventana podamos hacer cualquier cálculo? (suma, resta, etc.) El como acceder al valor de la celda es trivial pero estoy atorado en como manejar los mensajes pues es obvio que quien haría el cálculo sería la ventana padre. Es una idea loca que se me ocurrió, basado en lo que hace Excel 2007 que seleccionando celdas nos da su suma o cualquier otra operación
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #2  
Antiguo 28-12-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.464
Poder: 21
newtron Va camino a la fama
Hola.

No sé si he pillado lo que quieres decir pero si tuvieras dos variables en las que fueras guardando el valor de la celda de uno y otro grid según vas picando en uno y otro podrías hacer las operaciones entre ellas, ¿no?.

Saludos
__________________
Be water my friend.
Responder Con Cita
  #3  
Antiguo 28-12-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Tampoco entiendo bien la pregunta, ¿dices que tienes dos ventanas hijas donde están los datos y que el cálculo debe hacerlos la ventana padre?.
Responder Con Cita
  #4  
Antiguo 28-12-2011
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Digamos que son dos ventanas hijas, cada una tiene un grid sencillo digamos de 3 x 3 (o sea nueve celdas) con valores numericos cada una. La idea es que al ser amodales podemos seleccionar una u otra ventana. Ahora bien, digamos que selecciona una celda cualquier en cada ventana, ¿Como podría hacer el cálculo de la suma (o cualquier otra operación) de las celdas seleccionadas? Habia pensado en que se mandara un mensaje a su padre para indicar: padre, que me han seleccionado un celda con este valor x y el padre se encargara de mantener el total de la operación, si cerramos la celda o seleccionamos otra cosa el mensaje sería, "padre, ya no me han seleccionado nada" y entonces restamos el valor (en caso de suma). El chiste es que pueda hacer con cualquier número de ventanas hijas.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #5  
Antiguo 28-12-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
mmm creo entender lo que quieres Azid...

Según entiendo el problema, yo lo que haría sería implementar un mensaje de Windows a cómo sugieres y luego en el padre hacer la suma... por ejemplo así:

en las ventanas hijas, al seleccionar una celda o cerrar la ventana:
Código Delphi [-]
begin
    PostMessage(FormularioPadre.Handle, WM_SELECTEDCELLCHANGED, 0, 0);
end;

En el formulario padre:
Código Delphi [-]
...
protected
    procedure SumarCeldas(Message: TMessage); message WM_SELECTEDCELLCHANGED;
...
...

procedure TFormularioPadre.SumarCelda(Message: TMessage);
var
    I, B: Integer;
    selected_sum: Integer;
begin
    for I := to Screen.FormCount - 1 do
        if Screen.Forms[i].inheritsFrom(TAncestroVentanaHija) then
            with TAncestroVentanaHija(Screen.Forms[i]).Regilla do
                // sumar las celdas seleccionadas utilizando
                // la propiedad SelectedRows del grid.
end;

Saludos!
Espero que hallas entendido mi pseudo código y te ayude a resolver el problema.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #6  
Antiguo 29-12-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola AzidRain.

Siempre que todos los StringGrids (que haya en cada MDIChild) tengan el mismo nombre, otra opción que se me ocurre es:

MDIForm
Código Delphi [-]
type
  TOPer = (opSuma, opResta);
  TMDIForm = class(TForm)
    ...
  private
    function OperarGrid(Oper: TOper): Double;
  end;

...

implementation   

function TMDIForm.OperarGrid(Oper: TOper): Double;
var
  i: Integer;
begin
  Result:= 0;
  for i:= MDIChildCount-1 downto 0  do
    with MDIChildren[i].FindComponent('StringGrid1') as TStringGrid do
      case Oper of
        opSuma : Result:= Result + StrToFloat(Cells[Col,Row]);
        opResta: Result:= Result - StrToFloat(Cells[Col,Row]);
      end;
end;
...
Si se tratara de DBGrids cambiando el cast funciona igualmente (con SelectedField). La cosa se complicaría un poco si también existen campos no numéricos...


Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 29-12-2011 a las 05:06:29. Razón: Corregir carita en codigo (:D)
Responder Con Cita
  #7  
Antiguo 30-12-2011
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Gracias a Chris y eficsa ya con sus ideas me aclaran lo que pensaban implementar, amabas me sirven. En cuanto implemento posteó como quedo al final. Sin duda a alguien le va a servir y le va a ahorrar tiempo ya que es bastante útil y evita estar haciendo reportes adicionales solo para saber una cifra.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #8  
Antiguo 30-12-2011
Avatar de chartres
chartres chartres is offline
Miembro
NULL
 
Registrado: may 2011
Posts: 31
Poder: 0
chartres Va por buen camino
Mas facil todavia

imagino que usas delphi.

simplemente relaciona la Formas, osea menu File - Use unit y selecciona las unidades que ocupas que trabajen juntas, facil y rapido.

de ahi agregas ya sea variables o algun componente como un texedit en la forma padre para cada dato que
mandes

en las formas hijas que tengan el grid le pones en el evento que use x ejemplo

procedure Grid.oncellclic

//si agragaste componente edit
formapadre.texedit1.text:=grid.value;

//si es variable
formapadre.variable:=grid.value;

y asi puedes mandar y tomar datos de ambas formas.

el codigo no es tal como va, solo es para ilustrar
__________________
No hay que Postear primero, hay saber Buscar..
Responder Con Cita
  #9  
Antiguo 30-12-2011
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Chartres, no es eso de lo que se trataba, es un poco mas complejo, lee bien las aportaciones de eficsa y Chris. ¿Has visto como en en excel si seleccionas varias celdas, automáticamente te da su suma (o cuenta o lo que sea) en un espacio de la ventana? Pues es lo que quiero implementar. Como lo han planteado ellos, es la forma más válida de hacerlo. Por otro lado mencioné que se trata de formas tipo MDI por lo que todas descienden de la misma clase por lo que para "comunicarse" con la forma padre no tienen de otra mas que con mensajes pues no tienen una variable que las instancíe directamente, además no queremos la suma de las celdas donde se hagan click, solo de las que esten seleccionadas.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
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
2 ventanas diferentes, 2 monitores diferentes Milperrimo Varios 12 02-10-2008 04:12:32
Cómo Sumar Celdas de una Tabla Word abril0404 Servers 0 10-03-2008 13:49:45
Ayuda en programa con grids y guardar valores onlytk Varios 3 11-11-2005 20:08:28
Celdas de colores diferentes en un TStringGrid phyera Gráficos 2 14-09-2003 19:06:26
Sumar Celdas de un DBgrid barrauda Conexión con bases de datos 2 05-06-2003 16:25:23


La franja horaria es GMT +2. Ahora son las 22:11:55.


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