Bonjour à tous, et à toutes,
Arrivant de .Net C# je démarre un projet en Borland C++ Builder (Embarcadero RAD Studio XE v2010), et bien entendu c’est comme si je devais tout réapprendre à comparer à .NET C#.
J’ai trois questions toutes connes, et malheureusement je ne trouve pas de réponses dans le forum, d’où ce sujet.
Mes deux premières questions sont extrêmement liées, donc je vais essayer de faire simple pour vous expliquer mon problème.
Je créer dynamiquement un formulaire via un new dans une fenêtre SDI de base avec un menu test perso :
Dans ce formulaire TFormContexte j’ai un StringGrid StringGridCoef.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 void __fastcall TSDIAppForm::Action_MenuTest_ContexteExecute(TObject *Sender) { TFormContexte* l_ptTFormContexte = new TFormContexte(NULL); l_ptTFormContexte->ShowModal(); delete(l_ptTFormContexte); }
Sur le show de mon formulaire, je veux lancer une fonction qui va initialiser mon StringGrid.
J’ai donc fait ceci :
La ou je commence à avoir des trucs étranges voir incompréhensible c’est dans ma fonction FctInitialisation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 //------------------------------------------------------ #include <vcl.h> #pragma hdrstop #include "FrmContexte.h" //------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TFormContexte *FormContexte; void FctInitialisation(){ //1er TEST qui ne marche pas??? --------------------------------- unsigned short l_usNbLigne= -1; FormContexte ->StringGridCoef->RowCount = 10; l_usNbLigne = FormContexte ->StringGridCoef->RowCount; } void __fastcall TFormContexte::FormShow(TObject *Sender) { FctInitialisation() ; //2nd TEST qui marche ----------------------------------------- unsigned short l_usNbLigne= -1; this ->StringGridCoef->RowCount = 10; l_usNbLigne = this ->StringGridCoef->RowCount; }
Déjà je ne peux pas utiliser le this pour pointer sur les éléments de mon formulaire ???
Cela me donne une erreur : [BCC32 Erreur] FrmContexte_CoefFiltrScan.cpp(75): E2297 'this' ne peut être utilisé que dans une fonction membre
Bon soit je vais faire sans…
Donc je pointe sur mon formulaire, et sur un élément de mon formulaire :
FormContexte ->StringGridCoef->RowCount = 10;
A priori le code est bien pris en compte… Sauf qu’à l’affichage rien ne se passe????
Si je vérifie en debug sur le bouton OK de mon formulaire, la valeur de FormContexte ->StringGridCoef->RowCount, il m’annonce bien 10…
Bon, ça sent à plein nez la mauvaise instance du formulaire!
Comme par hasard si je mets presque le même code dans le show du formulaire, miracle tout marche!
Donc, comment augmenter la portée du this dans une fonction, ou comment atteindre la bonne instance de mon formulaire dans une fonction?
Ensuite j’ai encore des choses plus bizarres dans ma fonction :
Dans ma fonction FctInitialisation, j’ai déclaré la variable l_usNbLigne que j’ai initialisée à -1.
Ensuite dans la suite de la fonction je l’affecte à la valeur du nombre de lignes de mon StringGrid.
Alors là c’est trop fort, en debug je m’aperçois que ma variable est bien déclarée, mais que mon initialisation à -1 n’est pas prise en compte ???
Pire mon affectation elle aussi n’est pas prise en compte ???
Alors là je reste con de chez con! Je n’y comprends rien de rien… Ça me parait tellement évident que je suis sur que je ne fais pas ce qu’il faut, et que quelqu’un d’un brin expérimenté avec Borland C++ Builder va de suite pourvoir m’aider à coup sûr…
Ma dernière question est aussi toute conne :
Est-ce qu’il existe dans Borland C++ Builder une vraie fenêtre d’espion comme dans Visual Studio, afin de pouvoir espionner les variables que j’aurais glissées dedans ???
Merci d’avance à tous et à toutes pour votre aide
Partager