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 !
C'est il falait mettre "__gc class" devant
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
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 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 : Sélectionner tout - Visualiser dans une fenêtre à part vig->add_MouseDown(new MouseEventHandler(
voilà ce que j'ai fait à présent:
As-tu une idée ? :
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 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 : Sélectionner tout - Visualiser dans une fenêtre à part 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
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 classe
Code : Sélectionner tout - Visualiser dans une fenêtre à part __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 : Sélectionner tout - Visualiser dans une fenêtre à part private: vignette* vig;
Attribut:
Code : Sélectionner tout - Visualiser dans une fenêtre à part vig = new vignette;
Quand à ma classe vignette c'est un .h que j'ai rajouter avec "Add new item"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 changespar
Code : Sélectionner tout - Visualiser dans une fenêtre à part public __gc class Form1 : public System::Windows::Forms::UserControlNormalement, ton controle s'est ajouté automatiquement dans la barre d'outils "my user controls".
Code : Sélectionner tout - Visualiser dans une fenêtre à part 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 : Sélectionner tout - Visualiser dans une fenêtre à part vig = new vignette;
seulement après il faut que je crée sont event MouseDown.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 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 : Sélectionner tout - Visualiser dans une fenêtre à part vig->add_MouseDown(new MouseEventHandler(.................));
J'ai essayer ça :mais j'obtient les erreurs suivantes:
Code : Sélectionner tout - Visualiser dans une fenêtre à part this->vig->add_MouseDown(new MouseEventHandler(this,vig_MouseDown));
Code : Sélectionner tout - Visualiser dans une fenêtre à part error C2065: 'vig_MouseDown' : undeclared identifier
Code : Sélectionner tout - Visualiser dans une fenêtre à part 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 : Sélectionner tout - Visualiser dans une fenêtre à part private: System::Void menuzoom25_Click(System::Object * sender, System::EventArgs * e)
et voilà l'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part private: System::Void vig_MouseDown(System::Object * sender, System::EventArgs * e)
Code : Sélectionner tout - Visualiser dans une fenêtre à part 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 : Sélectionner tout - Visualiser dans une fenêtre à part vig->add_MouseDown(new MouseEventHandler(this, vig_MouseDown));
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part this->vignette1->MouseDown += new System::Windows::Forms::MouseEventHandler(this, vignette1_MouseDown);J'en vien au point essentiel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part 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 : Sélectionner tout - Visualiser dans une fenêtre à part if(e->Button == MouseButtons::Left){ ???????????? }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager