Bonjour,
depuis deux jours je lutte pour cr�er un composant que je puisse ensuite donner � quelqu'un.
J'ai essay� l'aide de Borland, puis celle du forum mais malgr� tout cela ne marche pas.
Mon topic risque d'�tre un peu long (je d�taille beaucoup).
Voil� ce que je veux faire :
Sur mon ordinateur est branch� un produit qui envoie sa position actuelle � mon ordinateur (sur la liaison CAN (j'ai un truc pour), s�rie ou autre). Mon ordinateur re�oit donc r�guli�rement X = xxx et Y = yyy; Pour sch�matiser, disons que mon produit est une table carr�e sur laquelle se situe une bille. La position de cette bille par rapport � la table carr�e est r�p�r�e puis envoy�e � mon ordinateur.
Nous sommes plusieurs � avoir le m�me syst�me, mais il se trouve parfois dans un autre local.
Je veux donc cr�er un truc VISUEL, un composant en forme d'image carr�e (la table) sur lequel je dessine un rond (la bille), qui re�oit les coordonn�es X,Y puis redessine tout seul la bille � la position actuelle.
Ensuite, je voudrais donner ce composant � mes coll�gues (qui sont aussi d�veloppeurs (mais stagaires)), et ils auraient simplement � le glisser sur leur fiche de la m�me mani�re que l'on glisse un bouton, une image ou n'importe quel autre composant visuel.
Je pr�cise que je suis un newbie dans la programmation en C++ et aussi avec Builder (PS j'ai C++ Builder 6).
Ce que j'ai fais pour le moment (pour v�rifier le concept) :
J'ai cr�e un projet tout simple, sur lequel j'ai mis un TImage (disons TImage * SystemeVirtuel), ensuite, cycliquement je fais l'acquisition de la position puis je fais b�tement (pour le moment �a ira) :
Vu comme �a �a fonctionne.
Code : S�lectionner tout - Visualiser dans une fen�tre � part SystemeVirtuel->Canvas->Ellipse(..mes coordonnées ...)
Je me suis donc fi� aux rubriques d'aide de borland "Pr�sentation de la structure d'un paquet", "Installation de paquets de composants", "Creation d'un paquet", "Cr�ation d'un nouveau composant" ....
Je fais donc Fichier>Nouveau>Autre>Paquet. J'ai donc l'�diteur de paquet qui s'ouvre. Dedans y'a les dossiers 'Contains' et 'Requires'. Ces dossiers ne sont pas vides, ils contienent d�j� Package1.cpp et .res ainsi que rtl.bpi.
Ensuite, >Ajouter>Nouveau composant>Type Anc�tre = TImage
Nom de Classe = TVirtualRemote
Page de palette = Standard
Nom d'unit� = VirtualRemote.cpp
Chemin .. le chemin Builder par d�faut
Mes nouveaux fichiers s'ajoutent bien dans Contains et Requires (respectivement VirtualRemote.cpp et vcl.bpi (mis automatiquement je suppose parce que j'ai inclus un type anc�tre TImage.
Je voudrais savoir qu'est-ce qu'il fait l� le fichier Package1.cpp et Package1.res ?
Quelles options Editeur de paquet>options>seulement en conception ou execution ou les deux je dois activer sachant que ce n'est pas un composant qui s'ex�cute, mais qui se pose sur une fiche ?
Lorsque je compile, le paquet, aucun probl�me, �a fonctionne.
Je voudrais savoir, pourquoi les fichiers .bpl, .bpi, .res, .bpk, .cpp et .h sont autant �parpill�s dans tant de dossiers diff�rents ? N'y-a-t'il pas une solution plus propore o� no peut 'exporter' un composant dans un dossier tout simple, et que tous les fichiers s'y mettent automatiquement ? �a �viterait de tous les rechercher manuellement et de les copier en local chez un coll�gue.
Ensuite, je cr�e un nouveau projet tout vide avec une seule fiche, puis Fichier>ouvrir> et je cherche mon Package1.bpk (d'ailleurs, je peux changer ce nom ?)
Et je clique Installer dans l'�diteur de paquets, et je vois bien mon nouveau composant dans ma palette Standard.
Je le pose sur la fiche, je compile ... et l� il me demande de lier un ex�cutable (Menu ex�cuter>param�tres). Je suppose que ce n'est pas la bonne chose � faire et que cela est d� � mon mauvais choix d'options dans l'�diteur de paquets ?
Ensuite, mon nouveau composant �tant un simple TImage, je veux lui ajouter quelques m�thodes et propri�t�s. Admettons que j'�dite donc mon VirtualRemote.cpp et que j'ajoute des lignes pour tracer une ellipse dans le constructeur de la sorte :
(Bon ici VirtualRemote c'est Virtual Target.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8 __fastcall TVirtualTarget::TVirtualTarget(TComponent* Owner) : TImage(Owner) { // Construction du PopupMenu this->Canvas->Pen->Color = clBlack; this->Canvas->Brush->Color = cl3DDkShadow; this->Canvas->Ellipse(0,0,this->Width,this->Height); }
Je recompile et l� avec l'�diteur de paquets.
Question : Est-ce que le composant dans la palette se met automatiquement � jour ? Ou est-ce que je dois le d�sinstaller puis le r�installer ?
Question que j'avais oubli�e pr�c�demment :
Puisque j'ai ajout� un nouveau composant, est ce que je suis oblig� de rajouter VirtualTarget.h dans mon dossier de mon nouveau projet ? Est-ce que �a ne devrais pas le faire automatiquement, lorsqu'il voit que je pose mon composant sur la fiche ? (le #include VirtualRemote.h se met automatiquement)
A partir de l�, je ne sais plus comment faire :
Je voudrais pouvoir modifier la couleur de l'ellipse. Je voudrais donc que lorsque l'utilisateur clique droit sur l'image, un popupmenu s'ouvre. Et ensuite dans la liste de ce popup menu il y aurait plusieurs items (couleur ellipse, couleur du trait de l'ellipse, ...).
Chacun de ces items appelerait donc une nouvelle fonction appropri�e.
Pour se faire, j'ai pens� � deux choses :
1 - Cr�er un popup menu dynamiquement comme cela :
dans le VirtualRemote.h :
Puis, dans le VirtualRemote.cpp :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10 class PACKAGE TVirtualTarget : public TImage { private: // Déclarations de l'utilisateur protected: public: // Déclarations de l'utilisateur __fastcall TVirtualTarget(TComponent* Owner); int x,y; __published: TPopupMenu * VirtualTargetDynamicPopupMenu1; };
Cette unit� se compile sans erreur.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 __fastcall TVirtualTarget::TVirtualTarget(TComponent* Owner) : TImage(Owner) { // Construction du PopupMenu VirtualTargetDynamicPopupMenu1 = new TPopupMenu(this); this->PopupMenu = VirtualTargetDynamicPopupMenu1; this->Canvas->Pen->Color = clBlack; this->Canvas->Brush->Color = cl3DDkShadow; this->Canvas->Ellipse(0,0,this->Width,this->Height); }
Maintenant, lorsque j'ajoute le comoposant sur ma fiche, l'ellipse se trace tout de suite, et dans l'inspecteur d'�venements il y a, dans le champ PopupMenu :
'VirtualTarget1->' , pourquoi je n'ai pas VirtualTargetDynamicPopupMenu1 ?
bien �videmment, � la comilation, un clic droit ne fait rien du tout.
Je n'ai visiblement pas tout saisit � la cr�ation dynamique d'objets (j'ai fait la m�me chose que sur une aide sur forum)
2 - Comment faire pour que lorsque je pose mon composant sur une fiche, il d�pose en m�me temps mon TImage modifi�, ainsi qu'un PopupMenu et autres choses comme une ColorDialog ? Est-ce que �a serait la solution ?
Voil�, je vous remercie beaucoup de m'avoir au moins lu jusqu'au bout
Je r�sume :
1 - Je veux un composant TImage modifi�.
2 - Je veux que ce TImage modifi� puisse ouvrir un popupmenu sur clic droit pour effectuer des actions simples comme changer la couleur d'un trait.
3 - Je veux pouvoir donner ce composant � mes coll�gues facilement
4 - Je veux pouvoir (au besoin) cr�er des objets dynamiquement.
Encore merci de votre aide.
Partager