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

cs_TkILLA 33 Messages postés jeudi 8 avril 2004Date d'inscription 16 mars 2005 Dernière intervention - 28 janv. 2005 à 17:29 - Dernière réponse : cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention
- 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 

17 réponses

Répondre au sujet
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 28 janv. 2005 à 17:50
+3
Utile
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 !
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de JulioDelphi
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 28 janv. 2005 à 20:17
+3
Utile
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 ! =)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de JulioDelphi
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 28 janv. 2005 à 21:18
+3
Utile
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 !
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de JulioDelphi
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 29 janv. 2005 à 00:23
+3
Utile
"free" doit etre utilisé pour tout ce que tu "create" sinon ça se fait tout seul.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de JulioDelphi
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 29 janv. 2005 à 00:23
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Delphiprog
cs_TkILLA 33 Messages postés jeudi 8 avril 2004Date d'inscription 16 mars 2005 Dernière intervention - 28 janv. 2005 à 19:58
0
Utile
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
cs_TkILLA 33 Messages postés jeudi 8 avril 2004Date d'inscription 16 mars 2005 Dernière intervention - 28 janv. 2005 à 21:08
0
Utile
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
cs_TkILLA 33 Messages postés jeudi 8 avril 2004Date d'inscription 16 mars 2005 Dernière intervention - 28 janv. 2005 à 21:29
0
Utile
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
cs_TkILLA 33 Messages postés jeudi 8 avril 2004Date d'inscription 16 mars 2005 Dernière intervention - 29 janv. 2005 à 00:10
0
Utile
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
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 29 janv. 2005 à 00:11
0
Utile
de rien ! a+
Commenter la réponse de JulioDelphi
cs_TkILLA 33 Messages postés jeudi 8 avril 2004Date d'inscription 16 mars 2005 Dernière intervention - 29 janv. 2005 à 00:13
0
Utile
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
cs_TkILLA 33 Messages postés jeudi 8 avril 2004Date d'inscription 16 mars 2005 Dernière intervention - 29 janv. 2005 à 00:29
0
Utile
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
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 29 janv. 2005 à 01:18
0
Utile
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
cs_TkILLA 33 Messages postés jeudi 8 avril 2004Date d'inscription 16 mars 2005 Dernière intervention - 29 janv. 2005 à 13:06
0
Utile
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
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 29 janv. 2005 à 13:21
0
Utile
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
cs_TkILLA 33 Messages postés jeudi 8 avril 2004Date d'inscription 16 mars 2005 Dernière intervention - 29 janv. 2005 à 13:39
0
Utile
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
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 29 janv. 2005 à 14:45
0
Utile
"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.