2010-01-13 2 views
0

Я использую следующий код для захвата при нажатии кнопки минимизации моей программы, чтобы я мог скрыть форму на панели задач и как таковое свести к системному диску.WM_SysCommand Предотвращение перемещения окна в 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; 

я должен был поместить захват в для кнопки закрытия тоже, как этот код предотвращала закрытие программы с помощью кнопки закрытия. Мне нужна помощь в том, как исправить перетаскивание окна программы с помощью панели заголовка, которая перестала работать с этим кодом.

+1

Вы не должны вызывать методы Form1.XYZ так как ваш код уже находится внутри метода TForm1. Просто позвоните XYZ, например. Form1.Hide -> Скрыть. – dummzeuch

ответ

6

Если переопределить обработку сообщения Windows, вам нужно позаботиться, чтобы либо обрабатывать все возможные случаи, или вызвать унаследованный код для всех необработанных случаев:

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

И не забудьте установить результат сообщения. (Для этого сообщения оно должно быть нулевым.) –

Смежные вопросы