procedure TForm1.FormCreate(Sender: TObject);
var
Style: Longint;
begin
Style := GetWindowLong(Handle, GWL_STYLE);
SetWindowLong(Handle, GWL_STYLE, Style andnot WS_SYSMENU);
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift:
TShiftState);
beginif (Key = VK_F4) and (ssAlt in Shift) thenbegin
MessageBeep(0);
Key := 0;
end;
end;
{ Disable close button }procedure TForm1.Button1Click(Sender: TObject);
var
SysMenu: HMenu;
begin
SysMenu := GetSystemMenu(Handle, False);
Windows.EnableMenuItem(SysMenu, SC_CLOSE, MF_DISABLED or MF_GRAYED);
end;
{ Enable close button }procedure TForm1.Button2Click(Sender: TObject);
begin
GetSystemMenu(Handle, True);
Perform(WM_NCPAINT, Handle, 0);
end;
Но это окно можно закрыть из TaskBar'а.
Вы пытаетесь отключить кнопку закрытия формы в вашем приложении Delphi, чтобы она не могла быть закрыта кликом по кнопке или нажатием Alt+F4.
Для достижения этого вы используете различные функции и константы Windows API, что здорово! Однако, как вы заметили, форма все еще может быть закрыта из панели задач.
Чтобы полностью отключить закрытие формы с помощью всех возможных способов, вам нужно использовать дополнительные техники. Вот несколько предложений:
Изменение стиля окна: В процедуре FormCreate вы уже настраиваете стиль окна с помощью SetWindowLong. Вы можете также настроить стиль WS_EX_TOOLWINDOW, чтобы предотвратить перемещение или закрытие окна пользователем.
Переопределение сообщения WM_SYSCOMMAND: Это важный шаг. Когда пользователь нажимает Alt+F4 или кликает по кнопке закрытия, Windows отправляет сообщение WM_SYSCOMMAND в вашу форму. Вы можете переопределить это сообщение в обработчике событий формы, чтобы предотвратить закрытие формы.
procedureTForm1.WMSysCommand(varMsg:TMessage);beginif(Msg.Msg=SC_CLOSE)or(Msg.Msg=SC_TASKLIST)thenResult:=False;// не закрывайте формуend;
Отключение кнопки панели задач: Хотя вы не можете полностью отключить кнопку панели задач, вы можете сделать ее невидимой, настроив стиль TBMUTTON на TBBS_INVISIBLE.
Мониторинг сообщений окна: Вы также можете использовать функцию Windows.PumpMessage для мониторинга сообщений окна и отмены любых попыток закрыть вашу форму.
procedureTForm1.WndProc(varMsg:TMessage);beginif(Msg.Msg=WM_CLOSE)or(Msg.Msg=SC_CLOSE)thenResult:=False;// не закрывайте формуend;
Обратите внимание, что эти техники могут иметь некоторые ограничения и побочные эффекты. Например, отключение кнопки панели задач не будет предотвращать закрытие формы с помощью других методов (например, нажатием Ctrl+F4).
Надеюсь, это поможет вам достичь вашей цели!
Отключение кнопки закрытия чужого окна на Delphi позволяет предотвратить закрытие формы с помощью клавиши Alt + F4, но не исключает возможность закрытия формы из панели задач.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.