Evenement lorsque la souris quitte mon Tpaintbox [Résolu]

Messages postés
33
Date d'inscription
jeudi 8 avril 2004
Dernière intervention
16 mars 2005
- - Dernière réponse : cs_Delphiprog
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Dernière intervention
9 janvier 2013
- 29 janv. 2005 à 14:45
Bonjour a tous


J'ai un Tpaintbox, tel que quand je le survole, une icone (sélectionnée par Ttoolbutton) suit le mouvement de la souris.

Je voudrais savoir quand j'ai quitté mon Tpaintbox afin d'éviter que l'icone ne reste figée eu dernier passage de la souris (forcément les mouvements de l'icone suivant le pointeur sont fait dans le OnMouseMove du Tpaintbox).

J'ai vu cette question la, mais j'ai aps réussi a appliquer la réponse.


http://www.delphifr.com/forum.v2.aspx?ID=301176



Quelqu'un pourrait il expliquer autrement ou plus détaillé? Merci

ca me crache cette erreur la :[Error] Wmain.pas(17): E2065 Unsatisfied forward or external declaration: 'TEnterLeavePaintbox.CMMouseEnter'


/forum.v2.aspx?ID=301176
Afficher la suite 

Votre réponse

17 réponses

Meilleure réponse
Messages postés
2354
Date d'inscription
dimanche 5 octobre 2003
Dernière intervention
18 novembre 2010
3
Merci
hello,

j'ai créé un composant nommé TdbpMouser qui permet de gérer sur tous
les composants les evenements "OnMouseEnter" et "OnMouseLeave"



tu le trouveras ici : http://www.delphifr.com/code.aspx?id=25071



bon codage !

Merci JulioDelphi 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de JulioDelphi
Messages postés
2354
Date d'inscription
dimanche 5 octobre 2003
Dernière intervention
18 novembre 2010
3
Merci
tu mets dans la propriété "Control" le Paintbox1, puis tu geres les
evenements OnMouseEnter et OnMouseLeave du composant DbpMouser1, ils
seront "envoyé" pour ton Control (PaintBox1)

regarde la demo ! =)

Merci JulioDelphi 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de JulioDelphi
Messages postés
2354
Date d'inscription
dimanche 5 octobre 2003
Dernière intervention
18 novembre 2010
3
Merci
SortieMap.OnMouseLeave:=sortie_map;

Sans le (map) car c'est un sender de TObject.



mais euh tu n'est pas obligé de te taper ça ds le code !, le composant DbpMouser est là avec l'inspecteur de propriétés !

il te suffit de cliker sur "control" puis de choisir le PaintBox1, puis dans les evenements, tu double clic sur le OnMouseEnter et le OnMouseLeave pour ensuite taper le code aproprié.

Tu n'as pas besoin de faire l'attribution des procedures ds ton code, c bien plus simple avec le compo, il est fait pour ça !

Merci JulioDelphi 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de JulioDelphi
Messages postés
2354
Date d'inscription
dimanche 5 octobre 2003
Dernière intervention
18 novembre 2010
3
Merci
"free" doit etre utilisé pour tout ce que tu "create" sinon ça se fait tout seul.

Merci JulioDelphi 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de JulioDelphi
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Dernière intervention
9 janvier 2013
3
Merci
Tkilla a écrit : "Je dois donc l'appliquer a tous les composants figurants et sur ma Form principale, et toutes celles que j'ouvre ensuite? Genre les boutons, les labels etc?
"

La réponse est : NON.
Dans le cas présent, la fiche est propriétaire des composants visuels. Et, en tant que tel, c'est elle qui se chargera de la destruction de tous les composants qu'elle possède.

De plus, avec Delphi 2005, le GC se chargera de ce boulot !

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.croix-rouge.fr/index/partner_campagne.html

Merci cs_Delphiprog 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de cs_Delphiprog
Messages postés
33
Date d'inscription
jeudi 8 avril 2004
Dernière intervention
16 mars 2005
0
Merci
Merci bcp je l'ai intégré, mais maintenant je sais pas trop comment l'utiliser :S

Je voudrais ajouter l'event onmouseleave a mon Paintbox1

Merci d'avance
Commenter la réponse de cs_TkILLA
Messages postés
33
Date d'inscription
jeudi 8 avril 2004
Dernière intervention
16 mars 2005
0
Merci
J'ai réussi a l'incorporer : Mais

déclaration de la procedure en cas de sortie de ma souris :

procedure sortie_map(Sender:Tobject);

déclaration du composant : SortieMap : Tdbpmouser;

définition des propriétés : SortieMap.Control:=Map;
SortieMap.OnMouseLeave:=sortie_map(Map);

procédure :

procedure Tfmain.sortie_map(Sender:Tobject);
begin
if AjoutHE.Down or AjoutSG.Down or AjoutFlash.Down then
retrace_tout;
end;

et en fait ca me met une erreur a la ligne en gras :

[Error] Wmain.pas(224): E2010 Incompatible types: 'TNotifyEvent' and 'procedure, untyped pointer or untyped parameter'

Désolé je ne vois pas pourquoi ..
Commenter la réponse de cs_TkILLA
Messages postés
33
Date d'inscription
jeudi 8 avril 2004
Dernière intervention
16 mars 2005
0
Merci
J'ai intégré le .pas dans mon projet, mais je ne le vois pas aparaitre dans la liste des composants c pour ca que je le fais dans le code. Je ne sais pas comment l'intégrer directement dans l'IDE avec delphi 2005.

je ne peux ajouter que a partir de dll on dirait..
Commenter la réponse de cs_TkILLA
Messages postés
33
Date d'inscription
jeudi 8 avril 2004
Dernière intervention
16 mars 2005
0
Merci
J'ai réussi, je me souvenais plus qu'il fallait faire neww package avant :) désolé et merci beaucoup pour ta source c'est génial ça marche comme je veux ;-)
Commenter la réponse de cs_TkILLA
Messages postés
2354
Date d'inscription
dimanche 5 octobre 2003
Dernière intervention
18 novembre 2010
0
Merci
de rien ! a+
Commenter la réponse de JulioDelphi
Messages postés
33
Date d'inscription
jeudi 8 avril 2004
Dernière intervention
16 mars 2005
0
Merci
tiens on a posté en même temps :)

petite question relative a ton dernier post, c'est bien la méthode free qui permet de libérer la mémoire occupée par tous les objets?

Je dois donc l'appliquer a tous les composants figurants et sur ma Form principale, et toutes celles que j'ouvre ensuite? Genre les boutons, les labels etc?

(si tu penses que cette question doit faire l'objet d'un nouveau topic je reformulerai ailleurs :) )

Merci
Commenter la réponse de cs_TkILLA
Messages postés
33
Date d'inscription
jeudi 8 avril 2004
Dernière intervention
16 mars 2005
0
Merci
Donc admettons que dans mon code je créer une form, avec un richedit et deux boutons, je fais Show pour l'afficher, Hide pour la cacher. (c'est une form qui est crée plusieurs fois tel que je l'ai écrite, vu que a chaque fois que j'en ai besoin j'execute le meme bout de code : dites si c'est mauvais de faire ca)

Lorsque je fermerai mon application, ca va automatiquement me libérer la mémoire c'est ca?
Commenter la réponse de cs_TkILLA
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Dernière intervention
9 janvier 2013
0
Merci
L'opération se déroule en deux temps :
- au moment de la fermeture de l'application, l'objet Application détruit tous les composants qu'il possède (Fiches, par exemple).
- à leur tour, chaque fiche détruira les composants qu'elle possède, etc.

Le propriétaire (Owner) d'un autre composant est chargé de détruire ce qu'il possède.

Attention aux objets créés sans propriétaire comme la classe TStringList que beaucoup oublient de libérer. Enfin bref, tout ce qui est créé en ne désignant pas de propriétaire parmi le ou les paramètres lors de l'appel au constructeur.

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.croix-rouge.fr/index/partner_campagne.html
Commenter la réponse de cs_Delphiprog
Messages postés
33
Date d'inscription
jeudi 8 avril 2004
Dernière intervention
16 mars 2005
0
Merci
Moi je crée une form lorsque je clic sur un élément d'un popupmenu. A cette form j'ajoute le richedit, puis les deux boutons. J'utilise Show pour afficher, Hide pour masquer.

La première fois, ma Form est créée, ensuite je ne fais que la cacher.
La deuxième fois que je clique sur le popupmenu, je refais créer la Form avec tous ses élements, donc je ne sais pas si ça prend X fois plus de place en mémoire. Et puis en créant ma Form j'ai mis parametre:=Tform.Create(Self); sans lui affecter de parent.
Commenter la réponse de cs_TkILLA
Messages postés
2354
Date d'inscription
dimanche 5 octobre 2003
Dernière intervention
18 novembre 2010
0
Merci
tu veux tester si ça prends de la mémoire ? clic sur ton element du
popupmenu ki cree ta form un maximum de fois, tu auras un message
d'erreur "mémoire insuffisante pour l'opération" =)

bien sur ke ça prends de la mémoire !

n'oublie pas de faire le .free pour liberer la memoire de tes forms créées
Commenter la réponse de JulioDelphi
Messages postés
33
Date d'inscription
jeudi 8 avril 2004
Dernière intervention
16 mars 2005
0
Merci
Ben oui mais quand je mets :

parametresOnClick (c'est la procedure gérant le clic sur le popupmenu)
parametres:=Tform.create;
Edit:=Trichedit.create(parametres);
...
OK:=TButton.create(parametres);
...
Annule:=Tbutton.Create(parametres);
...
parametres.Show;
end;

OKOnClick :
MyString:=Edit.text;
parametres.Hide;
parametres.Free;

et ca me met une erreur au Free : First chance exception at $7C81EB33. Exception class EAccessViolation with message 'Access violation at address 00403424 in module 'Funstrat.exe'. Read of address 00E40000'. Process Funstrat.exe (2344)
Commenter la réponse de cs_TkILLA
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Dernière intervention
9 janvier 2013
0
Merci
"First chance exception" : curieux ce message...

Quoi qu'il en soit, parametres ne pourra jamais contenir que la référence de la dernière fiche créée. Dans ce cas, comment détruire les instances de fiches précédemment créées ?

Pour régler ce problème, regarde ce code que j'avais réalisé pour un problème similaire posé par un membre du forum : utiliser les TObjectlist

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.croix-rouge.fr/index/partner_campagne.html
Commenter la réponse de cs_Delphiprog

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.