procedure TForm1.Button1Click(Sender: TObject);
var
M: TMenu;
begin
M := Application.MainForm.Menu;
// Den ersten Menueintrag deaktivieren // The first Item will be disabled
EnableMenuItem(M.Handle, M.Items[0].Command, MF_BYCOMMAND or MF_DISABLED);
end;
Here's the translation of the text into Russian:
Код предназначен для отключения первого пункта меню при клике кнопки. Это достигается с помощью функции EnableMenuItem из Windows API.
Вот разбивка того, что код делает:
Он объявляет переменную M типа TMenu, которая представляет собой главное меню формы.
Он устанавливает значение M в свойство MainForm.Menu, которое является ссылкой на главное меню формы.
Он использует функцию EnableMenuItem для отключения первого пункта меню (M.Items[0]) путем комбинации двух флагов:
MF_BYCOMMAND: Этот флаг указывает, что пункт меню должен быть включен или отключен в зависимости от его командного ID (в этом случае - ID первого пункта меню).
MF_DISABLED: Этот флаг указывает, что пункт меню должен быть отключен.
Обратите внимание, что функция EnableMenuItem требует handle к меню (M.Handle) как аргумент. Свойство Handle используется для получения этого handle.
Если вы хотите улучшить код, есть несколько предложений:
Вы можете добавить обработку ошибок для проверки существования пункта меню перед попыткой отключить его.
Вы можете использовать более описательное имя переменной вместо M.
Если вы используете Delphi 10 или позднее, вы можете использовать объект TMenuItems для упрощения кода.
Вот альтернативное решение, которое использует объект TMenuItems:
procedure TForm1.Button1Click(Sender: TObject);
var
Item: TMenuItem;
begin
if Assigned(Application.MainForm.Menu) then
Application.MainForm.Menu.Items[0].Enabled := False;
end;
В этом коде мы просто доступ ourselves к первому пункту меню (Items[0]) и устанавливаем свойство Enabled в False, что отключает пункт меню. Мы также проверяем, существует ли меню перед попыткой доступа к его пунктам, чтобы предотвратить runtime-ошибку.
В статье описывается процедура в Delphi, которая блокирует доступ к меню без закрашивания серым фоном.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.