Probleme OnDrawCell dynamique
Salut,
C'est assez facile de créer des pages(TabSheet) de PageControl de facon dynamique, puis d'y ajouter toujours dynamiquement des StringGrid.
Mon probleme est que j'utilise l'évenement OnDrawCell pour les StringGrid, et là rien ne vas plus, j'obtiens l'erreur suivante :
[BCC32 Erreur] Unit1.cpp(65): E2109 Ce n'est pas un type autorisé.
a l'endroit ou j'affecte ma routine OnDrawCell.
voici mon code : Fichier header
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
class TForm1 : public TForm
{
__published: // IDE-managed Components
TPageControl *PC;
TButton *Button1;
TButton *Button2;
TButton *Button3;
TButton *Button4;
void __fastcall Button1Click(TObject *Sender);
void __fastcall PCChange(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall FormDestroy(TObject *Sender);
void __fastcall Button3Click(TObject *Sender);
void __fastcall Button4Click(TObject *Sender);
private: // User declarations
TStringGrid* SG;
void __fastcall SGOnDrawCell(TObject *Sender, int ACol,
int ARow, TRect &Rect, TGridDrawState State);
public: // User declarations
__fastcall TForm1(TComponent* Owner);
}; |
Fichier CPP
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
void __fastcall TForm1::SGOnDrawCell(TObject *Sender, int ACol,
int ARow, TRect &Rect, TGridDrawState State)
{
//
}
Utilisation:
TRect Rect;
TGridDrawState State;
SG = new TStringGrid(this);
SG->Parent = PC->Pages[PC->ActivePageIndex];
SG->DefaultDrawing = false;
SG->OnDrawCell = SGOnDrawCell(Sender, 0, 0, Rect, State); |
Je précise que c'est un petit programme de test, pour essayer de comprendre
malheureusement je ne comprends pas.
Quelqu'un saurait?
Pense aux balises de code le # ce sera plus lisible ;)
Probleme OnDrawCell dynamique
Merci de vos réponses, malheureusement ca ne marche pas.
J'ai donc créé un tout petit programme pour mettre en évidence le problème.
Le voici : Header
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <Grids.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TPageControl *PC;
void __fastcall FormDestroy(TObject *Sender);
void __fastcall FormShow(TObject *Sender);
private: // User declarations
TStringGrid* SG;
void __fastcall SGOnDrawCell(TObject *Sender);
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif |
CPP
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| #include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
TTabSheet *TS = new TTabSheet(this);
TS->PageControl = PC;
TS->Caption = "Page " + IntToStr(PC->PageCount);
SG = new TStringGrid(this);
SG->Parent = PC->Pages[PC->ActivePageIndex];
SG->DefaultDrawing = false;
SG->OnDrawCell = SGOnDrawCell;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
delete SG;
for(int i=0;i<PC->PageCount;i++)
delete PC->Pages[i];
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SGOnDrawCell(TObject *Sender)
{
//
} |
Le message d'erreur
[BCC32 Erreur] Unit1.cpp(27): E2034 Impossible de convertir 'void (_fastcall * (_closure )(TObject *))(TObject *)' en 'TDrawCellEvent'
J'ai essayé de mettre tous les parametres de l'evenement OnDrawCell: Col, Row, Rect, State, ca ne marche toujours pas.
What's wrong?
OnDrawCell dynamique résolu
Merci a tous ceux qui ont pris la peine de me répondre, a défaut de me donner la solution vous m'avez aiguillé et encouragé a persévérer.
La solution comme toujours est simple, encore que le coup était tordu et vicieux.
La bonne déclaration dans le header est celle ci :
Code:
void __fastcall SGOnDrawCell(TObject *Sender, int ACol, int ARow, const TRect &Rect, TGridDrawState State);
et l'utilisation dans le CPP :
Code:
void __fastcall TForm1::SGOnDrawCell(TObject *Sender, int ACol, int ARow, const TRect &Rect, TGridDrawState State)
ACol et Arow sont des int, avec des long ça ne marche pas. Et surtout comme l'avait pressenti SunChaser le TRect doit etre préfixé de const.
Ce qui laisse supposer que l'aide de Borland n'est pas a jour en ce qui concerne cet événement.
Quoi qu'il en soit, un grand merci!
:resolu: