TUTORIEL OCX BASIQUE

econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 - 5 juil. 2005 à 15:50
marco62118 Messages postés 35 Date d'inscription mercredi 30 janvier 2008 Statut Membre Dernière intervention 25 juin 2015 - 7 janv. 2008 à 21:29
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/32545-tutoriel-ocx-basique

marco62118 Messages postés 35 Date d'inscription mercredi 30 janvier 2008 Statut Membre Dernière intervention 25 juin 2015
7 janv. 2008 à 21:29
bonsoir
je viens de trouver pourquoi ça ne fonctionnais pas dans case_mousemove je n'avais pas inscrit (index as integer... ne reprenant que la définition de mon usercontrol

enfin je n'ai pas fini car au début je faisait des dragdrop de mes cases, permettant de gérer facilement les cases autorisées à bouger , celles pouvant recevoir , sans vraiment déplacer les objets transférants seulement leur contenu mais ces glissement avec drgdrop sont très saccdé et ne donne pas une bonne viison de la chose , donc je voulais utilser la fonction mousemove, mais apperement ce n'est pas trop compatible avec DragMode automatic
je vais chercher
merci encore pour ton aide
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
7 janv. 2008 à 09:30
Case est un mot reservé... voilà tout ^^

si je les renommme et fait un groupe de controles ca fonctionne nikel, bien que le code ne soit pas top.
en effet:
- Dim utilisé en lieu et place de Public, pour déclarer P1 et P2
- API inutile ici, X et Y te sont transmises par l'evenement lui même...

Private mnOrgX As Single
Private mnOrgY As Single

Private Sub CcCase_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
mnOrgX = X
mnOrgY = Y
End If
End Sub

Private Sub CcCase_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
CcCase(Index).Left = CcCase(Index).Left + X - mnOrgX
CcCase(Index).Top = CcCase(Index).Top + Y - mnOrgY
End If
End Sub
marco62118 Messages postés 35 Date d'inscription mercredi 30 janvier 2008 Statut Membre Dernière intervention 25 juin 2015
7 janv. 2008 à 07:46
j'ai créé un userform avec un label "Lbllet"qui contien un tout petit label "Lblpt"
le code dans le userform
Public Event MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Public Event MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

Private Sub LblLet_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
RaiseEvent MouseDown(Button, Shift, X, Y)
End Sub

Private Sub LblLet_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
RaiseEvent MouseMove(Button, Shift, X, Y)
End Sub

ce qui me permet de voir dans ma form lorsque je charge le userform appelé "case" la propriété MouseMove et MouseDown

mais dans la form lorsque j'écris le code
Private Type POINTAPI
X As Long
Y As Long
End Type

Dim P1 As POINTAPI
Dim P2 As POINTAPI

Private Sub Case_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
GetCursorPos P1
End Sub

Private Sub Case_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = vbLeftButton Then
GetCursorPos P2
Case.Left = Case.Left + (P2.X - P1.X) * Screen.TwipsPerPixelX
Case.Top = Case.Top + (P2.Y - P1.Y) * Screen.TwipsPerPixelY
GetCursorPos P1
End If
End Sub

ne fonctionne pas sur 225 "case" que j'ai chargé dynamiquement
le mousemove ne fonctionne que sur chaque "case" c'est à dire si je remplace dans le code cse par case1 et donc de faire une fonction par case

si je me fait comprendre
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
6 janv. 2008 à 23:35
je n'ai pas compris ta question...

normallement, si tu definit un groupe de controles, les evenements changent tout seuls pour accueillir l'Index
marco62118 Messages postés 35 Date d'inscription mercredi 30 janvier 2008 Statut Membre Dernière intervention 25 juin 2015
6 janv. 2008 à 23:18
Bonjour
je regardais cette source pour voir comment faire exactement un mousemove sur un usercontrol et je m'appercois que tu déclare une procédure UserControl_MouseMove... mais dans la form sur le controle "overlabel" il n'existe pas d'événement mousemove?????

j'avais donc fait un usercontrole et je lui ai affecté un événement mousemove en utilisant event mousemove..... et RaiseEvent Mousemove... là ça fonctionne mais ce que je n'arrive pas à faire c'est lorsque je crée des usercontrol indexé, mon événement n'est valable que pour usercontrol1_MouseMove... Comment faire pour avoir comme l'événement DragDrop valable pour le usercontrol en général

merci d'avance si vous me comprenez
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 juin 2006 à 14:28
Salut chevalier gallois

Merci pour tes remarques.

un fichier .Ctl est un UserControl.
c'est a inclure dans un projet, au même titre qu'un .frm ou .bas ...

un fichier .Ocx est un fichier compilé qui contient 1 ou plusieurs controles...

en gros (je simplifie) le .ctl est le code
le .ocx est la version compilée de celui-ci.
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
13 juin 2006 à 14:09
Salut Renfield !

