
- •Добавление к com-серверу поддержки событий
- •Создание модели взаимодействия приложения хоста с плагинами
- •Описание com-интерфейсов, связанных с поддержкой плагинов
- •Создание com-интерфейсов, связанных с поддержкой плагинов
- •Создание com-классов, связанных с поддержкой плагинов
- •Создание класса, отвечающего за взаимодействие с плагинами
- •Код класса Plugin.Cs
- •Внесение косметических изменений в серверную часть
- •Строим своё меню с плагинами и идентификаторами
- •Вносим изменения в главную форму сервера
- •Создание первого плагина
- •Импорт типов с сервера
- •Создание класса для хранения внутреннего представления точек
- •Создание форм редактирования данных о точках
- •Реализация форм редактирования данных о точках
- •Реализация класса первого плагина
- •Создание третьего плагина
- •Делаем наш плагин com-видимым
- •Создание главной формы плагина
- •Реализация класса третьего плагина
- •Создание инсталлятора для плагина
- •Создание второго плагина
- •Создание главной формы плагина
- •Создание библиотеки типов
- •Реализация формы второго плагина
- •Реализация класса второго плагина
- •Добавление метода GetComClassName
- •Data Execution Prevention и его отключение
- •Тестирование совместной работы клиента и плагинов
- •Исходный код
Создание главной формы плагина
Моя форма выглядит примерно так же, как в третьем плагине, разве что нет кнопки обновления:
Прямоугольник посередине – это элемент Image.
Можете набросать форму сами, но там много свойств элементов придется менять, я лучше приведу вам код моего файла MainForm.dfm. Закройте билдер и откройте файл каким-нибудь редактором.
Замените содержимое файла следующим кодом:
object MainForm: TMainForm
Left = 477
Top = 250
BorderIcons = [biSystemMenu]
BorderStyle = bsSingle
Caption = 'Plugin 2'
ClientHeight = 557
ClientWidth = 822
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnCloseQuery = FormCloseQuery
PixelsPerInch = 96
TextHeight = 13
object Image: TImage
Left = 8
Top = 8
Width = 800
Height = 500
end
object start_button: TButton
Left = 8
Top = 520
Width = 89
Height = 25
Caption = #1057#1090#1072#1088#1090
TabOrder = 0
OnClick = start_buttonClick
end
object pause_button: TButton
Left = 112
Top = 520
Width = 89
Height = 25
Caption = #1055#1072#1091#1079#1072
TabOrder = 1
OnClick = pause_buttonClick
end
object stop_button: TButton
Left = 216
Top = 520
Width = 89
Height = 25
Caption = #1057#1090#1086#1087
TabOrder = 2
OnClick = stop_buttonClick
end
object timeline_trackBar: TTrackBar
Left = 312
Top = 520
Width = 497
Height = 25
Enabled = False
Max = 1
Orientation = trHorizontal
Frequency = 2
Position = 0
SelEnd = 0
SelStart = 0
TabOrder = 3
TickMarks = tmBottomRight
TickStyle = tsAuto
OnChange = timeline_trackBarChange
end
object timer: TTimer
Enabled = False
Interval = 100
OnTimer = timerTimer
Left = 792
Top = 480
end
end
Сохраните файл и закройте редатор. Снова запустите билдер с правами администратора. Откройте последний проект:
Откройте Project Manager.
Уберите его куда-нибудь в нижнюю правую часть экрана, чтобы он не мешал, но всегда был под рукой. Откройте в нём главную форму и убедитесь, что она выглядит как надо.
В редакторе наверняка будет открыт файл MainForm.cpp. Надо переименовать класс формы, ибо сейчас он значится как TForm1. Замените содержимое файла на:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "MainForm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TMainForm *MainForm;
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
Перейдите к его заголовочному файлу, щелкнув правой кнопкой по закладке:
Замените весь код файла MainForm.h на следующий:
//---------------------------------------------------------------------------
#ifndef MainFormH
#define MainFormH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TMainForm : public TForm
{
__published: // IDE-managed Components
TImage *Image;
TButton *start_button;
TButton *pause_button;
TButton *stop_button;
TTimer *timer;
TTrackBar *timeline_trackBar;
void __fastcall start_buttonClick(TObject *Sender);
void __fastcall pause_buttonClick(TObject *Sender);
void __fastcall stop_buttonClick(TObject *Sender);
void __fastcall timeline_trackBarChange(TObject *Sender);
void __fastcall timerTimer(TObject *Sender);
void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose);
private: // User declarations
public: // User declarations
__fastcall TMainForm(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TMainForm *MainForm;
//---------------------------------------------------------------------------
#endif
Попробуйте собрать проект.
Если всё сделано правильно, то он сбилдится без ошибок. Иначе проверьте, что вы запустили билдер из под админа. Исправьте потенциальные ошибки.