Программный интерфейс плагинов приложения «LoggerXP» (описание)

Версия интерфейса 5.1

Copyright © 2003 – 2010

Общие сведения

Приложение «LoggerXP» имеет программный интерфейс (API), через который оно способно взаимодействовать с плагинами (вернее бы сказать: плагины имеют этот API). В данном случае плагин – это обычная DLL, но имеющая в названии файла расширение «.lop» (logger plugin). При этом сам плагин должен экспортировать пять обязательных функций (процедур): RoexGetVersion, RoexGetInfo, RoexRun, RoexRelease, RoexSendNotify и одну необязательную: RoexShowOptionsDialog. В основе взаимодействия приложения с плагинами лежат несколько интерфейсов с определёнными идентификаторами GUID. Следует отметить, что это не имеет ни какого отношения к технологии COM. Благодаря использованию интерфейсов становиться возможным непосредственно из плагина обращаться к методам и компонентам форм, источникам данных и т. д..

Приложение «LoggerXP» написано в среде программирования (IDE) «Delphi 7». Все плагины лично мной также были написаны в этой IDE. Тестирование плагинов написанных в старших или младших версиях Delphi не производилось.

В разделе uses файла проекта плагина первым должен быть подключён модуль ShareMem. Пример показан ниже.

library QRZcom;

uses

ShareMem,

{…остальные модули };

{$E lop}

{$R *.res}

exports

RoexGetVersion, RoexGetInfo, RoexRun, RoexSendNotify, RoexRelease,

RoexShowOptionsDialog;

begin

end.

Экспортируемые плагинами процедуры и функции

И так. Каждый плагин должен иметь ряд экспортируемых процедур и функций, через которые и происходит «общение» приложения с плагином (а вот «общение» плагина с приложением, как уже было сказано выше, осуществляется через интерфейсы). Рассмотрим эти процедуры и функции.

НЕ нашли? Не то? Что вы ищете?

После того, как плагин загружен приложением в память вызывается процедура:

procedure RoexGetInfo(PlugInfo: PPlugInfo); stdcall;

В параметре PlugInfo передаётся указатель на структуру TPlugInfo. Эта структура объявлена следующим образом:

{ Структура информации о плагине }

PPlugInfo = ^TPlugInfo;

TPlugInfo = packed record

lpName : PChar; // имя плагина

lpCopyright: PChar; // авторские права

lpDescript : PChar; // описание плагина

bGUI : Boolean; // True, если плагин должен загружаться только по команде меню

end;

Здесь:

lpName – имя плагина, которое будет отображаться в меню, в окне управления плагинами приложения и в окне «О плагине…»;

lpCopyright – авторские права отображаемые в окне «О плагине…»;

lpDescript – краткое описание плагина отображаемое в окне «О плагине…»;

bGUI – если плагин должен загружаться по команде меню (пользователем), то это значение должно быть True. Имя плагина в данном случае будет помещено в меню «Плагины» главного окна приложения. Если это значение False, то плагин будет загружаться автоматически во время загрузки приложения. При этом имя плагина в меню не помещается.

Далее идёт вызов функции:

function RoexGetVersion: Integer; stdcall;

Она должна возвращать константу с минимальным номером версии API, на которую рассчитан плагин: PLUG_VERSION = 51; // версия интерфейса плагина

Я оставляю за собой право увеличивать это значение по мере усовершенствования интерфейсов (добавление в них новых процедур функций и т. д.).

Функция

function RoexRun(PlugData: PPlugData; const hHandle: THandle): THandle; stdcall;

вызывается приложением при запуске плагина на выполнение. В теле этой функции могут создаваться экземпляры форм, классов, выделяться ссылки и т. д. Функция имеет два параметра:

PlugData – указатель на структуру TPlugData;

hHandle – хэндл загруженного приложением плагина. Этот параметр передаётся из приложения в плагин и будет нужен для целей описанных ниже.

Если в теле этой функции создаётся экземпляр главной формы плагина, то она должна обязательно возвращать хэндл этой формы. Иначе – 0. Например, в плагине пишем:

function RoexRun(PlugData: PPlugData; const hHandle: THandle): THandle; stdcall;

begin

Result := 0;

hPlugin := hHandle;

if bIsRun then Exit;

hOldApp := Application. Handle;

Application. Handle := TApplication(PlugData^.MainForm. Application).Handle;

MainForm := TMainForm. CreateParented(Application. Handle);

Result := MainForm. Handle;

bIsRun := True;

end;

Если форма не является модальной и вы желаете сделать её непотопляемой (т. е. она должна быть всегда поверх главного главного окна приложения), то для формы необходимо переопределить метод CreateParams.

procedure TMainForm. CreateParams(var Params: TCreateParams);

begin

inherited;

{ Форма всегда поверх родительской. }

with Params do

WndParent := hParent;

end;

Здесь hParent := TForm(PlugData^.MainForm. Form).Handle;

Так как созданная форма плагина не добавляется в объект TScreen, то при сворачивании главного окна приложения эта форма остаётся на экране монитора. Чтобы решить эту проблему в приложении был создан специальный менеджер управления окнами. Именно через функцию RoexRun хэндл формы плагина добавляется в этот менеджер. Если форма после своего закрытия не уничтожается, а просто скрывается то, чтобы она не отображалась вновь при разворачивании главного окна приложения (если оно было ранее свёрнуто на панель задач) в конструкторе Create формы всегда следует писать:

procedure TMainForm. FormCreate(Sender: TObject);

begin

SetProp(Handle, PChar(RX_WS), 1);

end;

Здесь RX_WS: String = '{8E5FED9-92FD-0E509B91320F}'; То же самое следует писать и в обработчиках событий FormShow, FormClose или FormHide:

procedure TMainForm. FormShow(Sender: TObject);

begin

SetProp(Handle, PChar(RX_WS), 2);

end;

В данном случае константа 2 показывает, что форма отображена на экране.

procedure TMainForm. FormClose(Sender: TObject; var Action: TCloseAction);

begin

SetProp(Handle, PChar(RX_WS), 1);

end;

Никогда не вызывайте для экземпляра главной плагина формы метод Free, если только форма не модальная. Это должно делаться только в процедуре RoexRelease, описанной ниже. Если всё-таки нужно уничтожить экземпляр формы при её закрытии, то в обработчике события FormClose следует написать:

{ Посылаем сообщение родительскому окну о необходимости очистить

память. При этом, будет вызвана процедура RoexRelease. }

PostMessage(hParent, RX_RELEASE, Integer(RX_WPARAM), Integer(hPlugin));

Здесь:

RX_RELEASE = WM_USER + 132;

RX_WPARAM: String = '{03B9C4A7-74B5-4657-A887-F6F4B031168F}';

При этом процедура RoexRelease будет вызвана автоматически.

Процедура

procedure RoexRelease; stdcall;

вызывается приложением перед выгрузкой плагина. В теле этой процедуры можно освобождать выделенную ранее (в теле функции RoexRun) память и т. д.

Функция

function RoexSendNotify(const wMess, wParam: Word): WordBool; stdcall;

вызывается приложением, чтобы передать плагину какое-то событие. Возвращаемый результат этой функции может обрабатываться приложением. Если он имеет значение True, то плагин может перекрыть некоторые функции приложения (в основном команды меню) и взять управление «на себя».

Функция имеет два параметра передаваемых приложением:

wMess – тип сообщения. Может принимать одну из следующих констант:

SN_NONE = 0; // нет события

SN_NOTIFY = 1; // событие (код события при этом в параметре wParam)

SN_FORMCREATE = 2; // создание интерфейсной формы

SN_FORMDESTROY = 3; // удаление интерфейсной формы

SN_CLICKMENUFORM = 4; // щелчёк по кнопке меню

Если wMess равен SN_FORMCREATE или SN_FORMDESTROY, то параметр wParam имеет одно из следующих значений:

SNP_NEWQSOFORM = 1; // окно "новое QSO"

SNP_DXCLFORM = 2; // окно "DX-кластер"

SNP_CWFORM = 3; // окно "Телеграф"

SNP_CALLBOOKFORM = 4; // окно "база данных позывных"

SNP_SENDSPOTFORM = 5; // окно "Передать спот"

SNP_AWARDSFORM = 6; // окно "Дипломы"

SNP_QSLVIAFORM = 7; // окно "QSL-менеджеры"

SNP_AUDIOCENTERFORM = 8; // окно "Аудиоцентр"

SNP_ANTENNASFORM = 9; // окно "Управление антеннами"

SNP_MAPFORM = 10; // окно "Карты"

SNP_QSLPRINTFORM = 11; // окно "Печать QSL"

SNP_AWSTFORM = 12; // окно "Статистика по дипломам"

SNP_PREFLISTFORM = 13; // окно "База данных префиксов"

Например, если вам нужно отловить момент создания формы «Новое QSO», то нужно написать:

function RoexSendNotify(const wMess, wParam: Word): WordBool; stdcall;

begin

Result := False;

if (wMess = SN_FORMCREATE) and (wParam = SNP_NEWQSOFORM) then

begin

// Здесь что-то с этим делаем

//…

end;

end;

С параметром wMess равным SN_CLICKMENUFORM передаётся одно из следующих значений wParam:

SNP_IMPORT = 14; // команда меню "Импорт данных"

SNP_EXPORT = 15; // команда меню "Экспорт данных"

SNP_EDITFORM = 16; // команда меню "Редактирование"

SNP_DOCPROPFORM = 17; // команда меню "Свойства документа"

SNP_PREVIEWFORM = 18; // команда меню "Предварительный просмотр"

SNP_DXCCSTATFORM = 19; // команда меню "Статистика по странам"

SNP_MAPSFORM = 20; // команда меню "Карты"

SNP_SHOWTOMAP = 21; // команда меню "Показать на карте"

SNP_SEARCHINCLBK = 22; // команда меню "Найти в колбуках"

SNP_REFRESHQSOINFO = 23; // команда меню "Обновление информации о позывном" в окне "Новое QSO"

SNP_AWARDVIEWFORM = 24; // команда меню "Просмотр редактирование дипломных программ"

SNP_DXCLUSTERCONN = 25; // нажатие кнопки подключения к кластеру

SNP_DXCLUSTERDISCONN = 26; // нажатие кнопки отключения от кластера

SNP_DCCLUSTEREDIT = 27; // редактирование списка кластеров

SNP_SENDALLTOEQSL = 28; // отправить все QSO на eQSL

SNP_SENDSELTOEQSL = 29; // отправить только выбранные QSO на eQSL

В этом случае из функции RoexSendNotify вы можете возвратить True, чтобы перехватить управление на себя. Например, в плагине пишем:

function RoexSendNotify(const wMess, wParam: Word): WordBool; stdcall;

begin

Result := False;

if (wMess = SN_CLICKMENUFORM) and (wParam = SNP_EXPORT) then

begin

Result := True;

// Здесь показываем своё окно для экспорта данных

//…

end;

end;

С пареметром wMess равным SN_NOTIFY передаётся одно из следующих значений wParam:

SNPN_ADDNEWQSO = 4; // добавление в журнал новой записи

SNPN_TXRX = 5; // переключение приём/передача

SNPN_DXRSDSPOT = 6; // получение спота из DX-кластера

SNPN_QSOREPEAT = 7; // проверка повторов

SNPN_CWSEND = 8; // передача CW

SNPN_SEARCHCALLBOOK = 9; // поиск в колбуках

SNPN_MAINTABS = 10; // переключение закладок в главном окне

SNPN_NAMECHANGE = 11; // ввод имени

SNPN_QTHCHANGE = 12; // ввод QTH

SNPN_CALLSIGNCHANGE = 13; // ввод позывного

SNPN_BANDCHANGE = 14; // смена диапазона

SNPN_MODECHANGE = 15; // смена вида модуляции

SNPN_RSTTCHANGE = 16; // ввод рапорта

SNPN_RSTRCHANGE = 17; // ввод рапорта

SNPN_QSLVIACHANGE = 18; // ввод QSL-менеджера в окно "Новое QSO"

SNPN_DATASETOPEN = 19; // DataSet AfterOpen

SNPN_DATASETCLOSE = 20; // DataSet AfterClose

SNPN_DXSPOTTOQSOWND = 21; // перенос спота в окно "Новое QSO"

SNPN_AWARDSANALISER = 22; // анализ дипломных программ для нового QSO

SNPN_DELETEQSO = 23; // удаление одного QSO

SNPN_DELETESELQSO = 24; // удаление нескольких выбранных QSO

SNPN_SETFREQ = 25; // установка частоты

SNPN_CONFIGCHANGE = 26; // изменение настроек приложения

SNPN_QSLVIASEARCH = 27; // поиск QSL - менеджера в окне "QSL - менеджеры"

SNPN_OPENDOCUMENT = 28; // открытие документа

SNPN_SAVEDOCUMENT = 29; // сохранение документа

SNPN_UNIONLOGS = 30; // объединение журналов

SNPN_ERRUNIONLOGS = 31; // ошибка объединения журналов

SNPN_DELETELOG = 32; // удаление журнала

SNPN_ERRDELETELOG = 33; // ошибка удаления журнала

