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 30-05-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Asignar evento OnDrawColumnCell en tiempo de ejecución

Hola amigos !

Por qué no me deja asignar un evento OnDrawColumnCell a un DBGrid en tiempo de ejecución ?

Intento, en tiempo de ejecución, hacer :
Código Delphi [-]
DBGrid1.OnDrawColumnCell := DBGrid1DrawColumnCell;
pero el compilador me lanza un error '[Pascal Error] E2009 Incompatible types: 'Parameter lists differ'

Por supuesto que en tiempo de diseño funciona perfectamente.

Un saludo a todos y gracias por vuestros consejos !
__________________
Piensa siempre en positivo !
Responder Con Cita
  #2  
Antiguo 30-05-2007
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Se da por supuesto que son dbgrids del mismo tipo, no serán de distintos componentes, no?
Responder Con Cita
  #3  
Antiguo 30-05-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
No, no ...

Es el mismo Grid. Lo que pasa es que me interesa desactivar en un momento determinado el 'repintado' del Grid. Precisamente cuando voy a hacer un Drag&Drop de varios registros de ese Grid.

Cuando termine el Drag&Drop quería volver a asignarle el mismo procedimiento al evento del DBGrid. Y al parecer en tiempo de ejecución no me lo permite. Muy raro. Me pide los parámetros. Pero claro, no sólo entiendo que no hace falta pasarle ahí los parámetros, sino que además si intento pasarle parámetros 'ficticios' tay y como supuestamente me los pide, me salta otro error diciendo que no puedo asignarle el procedimiento a ese evento.

Puedo evitar la situación de otras maneras, lo que pasa es que me parecía muy curioso que no pudiera hacer lo que planteo en tiempo de ejecución, ya que en tiempo de diseño todos estamos acostumbrados a hacerlo con el evento OnDraColumnCell.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #4  
Antiguo 01-06-2007
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Hola gluglu,

Pues la verdad no se que pueda estar ocurriendo pero creo que pueden haber problemas en la forma como estas asignado el evento....

Considero que lo correcto es definir una varaible en dnde puedas guardar el procedimiento (un puntero)...


Código Delphi [-]
var 
proc:TdrawColumnCellevent;

Luego, en la seccion en donde inhabilitas el procedimiento, guardas el procedimiento (tomado directamente del objeto), asi:

Código Delphi [-]
  proc:=dbgrid1.OnDrawColumnCell;
  dbgrid1.OnDrawColumnCell:=nil;

cuando lo quieras habilitar de nuevo, entonces haces la asignaci{on:

Código Delphi [-]
   dbgrid1.OnDrawColumnCell:=proc;

Y eso deberia funcionar, y como te digo, considero que es la forma correcta de hacerlo....

Por otro lado, supongo que puedes estar haciendo lo siguiente:
Código Delphi [-]
dbgrid1.OnDrawColumnCell:=nil;

y luego haces la asignaci{on del procedimiento que Delphi crea por defecto

Código Delphi [-]
dbgrid1.OnDrawColumnCell:=DBGrid1DrawColumnCell;

Lo cual en mi compilardor de Delphi 7 no me genera error ni advertencia, pero aun asi no creo que sea una buena tecnica...

Es solo una opini{on, pero como te dije en mi compilador no me ocurre, por lo que debe haber algo que estes haciendo diferente... si pudieras copiar el codigo tal vez pudieramos saber que pasa..

Saludos.
Responder Con Cita
  #5  
Antiguo 01-06-2007
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
A mí también me funciona bien y sin la variable intermedia
Responder Con Cita
  #6  
Antiguo 01-06-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Gracias a los dos por vuestros comentarios.

Delphi 2006 VCL.Net, Proyecto nuevo VCL, un nuevo Form VCL. Incluyo un DBGrid y un Botón.

Código :

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  Proc : TDrawColumnCellEvent;
begin
 
  Proc := DBGrid1.OnDrawColumnCell;
  DBGrid1.OnDrawColumnCell := Proc;   // Aqui el compilador no me dá error
 
  DBGrid1.OnDrawColumnCell := nil;
  DBGrid1.OnDrawColumnCell := DBGrid1DrawColumnCell;  // Aquí el compilador me lanza el error
 
end;
 
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  DBGrid1.Font.Size := 8;
end;
Será de nuevo algo especial del Delphi VCL.Net como me he encontrado otras varias ya.

Gracias por la idea de la variable intermedia.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #7  
Antiguo 01-06-2007
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
La única diferencia que he encontrado es esta:
Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;  DataCol: Integer; Column: TColumn; State: TGridDrawState);

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; Rect: TRect;  DataCol: Integer; Column: TColumn; State: TGridDrawState);

Última edición por Casimiro Notevi fecha: 01-06-2007 a las 13:17:31.
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
Asignar propiedades de Ttable en tiempo de ejecución coleleon Tablas planas 3 30-11-2005 23:22:39
Asignar evento Oncalcfield en tiempo de ejecucion el_barto Conexión con bases de datos 5 06-09-2005 00:08:46
Evento OnDrawColumnCell de un DBGrid hook Varios 1 01-04-2005 09:14:37
Asignar la ruta de tablas en tiempo de ejecucion tortelini Varios 2 19-03-2005 12:13:53
Asignacion de un evento en tiempo de ejecución Periyo Varios 1 02-06-2003 18:42:55


La franja horaria es GMT +2. Ahora son las 22:25:02.


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