2010-01-13 7 views
0

J'utilise le code suivant pour capturer lorsque le bouton de réduction de mon programme est enfoncé afin que je puisse masquer le formulaire dans la barre des tâches et, par conséquent, minimiser dans la barre d'état système.WM_SysCommand Prévention du déplacement de la fenêtre dans delphi

procedure TForm1.WMSysCommand; 
begin 
    if (Msg.CmdType = SC_MINIMIZE) then 
    begin 
    form1.Hide; 
    show1.Checked :=false; 
    hide1.Checked :=true; 
    end; 
    if (Msg.CmdType = SC_CLOSE) then form1.Close; 
end; 

J'ai dû mettre la capture dans le bouton de fermeture trop que ce code a été empêcher la fermeture du programme via le bouton de fermeture. Ce dont j'ai besoin d'aide, c'est comment réparer en faisant glisser la fenêtre du programme par la barre de légende qui a cessé de fonctionner avec ce code.

+1

Vous ne devriez pas appeler des méthodes Form1.XYZ puisque votre code est déjà dans une méthode de TForm1. Appelez simplement XYZ, par ex. Form1.Hide -> Cacher. – dummzeuch

Répondre

6

Si vous remplacez le traitement d'un message Windows vous devez prendre soin de soit traiter tous les cas possibles, ou d'appeler le code hérité pour tous les cas non gérées:

procedure TForm1.WMSysCommand(var Msg: TWMSysCommand); 
begin 
    if (Msg.CmdType = SC_MINIMIZE) then 
    begin 
    Hide; 
    show1.Checked := False; 
    hide1.Checked := True; 
    Msg.Result := 0; 
    exit; 
    end; 
    inherited; 
end; 
+1

Et n'oubliez pas de définir le résultat du message. (Pour ce message, il devrait être zéro.) –