-
Notifications
You must be signed in to change notification settings - Fork 225
/
Plugins.cpp
117 lines (110 loc) · 3.76 KB
/
Plugins.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Plugins.h"
#include "Misc.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
void (__stdcall *fnRegisterPlugIn)(LPCTSTR *);
void (__stdcall *fnAboutPlugIn)(void);
TFPlugins *FPlugins;
//---------------------------------------------------------------------------
__fastcall TFPlugins::TFPlugins(TComponent* Owner)
: TForm(Owner)
{
PluginsPath = "";
PluginName = "";
}
//---------------------------------------------------------------------------
void __fastcall TFPlugins::FormShow(TObject *Sender)
{
TSearchRec sr;
cklbPluginsList->Clear();
if (PluginsPath != "")
{
Screen->Cursor = crHourGlass;
String curDir = GetCurrentDir();
ChDir(PluginsPath);
if (!FindFirst("*.dll", faArchive, sr))
{
do
{
HINSTANCE hModule = LoadLibrary(sr.Name.c_str());
if (hModule)
{
String info = "";
fnRegisterPlugIn = (void (__stdcall*)(LPCTSTR *))GetProcAddress(hModule, "RegisterPlugIn");
if (fnRegisterPlugIn)
{
LPCTSTR ptr;
fnRegisterPlugIn(&ptr);
info = ptr;
}
cklbPluginsList->Items->Add(sr.Name + " - " + info);
FreeLibrary(hModule);
}
} while (!FindNext(sr));
FindClose(sr);
}
ChDir(curDir);
Screen->Cursor = crDefault;
}
}
//---------------------------------------------------------------------------
void __fastcall TFPlugins::cklbPluginsListClickCheck(TObject *Sender)
{
if (cklbPluginsList->State[cklbPluginsList->ItemIndex])
{
for (int n = 0; n < cklbPluginsList->Items->Count; n++)
{
cklbPluginsList->State[n] = (n == cklbPluginsList->ItemIndex);
}
}
}
//---------------------------------------------------------------------------
void __fastcall TFPlugins::cklbPluginsListDblClick(TObject *Sender)
{
String filename = "";
String line = cklbPluginsList->Items->Strings[cklbPluginsList->ItemIndex];
int pos = line.Pos('-');
if (pos > 0) filename = line.SubString(1, pos - 1).Trim();
if (filename != "")
{
HINSTANCE hModule = LoadLibrary((PluginsPath + "\\" + filename).c_str());
if (hModule)
{
fnAboutPlugIn = (void (__stdcall*)(void))GetProcAddress(hModule, "AboutPlugIn");
if (fnAboutPlugIn) fnAboutPlugIn();
FreeLibrary(hModule);
}
}
}
//---------------------------------------------------------------------------
void __fastcall TFPlugins::bOkClick(TObject *Sender)
{
PluginName = "";
for (int n = 0; n < cklbPluginsList->Items->Count; n++)
{
if (cklbPluginsList->State[n])
{
String line = cklbPluginsList->Items->Strings[n];
int pos = line.Pos('-');
if (pos > 0) PluginName = line.SubString(1, pos - 1).Trim();
break;
}
}
ModalResult = mrOk;
}
//---------------------------------------------------------------------------
void __fastcall TFPlugins::bCancelClick(TObject *Sender)
{
PluginName = "";
ModalResult = mrCancel;
}
//---------------------------------------------------------------------------
void __fastcall TFPlugins::FormCreate(TObject *Sender)
{
ScaleForm(this);
}
//---------------------------------------------------------------------------