ldx
Messages postés23Date d'inscriptionjeudi 29 avril 2004StatutMembreDernière intervention 3 mai 2005 9 juil. 2004 à 15:40
NE TENEZ PAS COMPTE DU MESSAGE CI-DESSUS ( 08/07/04 21:04:46)
Le déplacement généré n'est pas beau. Allez plutôt voir le POST SCRIPTUM ... que j'ai déposé
ldx
Messages postés23Date d'inscriptionjeudi 29 avril 2004StatutMembreDernière intervention 3 mai 2005 8 juil. 2004 à 21:04
Bloquer un contrôle pour qu'il suive le form principal c'est ze facile !
Au départ, il a une position sur l'écran comme le form principal d'ailleurs. Donc, il faut que quelque soit la nouvelle position du form principal il conserve la même DIFFERENCE de coordonnées screen C.Q.F.D. Comment faire ? very simple :
1- dans la déclaration du TYPE "ENCAPSULEUR" rajouter les éléments suivants :
DiffRectLeft As Long 'Différence entre LEFT Form principal et contrôle à encapsuler (coordonnées SCREEN en pixels)
DiffRectTop As Long 'Différence entre TOP ...
2- Dans la fonction "EncapsulerControl", remplacer l'instruction :
Call GetWindowRect(ControlAEncapsuler.hwnd, NomWndRect) 'Reprenons les coordonnées SCREEN du contrôle à encapsuler
par ...
Call GetWindowRect(Form1.hwnd, FrmRect)
Call GetWindowRect(ControlAEncapsuler.hwnd, NomWndRect) 'Reprenons les coordonnées SCREEN du contrôle à encapsuler
With EncapsulerControl
.DiffRectLeft = NomWndRect.Left - FrmRect.Left
.DiffRectTop = NomWndRect.Top - FrmRect.Top
End With
3- dans une proc gérant les mouvements de la form principal (ex.: Form_MouseMove), remplacer ...
Comme on peut voir dans le nouveau SetWindowPos, aux coordonnées LEFT et TOP du form principal, on lui rajoute la différence observée au départ entre ce form et le contrôle (ici combo1)
... et ça marche
Pour agir sur frame1, dans l'exemple, remplacer TheEncapsule(1) par TheEncapsule(2)
Remarque : Le Form_MouseMove concerne un MouseDown souris dans la zone de travail, pas dans la barre de titre
Portez vous bien
FeelCode
Messages postés278Date d'inscriptionvendredi 16 avril 2004StatutMembreDernière intervention27 avril 20061 7 juil. 2004 à 03:07
voui c est un bon code comme si jiede c est chian que les control ne suive pas la form bon j'ai pas essayer de gere leur deplacement par le code faute de temps
sinon c est dun bon taf :) vu que la note est a 10 g laisse a 10 lol
cs_Jielde
Messages postés226Date d'inscriptionmardi 17 octobre 2000StatutMembreDernière intervention 1 décembre 2010 6 juil. 2004 à 21:13
Ouais c'est super par contre c'est chiant on peut pas laissé les control a leur place, elle ne sont plus accroché a la feuille.
merci
Trainkill666
Messages postés52Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention 5 mai 2008 6 juil. 2004 à 12:36
Salut idx,
je te félicite pour ta source,
c'est exactement ce qu'il me fallait,
il y a des mois que je cherchais,
je pense meme que c'est au dessus du niveau débutant vu la complexité, et le temps passé dessus, et en plus, y'a les commentaires,
que demander de plus,
allez 10/10 ça le vaux largement...
9 juil. 2004 à 15:40
Le déplacement généré n'est pas beau. Allez plutôt voir le POST SCRIPTUM ... que j'ai déposé
8 juil. 2004 à 21:04
Au départ, il a une position sur l'écran comme le form principal d'ailleurs. Donc, il faut que quelque soit la nouvelle position du form principal il conserve la même DIFFERENCE de coordonnées screen C.Q.F.D. Comment faire ? very simple :
1- dans la déclaration du TYPE "ENCAPSULEUR" rajouter les éléments suivants :
DiffRectLeft As Long 'Différence entre LEFT Form principal et contrôle à encapsuler (coordonnées SCREEN en pixels)
DiffRectTop As Long 'Différence entre TOP ...
2- Dans la fonction "EncapsulerControl", remplacer l'instruction :
Call GetWindowRect(ControlAEncapsuler.hwnd, NomWndRect) 'Reprenons les coordonnées SCREEN du contrôle à encapsuler
par ...
Call GetWindowRect(Form1.hwnd, FrmRect)
Call GetWindowRect(ControlAEncapsuler.hwnd, NomWndRect) 'Reprenons les coordonnées SCREEN du contrôle à encapsuler
With EncapsulerControl
.DiffRectLeft = NomWndRect.Left - FrmRect.Left
.DiffRectTop = NomWndRect.Top - FrmRect.Top
End With
3- dans une proc gérant les mouvements de la form principal (ex.: Form_MouseMove), remplacer ...
Form1.Move Form1.Left + X, Form1.Top + Y
Forms(TheEncapsule(1).NumForm).Left = Forms(TheEncapsule(1).NumForm).Left + (X - XDepart)
Forms(TheEncapsule(1).NumForm).Top = Forms(TheEncapsule(1).NumForm).Top + (Y - YDepart)
Call SetWindowPos...
par :
Form1.Move Form1.Left + X, Form1.Top + Y
Call GetWindowRect(Form1.hwnd, FrmRect)
Call SetWindowPos(Forms(TheEncapsule(1).NumForm).hwnd, 0, FrmRect.Left + TheEncapsule(1).DiffRectLeft, _
FrmRect.Top + TheEncapsule(1).DiffRectTop, (Form1.Combo1.Width / 15), (Form1.Combo1.Height / 15), SWP_FRAMECHANGED)
Comme on peut voir dans le nouveau SetWindowPos, aux coordonnées LEFT et TOP du form principal, on lui rajoute la différence observée au départ entre ce form et le contrôle (ici combo1)
... et ça marche
Pour agir sur frame1, dans l'exemple, remplacer TheEncapsule(1) par TheEncapsule(2)
Remarque : Le Form_MouseMove concerne un MouseDown souris dans la zone de travail, pas dans la barre de titre
Portez vous bien
7 juil. 2004 à 03:07
sinon c est dun bon taf :) vu que la note est a 10 g laisse a 10 lol
6 juil. 2004 à 21:13
merci
6 juil. 2004 à 12:36
je te félicite pour ta source,
c'est exactement ce qu'il me fallait,
il y a des mois que je cherchais,
je pense meme que c'est au dessus du niveau débutant vu la complexité, et le temps passé dessus, et en plus, y'a les commentaires,
que demander de plus,
allez 10/10 ça le vaux largement...