Пpиходит пpогpамеp вечеpом домой весь в кpови и без pуки. Жена спpашивает:
- Что случилось доpогой???
Пpогpамеp:
- Да так, в кулеp засосало.
var
m: TMenuItem;
navidummy: TComponent;
..........................................................
procedure TMyForm.CreatePopUpMM(Sender: TObject);
begin
Navidummy.free;
Navidummy := TComponent.create(self);
whilenot NaviT.EOF dobegin
m := TMenuItem.create(navidummy);
II := II + 1;
with m dobegin
name := 'MM' + IntToStr(II);
caption := NaviT.Fieldbyname('MyWHAT').AsString;
tag := NaviT.Fieldbyname('MyTAG').AsInteger;
visible := True;
OnClick := NaviExec;
end;
MyMenuItem.add(m);
NaviT.Next;
end;
NaviT.Close;
end;
procedure TMyForm.NaviExec(Sender: TObject);
begin{ Здесь я получаю то, что хочу ! }
What.text := (Sender as TMenuItem).Caption;
Key := (Sender as TMenuItem).Tag;
end;
Перевод на русский язык:
Это пример программирования Delphi, который создает контекстное меню на основе данных из базы данных. Программа состоит из двух процедур: CreatePopUpMM и NaviExec.
Процедура CreatePopUpMM вызывается при правом клике (или выполнении другого действия для отображения контекстного меню). Эта процедура:
Освобождает любые ранее созданные компоненты Navidummy.
Создает новый компонент TComponent, присваивает его переменной Navidummy и устанавливает родительский компонент в текущую форму (self).
Просматривает записи базы данных с помощью цикла while до достижения конца файла (EOF).
Для каждой записи создает новый компонент TMenuItem и присваивает его переменной m.
Устанавливает различные свойства для пункта меню:
name: уникальное имя, составленное из "MM" и инкрементирующегося целого числа (II).
caption: значение поля базы данных с именем "MyWHAT".
tag: значение поля базы данных с именем "MyTAG".
visible: устанавливает в True.
OnClick: присваивает процедуре NaviExec как обработчик события.
Добавляет пункт меню к основному компоненту меню (MyMenuItem) и переходит к следующей записи в базе данных с помощью NaviT.Next.
Процедура NaviExec вызывается при клике пункта меню. Она:
Получает текст заголовка выбранного пункта меню и присваивает его переменной What.
Устанавливает переменную Key в значение тега выбранного пункта меню.
Код можно улучшить следующим образом:
Следует использовать более описательное имя для компонента Navidummy, поскольку его цель не сразу понятна.
Вместо прямого присваивания обработчика события к свойству OnClick рекомендуется создавать массив обработчиков событий или отдельную процедуру для обработки событий, чтобы保持 код организованным и повторно используемым.
Переменная II используется как счетчик, но не сбрасывается до 0 в каждом цикле. Это может привести к ошибкам, если цикл выполняется несколько раз без сброса счетчика.
Обработка ошибок: код предполагает, что операции с базой данных всегда будут успешными. Рекомендуется добавлять механизмы обработки ошибок для обработки потенциальных ошибок или исключений.
Обработка ошибок с помощью блока try-finally, чтобы обеспечить освобождение компонента mymenu даже в случае возникновения исключения.
Более описательное имя для компонента Navidummy (MyMenu).
Использование NaviT.First для сброса курсора базы данных перед просмотром записей.
Улучшение именования переменных и объявлений.
В статье описывается создание контекстного меню на основе базы данных в программе Delphi, которое позволяет пользователю выбрать из списка элементов для выполнения определенных действий.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.