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

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-05-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 18
jafera Va por buen camino
Post Seleccion de item en combobox da error list index out of bonds

Buenas a todos.

Pues como he puesto en el título, cuando selecciono un item del combobox si la columna [15] del grid está en visible :=false, me da el error.

Código Delphi [-]
procedure TF_Pagues.DBLookupComboBox1Exit(Sender: TObject);
begin
        If DBEdit3.Text='0' then
        begin
                JvDBUltimGrid1.Columns[15].Visible:=False;      // Aquí es donde da el error del list index out of bounds ya que si
                                                                               // en el mecanico anterior el visible de la columna es false, no la
                                                                               // encuentra y marca el error                 
                DBEdit3.Font.Color:=clBlack;
                DBEdit3.Color:=clWindow;
        end
        else
        begin
                JvDBUltimGrid1.Columns[15].Visible:=True;
                DBEdit3.Font.Color:=clRed;
                DBEdit3.Color:=clYellow;
        end;
end;

No se como puedo controlar la "visibilidad" de la columna [15] para que no de este error.
Si alguien tiene una idea o se ha encontrado con lo mismo.......

Gracias por adelantado

Josep

Última edición por jafera fecha: 06-05-2013 a las 15:21:52.
Responder Con Cita
  #2  
Antiguo 06-05-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.264
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Recuerda poner los tags al código fuente, ejemplo:



Gracias
Responder Con Cita
  #3  
Antiguo 06-05-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 18
jafera Va por buen camino
No los he puesto?

Es que he tenido que editar el mensaje un par de veces y posiblemente lo has visto mientras estaba en el chapista

Saludos
Responder Con Cita
  #4  
Antiguo 06-05-2013
Avatar de javier7ar
javier7ar javier7ar is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 124
Poder: 19
javier7ar Va por buen camino
"index out of bonds" da porque quiere acceder a una posicion de un array/lista que no existe, generalmente cuando te pasas del tamaño del array/lista.
Recorda que los indices en esas estructuras que heredan de TList o TCollection suelen ir de 0 a (Count -1), asi que si tenes 15 columnas, van de 0 a 14, quizas le estas errando en eso
Saludos
Responder Con Cita
  #5  
Antiguo 06-05-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.264
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por jafera Ver Mensaje
No los he puesto? Es que he tenido que editar el mensaje un par de veces y posiblemente lo has visto mientras estaba en el chapista Saludos
Responder Con Cita
  #6  
Antiguo 06-05-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 18
jafera Va por buen camino
Gracias por la respuesta.

Efectivamente las columnas van de 0 a 15 i mi columna es la 15 no la catorce.

Resumiendo que el problema es que no encuentra la columna porque su propiedad visible es false cuando cambio de registro, en el primer registro si visible es false o true funciona perfectamente.

Luego cambio de operario en un combobox y la propiedad visible sigue siendo false y aquí es dónde hace el out of bound[15]

Saludos

Josep
Responder Con Cita
  #7  
Antiguo 06-05-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 18
jafera Va por buen camino
Casimiro, acepto tu "tironcillo de orejas" y sus correspondientes disculpas, jijiji.

Intento en lo máximo cumplir las normas aunque hay una que es la del título descriptivo que creo nos cuesta bastante cumplir a todos.

Saludos

Josep
Responder Con Cita
  #8  
Antiguo 06-05-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.264
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por jafera Ver Mensaje
Intento en lo máximo cumplir las normas aunque hay una que es la del título descriptivo que creo nos cuesta bastante cumplir a todos.
je, je, je...
Imágenes Adjuntas
Tipo de Archivo: jpg simpson.jpg (18,9 KB, 12 visitas)
Responder Con Cita
  #9  
Antiguo 06-05-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 18
jafera Va por buen camino
Muy bueno el Bartolo Simpson, aunque yo me identifico más con su padre, donuts, donuts.....

Vamos a enderezar, que nos desviamos del tema y algun moderador nos va a reñir.

Saludos
Responder Con Cita
  #10  
Antiguo 06-05-2013
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
Cita:
Empezado por jafera Ver Mensaje
Buenas a todos.

Pues como he puesto en el título, cuando selecciono un item del combobox si la columna [15] del grid está en visible :=false, me da el error.

