TWMMoving

Résolu
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 - 14 juil. 2006 à 17:33
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 - 17 juil. 2006 à 12:14
salut,

j'ai implementé un "magnet" entre mes forms lors du resize et du deplacement à l'aide de WM_WINDOWPOSCHANGING. J'ai aussi forcé les fenêtres à rester sur l'écran. ça marche bien.

Mais,
Ce que je voudrais, c'est que le rectangle gris que l'on voit lors du deplacement soit representatif de la position final.

j'ai fait des recherches et j'ai trouvé 10 copié-coller du même code:
http://www.cryer.co.uk/brian/delphi/howto_capture_form_moving.htm

Mais pas moyen de changer la position de ce rectangle... Ce code ne marche pas chez moi. De plus, ma déclaration (Delphi 9.0) de Messages.TWMMoving différe de celle de l'exemple du net.

d'après la msdn,
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowmessages/wm_moving.asp
Il y aune histoire de valeur de retour. Mais je sais pas si c'est applicable avec Delphi.

bref, j'ai fait plusieurs tests et essai et pas moyen de changer ce rectangle gris.

quelqu'un a une idée? Le code d'exemple marche-t-il chez vous?

merci d'avance.

2 réponses

cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
17 juil. 2006 à 12:14
Merci à toi!

Sachant que le code marche, j'ai trouvé mon problème. J'utilise les composant JEDI pour le dock de mes form et c'était ça qui me masquait le traitement du message.

bon code
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
15 juil. 2006 à 10:48
Salut,

j'ai testé le code et il fonctionne sous D4 et D9 (avec toute fois une petite modification):

Pour D9 :
procedure TForm1.OnFormMoving(var Msg: TWMMoving);
var
  screenArea: TRect;
begin
  screenArea := Screen.WorkareaRect;
  if msg.DragRect^.Left < screenArea.left then
    OffsetRect(msg.DragRect^, screenArea.Left - msg.DragRect^.Left, 0);
  if msg.DragRect^.Top < screenArea.top then
    OffsetRect(msg.DragRect^, 0, screenArea.Top - msg.DragRect^.Top);
  if msg.DragRect^.Right > screenArea.Right then
    OffsetRect(msg.DragRect^, screenArea.right - msg.DragRect^.Right, 0);
  if msg.DragRect^.Bottom > screenArea.Bottom then
    OffsetRect(msg.DragRect^, 0, screenArea.bottom - msg.DragRect^.Bottom);
// et ici on change la taille de la fenêtre
    msg.DragRect^ : = Rect(msg.DragRect^.Left,msg.DragRect^.Top, msg.DragRect^.Left+100, msg.DragRect^.Top+100);
  inherited;
end;

@+
Cirec
0
Rejoignez-nous