FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Problema TStringGrid dinámico y evento OnDrawCell
Hola, a ver si alguien me puede decir qué es lo que se me está escapando
He trabajado antes muchas veces con stringGrids pero no de manera dinámica (siempre los creaba desde la barra de componentes) pues bien, ahora instancio dinámicamente un objeto TStringGrid el problema viene a la hora de personalizarlo. Como es normal establezco la propiedad "DefaultDrawing = false" para poder dibujarlo yo, hasta ahi ok entonces intento definir un método OnDrawCell propio SGrid->OnDrawCell = MiDrawCell; aquí viene el problema, me salta el siguiente error: [C++ Error] FUsers.cpp(341): E2034 Cannot convert 'void (_fastcall * (_closure )(TObject *,int,int,TRect &,TGridDrawState))(TObject *,int,int,TRect &,TGridDrawState)' to 'void (_fastcall * (_closure )(TObject *,int,int,const TRect &,TGridDrawState))(TObject *,int,int,const TRect &,TGridDrawState)' como podeis ver me pide que en la definición de mi método defina TRect como const efectivamente, si lo hago así , me permite compilar pero entonces no puedo personalizar el grid (no me permite variar TRect) sin embargo cuando trabajo con StringGrids estáticos, en la definición del método automáticamente lo define como NO-CONSTANTE Ejemplo: void __fastcall TFormMain::GridModulosDrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) Esto es válido en estático, en dinámico me obliga a que sea así: void __fastcall TFormMain::GridModulosDrawCell(TObject *Sender, int ACol, int ARow, const TRect &Rect, TGridDrawState State) alguien sabe por qué? necesito solventar esto y no veo información al respecto, parece que nadie en el mundo necesitara definir sus propios StringGrids de forma dinámica gracias por adelantado |
#2
|
|||
|
|||
fantástico, parece ser un fallo del builder
http://qc.codegear.com/wc/qcmain.aspx?d=17890 lo que me fastidia es que creado estáticamente no tengo el problema en fin, a buscar otra manera de implementar algo, como tantas veces nos ha pasado a todos hasta otra |
#3
|
||||
|
||||
No se muy bien porqué quieres modificar ese TRect, pero he cotilleado un poco las definiciones de los eventos y he visto esto:
El evento TDrawGrid::OnDrawCell de define asi: Código:
typedef void __fastcall (__closure *TDrawCellEvent)(System::TObject* Sender, int ACol, int ARow, const Windows::TRect &Rect, TGridDrawState State); He probado a usar el TStringGrid dinámicamente y me pasa lo que a tí, no me extraña pues espera una función con el const TRect & Cuando lo uso como componente visual, es cierto que la definición del evento no requiere const TRect& pero lo que si ocurre es que si modificas el valor del Rect no tiene efecto entre llamada y llamada, a pesar de ser una referencia. Con lo que me inclino a pensar que a todos los efectos es una constante. Pero repito, no se para que quieres modificar ese valor. Saludos. |
#4
|
||||
|
||||
Bueno te dejo un truco para que compile y tu función OnDrawCell no tenga const TRect &Rect:
Define un nuevo tipo de evento en la cabecera.h de tu form (o en otra incluida): Código:
typedef void __fastcall (__closure *TDCE)(System::TObject *Sender, int ACol, int ARow, Windows::TRect &Rect, TGridDrawState State); Código:
TDCE _DrawCell; Código:
void __fastcall TForm1::FormCreate(TObject *Sender) { // Asignación en dos pasos o no te deja... _DrawCell = MiDrawCell; SGrid->OnDrawCell = (TDrawCellEvent)_DrawCell; // Para luego visualizar el control, ya sabes.... InsertControl(SGrid); } Saludos. |
#5
|
|||
|
|||
magistral escafandra, muchas gracias te has tomado muchas molestias
al final me tuve que apañar cambiando la forma de dibujar trect que usaba pero me apunto tu truco porque pienso que será muy útil cuando pelee con las redefiniciones de eventos un saludo |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Problema con TPageControl Dinamico | NeoAnderson | API de Windows | 3 | 05-02-2008 21:07:47 |
¿Evento scroll en TStringGrid? | grotero76 | OOP | 3 | 05-06-2007 15:57:59 |
Problema con una TStringGrid | azaghal | Varios | 2 | 20-05-2006 03:20:56 |
Evento onclick en formulario dinámico | jfgaliano | OOP | 1 | 23-12-2005 14:05:46 |
evento on keypress y componente dinamico | Rabata | OOP | 4 | 26-07-2005 21:54:38 |
|