Código Delphi [-]
procedure TF_Pagues.DBLookupComboBox1Exit(Sender: TObject);
begin
  If DBEdit3.Text='0' then
  begin
    JvDBUltimGrid1.Columns[15].Visible:=False;  // Aquí es donde da el error del list index out of bounds ya que si
                                                // en el mecanico anterior el visible de la columna es false, no la
                                                // encuentra y marca el error                 
    DBEdit3.Font.Color:=clBlack;
    DBEdit3.Color:=clWindow;
  end
  else
  begin
    JvDBUltimGrid1.Columns[15].Visible:=True;
    DBEdit3.Font.Color:=clRed;
    DBEdit3.Color:=clYellow;
  end;
end;

No se como puedo controlar la "visibilidad" de la columna [15] para que no de este error.
Si alguien tiene una idea o se ha encontrado con lo mismo.......

Gracias por adelantado

Josep
Hola Josep.

No he usado los componentes Jedi, pero no pareciera tener sentido que exista esa relación entre la visibilidad y la existencia de la columna.

Segun entiendo de tu mensaje (y tal vez entendí mal), quiere decir que un código como este:
Código Delphi [-]
begin
  JvDBUltimGrid1.Columns[4].Visible := False;
  JvDBUltimGrid1.Columns[4].Visible := False;  // Error: La columna dejo de existir ??? 
  ...
Lanzaría el error list index out of bounds en la tercer línea aún existiendo la columna 4, ¿ Entonces como se haría para volverla al estado visible ?

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 08-05-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 18
jafera Va por buen camino
Problema solucionado.

El problema no venia por el visible en false, venia porque en otro proceso destruía la columna en cuestión y evidentemente list index out of bounds.

Poco a poco iremos aprendiendo más cosillas los que nos dedicamos a esto en plan hobby, hay que darse de bruces con el suelo varias veces para saber que este está duro.

Gracias a todos y perdonad.

Josep
Responder Con Cita
  #12  
Antiguo 08-05-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.609
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por jafera Ver Mensaje
Problema solucionado.

El problema no venia por el visible en false, venia porque en otro proceso destruía la columna en cuestión y evidentemente list index out of bounds.
¡Qué bien! Pero no estaría mal que explicaras con más detalle cómo es que ese otro proceso repercutía en el código que mostraste al principio. Puede servir a otros en alguna situación similar.
Responder Con Cita
  #13  
Antiguo 08-05-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 18
jafera Va por buen camino
Correcto Al.

En el DataModule tengo las tablas, pues bien en el after delete de la tabla que guarda las lineas del proceso tenia puesto esto:

Código Delphi [-]
If F_Pagues.DBEdit3.Text = '0' then 
begin 
  F_Pagues.JvDBUltimGrid1.Columns[15].Destroy; 
  L_PaguesDIA_BAIXA.Value:= 0; 
  F_Pagues.DBEdit3.Font.Color:=clBlack; 
  F_Pagues.DBEdit3.Color:=clWindow; 
end

y evidentemente la columna era destruida y era imposible hacera "invisible".

Saludos

Josep
Responder Con Cita
  #14  
Antiguo 08-05-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.609
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Comprendido.

Aunque un módulo de datos no tiene por qué "ver" a la interfaz de usuario (sólo al revés).
Responder Con Cita
  #15  
Antiguo 08-05-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 18
jafera Va por buen camino
Gracias Al.

Lo que yo decia, tengo que picar mucha piedra para sacar una pepita de oro.

Posiblemente tu comentario tiene su razón, cosa que desconocia por autodidacta pero siempre he hecho cosas así, de mandar desde el datamodule instrucciones al formulario.

Intentaré no mezclar interfaces en un futuro.

Repito gracias por el comentario, quiero ser el "mejor programador novato de delphi"

Saludos

Josep
Responder Con Cita
  #16  
Antiguo 08-05-2013
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
Cita:
Empezado por jafera Ver Mensaje
...
Posiblemente tu comentario tiene su razón, cosa que desconocia por autodidacta pero siempre he hecho cosas así, de mandar desde el datamodule instrucciones al formulario.
...
Hola Josep.

Si que la tiene...

Un modo de utilizar los eventos de los componentes que residen en tu TDataModule sin que este "vea" al form es definir los métodos dentro de él.

Ajustando el ejemplo a tu último código, sería:
Código Delphi [-]
...
type
  TDataSetEvent = procedure(DataSet: TDataSet) of object;
  TtuForm = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    ...
    procedure FormDestroy(Sender: TObject);
  private
    FOldEvent : TDataSetEvent;
    procedure DataSetAfterDelete(DataSet: TDataSet);
  public
  end; 