Ben c'est vraiment très très bien commentés. Rien à dire. Je prendrai exemple sur ta source pour des tests car je n'ai suivi que les tutoriaux ou les sources jusqu'à présent, mais les créations de propriétés et des procédures sont très bien décrite.

D'ailleurs, je regardé toutes tes sources et de nombreuses m'interresse (en particulier les OCX).

Par contre, je m'interroge sur un point, quel est la différence entre un controle avec l'extension .ctl et avec .ocx ?

En tout cas merci à toi de compléter mes connaissances et certainement à très bientôt sur tes autres sources. (je te laisserai les commentaires)

A+ Mortalino
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
7 juil. 2005 à 01:02
et demain, Bernard Pivot nous apprendra à écrire le mot "brosse-Adam"...

7/10 pour la source. commentée à souhait, mais venant du REY, même en ocx basique (comme je te l'ai dit en M.E), on pourrait espérer un peu plus de détails et d'options (but principal d'un tuto) ;)
parfait cela dit en toute première ouverture d'un ocx, dans le parcours d'un développeur. (et dire qu'il fait çà de la main gauche, pendant qu'il fait des puzzles 10000pièces de l'autre, tout çà pendant son sommeil..... çà laisse rêveur...)
je re-DL pour "MAJ font", et m'attarde un peu sur le mouse-O-ver ;)

PCPT
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
6 juil. 2005 à 20:46
... mais null n'est parfait!!! Je n'avais jamais remarqué ce petit "vice" chez notre ami!!!
Il est aussi à noter la présence qu'un accent circonflexe sur le 1er "i" : "rafraîchir" ;-)
www.FRFrance.com °~°
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
6 juil. 2005 à 15:01
ah... euh ... OK. Merci ^^

je ferais gaffe à ça, dorénavant
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
6 juil. 2005 à 14:11
Excellent comme d'hab.
Par contre j'ai noté une faute que tu fais souvent:
RAFRAICHIR ne prend qu'un seul F :p
odan71 Messages postés 140 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 11 décembre 2007
6 juil. 2005 à 11:56
comme toujours de la belle ouvrage :D
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
6 juil. 2005 à 09:37
ola ! que d'honneurs ^^
non, je ne participe pas au projet de DarkSidious...

tout ce que j'espère, c'est que ce "tuto" aidera un maximum de gens voulant se mettre aux OCX...
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
6 juil. 2005 à 07:07
Tient d'ailleurs, ça me fait penser à te demandé si tu participe au projet POPApi de DarkSidious ???
Sinon, la source, idem... Renfield sera toujours... notre maître à tous tant son savoir est grand ;-)
cs_NISANDSYSTEMS Messages postés 178 Date d'inscription vendredi 1 novembre 2002 Statut Membre Dernière intervention 9 janvier 2010
5 juil. 2005 à 17:28
On s'demandait ou tché quété passé depuis ch'timp là.
Sinon toujours correct niveau code, explications et démos.

Petite suggestion.
Tu devrais essayer de deployer une lib type ApiGuide avec toutes
tes petites astuces car il est vrai que certaines sont tres bien.

Sur cela bonne continuation et au plaisir sur VBFrance.

@+ Nisand-systems
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
5 juil. 2005 à 16:25
WindowFromPoint est a favoriser a toute comparaison de coordonées.
En effet, si un controle est ne serai-ce que partiellement superposé a ton UserControl et que la souris va sur la zone commune, ton curseur sera déclaré Over ton controle....
alors que c'est faux...

concernant l'objet Ambient, pas grand chose a en dire... il sert a plusieurs choses, récupérer le nom du controle, comme dans la présente source, ou via Ambient.UserMode, a savoir si on est en mode execution. cet objet propose d'autres propriétés que je vous invite a découviri. Je n'ai amais vraiement fouiné de ce coté là. Un evenement indique même la modification de la valeur de ses propriétés. Utile pour etre avertit du renommage de votre composant.

maintenant, c'est vrais que ce controle est très basique, il ne fait que montrer les bases.
pour être exploitable, il faudrais ajouter couleur de fond, image, alignement... enfin, quelques propriétés comme celles-ci

j'encourage ceux que ca interesse d'apprendre à mettre les mains dans le code, et d'implementer ces quelques fonctionnalités, afin de se faire la main.



je viens de mettre a jour, incluant une nouvelle propriété : Font
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
5 juil. 2005 à 15:50
Je voudrais bien faire sur ta source un commentaire aussi constructif que tu le fis sur ma dernière source, mais à part dire que c'est très bien, ... je n'ai pas vraiment d'autre idée.

C'est simple à comprendre tellement c'est bien commenté.

Je ne connaissais pas WindowFromPoint, mais maintenant, je ne vais plus l'oublier ! :o)

Peux-tu donner deux ou trois informations sur les propriétés Ambient d'un UserControl STP ? Ca pourrait intéresser du monde (moi le premier).
Rejoignez-nous