Gestiondu déplacement d'une feuille fille

Résolu
jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 - 17 janv. 2011 à 12:05
jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 - 24 janv. 2011 à 11:05
Bonjour,

Je souhaite controlé le déplacement des feuilles filles dans la fenêtre mère. Je veux bloquer, lors du glisser-déposer, le positionnement d'une fenêtre à moins de 100 pixels du bord gauche de la fenêtre mère.

Je voulez faire ceci, mais visiblement c'est pas possible.

procedure TFormMere.FormDockOver(Sender: TObject; Source: TDragDockObject;
  X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept:= (Source is TMDIChild); //erreur du compilateur
end;

procedure TFormMere.FormDockDrop(Sender: TObject; Source: TDragDockObject;
  X, Y: Integer);
begin
  if (Source is TMDIChild) and X < 100 then
    (Source as TMDIChild).left := 100;
end;


Commnent faire ?

Jean

3 réponses

jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 1
24 janv. 2011 à 11:05
Bonjour,

A force de recherche sur le net, j'ai fini par trouvé une solution sur un site en anglais (Moving a sheet girl delphi).
Il faut ajouter ceci (interception du message WM_WINDOWPOSCHANGING) :
    procedure PosChanging(var Msg:TwmWindowPosChanging); message WM_WINDOWPOSCHANGING;


procedure TMDIChild.PosChanging(var Msg: TWMWindowPosChanging);
begin
  if Msg.WindowPos^.x < 100 then 
    Msg.WindowPos^.x:=100;
  Msg.result:=0;
end;


TWMWindowPosChanging est une structure de WindowsPos, elle permet de limité la position, la taille et même d'interdire le déplacment.

Voila, bonne journée.
Jean
3
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
19 janv. 2011 à 20:21
Bonsoir

Ne serait pas plutôt
source.control

qu'il faudrait utiliser ?

Cordialement.[hr]"L'imagination est plus importante que le savoir." Albert Einstein
0
jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 1
21 janv. 2011 à 10:33
Bonjour WhiteHippo,

J'ai trouvé pour l'erreur de compil, il faut utiliser les evenement Drag et non Dock.

Par contre ça fonctionne pas pour autant,aucun effet !

D'ailleur, je me suis apperçu que les evenements Drop et Over (fille ou mère) ne se déclenche pas lors du déplacement de la fiche fille.

Donc j'ai mis ça dans l'évenement paint de la fille

if self.Left < 100 then
self.Left := 100;

Mais y'a un effet de scintillement qui n'est vraiment pas beau. Donc je suis toujours preneur d'une méthode propre !
0
Rejoignez-nous