Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1318 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  déplacer une fenêtre sans barre de titre ...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

déplacer une fenêtre sans barre de titre ...

n°153420
_tantemerd​e
Posté le 07-06-2002 à 11:11:28  profilanswer
 

Salut à tous  :hello:  
 
Voilà, j'ai créé sous Delphi 6 une sorte de 'barre des tâches', et cette barre n'a pas de barre de titre.
Je voudrais pouvoir la faire bouger, mais c'est impossible quand il n'y a pas de barre de titres.
J'ai essayé avec le OnMouseDown, mais ça bouge à chaque click : moi je voudrais que ça bouge tant que je n'ai pas relaché le click.  :(  
Apparament les fonction de drag et drop ne fonctionnent qu'entre plusieurs fenêtres entre elles ...  :sweat:  
Donc je suis un peu perdu ... quelqu'un a une idée pour me sortir de là ?  :ange:  
 
Merci d'avance =)

mood
Publicité
Posté le 07-06-2002 à 11:11:28  profilanswer
 

n°153425
antp
Super Administrateur
Champion des excuses bidons
Posté le 07-06-2002 à 11:15:01  profilanswer
 

OnMouseMove, et là dedans tu sais voir si le bouton est enfoncé ou non


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°153427
_tantemerd​e
Posté le 07-06-2002 à 11:17:33  profilanswer
 

ben nan justement, tu peux connaître si le bouton est enfoncé QUE dans OnMouseDown ou dans OnMouseUp ... c'est tout mon problème

n°153428
antp
Super Administrateur
Champion des excuses bidons
Posté le 07-06-2002 à 11:19:36  profilanswer
 

:heink:
 

Citation :


type TMouseMoveEvent = procedure(Sender: TObject; Shift: TShiftState; X, Y: Integer) of object;
 
property OnMouseMove: TMouseMoveEvent;


 
if ssLeft in Shift then
  ... le bouton gauche est enfoncé ...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°153436
_tantemerd​e
Posté le 07-06-2002 à 11:24:21  profilanswer
 

euh ... désolé ... je comprends pas trop ton texte là ... :pt1cable:

n°153447
3Phach4
...
Posté le 07-06-2002 à 11:31:27  profilanswer
 

voila le truc
 
procedure TForm1.Form1(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
//deplacement en cliquant sur la form
 
ReleaseCapture;
Form1.Perform(WM_SYSCOMMAND, $F012, 0);
end;

n°153460
_tantemerd​e
Posté le 07-06-2002 à 11:44:36  profilanswer
 

Impeccable ta procédure 3Phach4 !
 
Seulement j'aimerais pouvoir contôler la position de la fenêtre enfonction de sa position sur l'écran. On peut, avec ta méthode, connaitre les coordonnées de la fenêtre (ou de la souris) pendant le déplacement ?

n°153483
_tantemerd​e
Posté le 07-06-2002 à 12:11:02  profilanswer
 

Bon en fait, j'ai fini par comprendre ce que tu me disais antp, et voici ce que je fais (dans OnMouseMove):
 
if (ssLeft in Shift) then
   Form1.Top := Form1.Top + Y;
 
Et ça marche puisque je voulais la délacer uniquement verticalement.
Maintenant, j'ai plus qu'à la faire docker en haut ou en bas de l'écran ...
 
Merci à tous les 2 =)


Message édité par _tantemerde le 06-07-2002 à 12:11:41
n°153760
_tantemerd​e
Posté le 07-06-2002 à 15:50:28  profilanswer
 

euh ... cela dit, tant qu'on y est, quelqu'un connait la manip pour connaître les coordonnées X et Y de la souris par rapport à l'écran et pas par rapport à la fenêtre qui gère le OnMouseMove ?

n°153833
antp
Super Administrateur
Champion des excuses bidons
Posté le 07-06-2002 à 16:20:47  profilanswer
 

fenetre.ClientToScreen(Point(x,y))


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
mood
Publicité
Posté le 07-06-2002 à 16:20:47  profilanswer
 

n°153837
_tantemerd​e
Posté le 07-06-2002 à 16:23:13  profilanswer
 

ah ?
en fait depuis que j'ai posté ma question j'ai trouvé une réponse, mais elle est différente. J'utilise Mouse.CursorPos
 
L'une est mieux que l'autre ?

n°153847
antp
Super Administrateur
Champion des excuses bidons
Posté le 07-06-2002 à 16:27:41  profilanswer
 

Bhen ça dépend si tu veux la position de la souris au moment de l'appel de la fonction ou si tu veux convertir des coordonnées relatives en coordonnées absolues...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°153858
_tantemerd​e
Posté le 07-06-2002 à 16:37:00  profilanswer
 

ouais, j'ai regardé dans l'Aide la différence entre les 2 : je peux me servir des deux sans problème, mais peut-être qu'il y en a une qui est plus gourmande en ressources que l'autre ?

n°153869
antp
Super Administrateur
Champion des excuses bidons
Posté le 07-06-2002 à 16:46:45  profilanswer
 

à mon avis le CursorPos est plus léger (faudrait voir le code de Borland pour être sûr, si t'as la version Pro ou Entreprise tu sais le voir facilement)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°153877
_tantemerd​e
Posté le 07-06-2002 à 16:53:00  profilanswer
 

on a ici la version entreprise, mais je sais pas voir ce code  :p

n°153933
antp
Super Administrateur
Champion des excuses bidons
Posté le 07-06-2002 à 17:59:30  profilanswer
 

Clic de droite sur une fonction, find declaration, et normalement tu le vois.
Si il trouve pas, bhen fallait choisir d'installer les sources :p


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°154297
zion
Plop
Posté le 08-06-2002 à 16:24:25  profilanswer
 

Allons allons, y a une autre solution plus propre  :ange:  
 
Tu rajoutes ca en private
 procedure WMNCHitTest(var Msg: TWMNCHitTest);message WM_NCHITTEST;
 
Puis
 
procedure TfoMain.WMNCHitTest(var Msg: TWMNCHitTest);
begin
  inherited;
  Msg.Result := HTCAPTION;
end;
 
Si tu veux le limiter au bouton gauche, tu sais rajouter un test genre  
  if (Msg.Result = HTCLIENT) and (HiWord(GetAsyncKeystate(VK_LBUTTON))>0) then
 
et si tu veux ne pas le faire sur un composant (ce serait pas mal de pas bouger sur un bouton par exemple), tu fais un truc du genre
 
begin
  inherited;
  if (Msg.Result = HTCLIENT) and (HiWord(GetAsyncKeystate(VK_LBUTTON))>0) then
  begin
    p.x:=Msg.Pos.x;
    p.y:=Msg.Pos.y;
    p:=self.ScreenToClient(p);
    control:=self.ControlAtPos(p,true);
    if (control<>nil) then
      if (Control.Name <> 'BUSpeedButton1';) and
        (Control.Name <> 'BUSpeedButton2';) then
        Msg.Result := HTCAPTION;
  end;
end;
 
 
 :hello:


---------------
Informaticien.be - Lancez des défis à vos amis
n°157973
_tantemerd​e
Posté le 12-06-2002 à 17:37:18  profilanswer
 

merci bcp Zion, mais ton code utilise des méthodes un peu complexes pour moi ... mais merci bcp d'avoir fait l'effort de m'écrire tout ça !!  ;)  :)  :D  
Je vais le garder dans un coin quand même et j'essayerai de le comprendre mieux plus tard =)  :jap:  
 
Pour l'instant je me contente de mon code pas top mains simple =)
 
Merci encore !!  :hello:

n°158040
taureau
Posté le 12-06-2002 à 19:46:26  profilanswer
 

pour bouger un composant tu peux aussi utiliser le truc décrit par 3phach4, tu peux aussi t'en servir pour les redimensionner en utilisant les constantes :
const
  ResizeLeft        = $F001;
  ResizeRight       = $F002;
  ResizeTop         = $F003;
  ResizeTopLeft     = $F004;
  ResizeTopRight    = $F005;
  ResizeBottom      = $F006;
  ResizeBottomLeft  = $F007;
  ResizeBottomRight = $F008;
  MoveComponent     = $F012;

n°159901
zion
Plop
Posté le 15-06-2002 à 17:15:09  profilanswer
 

_tantemerde a écrit a écrit :

merci bcp Zion, mais ton code utilise des méthodes un peu complexes pour moi ... mais merci bcp d'avoir fait l'effort de m'écrire tout ça !!  ;)  :)  :D  
Je vais le garder dans un coin quand même et j'essayerai de le comprendre mieux plus tard =)  :jap:  
 
Pour l'instant je me contente de mon code pas top mains simple =)
 
Merci encore !!  :hello:  




 
T'as tord de pas l'utiliser, en simplifié, quand tu cliques sur une fenêtre, windows te demande si le mec clique sur la barre de titre, et la tu réponds oui tout le temps, tout simplement... Contrairement à la solution d'antp ou tu fais le déplacement toi même, et ca mêne parfois à des petits bugs d'affichages  ;)


---------------
Informaticien.be - Lancez des défis à vos amis
n°166063
_tantemerd​e
Posté le 26-06-2002 à 10:03:30  profilanswer
 

:bounce:  OKi  :spookie:  
          :jap:

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  déplacer une fenêtre sans barre de titre ...

 

Sujets relatifs
[PHP] un include dans une nouvelle fenêtre du navigateur[Delphi] Créer une procédure pour ouvrir une fenêtre MDIChild
[Delphi] Fenêtres au dessus de la fenêtre principale[HTML] Ouvrir une fenetre popup avec le resultat d'un formulaire
[Linux, C, programmation de fenetre] kes ki existe ?[ASP] Comment se déplacer dans un recordset ???
[Access - Graphik et Requete] J'arrive pas a trouver un titre valableJS : text qui apparait dans la barre d'ETAT quand je survole un LIEN
JS - fenetre qui s ouvre et qui se ferme quand on retire sa souris 
Plus de sujets relatifs à : déplacer une fenêtre sans barre de titre ...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR