cs_Gerard
Messages postés121Date d'inscriptionjeudi 10 janvier 2002StatutMembreDernière intervention 7 août 2018
-
7 sept. 2011 à 08:35
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 2022
-
10 sept. 2011 à 22:21
Bonjour,
Je voudrais mémoriser l'emplacement et la taille de la fenêtre d'une application telle que l'utilisateur la souhaite pour les sessions futures.
Curieusement alors que l'évènement "OnResize" fonctionne bien, je n'arrive pas à avoir la même chose avec "OnDragDrop".
Je fais pourtant quelque chose de très simple. Une nouvelle appli est créée, une procédure est associée à l'évenement OnDragDrop:
Mais lorsque la fenêtre est déplacée la procédure n'est pas appelée...
Quelqu'un peut-il m'expliquer ce qui ne va pas?
Certes, je peux mémoriser ces valeurs lors de la fermeture de l'appli, et c'est ce que je ferai si je n'ai pas de solution, mais cela m'intrigue que cela ne marche pas...
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 10 sept. 2011 à 13:14
[quote= Le Divin m'][quote=Gérard]Merci, effectivement cela marche, même si je ne vois pas par quel miracle.../quote[quote=Caribensila]C'est parce que Cirec est directement branché sur les Messages du Bon Dieu./quote/quote
En fait non ... il n'y a pas de miracle là dedans ...
L'évènement "OnDragDrop" n'est tout simplement pas fait pour cet usage. "OnDragDrop" n'est déclenché que si un objet est déplacé au dessus et que la variable "Accept" de l'évènement "OnDragOver" est à True. (voir le petit exemple en dessous)
Mais dans le cadre d'un déplacement de Form ça ne fonctionnera jamais ... on utilise le message Windows "WM_ExitSizeMove" à la place qui se déclenche dès qu'un déplacement et/ou un redimensionnement a été fait.
Pour info il existe aussi "WM_EnterSizeMove" qui lui est déclenché avant le redimensionnement et/ou le déplacement ... pratique pour controler la taille et la position.
Mais ....[quote=Gérard]Je voudrais mémoriser l'emplacement et la taille de la fenêtre d'une application telle que l'utilisateur la souhaite pour les sessions futures. /quote Pour réaliser ça j'utiliserai Get/SetWindowPlacement à la place ... elles sont prévues pour cet usage
Le petit exemple de DragDrop ...
Tu places deux TLabel sur ta Form et tu mets leurs propriétés "DragMode" à dmAutomatic
ensuite tu double cliques sur les évènements "OnDragOver" & "OnDragDrop" de la Form et tu complètes comme suit:
[hr] procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
[b]begin
/bAccept : = Source is TLabel;
end;
procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
[b]begin
with /b(Source as TLabel) [b]do
/bSetBounds(X, Y, Width, Height);
end;
[hr]
Tu lances l'application et maintenant tu peux déplacer les deux TLabel partout sur la Form parent avec la souris.
J'espère que cette fois c'est plus clair pour toi ... et tu vois ... il n'y a pas de miracle
[hr]@+Cirec
[hr]
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Gerard
Messages postés121Date d'inscriptionjeudi 10 janvier 2002StatutMembreDernière intervention 7 août 2018 10 sept. 2011 à 13:19
Merci de ces explications.
je ne comprenais pourquoi ce que j'avais fait avec onresize marchait et pas onDragDrop et l'Aide est vraiment insuffisante, parce d'après de qu'on y lit cela devrait marcher!