SNPN_MAPSTABS = 34; // щелчок по закладкам окна "Карты"

SNPN_CALLBOOKTABS = 35; // щелчок по закладкам окна "База данных позывных"

SNPN_DXCLASTERTABS = 36; // щелчок по закладкам окна "DX-кластер"

SNPN_EXITCALLFLD = 37; // выход курсора из поля "Позывной" окна "Новое QSO"

SNPN_VIEWTOMAP = 38; // запрос положения на карте

SNPN_FILLAWARD = 39; // начало автозаполнения дипломной программы

SNPN_CREATABACKUP = 40; // создание резервной копии журнала

SNPN_DXCLUSTERCONFCHG = 41; // изменение настроек кластера

SNPN_DXSENDSPOT = 42; // передача спота

SNPN_DXCLEARSPOTS = 43; // очистка принятых спотов

Есть ещё одна необязательная процедура:

procedure RoexShowOptionsDialog(const hHwnd: THandle); stdcall;

Она должна присутствовать в плагине, если необходимо в нём иметь окно с опциями (настройками). Например:

procedure RoexShowOptionsDialog(const hHwnd: THandle);

begin

with TOptionForm. CreateParented(hHwnd) do

try

ShowModal;

finally

Free;

end;

end;

Интерфейсы

Теперь рассмотрим более подробно структуру TPlugData передаваемую в параметре функции

RoexRun. Все члены структуры являются интерфейсами, через которые и происходит взаимодействие плагина с приложением. Как уже было сказано выше, это позволяет иметь полное или частичное (ограниченное тем или иным интерфейсом) взаимодействие плагина с формами и компонентами приложения. Структура TPlugData объявлена следующим образом:

PPlugData = ^TPlugData;

TPlugData = packed record

Config : IConfig;

Document : IDocument;

ExData : IExData;

Logs : ILogs;

Repiats : IRepiats;

Transceiver : ITransceiver;

MainForm : IMainForm;

NewQSOForm : INewQSOForm;

DxClusterForm: IDxClusterForm;

SendSpotForm : ISendSpotForm;

CWForm : ICWForm;

CallBookForm : ICallBookForm;

QSLViaForm : IQSLViaForm;

AwardsForm : IAwardsForm;

MapsForm : IMapsForm;

QSLPrintForm : IQSLPrintForm;

AntennasForm : IAntennasForm;

end;

Перед использованием каждого члена данной структуры он должен быть предварительно проверен на nil!

Интерфейс IConfig

Интерфейс IConfig предназначен для доступа к конфигурации (настройкам) приложения. Все свойства интерфейса в основном имеют права только на чтение. Интерфейс объявлен следующим образом:

IConfig = interface

['{164ECBD2-DFE9-40B1-9C07-F14E7374B935}']

function GetBandIndex: Integer;

function GetModeIndex: Integer;

procedure SetBandIndex(const Value: Integer);

procedure SetModeIndex(const Value: integer);

function GetBandName: String;

function GetModeName: String;

function GetConfigPath: String;

function GetProfilePath: String;

function GetPluginsDataPath: String;

function GetUserLat: Double;

procedure SetUserLat(const Value: Double);

function GetUserLong: Double;

procedure SetUserLong(const Value: Double);

property BandIndex: Integer read GetBandIndex write SetBandIndex;

property ModeIndex: Integer read GetModeIndex write SetModeIndex;

property BandName: String read GetBandName;

property ModeName: String read GetModeName;

property ProfilePath: String read GetProfilePath;

property ConfigPath: String read GetConfigPath;

property PluginsDataPath: String read GetPluginsDataPath;

property UserLat: Double read GetUserLat write SetUserLat;

property UserLong: Double read GetUserLong write SetUserLong;

function GetInsertColor: TColor;

function GetSelectedColor: TColor;

property InsertColor: TColor read GetInsertColor;

property SelectedColor: TColor read GetSelectedColor;

function GetFontColor: TColor;

function GetFontName: TFontName;

function GetFontSize: Integer;

function GetFontStyle: TFontStyles;

property FontName: TFontName read GetFontName;

property FontSize: Integer read GetFontSize;

property FontStyle: TFontStyles read GetFontStyle;

property FontColor: TColor read GetFontColor;

function GetToolbarStyle: Integer;

property ToolbarStyle: Integer read GetToolbarStyle;

function GetImageStyle: String;

property ImageStyle: String read GetImageStyle;

function GeteQSLLogin: String;

property eQSLLogin: String read GeteQSLLogin;

function GeteQSLPSW: String;

property eQSLPSW: String read GeteQSLPSW;

function GeteQSLProxyHost: String;

property eQSLProxyHost: String read GeteQSLProxyHost;

function GeteQSLProxyPort: Integer;

property eQSLProxyPort: Integer read GeteQSLProxyPort;

function GeteQSLProxyLogin: String;

property eQSLProxyLogin: String read GeteQSLProxyLogin;

function GeteQSLProxyPsw: String;

property eQSLProxyPsw: String read GeteQSLProxyPsw;

function GeteQSLProxyEnable: Boolean;

property eQQSProxyEnable: Boolean read GeteQSLProxyEnable;

function GeteQSLReadTimeout: Integer;

property eQSLReadTimeout: Integer read GeteQSLReadTimeout;

function GetProxyBasicAuthentication: Boolean;

property ProxyBasicAuthentication: Boolean read GetProxyBasicAuthentication;

function GetGQSLLogin: String;

property GQSLLogin: String read GetGQSLLogin;

function GetGQSLPSW: String;

property GQSLPSW: String read GetGQSLPSW;

function GetGQSLReadTimeout: Integer;

property GQSLReadTimeout: Integer read GetGQSLReadTimeout;

function GetPluginsInterfaceVersion: Integer;

function GetInternalExplorer: Boolean;

property InternalExplorer: Boolean read GetInternalExplorer;

function GetInternalMailClient: Boolean;

property InternalMailClient: Boolean read GetInternalMailClient;

function SaveConfig: Boolean;

end;

BandIndex

Текущий индекс диапазона. Индекс изменяется при смене диапазона в окне «Новое QSO» или через CAT.

ModeIndex

Текущий индекс вида модуляции. Индекс изменяется при смене вида модуляции в окне «Новое QSO» или через CAT.

BandName

Текущее имя диапазона (например, 1.8 МГц). Имя изменяется при смене диапазона в окне «Новое QSO» или через CAT.

ModeName

Текущее имя вида модуляции (например, SSB). Имя изменяется при смене вида модуляции в окне «Новое QSO» или через CAT.

ProfilePath

