Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Контекстное меню на основе базы данных

Delphi , Базы данных , База данных

Контекстное меню на основе базы данных

П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);

  while not NaviT.EOF do
  begin
    m := TMenuItem.create(navidummy);
    II := II + 1;
    with m do
    begin
      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 вызывается при правом клике (или выполнении другого действия для отображения контекстного меню). Эта процедура:

  1. Освобождает любые ранее созданные компоненты Navidummy.
  2. Создает новый компонент TComponent, присваивает его переменной Navidummy и устанавливает родительский компонент в текущую форму (self).
  3. Просматривает записи базы данных с помощью цикла while до достижения конца файла (EOF).
  4. Для каждой записи создает новый компонент TMenuItem и присваивает его переменной m.
  5. Устанавливает различные свойства для пункта меню:
    • name: уникальное имя, составленное из "MM" и инкрементирующегося целого числа (II).
    • caption: значение поля базы данных с именем "MyWHAT".
    • tag: значение поля базы данных с именем "MyTAG".
    • visible: устанавливает в True.
    • OnClick: присваивает процедуре NaviExec как обработчик события.
  6. Добавляет пункт меню к основному компоненту меню (MyMenuItem) и переходит к следующей записи в базе данных с помощью NaviT.Next.

Процедура NaviExec вызывается при клике пункта меню. Она:

  1. Получает текст заголовка выбранного пункта меню и присваивает его переменной What.
  2. Устанавливает переменную Key в значение тега выбранного пункта меню.

Код можно улучшить следующим образом:

  • Следует использовать более описательное имя для компонента Navidummy, поскольку его цель не сразу понятна.
  • Вместо прямого присваивания обработчика события к свойству OnClick рекомендуется создавать массив обработчиков событий или отдельную процедуру для обработки событий, чтобы保持 код организованным и повторно используемым.
  • Переменная II используется как счетчик, но не сбрасывается до 0 в каждом цикле. Это может привести к ошибкам, если цикл выполняется несколько раз без сброса счетчика.
  • Обработка ошибок: код предполагает, что операции с базой данных всегда будут успешными. Рекомендуется добавлять механизмы обработки ошибок для обработки потенциальных ошибок или исключений.

Альтернативное решение:

procedure TMyForm.CreatePopUpMM(Sender: TObject);
var
  m: TMenuItem;
  mymenu: TComponent;
begin
  mymenu := TComponent.Create(self);

  try
    NaviT.First;
    while not NaviT.EOF do
    begin
      m := TMenuItem.Create(mymenu);
      m.Name := 'MM' + IntToStr(NaviT.FieldByName('MyID').AsInteger);
      m.Caption := NaviT.FieldByName('MyWHAT').AsString;
      m.Tag := NaviT.FieldByName('MyTAG').AsInteger;
      m.Visible := True;
      m.OnClick := NaviExec;
      MyMenuItem.Add(m);
      NaviT.Next;
    end;

  finally
    mymenu.Free;
  end;
end;

procedure TMyForm.NaviExec(Sender: TObject);
begin
  What.Text := (Sender as TMenuItem).Caption;
  Key := (Sender as TMenuItem).Tag;
end;

В этом варианте включены:

  • Обработка ошибок с помощью блока try-finally, чтобы обеспечить освобождение компонента mymenu даже в случае возникновения исключения.
  • Более описательное имя для компонента Navidummy (MyMenu).
  • Использование NaviT.First для сброса курсора базы данных перед просмотром записей.
  • Улучшение именования переменных и объявлений.

В статье описывается создание контекстного меню на основе базы данных в программе Delphi, которое позволяет пользователю выбрать из списка элементов для выполнения определенных действий.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: База данных ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 02:20:31/0.0036818981170654/0