...

implementation

uses u_TuDataModule;

procedure TTuForm.DataSetAfterDelete(aDataSet: TDataSet);
begin
  JvDBUltimGrid1.Columns[15].Visible := False;
  tuDataModule.L_PaguesDIA_BAIXA.Value:= 0; // supongo que pertenece al datamodule...
  DBEdit3.Font.Color:=clBlack;
  DBEdit3.Color:=clWindow;
end;

procedure TFTuFormFormCreate(Sender: TObject);
begin
   // (En este punto supongo al DataModule ya creado)
  
  // Si ya hay asignado un método, resguardarlo
  if Assigned(tuDataModule.DataSet.AfterDelete) then
    FOldEvent := tuDataModule.DataSet.AfterDelete;

  // Asignar el nuevo método 
  tuDataModule.DataSet.AfterDelete := DataSetAfterDelete;
  tuDataModule.DataSet.Open
end;

...

procedure TTuForm.FormDestroy(Sender: TObject);
begin
  // Restaurar el evento a su condición anterior
  if Assigned(FOldEvent) then
    tuDataModule.DataSet.AfterDelete := FOldEvent;
end;
end.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #17  
Antiguo 09-05-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.609
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por ecfisa Ver Mensaje
Un modo de utilizar los eventos de los componentes que residen en tu TDataModule sin que este "vea" al form es definir los métodos dentro de él.

Ajustando el ejemplo a tu último código, sería...
Muy bien explicado, ecfisa.

Que es, permitiéndome un poco de "publicidad", similar a lo que hace la propiedad DataSetEvents del DataSource extendido:
Cita:
Empezado por Al González Ver Mensaje
Deriva del típico TDataSource que viene de fábrica, usado cotidianamente en la mayoría de las aplicaciones, sólo que añade dos útiles propiedades:
  • DataSetCloned — Para crear en tiempo de ejecución un "clon" del DataSet asignado. Uno o más formularios pueden trabajar y hacer lo que sea con sus respectivos DataSet clones, sin tocar el DataSet original. Nada de lo que haga un formulario con el DataSet interferirá con el buen funcionamiento de otros formularios que usen el mismo DataSet (porque cada formulario usa en realidad una copia).
  • DataSetEvents — Para trabajar con los eventos del DataSet asignado, pero en el "ámbito" del componente. El DataSet puesto en un módulo de datos, mientras que dentro de un formulario y unidad aparte un componente TghDataSource le establece manejadores de eventos BeforeXXX y AfterXXX que son ejecutados sólo con ese formulario (eventos del DataSet particulares por formulario).
Estas dos propiedades son independientes (puede usarse DataSetEvents sin clonar el conjunto de datos). Con la ventaja de que el componente hace todo el trabajo sucio. Enlace y rústico video.

Saludos.
Responder Con Cita
  #18  
Antiguo 09-05-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.264
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Vaya nivelazo que tienen ecfisa y Al
Responder Con Cita
  #19  
Antiguo 09-05-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 18
jafera Va por buen camino
Thumbs up

SEÑORES, si, si con mayusculas, he quedado anonadado, aturdido, embelesado etc., etc., etc. por los conocimientos y el nivelazo como dice Casimiro.

Da gusto pertenecer a este foro por la calidad con que muchos de vosotros os expresais e intentais hacernos ver claro lo oscuro de la programación.

Muchas veces os pongo preguntas que para vosotros pueden ser banales y llanas pero a mi muchas veces se me hacen una montaña ya que como comenté en algun post anterior yo solo hago esto como hobby.

He tomado buena nota de todo y voy a intentar separar al máximo la programación de los forms y del datamodule en un futuro.

Repito otra y otra y otra vez

GRACIAS (no estoy gritando, es admiración)

Saludos

Josep
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
error list index out of bounds bothy Varios 2 16-04-2010 11:00:19
Pregunta Combobox, selección del item sin hacer click NPIdea OOP 2 15-01-2010 08:42:14
Error List index out of bounds (14) AMINOA2R Firebird e Interbase 3 30-09-2005 01:32:57
Selección automática item combobox neon OOP 0 24-02-2005 14:59:22
Error: List Index Out Bounds() MasterXP SQL 4 18-02-2005 07:41:06


La franja horaria es GMT +2. Ahora son las 20:03:19.


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