Путь к текущему профилю пользователя. Например, c:\Documents and Settings\Admin\Application Data\RS SoftX\loggerxp\Profiles\{E6596DAF-55B2-45CE-9F86-28BFF990A084}

ConfigPath

Путь к корневой папке конфигурации приложения. Например, c:\Documents and Settings\Admin\Application Data\RS SoftX\loggerxp

PluginsDataPath

Путь к папке конфигурации и данных плагинов. Например, c:\Documents and Settings\Admin\Application Data\RS SoftX\loggerxp\Plugins Data

UserLat

Географическая широта пользователя, заданная по умолчанию в редакторе настроек.

UserLong

Географическая долгота пользователя, заданная по умолчанию в редакторе настроек.

InsertColor

Цвет выбранных записей таблиц.

SelectedColor

Цвет отмеченных QSO главной таблицы приложения.

FontName

Имя шрифта таблиц.

FontSize

Размер шрифта таблиц.

FontStyle

Стиль шрифта таблиц.

FontColor

Цвет шрифта таблиц.

ToolbarStyle

Стиль меню и панелей.

ImageStyle

Имя темы кнопок (изображений на них).

eQSLLogin

Логин для доступа к eQSL. Хранится в зашифрованном виде с использованием 96-битного шифрования.

eQSLPSW

Пароль для доступа к eQSL. Хранится в зашифрованном виде с использованием 96-битного шифрования.

eQSLProxyHost

Имя хоста прокси – сервера. Данное название свойства оставлено из-за соображения совместимости с предыдущими версиями когда прокси – сервер использовался только для eQSL.

eQSLProxyPort

Номер порта прокси – сервера. Данное название свойства оставлено из-за соображения совместимости с предыдущими версиями когда прокси – сервер использовался только для eQSL.

eQSLProxyLogin

Логин для доступа к прокси – серверу. Хранится в зашифрованном виде с использованием 96-битного шифрования. Данное название свойства оставлено из-за соображения совместимости с предыдущими версиями когда прокси – сервер использовался только для eQSL.

eQSLProxyPsw

Пароль для доступа к прокси – серверу. Хранится в зашифрованном виде с использованием 96-битного шифрования. Данное название свойства оставлено из-за соображения совместимости с предыдущими версиями когда прокси – сервер использовался только для eQSL.

eQQSProxyEnable

Используется ли к прокси – сервер или нет. Данное название свойства оставлено из-за соображения совместимости с предыдущими версиями когда прокси – сервер использовался только для eQSL.

eQSLReadTimeout

Время ожидания данных с eQSL.

ProxyBasicAuthentication

Прокси – сервер требует логин и пароль.

GQSLLogin

Логин для доступа к Gold QSL. Хранится в зашифрованном виде с использованием 96-битного шифрования.

GQSLPSW

Пароль для доступа к Gold QSL. Хранится в зашифрованном виде с использованием 96-битного шифрования.

GQSLReadTimeout

Время ожидания данных с Gold QSL.

InternalExplorer

Если True, то используется внутренний Интернет – браузер.

GetPluginsInterfaceVersion

Функция возвращает текущий номер программного интерфейса

InternalMailClient

Если True, то используется внутренний почтовый клиент.

SaveConfig

Процедура сохраняет конфигурацию.

Интерфейс IRoexForm

Все формы приложения описанные структурой TPlugData наследуют этот интерфейс.

IRoexForm = interface

['{8271DACDF-A47B-B7401CF3EA30}']

function GetForm: Pointer;

{ TForm }

property Form: Pointer read GetForm;

end;

Свойство GetForm возвращает указатель на саму форму. Используется, например, так:

if pPlugData^.DxClusterForm <> nil then

TForm(pPlugData^.DxClusterForm).Form. Caption := ‘Это работает плагин’;

Интерфейс ITab

Формы приложения описанные структурой TPlugData и способные создавать закладки (например, MainForm, MapForm, DXClusterForm и др.) наследуют этот интерфейс.

ITab = interface(IRoexForm)

['{303100F1-F0B7-45E8-ABB9-492C778B6DC7}']

function GetTabIndex: Integer;

function CreateTab(const ACaption: String; const PlugHandle: THandle): THandle;

procedure DeleteTab(const Hndl: THandle);

procedure ShowTabImage(const Hndl: THandle; const ShowImage: Boolean);

{ TCustomControl }

function GetTab: Pointer;

property TabIndex: Integer read GetTabIndex;

procedure SetActiveTab(const Hndl: THandle);

function GetTabOfHandle(const Hndl: THandle): Pointer;

end;

Свойство TabIndex возвращает индекс текущей активной закладки. Для первой закладки – это ноль.

Функция CreateTab создаёт новую закладку.

Здесь:

ACaption – текст заголовка закладки;

PlugHandle – хэндл плагина создающего закладку. Этот параметр используется только в том случае, если закладка создаётся у главного окна приложения.

Функция CreateTab возвращает хэндл только, что созданной закладки. Далее значение возвращённое этой функцией должно быть использовано при вызове DeleteTab (удаляет закладку), ShowTabImage (показывает изображение в заголовке (только для окна CallBookForm)), SetActiveTab (устанавливает активную закладку, если ноль, то это первая закладка), GetTabOfHandle (возвращает указатель типа TCustomControl на закладку с данным хэндлом).

Функция GetTab возвращает указатель типа TCustomControl на текущую активную закладку.

Интерфейс IMainForm

Данный интерфейс позволяет получить доступ к главной форме приложения, к объектам TApplication, TScreen и к другим объектам и компонентам этой формы.

IMainForm = interface(ITab)

['{E91BB80E-E0F6-4AC8F5120D1}']

function GetApplication: Pointer;

function GetScreen: Pointer;

function GetCurrentDBGrid: Pointer;

function GetRepiatDBGrid: Pointer;

function GetStatusBarText(const Index: Integer): String;

function GetMenu: Pointer;

procedure SetStatusBarText(const Index: Integer; const Value: String);

{ TApplication }

property Application: Pointer read GetApplication;

{ TScreen }

property Screen: Pointer read GetScreen;

{ TDBGrid }

property CurrentDBGrid: Pointer read GetCurrentDBGrid;

{ TDBGrid }

property RepiatDBGrid: Pointer read GetRepiatDBGrid;

{ TStrings }

property Menu: Pointer read GetMenu;

function AddStatusBarPanel(const AWidth: Integer; const AText: String): Integer;

procedure DeleteStatusBarPanel(const Index: Integer);

function GetConnection: Pointer;

function GetCurrentDataSet: Pointer;

{ TADOConnection }

property Connection: Pointer read GetConnection;

{ TDataSet }

