19. Главное окно приложения

Главное окно приложения доступно через переменную MainWindow. Класс окна TMainFm.

Рис 17

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

  • OnCreateForm, OnDestroyForm: TCreateFormEvent = procedure(Sender: TObject; Form: TdxForm);
  • OnCreateListWindow = procedure (Sender: TObject; aWindow: TForm);
  • OnCreateReportWindow = procedure (Sender: TObject; aWindow: TForm);

Таким образом, вы можете выполнить какие-либо действия общие для всех компонентов базы.

Доступ к пунктам меню и кнопкам панелей инструментов

У вас есть большие возможности повлиять на интерфейс и поведение программы. К примеру, можно добавить дополнительные кнопки на панель инструментов главного окна, скрыть ненужный пункт в контекстном меню или изменить стандартное поведение. Не сказать, что в этом есть прям такая необходимость, но возможность есть. Доступ к элементам осуществляется по индексам. Константы для всех существующих кнопок и пунктов меню приведены в справке: для контекстного меню - в «Constants\Popup menu items», для панелей инструментов - в «Constants\Toolbar buttons» Например:

procedure NewHandler(Sender: TObject);
begin
  // Какие-то действияif OldHandler <> nil then OldHandler(Sender);
end;
 
procedure Form_Create;
begin
  OldHandler := Self.Grid.PopupMenu.Items[0].OnClick;
  Self.Grid.PopupMenu.Items[0].OnClick := @NewHandler;
end;

В примере подменяем стандартный обработчик события на свой. При необходимости вызываем старый обработчик. Однако желательно использовать в качестве индекса не число, а константу. Все возможные константы для разных элементов интерфейса вы можете найти в дереве классов в подразделах «Main menu items», «Popup menu items», «Toolbar buttons» раздела «Constants». Пример:

MainWindow.ToolBar.Buttons[TBN_APPEND].Caption := 'Добавить запись';

Также не вставляйте пункты меню между стандартными пунктами, т. к. это может привести к ошибкам. Добавляйте их в конец меню.

Добавить свой пункт в контекстное меню запроса dxQueryGrid1:

procedure Form_Create;
var mi:TMenuItem;
begin
  mi:=TMenuItem.create(dxQueryGrid1);
  mi.caption:='выгрузить в XLS';
  mi.OnClick:=@NewHandler;
  mi.ShortCut:=16472;  //Ctrl+X
  // картинка должна быть 16x16 пикселей
  mi.bitmap.LoadFromFile(ExtractFilePath(application.exename)+'images\xls.bmp');
  dxQueryGrid1.PopupMenu.items.add(mi);
end;