19. Главное окно приложения
Главное окно приложения доступно через переменную MainWindow. Класс окна TMainFm.
Главное окно может перехватывать события создания и уничтожения формы, создания окон списков и отчетов. Для этого служат следующие свойства:
- 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;