property CurrentDataSet: Pointer read GetCurrentDataSet;

procedure DataFormsConnected(const Connected: Boolean);

{ TClientDataSet}

function GetReportDataSet: Pointer;

property ReportDataSet: Pointer read GetReportDataSet;

procedure ViewFilterStatus;

procedure ViewRecordCount;

procedure EQSLConfirmNew;

procedure EQSLConfirmAll;

procedure ShowMCHint(const Text: String);

procedure CreateBackupDataBase;

end;

SetStatusBarText

Процедура выводит текст на панель с индексом Index строки состояния.

Application

Указатель на объект T Application.

Screen

Указатель на объект TScreen.

CurrentDBGrid

Свойство возвращает указатель на текущую таблицу

RepiatDBGrid

Свойство возвращает указатель на таблицу повторных QSO

Menu

Свойство возвращает указатель типа TStrings. Будет рассмотрено ниже.

AddStatusBarPanel

Функция добавляет новую панель в строку состояния. В настоящий момент не реализована.

DeleteStatusBarPanel

Процедура удаляет панель из строки состояния. В настоящий момент не реализована.

Connection

Указатель на компонент TADOConnection.

CurrentDataSet

Указатель на объект TDataSet. Возвращает текущий DataSet, в зависимости от текущего документа: журнал или архив.

DataFormsConnected

Если Connected = False, то процедура отключает всех потребителей от источника данных.

ReportDataSet

Указатель возвращает TClientDataSet отчёта.

ViewFilterStatus

Процедура выводит текущий статус фильтра в строку состояния.

ViewRecordCount

Процедура выводит количество записей в строку состояния.

EQSLConfirmNew

Процедура запускает процесс подтверждения новых QSO имеющихся на eQSL.

EQSLConfirmAll

Процедура запускает процесс подтверждения всех QSO имеющихся на eQSL.

ShowMCHint

Процедура отображает всплывающее сообщение в системном трее Windows. В настоящий момент не реализована.

CreateBackupDataBase

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

Как уже было сказано, интерфейс имеет свойство Menu в виде указателя на объект TStrings. Это свойство имеется также в интерфейсе IDxClusterForm. По сути дела это список команд создаваемых плагинами в меню «Плагины» главного окна приложения и контекстного меню. Пример создания пункта меню (команды) показан ниже.

const

RX_COMMAND_NAME = ‘Это команда меню созданного плагином’;

var

sCommandName: String = RX_COMMAND_NAME;

procedure CreateMenu;

var

i, iCount: Integer;

begin

{ Создаём пункт меню, при этом проверяем его уникальность.

Если такое имя уже есть, то к немуу добавляем цифру и проверяем вновь. }

if pPlugData^.MainForm <> nil then

with TStrings(pPlugData^.MainForm. Menu) do

begin

iCount := Count - 1;

for i := 0 to iCount do

if AnsiSameText(TStrings(pPlugData^.MainForm. Menu)[i], sCommandName) then

sCommandName := RX_COMMAND_NAME + ' ' + IntToStr(i + 1);

TStrings(pPlugData^.MainForm. Menu).Add(sCommandName);

end;

end;

Когда пользователь в приложении выбирает команду меню с именем RX_COMMAND_NAME, то всем плагинам посылается сообщение RX_COMMAND. При этом переменная Message. WParam будет содержать значение RX_COMMAND_NAME. Чтобы другие плагины не реагировали на эту команду, значение RX_COMMAND_NAME должно быть уникальным. Как раз уникальность и проверяется в выше приведённом примере.

Если команда меню создана, то её необходимо и обрабатывать. Сообщение RX_COMMAND должно обрабатываться только в форме. При этом форма должна быть постоянно создана, но показывать её не обязательно. В разделе private формы следует определить обработчик сообщения:

procedure RXCommand(var Message: TMessage); message RX_COMMAND;

Здесь RX_COMMAND = WM_USER + 134;

Далее в теле процедуры пишем:

procedure TMainForm. RXCommand(var Message: TMessage);

begin

with Message do

if String(WParam) = sCommandName then

{ Здесь что-то делаем… };

end;

Когда плагин выгружается, созданную команду меню следует удалять:

procedure DeleteMenu;

begin

{ Удаляем себя из меню. }

if pPlugData^.MainForm <> nil then

with TStrings(pPlugData^.MainForm. Menu) do

Delete(IndexOf(sCommandName));

end;

Интерфейс IDocument

Интерфейс позволяет осуществлять доступ к некоторым свойствам текущего документа (журнал, архив, отчёт) и к компонентам TOpenDialog, TSaveDialog.

IDocument = interface

['{5C9FAF21-D72F-46D9-ABAE-112AD6566634}']

{ TOpenDialog }

function GetOpenDocumentDialog: Pointer;

property OpenDocumentDialog: Pointer read GetOpenDocumentDialog;

{ TSaveDialog }

function GetSaveDocumentDialog: Pointer;

property SaveDocumentDialog: Pointer read GetSaveDocumentDialog;

function GetDocPath: String;

property DocPath: String read GetDocPath;

function GetDocType: TDocType;

function GetCurrentDocName: String;

end;

Свойство DocPath возвращает путь к файлу текущего документа. Если это журнал, то DocPath = ‘’.

Функция GetDocType возвращает тип текущего документа.

TDocType = (dtLog, dtArchive, dtReport, dtOther);

И последняя функция GetCurrentDocName возвращает имя текущего документа.

Интерфейс INewQSOForm

Интерфейс позволяет осуществить доступ к окну «Новое QSO». Назначение свойств вполне понятно из объявления интерфейса. Процедура SetVisible управляет видимостью формы без генерации событий OnHide и OnShow.

INewQSOForm = interface(IRoexForm)

['{ED48A729-418D-4DF0-8BEC-B54EE6F3772E}']

function GetBandField: Pointer;

function GetModeField: Pointer;

function GetCallsignField: Pointer;

function GetQTHField: Pointer;

function GetNameField: Pointer;

function GetRSTTField: Pointer;

function GetRSTRField: Pointer;

function GetQSLViaField: Pointer;

procedure SetVisible(const Value: Boolean);

{ TComboBox }

property BandField: Pointer read GetBandField;

{ TComboBox }

property ModeField: Pointer read GetModeField;

{ TEdit }

property CallsignField: Pointer read GetCallsignField;

{ TComboBox }

property QTHField: Pointer read GetQTHField;

{ TComboBox }

property NameField: Pointer read GetNameField;

{ TEdit }

property RSTTField: Pointer read GetRSTTField;

{ TEdit }

property RSTRField: Pointer read GetRSTRField;

{ TEdit }

property QSLViaField: Pointer read GetQSLViaField;

