regarde ici http://nico-pyright.developpez.com/t...LmanagedObject
Version imprimable
Merci pour ton lien il est très utile mais je n'arrive toujours pas à dérivé ma classe vignette de la classe Panel.Tout ce que j'ai fait pour le moment c'est créée ma classe et un #include de ma classe dans mon formulaire.En rajoutant le "ref" devant ma classe j'obtient 2 erreur de plus :
error C2143: syntax error : missing ';' before '<class-head>'
error C2501: 'ref' : missing storage-class or type specifiers
+
Les 2 précédentes.
J'ai regarder le code d'erreur sur MSDN mais il ne dit pas comment la résoudre:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcerrCompilerErrorC3625.asp
Aidez-moi ! :cry:
montre ton nouveau code
C'est il falait mettre "__gc class" devant :D
Maintenant que j'ai mon panel j'aimerai que avec la souris en maintenant le bouton gauche on puisse le déplacer.
Comment puis-je faire ?
Je pense a l'event Mousedown mais je c'est pas comment l'initialiser et l'utiliser (du moins en C++.net)?
HELP :cry:
ok, excuse moi, je t'avais indui en erreur, j'avais mal vu ton code et je te croyais sous VS2005 ...
pour générer l'evenement, tu cliques sur le bouton "events" dans la fenetre de propriétés et tu cherches le mousedown
Pas grave :D c'est partie grâce à toi que j'en suis là ^^
Je sais bien que dans la fenêtre propriété on trouve l'event mouse down mais je veux l'appliquer à mon objet vignette hérité précédemment de Panel.
Je pensai à ça :
Mais là encore quoi mettre après le MouseEvent Handler(????)Code:vig->add_MouseDown(new MouseEventHandler(
voilà ce que j'ai fait à présent:
As-tu une idée ? :?:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 vig = new vignette; vig->BorderStyle = BorderStyle::FixedSingle; vig->setnom(txtnom->Text); vig->setCordX(Convert::ToInt16(X->Value)); vig->setCordY(Convert::ToInt16(Y->Value)); vig->setDimHei(Convert::ToInt16(Hei->Value)); vig->setDimWid(Convert::ToInt16(Wid->Value)); vig->setFbot(Convert::ToInt16(FrameB->Value)); vig->setFleft(Convert::ToInt16(FrameL->Value)); vig->setFrig(Convert::ToInt16(FrameR->Value)); vig->setFtop(Convert::ToInt16(FrameT->Value)); vig->setFramedS(framedskin); vig->setUVMiror(uvmiror); vig->setUVMiror(uvflip); vig->set_Height(vig->getDimHei()); vig->set_Width(vig->getDimWid()); vig->set_Location(Point(vig->getCordX(),vig->getCordY())); vig->add_MouseDown(new MouseEventHandler(..................) this->Close();
quelque chose du genre :Code:vig->MouseDown += new System::Windows::Forms::MouseEventHandler(this, vig_MouseDown);
J'ai pensé à cette synthaxe mais lorsque que j'écrit vig-> je n'ai pas MouseDown.Quand je crée une nouvelle intance de panel Panel *p il n'a pas également la propiété MouseDown.Le code que tu vien de me passer je pense qu'il passe sous C# mais pas sous C++.net.
Je crois qu'il faut utiliser la fonction add_MouseDown
la vignette ne dérive pas du panel ?
Si ! Ma classe vignette (celle que j'ai crée) dérive de la classe panel
Je t'ai mis précédemment une aperçu de cette classeCode:__gc class vignette : public System::Windows::Forms::Panel
ote moi d'un doute, est-ce que tu as bien crée un nouveau controle pour ta vignette ?
comment l'as-tu créée ta classe vignette ?
Je sais pas trop ce que tu entend par controle mais voilà ce que j'ai fait :
Déclaration :
Instancier :Code:private: vignette* vig;
Attribut:Code:vig = new vignette;
Quand à ma classe vignette c'est un .h que j'ai rajouter avec "Add new item"Code:
1
2
3
4
5
6
7 this->vig->BorderStyle = BorderStyle::FixedSingle; this->vig->setnom(f2->getnom()); this->vig->setCordX(f2->getcordX()); this->vig->setCordY(f2->getcordy()); this->vig->setDimHei(f2->getdimhei()); Etc....
Ensuite j'ai rédiger mes attributs en private et methode get set en public.
J'ai trouver un tutos sur l'event mousedown
mais l'instruction "add_MouseDown(new MouseEventHandler(this,....));"
ne passe pas dans mon prog.
Que dois-je mettre après le "this,"VC me demande un "System::IntPtr"
http://www.functionx.com/vcnet/controls/mouse.htm
je pense qu'avec ça tu pourra m'aider...
Merci
alors,
il ne faut pas faire ca
il faut que tu ajoutes un nouveau projet à ta solution, et que tu crées un projet de type Window Control Library (.net)
Tu rentres dans le .h, et tu changesparCode:public __gc class Form1 : public System::Windows::Forms::UserControl
Normalement, ton controle s'est ajouté automatiquement dans la barre d'outils "my user controls".Code:public __gc class Form1 : public System::Windows::Forms::Panel
C'est lui que tu vas placer sur ta form, et intercepter ensuite classiquement l'événement MouseDown
Ta méthode revient un peu à celle que j'ai faite précédement, car quand je fais "vig->" je n'ai pas MouseDown, uniquement "add_MouseDown".
En fait lorsque je dépose mon controlsuser sur la form et que je vais dans ses propriété il y a bien l'event MouseDown seulement l'objet "vig" que je veux ajouter a ma form n'est pas déposer à l'avance je la crée manuellement:
puis je l'ajoute:Code:vig = new vignette;
seulement après il faut que je crée sont event MouseDown.Code:tabPage1->Controls->Add(this->vig);
J'espère que tu comprendras...
ok, et ca te fait une erreur de compil ou bien ca marche pas ?
Sachant que je ne sais pas quoi mettre dansça plantera sûrement.Code:vig->add_MouseDown(new MouseEventHandler(.................));
J'ai essayer ça :mais j'obtient les erreurs suivantes:Code:this->vig->add_MouseDown(new MouseEventHandler(this,vig_MouseDown));
Code:error C2065: 'vig_MouseDown' : undeclared identifier
Code:error C3350: 'System::Windows::Forms::MouseEventHandler' : a delegate constructor expects two arguments
tu as déclaré la fonction vig_MouseDown ? suivant le meme prototype que les autres événements ?
euh...non je n'ai pas crée de void à l'occasion.Où suis-je cencé la crée ?
Et quand tu dit même protocole que les autres tu veux sûrement parler du code généré quand on clic sur un event dans la boite de propriété ?
Exemple :
voilà ce que j'ai essayer de faire :Code:private: System::Void menuzoom25_Click(System::Object * sender, System::EventArgs * e)
et voilà l'erreur :Code:private: System::Void vig_MouseDown(System::Object * sender, System::EventArgs * e)
Code:error C3352: 'void UVEdit::Form1::vig_MouseDown(System::Object __gc *,System::EventArgs __gc *)' : the specified function does not match the delegate type 'void (System::Object __gc *,System::Windows::Forms::MouseEventArgs __gc *)'
attention, tu ne déclares pas les memes prototypes :
il faut donc faire :et la fonction qui recoit les évenements :Code:vig->add_MouseDown(new MouseEventHandler(this, vig_MouseDown));
Code:
1
2
3
4 private: System::Void vig_MouseDown(System::Object * sender, System::Windows::Forms::MouseEventArgs * e) { }
Exact ! Merci ! J'ai même réussi avec l'ancienne méthode que tu m'as donner
Code:this->vignette1->MouseDown += new System::Windows::Forms::MouseEventHandler(this, vignette1_MouseDown);
J'en vien au point essentiel :Code:private:System::Void vignette1_MouseDown(System::Object * sender, System::Windows::Forms::MouseEventArgs * e)
J'aimerai que quand l'utilisateur maintient le bouton gauche enfoncé il puisse déplacer sur l'écran le panel (vignette) et je ne vois vraiment pas comment faire ?
Code:if(e->Button == MouseButtons::Left){ ???????????? }