{ TEdit }

function GetQTHLocField: Pointer;

property QTHLocField: Pointer read GetQTHLocField;

end;

Интерфейс IExData

Интерфейс позволяет осуществлять доступ к дополнительным источникам данных приложения таким как, список префиксов, список регулярных выражений префиксов, список QSL-менеджеров и QSL-бюро. Кроме того имеет процедуры, свойства и функции облегчающие работу с этим интерфейсом.

IExData = interface

['{873F0EF0-C4D-DD870BAAA4BD}']

function GetConnection: Pointer;

function GetPrefixesDataSet: Pointer;

function GetRegExpDataSet: Pointer;

function GetQSLViaDataSet: Pointer;

function GetQSLBuroDataSet: Pointer;

function GetFreqModeMapDataSet: Pointer;

function GetTimeZone: Double;

function GetQSLVia(Callsign: String): String;

function GetQSLBuro(Callsign: String): String;

function GetFreqModeMap(const Freq: Integer; out Mode, Band: String): Boolean;

{ TADOConnection }

property Connection: Pointer read GetConnection;

{ TADOQuery }

property PrefixesDataSet: Pointer read GetPrefixesDataSet;

{ TADOQuery }

property RegExpDataSet: Pointer read GetRegExpDataSet;

{ TADOQuery }

property QSLViaDataSet: Pointer read GetQSLViaDataSet;

{ TADOQuery }

property QSLBuroDataSet: Pointer read GetQSLBuroDataSet;

{ TADOQuery }

property FreqModeMapDataSet: Pointer read GetFreqModeMapDataSet;

property TimeZone: Double read GetTimeZone;

function AddNewQSLVia(Callsign, Manager: String; Note: String = '';

ShowException: Boolean = True): Boolean;

function GetCurrentStdCallsign: String;

property CurrentStdCallsign: String read GetCurrentStdCallsign;

function GetCallsignInfo(Callsign: String; var IsFind: Boolean;

const ShortMode: Boolean = False): TCallsignInfo; overload;

function GetCallsignInfo(Callsign: String; QSODate: TDateTime;

var IsFind: Boolean; const ShortMode: Boolean = False): TCallsignInfo; overload;

procedure ShowDataEditor(DataSet: Pointer);

end;

GetQSLVia

Функция возвращает позывной QSL-менеджера для позывного Callsign.

GetQSLBuro

Функция возвращает адрес QSL-бюро для позывного Callsign.

GetFreqModeMap

Функция в параметрах Mode и Band возвращает вид модуляции и название диапазона для частоты Freq согласно сетке распределения частот и видов модуляций.

Connection

Указатель на объект типа TADOConnection, который подключён к базе данных dataex. mdb.

PrefixesDataSet

Указатель на объект типа TADOQuery – список префиксов стран.

RegExpDataSet

Указатель на объект типа TADOQuery – список регулярных выражений для префиксов стран.

QSLViaDataSet

Указатель на объект типа TADOQuery – список QSL-менеджеров.

QSLBuroDataSet

Указатель на объект типа TADOQuery – список QSL-бюро.

FreqModeMapDataSet

Указатель на объект типа TADOQuery – сетка частот и видов модуляций.

TimeZone

Временная зона для текущего позывного, для которого получается информация.

AddNewQSLVia

Функция добавляет QSL-менеджера для позывного Callsign. Если параметр Manager = ‘’, то менеджер для этого позывного удаляется.

CurrentStdCallsign

Текущий позывной, для которого получается информация. При этом префикс позывного заменяется на DXCC-префикс. Например, RA3GBV будет заменён на UA3GBV.

GetCallsignInfo

Функция возвращает информацию о позывном. Структура TCallsignInfo описана ниже. Если параметр ShortMode = True, то возвращаются только основные данные (DXCC, Континент).

ShowDataEditor

Процедура отображает редактор данных. В параметре DataSet передаётся указатель на редактируемый объект типа TDataSet.

{ Информация о позывном }

TCallsignInfo = record

dLat, dLong: Double; // широта и долгота корреспондента

dBearing : Double; // азимут корреспондента

dTimeZone : Double; // часовой пояс корресапондента

sTerritory : String; // название территории

sITU, sCQ : String; // зоны

sDXCC : String; // префикс DXCC

sContinent : String; // континент

sDistance : String; // расстояние до корреспондента

sManager : String; // QSL - менеджер корреспондента

sGrid : String; // QTH - локатор

end;

Интерфейс ILogs

Интерфейс позволяет читать имена таблиц журналов, имена журналов. Осуществляет доступ к DataSet текущего журнала (через свойство CurrentLog).

ILogs = interface

['{CC0BD663-AA79A-D849EC36424B}']

{ TStrings }

function GetTables: Pointer;

function GetCurrentTableName: String;

function GetCurrentLog: Pointer;

property CurrentTableName: String read GetCurrentTableName;

{ TADOQuery }

property CurrentLog: Pointer read GetCurrentLog;

procedure ContinentAndDXCCRepiat(const Continent, DXCC: String;

const AllLogs: Boolean; out Result1, Result2: Boolean);

procedure UpdateContinentDXCCRepiat;

end;

Функция GetTables возвращает указатель на объект типа TStrings, в котором находятся имена всех таблиц журналов. Процедура ContinentAndDXCCRepiat позволяет проверять континент и DXCC на повтор. Процедура UpdateContinentDXCCRepiat обновляет данные о повторах по континентам и DXCC.

Интерфейс IRepiats

Интерфейс позволяет осуществлять доступ к данным о повторных QSO. При помощи функции InstallRepeatFilter можно проверить позывной на повтор. При этом информация отобразиться в таблице повторных QSO главного окна приложения. Процедура Clear очищает эту таблицу.

IRepiats = interface

['{790046B9-392E-47AE-9303-2D6155A291FD}']

function GetDataSet: Pointer;

{ TADOQuery }

property DataSet: Pointer read GetDataSet;

function InstallRepeatFilter(const TableName, ID, Callsign: String; NotOne, AllLogs: Boolean): Boolean;

procedure Clear;

end;

Интерфейс IDxClusterForm

Интерфейс позволяет осуществлять доступ к данным и компонентам окна «DX-кластер».

IDxClusterForm = interface(ITab)

['{E0BEF533-518B-4E26-A724-6A2B3254ACF9}']

{ TMemo }

function GetTerminal: Pointer;

property Terminal: Pointer read GetTerminal;

{ TIdTelnet }

function GetIdTelnet: Pointer;

property IdTelnet: Pointer read GetIdTelnet;

{ TDBGrid }

function GetDBGrid: Pointer;

property DBGrid: Pointer read GetDBGrid;

{ TClientDataSet }

function GetDataSet: Pointer;

procedure SetDataSet(Value: Pointer);

property DataSet: Pointer read GetDataSet write SetDataSet;

{ TStrings }

function GetMenu: Pointer;

property Menu: Pointer read GetMenu;

{ TStrings }

function GetClusterList: Pointer;

property ClusterList: Pointer read GetClusterList;

function GetClusterItemIndex: Integer;

property ClusterItemIndex: Integer read GetClusterItemIndex;

function GetSpotsStopped: Boolean;

property SpotsStopped: Boolean read GetSpotsStopped;

function GetSendSpotData: String;

property SendSpotData: String read GetSendSpotData;

{ Сообщение другим плагинам о приёме спота. }

procedure SendSpotNotify;

{ Переместить спот в окно "Новое QSO" }

procedure MoveSpot(Grid: Pointer);

{ Показать контекстное меню }

procedure ShowPopupMenu;

procedure ShowHiddedInfo(const Callsign: String; const Distance: Integer);

function GetStatusBarText(const Index: Integer): String;

procedure SetStatusBarText(const AText: String; const Index: Integer);

{ Опции кластера }

function GetSelectedColor1: TColor;

property _SelectedColor1: TColor read GetSelectedColor1;

function GetSelectedColor2: TColor;

property _SelectedColor2: TColor read GetSelectedColor2;

function GetAutoConnectToCluster: Boolean;

property _AutoConnectToCluster: Boolean read GetAutoConnectToCluster;

function GetClusterAutoScroll: Boolean;

property _ClusterAutoScroll: Boolean read GetClusterAutoScroll;

function GetClusterNotCarryComment: Boolean;

property _ClusterNotCarryComment: Boolean read GetClusterNotCarryComment;

function GetClusterMarkCarrying: Boolean;

property _ClusterMarkCarrying: Boolean read GetClusterMarkCarrying;

function GetMaxDistance: Integer;

property _MaxDistance: Integer read GetMaxDistance;

function GetSelectedSpotByDistance: Boolean;

property _SelectedSpotByDistance: Boolean read GetSelectedSpotByDistance;

end;

Terminal

Указатель на поле терминала TMemo.

IdTelnet

Указатель на компонент TIdTelnet.

DBGrid

Указатель на таблицу принятых спотов.

DataSet

Указатель на компонент TClientDataSet.

Menu

Указатель на объект TStrings – список команд меню. Работа с меню описана для интерфейса IMainForm.

ClusterList

Указатель на объект TStrings – список доступных кластеров.

ClusterItemIndex

Индекс выбранного кластера из списка кластеров ClusterList.

SpotsStopped

True, если приём спотов остановлен.

SendSpotData

Содержит передаваемую в кластер информацию.

SendSpotNotify

Вызов этой процедуры сообщает всем плагинам, что принят очередной спот.

MoveSpot

Процедура перемещает спот из таблицы в окно «Новое QSO». Параметр Grid – это указатель на таблицу принятых спотов. Может быть nil, но в этом случае перемещённый спот не выделиться цветом, если эта опция включена в настройках.

ShowPopupMenu

Отображает контекстное меню.

ShowHiddedInfo

Выводит информацию во всплывающем окне, если окно «DX-кластер» скрыто.

GetStatusBarText

Возвращает текст панели с индексом Index строки состояния. Index не может иметь значение более чем два.

SetStatusBarText

Задаёт текст панели с индексом Index строки состояния. Index не может иметь значение более чем два.

_SelectedColor1

Цвет выделенной строки при переносе спота в окно «Новое QSO».

_SelectedColor2

Цвет выделенной строки, если расстояние до DX больше заданного.

_AutoConnectToCluster

True, если включена опция автоматического подключения к выбранному кластеру.

_ClusterAutoScroll

True, если включена опция автопрокрутки принятых спотов в таблице.

_ClusterNotCarryComment

False, если запрещён перенос комментария при переносе спота в окно «Новое QSO».

_ClusterMarkCarrying

True, если включена опция выделения цветом спота в таблице при переносе его в окно «Новое QSO».

_MaxDistance

Максимальное расстояние, свыше которого принятый спот следует выделять цветом.

_SelectedSpotByDistance

True, если в опциях разрешено выделять принятый спот при превышении максимального расстояния.

Интерфейс ISendSpotForm

Этот интерфейс позволяет осуществлять доступ к окну передачи спота в кластер и к его и компонентам. Имеет два свойства в виде указателей на компоненты TEdit.

ISendSpotForm = interface(IRoexForm)

['{88927E51-1B4E-4D1EADBBFB14}']

function GetFreqField: Pointer;

function GetCommentField: Pointer;

{ TEdit }

property FreqField: Pointer read GetFreqField;

{ TEdit }

property CommentField: Pointer read GetCommentField;

end;

Интерфейс ITransceiver

Интерфейс обеспечивает доступ к системе управления трансивером через CAT или PTT. Управление через CAT возможно в том случае, если установлен соответствующий плагин.

ITransceiver = interface

['{EED75C00-F296-42CE-98E0-B70223D234AE}']

function GetTx: Boolean;

procedure SetTx;

procedure SetRx;

property Tx: Boolean read GetTx;

function GetFreq: Integer;

procedure SetFreq(const Value: Integer);

function GetOnFreqChange: TNotifyEvent;

procedure SetOnFreqChange(Value: TNotifyEvent);

property Freq: Integer read GetFreq write SetFreq;

property OnFreqChange: TNotifyEvent read GetOnFreqChange write SetOnFreqChange;

function GetPTTCW: Boolean;

procedure SetPTTCW(const Value: Boolean);

property PTTCW: Boolean read GetPTTCW write SetPTTCW;

function GetPTTCWPin: Integer;

procedure SetPTTCWPin(const Value: Integer);

property PTTCWPin: Integer read GetPTTCWPin write SetPTTCWPin;

function GetRigNumber: Integer;

procedure SetRigNumber(const Value: Integer);

property RigNumber: Integer read GetRigNumber write SetRigNumber;

end;

Tx

Если True, то трансивер в режиме передачи.

SetTx

Переводит трансивер на передачу.

SetRx

Переводит трансивер на приём.

Freq

Текущая частота.

OnFreqChange

Событие возникающее при смене частоты. Должна генерироваться CAT – плагином.

PTTCW

Разрешает или запрещает CW-манипуляцию через один порт совместно с CAT.

PTTCWPin

Номер ножки порта для передачи CW-манипуляции.

RigNumber

Номер управляемого через CAT трансивера 1 или 2.

Интерфейс ICWForm

Интерфейс обеспечивает доступ к окну «CW». Свойство TextInputMemo возвращает указатель на компонент TMemo – поле ввода передаваемого текста. Процедура SendText передаёт текст заданный в параметре Text. Если передача текста завершена то CwDone = True.

ICWForm = interface(IRoexForm)

['{7920EB5E-420C-481B-8DD7-560D53A37A7B}']

function GetCwDone: Boolean;

function GetTextInputMemo: Pointer;

procedure SendText(Text: String);

property CwDone: Boolean read GetCwDone;

{ TMemo }

property TextInputMemo: Pointer read GetTextInputMemo;

end;

Интерфейс ICallBookForm

Интерфейс обеспечивает доступ к окну «База данных позывных» и к его компонентам.

ICallBookForm = interface(ITab)

['{A8ED0729-B165-42AA-A40E-182B718D3ACF}']

function Find(const Callsign: String; out AName, QTH: String): Boolean;

procedure SetResult(const Value: Boolean);

procedure SetAName(const Value: String);

procedure SetQTH(const Value: String);

function GetResult: Boolean;

function GetAName: String;

function GetQTH: String;

function GetCallsign: String;

property Result: Boolean read GetResult write SetResult;

property Name: String read GetAName write SetAName;

property QTH: String read GetQTH write SetQTH;

property Callsign: String read GetCallsign;

end;

Функция Find осуществляет поиск по всем имеющимся колбукам (основной и плагины). Если позывной найден, то функция возвращает True. При этом в параметрах будут возвращены имя и QTH корреспондента. Если вы пишите плагин-колбук, то в теле функции RoexSendNotify должны обрабатывать сообщение SNPN_SEARCHCALLBOOK. При этом свойство Callsign возвращает позывной, который необходимо найти. Если в вашем плагине позывной найден, то свойству Result следует присвоить значение True. При необходимости следует свойствам имя и QTH присвоить соответствующие значения.

Интерфейс IQSLViaForm

Интерфейс обеспечивает доступ к окну «QSL – менеджеры». Пока в интерфейсе всего одно свойство – указатель на компонент TEdit поля ввода информации для поиска.

IQSLViaForm = interface(ITab)

['{402D5BD5-759F-4437-A679-0E260F18B9F2}']

{ TEdit }

function GetCallField: Pointer;

property CallField: Pointer read GetCallField;

end;

Интерфейс IAwardsForm

Интерфейс обеспечивает доступ к форме анализа дипломных программ. Эта форма отображается в виде таблицы в окне «Новое QSO».

IAwardsForm = interface(IRoexForm)

['{E2F7F72D-AB8A-4FB8-9C96-04A49CF97AE8}']

function GetAwardName: String;

procedure SetState(const Value: String);

function GetCallsign: String;

property AwardName: String read GetAwardName;

property Callsign: String read GetCallsign;

procedure Reload;

procedure SetResult(const Value: Boolean);

end;

AwardName

Имя текущего диплома, для которого ведётся анализ позывного.

Callsign

Анализируемый позывной.

Reload

Процедура перечитывает условия всех имеющихся дипломных программ.

Freq

Текущая частота.

SetResult

Процедура предназначена для принудительной установки результата анализа позывного на текущую дипломную программу.

Интерфейс IMapsForm

Интерфейс обеспечивает доступ к окну «Карты» и к егопроцедурам и свойствам.

IMapsForm = interface(ITab)

['{659B08E1-3C35-42BEF36C814D}']

procedure ClearCoordinates;

procedure ViewCallsignCoordinates(const Callsign: String);

function GetCallsign: String;

property Callsign: String read GetCallsign;

end;

Процедура ClearCoordinates очищает текущие координаты корреспондента. Процедура ViewCallsignCoordinates отображает координаты корреспондента с позывным Callsign. Свойство Callsign возвращает текущий позывной, координаты которого отображаются в данный момент.

Интерфейс IQSLPrintForm

Интерфейс обеспечивает доступ к окну «Печать QSL – карточек», к его компонентам и процедурам.

IQSLPrintForm = interface(IRoexForm)

['{5DAFFF0B-9BB0-4FD2-BE85-23CDC43F6724}']

function GetDBGrid: Pointer;

property DBGrid: Pointer read GetDBGrid;

function GetDataSet: Pointer;

property DataSet: Pointer read GetDataSet;

procedure SendToeQSL(const AOnlySelected: Boolean);

procedure RefreshData;

procedure RemoveFromQSLSend;

procedure Printed(const Selected: Boolean);

end;

DBGrid

Возвращает указатель на таблицу окна.

DataSet

Возвращает указатель на TDataSet, содержащий данные.

SendToeQSL

Процедура отправляет QSO на сервер eQSL.

RefreshData

Процедура обновляет данные в таблице главного окна приложения.

RemoveFromQSLSend

Процедура удаляет все QSO, для которых карточки были отправлены или напечатаны.

Printed

Процедура отображает окно предварительного просмотра/печати.

Интерфейс IAntennasForm

Интерфейс обеспечивает доступ к окну управления антеннами, к его компонентам, процедурам и свойствам.

IAntennasForm = interface(IRoexForm)

['{CD147B15-B8B1-48EC-AA2CCF34C}']

{ TEdit }

function GetAzimutField: Pointer;

property AzimutField: Pointer read GetAzimutField;

procedure RotationByBearing(const Bearing: Double);

procedure Rotation(const Direction: Byte);

procedure Switch(const Index: Integer);

procedure ClearANTData;

procedure SendANTData(const Mode, Callsign, DXCC, Cont: String; const ID, Dist, Az: Integer);

procedure GetSpots(DataSet: Pointer);

function GetAntIndex: Integer;

property _AntIndex: Integer read GetAntIndex;

function GetDBGrid: Pointer;

property DBGrid: Pointer read GetDBGrid;

{ TClientDataSet }

function GetDataSet: Pointer;

property DataSet: Pointer read GetDataSet;

end;

AzimutField

Указатель на компонент TEdit.

RotationByBearing

Процедура поворачивает антенну на заданный угол.

Rotation

Процедура управляет поворотом антенны (влево, вправо, стоп).

Switch

Процедура переключает антенны (управляет антенным коммутатором).

ClearANTData

Процедура очищает таблицу принятых спотов.

SendANTData

Процедура добавляет новый спот в таблицу принятых спотов.

GetSpots

Процедура заполняет таблицу принятых спотов на основе данных DataSet.

_AntIndex

Текущий индекс включённой антенны.

DBGrid

Возвращает указатель на таблицу окна.

DataSet

Указатель на компонент TClientDataSet. В этом компоненте содержаться данные принятых спотов.