OSDN Git Service

・プラグインメニューを追加。
[gikonavigoeson/gikonavi.git] / ExternalBoardManager.pas
1 unit ExternalBoardManager;
2
3 interface
4
5 uses
6         Windows, Classes, SysUtils,
7         IdHTTP, IdComponent, IdGlobal, IdException,
8         ExternalBoardPlugInMain, ExternalFilePath, ExternalThreadItem, ExternalBoardItem;
9
10 type
11         // =========================================================================
12         // \83v\83\89\83O\83C\83\93\82ð\8aÇ\97\9d\82·\82é TBoardPlugin \83N\83\89\83X
13         // =========================================================================
14         TBoardPlugIn = class( TObject )
15         private
16                 FFilePath                                               : string;               // \83v\83\89\83O\83C\83\93\82ð\8e¦\82·\83p\83X
17                 FModule                                                 : HMODULE;      // \83v\83\89\83O\83C\83\93\82Ì\83\82\83W\83\85\81[\83\8b\83n\83\93\83h\83\8b
18
19                 FLoad                                                           : TOnLoad;
20                 FVersionInfo                            : TOnVersionInfo;
21                 FAcceptURL                                      : TOnAcceptURL;
22                 FPlugInMenu                                     : TOnPlugInMenu;
23
24                 FCreateThreadItem               : TThreadItemCreate;
25                 FDisposeThreadItem      : TThreadItemDispose;
26                 FDownloadThread                 : TThreadItemOnDownload;
27                 FWriteThread                            : TThreadItemOnWrite;
28                 FGetRes                                                 : TThreadItemOnGetRes;
29                 FGetDat                                                 : TThreadItemOnGetDat;
30                 FGetHeader                                      : TThreadItemOnGetHeader;
31                 FGetFooter                                      : TThreadItemOnGetFooter;
32                 FGetBoardURL                            : TThreadItemOnGetBoardURL;
33
34                 FCreateBoardItem                : TBoardItemCreate;
35                 FDisposeBoardItem               : TBoardItemDispose;
36                 FDownloadBoard                  : TBoardItemOnDownload;
37                 FCreateThread                           : TBoardItemOnCreateThread;
38                 FEnumThread                                     : TBoardItemOnEnumThread;
39                 FFileName2ThreadURL     : TBoardItemOnFileName2ThreadURL;
40
41         public
42                 // \83R\83\93\83X\83g\83\89\83N\83^
43                 constructor     Create;
44                 // \83v\83\89\83O\83C\83\93\82Ì\83p\83X\82ð\8ew\92è\82µ\82Ä\8dì\90¬
45                 constructor     CreateFromPath( inPath : string );
46                 // \83v\83\89\83O\83C\83\93\96¼\82ð\8ew\92è\82µ\82Ä\8dì\90¬
47                 constructor     CreateFromName( inName : string );
48                 // \83\82\83W\83\85\81[\83\8b\83n\83\93\83h\83\8b\82ð\8ew\92è\82µ\82Ä\8dì\90¬
49                 constructor     CreateFromModule( inModule : HMODULE );
50                 // \83f\83X\83g\83\89\83N\83^
51                 destructor      Destroy; override;
52
53                 // \83v\83\89\83O\83C\83\93\82Ì\83p\83X\82ð\8ew\92è\82µ\82Ä\83\8d\81[\83h
54                 procedure       LoadFromPath( inPath : string );
55                 // \83v\83\89\83O\83C\83\93\96¼\82ð\8ew\92è\82µ\82Ä\83\8d\81[\83h
56                 procedure       LoadFromName( inName : string );
57                 // \83\82\83W\83\85\81[\83\8b\83n\83\93\83h\83\8b\82ð\8ew\92è\82µ\82Ä\83\8d\81[\83h
58                 procedure       LoadFromModule( inModule : HMODULE );
59
60                 //===== PlugInMain \8aÖ\98A
61                 // \83v\83\89\83O\83C\83\93\82ª(\90³\82µ\82­)\83\8d\81[\83h\82³\82ê\82½
62                 procedure       Loaded;
63                 // \83o\81[\83W\83\87\83\93\8fî\95ñ
64                 procedure       VersionInfo(    var outAgent : string;
65                         var outMajor : DWORD; var outMinor : DWORD;
66                         var outRelease : string; var outRevision : DWORD );
67                 // \8ew\92è\82µ\82½ URL \82ð\82±\82Ì\83v\83\89\83O\83C\83\93\82Å\8eó\82¯\95t\82¯\82é\82©\82Ç\82¤\82©
68                 function        AcceptURL( inURL : string ) : TAcceptType;
69                 // \83\81\83j\83\85\81[\83n\83\93\83h\83\89
70                 procedure       PlugInMenu( inHandle : HMENU );
71
72                 //===== TThreadItem \8aÖ\98A
73                 // TThreadItem \82ª\90\90¬\82³\82ê\82½
74                 procedure       CreateThreadItem( threadItem : DWORD );
75                 // TThreadItem \82ª\94j\8aü\82³\82ê\82½
76                 procedure       DisposeThreadItem( threadItem : DWORD );
77                 // \83_\83E\83\93\83\8d\81[\83h\82ð\8ew\8e¦
78                 function        DownloadThread( threadItem : DWORD ) : TDownloadState;
79                 // \8f\91\82«\8d\9e\82Ý\82ð\8ew\8e¦
80                 function        WriteThread( threadItem : DWORD; inName : string; inMail : string; inMessage : string ) : TDownloadState;
81                 // \83\8c\83X\94Ô\8d\86 n \82É\91Î\82·\82é html \82ð\97v\8b\81
82                 function        GetRes( threadItem : DWORD; inNo : DWORD ) : string;
83                 // \83\8c\83X\94Ô\8d\86 n \82É\91Î\82·\82é Dat \82ð\97v\8b\81
84                 function        GetDat( threadItem : DWORD; inNo : DWORD ) : string;
85                 // \83X\83\8c\83b\83h\82Ì\83w\83b\83_ html \82ð\97v\8b\81
86                 function        GetHeader( threadItem : DWORD; inOptionalHeader : string ) : string;
87                 // \83X\83\8c\83b\83h\82Ì\83t\83b\83^ html \82ð\97v\8b\81
88                 function        GetFooter( threadItem : DWORD; inOptionalFooter : string ) : string;
89                 // \82±\82Ì ThreadItem \82ª\91®\82·\82é\94Â\82Ì URL \82ð\97v\8b\81
90                 function        GetBoardURL( threadItem : DWORD ) : string;
91
92                 //===== TBoardItem \8aÖ\98A
93                 // TBoard \82ª\90\90¬\82³\82ê\82½
94                 procedure       CreateBoardItem( boardItem : DWORD );
95                 // TBoardItem \82ª\94j\8aü\82³\82ê\82½
96                 procedure       DisposeBoardItem( boardItem : DWORD );
97                 // \83_\83E\83\93\83\8d\81[\83h\82ð\8ew\8e¦
98                 function        DownloadBoard( boardItem : DWORD ) : TDownloadState;
99                 // \83X\83\8c\97§\82Ä\82ð\8ew\8e¦
100                 function        CreateThread( boardItem : DWORD; inSubject : string; inName : string; inMail : string; inMessage : string ) : TDownloadState;
101                 // \82±\82Ì\94Â\82É\95Û\97L\82µ\82Ä\82¢\82é\83X\83\8c\82ð\97ñ\8b\93
102                 procedure EnumThread( boardItem : DWORD; inCallBack : TBoardItemEnumThreadCallBack );
103                 // \83t\83@\83C\83\8b\96¼\82©\82ç\83X\83\8c\83b\83h\82Ì URL \82ð\97v\8b\81
104                 function        FileName2ThreadURL( boardItem : DWORD; inFileName : string ) : string;
105
106         private
107                 procedure       LoadPlugInAPI;
108
109         public
110                 property        FilePath        : string        read FFilePath;
111                 property        Module          : HMODULE       read FModule;
112         end;
113
114 var
115         OnWork                          : TWorkEvent;
116         OnWorkBegin             : TWorkBeginEvent;
117         OnWorkEnd                       : TWorkEndEvent;
118
119         BoardPlugIns    : array of TBoardPlugIn;
120
121 procedure InitializeBoardPlugIns;
122
123 implementation
124
125 uses GikoSystem;
126
127 // *************************************************************************
128 // BoardPlugin \83t\83H\83\8b\83_\82É\82 \82é\83v\83\89\83O\83C\83\93\82ð\91S\82Ä\83\8d\81[\83h
129 // *************************************************************************
130 procedure InitializeBoardPlugIns;
131 var
132         i, bound                : Integer;
133         pluginNames     : TStringList;
134 begin
135
136         pluginNames := TStringList.Create;
137         try
138                 GikoSys.GetFileList( GikoSys.Setting.GetBoardPlugInDir, '*', pluginNames, False, False );
139                 SetLength( BoardPlugIns, pluginNames.Count );
140
141                 bound := pluginNames.Count - 1;
142                 for i := 0 to bound do begin
143                         try
144                                 BoardPlugIns[ i ] := TBoardPlugIn.CreateFromName( pluginNames.Strings[ i ] );
145                                 BoardPlugIns[ i ].Loaded;
146                         except end;
147                 end;
148         finally
149                 pluginNames.Free;
150         end;
151
152 end;
153
154
155
156 // =========================================================================
157 // \83v\83\89\83O\83C\83\93\82ð\8aÇ\97\9d\82·\82é TBoardPlugin \83N\83\89\83X
158 // =========================================================================
159
160 // *************************************************************************
161 // \83R\83\93\83X\83g\83\89\83N\83^
162 // *************************************************************************
163 constructor     TBoardPlugIn.Create;
164 begin
165
166         inherited;
167
168         FLoad                                                           := nil;
169         FVersionInfo                            := nil;
170         FAcceptURL                                      := nil;
171         FPlugInMenu                                     := nil;
172
173         FCreateThreadItem               := nil;
174         FDisposeThreadItem      := nil;
175         FDownloadThread                 := nil;
176         FWriteThread                            := nil;
177         FGetRes                                                 := nil;
178         FGetDat                                                 := nil;
179         FGetHeader                                      := nil;
180         FGetFooter                                      := nil;
181
182         FCreateBoardItem                := nil;
183         FDisposeBoardItem               := nil;
184         FDownloadBoard                  := nil;
185         FCreateThread                           := nil;
186         FEnumThread                                     := nil;
187         FFileName2ThreadURL     := nil;
188
189 end;
190
191 // *************************************************************************
192 // \83v\83\89\83O\83C\83\93\82Ì\83p\83X\82ð\8ew\92è\82µ\82Ä\8dì\90¬
193 // *************************************************************************
194 constructor     TBoardPlugIn.CreateFromPath(
195         inPath : string
196 );
197 begin
198
199         Create;
200
201         LoadFromPath( inPath );
202
203 end;
204
205 // *************************************************************************
206 // \83v\83\89\83O\83C\83\93\96¼\82ð\8ew\92è\82µ\82Ä\8dì\90¬
207 // *************************************************************************
208 constructor     TBoardPlugIn.CreateFromName(
209         inName : string
210 );
211 begin
212
213         Create;
214
215         LoadFromName( inName );
216
217 end;
218
219 // *************************************************************************
220 // \83\82\83W\83\85\81[\83\8b\83n\83\93\83h\83\8b\82ð\8ew\92è\82µ\82Ä\8dì\90¬
221 // *************************************************************************
222 constructor     TBoardPlugIn.CreateFromModule(
223         inModule : HMODULE
224 );
225 begin
226
227         inherited Create;
228
229         LoadFromModule( inModule );
230
231 end;
232
233 // *************************************************************************
234 // \83f\83X\83g\83\89\83N\83^
235 // *************************************************************************
236 destructor      TBoardPlugIn.Destroy;
237 begin
238
239         FreeLibrary( FModule );
240
241         inherited;
242
243 end;
244
245 // *************************************************************************
246 // \83v\83\89\83O\83C\83\93\82Ì\83p\83X\82ð\8ew\92è\82µ\82Ä\83\8d\81[\83h
247 // *************************************************************************
248 procedure TBoardPlugIn.LoadFromPath(
249         inPath : string
250 );
251 begin
252
253         FFilePath := inPath;
254         if FileExists( inPath ) then
255                 FModule := LoadLibrary( PChar( inPath ) )
256         else if FileExists( inPath + '.dll' ) then
257                 FModule := LoadLibrary( PChar( inPath + '.dll' ) );
258
259         LoadPlugInAPI;
260
261 end;
262
263 // *************************************************************************
264 // \83v\83\89\83O\83C\83\93\96¼\82ð\8ew\92è\82µ\82Ä\83\8d\81[\83h
265 // *************************************************************************
266 procedure TBoardPlugIn.LoadFromName(
267         inName : string
268 );
269 begin
270
271         LoadFromPath( GikoSys.Setting.GetBoardPlugInDir + inName );
272
273 end;
274
275 // *************************************************************************
276 // \83\82\83W\83\85\81[\83\8b\83n\83\93\83h\83\8b\82ð\8ew\92è\82µ\82Ä\83\8d\81[\83h
277 // *************************************************************************
278 procedure TBoardPlugIn.LoadFromModule(
279         inModule        : HMODULE
280 );
281 var
282         tmp                             : array [0..MAX_PATH] of Char;
283 begin
284
285         GetModuleFileName( inModule, tmp, SizeOf( tmp ) );
286         FFilePath       := tmp;
287         FModule         := inModule;
288
289         LoadPlugInAPI;
290
291 end;
292
293 // *************************************************************************
294 // \83v\83\89\83O\83C\83\93\82ª(\90³\82µ\82­)\83\8d\81[\83h\82³\82ê\82½
295 // *************************************************************************
296 procedure TBoardPlugIn.Loaded;
297 begin
298
299         if Assigned( FLoad ) then
300                 FLoad( DWORD( Self ) );
301
302 end;
303
304 // *************************************************************************
305 // \83o\81[\83W\83\87\83\93\8fî\95ñ
306 // *************************************************************************
307 procedure TBoardPlugIn.VersionInfo(
308         var outAgent            : string;               // \83o\81[\83W\83\87\83\93\82ð\88ê\90Ø\8aÜ\82Ü\82È\82¢\8f\83\90\88\82È\96¼\8fÌ
309         var outMajor            : DWORD;                // \83\81\83W\83\83\81[\83o\81[\83W\83\87\83\93
310         var outMinor            : DWORD;                // \83}\83C\83i\81[\83o\81[\83W\83\87\83\93
311         var outRelease  : string;               // \83\8a\83\8a\81[\83X\92i\8aK\96¼
312         var outRevision : DWORD                 // \83\8a\83r\83W\83\87\83\93\83i\83\93\83o\81[
313 );
314 var
315         agent                                           : PChar;
316         release                                 : PChar;
317 begin
318
319         if Assigned( FVersionInfo ) then begin
320                 FVersionInfo( agent, outMajor, outMinor, release, outRevision );
321                 outAgent                := string( agent );
322                 outRelease      := string( release );
323                 DisposeResultString( agent );
324                 DisposeResultString( release );
325         end;
326
327 end;
328
329 // *************************************************************************
330 // \8ew\92è\82µ\82½ URL \82ð\82±\82Ì\83v\83\89\83O\83C\83\93\82Å\8eó\82¯\95t\82¯\82é\82©\82Ç\82¤\82©
331 // *************************************************************************
332 function        TBoardPlugIn.AcceptURL(
333         inURL : string
334 ) : TAcceptType;
335 begin
336
337         if Assigned( FAcceptURL ) then
338                 Result := FAcceptURL( PChar( inURL ) )
339         else
340                 Result := atNoAccept;
341
342 end;
343
344 // *************************************************************************
345 // \83\81\83j\83\85\81[\83n\83\93\83h\83\89
346 // *************************************************************************
347 procedure TBoardPlugIn.PlugInMenu(
348         inHandle : HMENU                                        // \83\81\83j\83\85\81[\83n\83\93\83h\83\8b
349 );
350 begin
351
352         if Assigned( FPlugInMenu ) then
353                 FPlugInMenu( inHandle );
354
355 end;
356
357 // *************************************************************************
358 // TThreadItem \82ª\90\90¬\82³\82ê\82½
359 // *************************************************************************
360 procedure       TBoardPlugIn.CreateThreadItem(
361         threadItem : DWORD      // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
362 );
363 begin
364
365         if Assigned( FCreateThreadItem ) then
366                 FCreateThreadItem( threadItem );
367
368 end;
369
370 // *************************************************************************
371 // TThreadItem \82ª\94j\8aü\82³\82ê\82½
372 // *************************************************************************
373 procedure       TBoardPlugIn.DisposeThreadItem(
374         threadItem : DWORD      // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
375 );
376 begin
377
378         if Assigned( FDisposeThreadItem ) then
379                 FDisposeThreadItem( threadItem );
380
381 end;
382
383 // *************************************************************************
384 // \83_\83E\83\93\83\8d\81[\83h\82ð\8ew\8e¦
385 // *************************************************************************
386 function        TBoardPlugIn.DownloadThread(
387         threadItem : DWORD      // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
388 ) : TDownloadState;
389 begin
390
391         if Assigned( FDownloadThread ) then
392                 Result := FDownloadThread( threadItem )
393         else
394                 Result := dsError;
395
396 end;
397
398 // *************************************************************************
399 // \8f\91\82«\8d\9e\82Ý\82ð\8ew\8e¦
400 // *************************************************************************
401 function        TBoardPlugIn.WriteThread(
402         threadItem      : DWORD;        // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
403         inName                  : string;       // \96¼\91O(\83n\83\93\83h\83\8b)
404         inMail                  : string;       // \83\81\81[\83\8b\83A\83h\83\8c\83X
405         inMessage               : string        // \96{\95
406 ) : TDownloadState;                     // \8f\91\82«\8d\9e\82Ý\82ª\90¬\8c÷\82µ\82½\82©\82Ç\82¤\82©
407 begin
408
409         if Assigned( FWriteThread ) then
410                 Result := FWriteThread( threadItem, PChar( inName ), PChar( inMail ), PChar( inMessage ) )
411         else
412                 Result := dsError;
413
414 end;
415
416 // *************************************************************************
417 // \83\8c\83X\94Ô\8d\86 n \82É\91Î\82·\82é html \82ð\97v\8b\81
418 // *************************************************************************
419 function TBoardPlugIn.GetRes(
420         threadItem      : DWORD;                // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
421         inNo                            : DWORD                 // \95\\8e¦\82·\82é\83\8c\83X\94Ô\8d\86
422 ) : string;                                                     // \95\\8e¦\82·\82é HTML
423 var
424         tmp                                     : PChar;
425 begin
426
427         if Assigned( FGetRes ) then begin
428                 tmp                     := FGetRes( threadItem, inNo );
429                 try
430                         Result  := string( tmp );
431                 finally
432                         DisposeResultString( tmp );
433                 end;
434         end;
435
436 end;
437
438 // *************************************************************************
439 // \83\8c\83X\94Ô\8d\86 n \82É\91Î\82·\82é Dat \82ð\97v\8b\81
440 // *************************************************************************
441 function TBoardPlugIn.GetDat(
442         threadItem      : DWORD;                // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
443         inNo                            : DWORD                 // \95\\8e¦\82·\82é\83\8c\83X\94Ô\8d\86
444 ) : string;                                                     // \82Q\82¿\82á\82ñ\82Ë\82é\82Ìdat\8c`\8e®
445 begin
446
447         if Assigned( FGetDat ) then begin
448                 Result                  := FGetDat( threadItem, inNo );
449         end;
450
451 end;
452
453 // *************************************************************************
454 // \83X\83\8c\83b\83h\82Ì\83w\83b\83_ html \82ð\97v\8b\81
455 // *************************************************************************
456 function TBoardPlugIn.GetHeader(
457         threadItem                              : DWORD;        // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
458         inOptionalHeader        : string        // \92Ç\89Á\82Ì\83w\83b\83_
459 ) : string;                                                                             // \90®\8c`\82³\82ê\82½ HTML
460 var
461         tmp                                                             : PChar;
462 begin
463
464         if Assigned( FGetHeader ) then begin
465                 tmp                     := FGetHeader( threadItem, PChar( inOptionalHeader ) );
466                 try
467                         Result  := string( tmp );
468                 finally
469                         DisposeResultString( tmp );
470                 end;
471         end;
472
473 end;
474
475 // *************************************************************************
476 // \83X\83\8c\83b\83h\82Ì\83t\83b\83^ html \82ð\97v\8b\81
477 // *************************************************************************
478 function TBoardPlugIn.GetFooter(
479         threadItem                              : DWORD;        // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
480         inOptionalFooter        : string        // \92Ç\89Á\82Ì\83t\83b\83^
481 ) : string;                                                                             // \90®\8c`\82³\82ê\82½ HTML
482 var
483         tmp                                                             : PChar;
484 begin
485
486         if Assigned( FGetFooter ) then begin
487                 tmp                     := FGetFooter( threadItem, PChar( inOptionalFooter ) );
488                 Result  := string( tmp );
489                 DisposeResultString( tmp );
490         end;
491
492 end;
493
494 // *************************************************************************
495 // \82±\82Ì ThreadItem \82ª\91®\82·\82é\94Â\82Ì URL \82ð\97v\8b\81
496 // *************************************************************************
497 function        TBoardPlugIn.GetBoardURL(
498         threadItem      : DWORD // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
499 ) : string;
500 var
501         tmp                                     : PChar;
502 begin
503
504         if Assigned( FGetBoardURL ) then begin
505                 tmp                     := FGetBoardURL( threadItem );
506                 Result  := string( tmp );
507                 DisposeResultString( tmp );
508         end;
509
510 end;
511
512 // *************************************************************************
513 // TBoardItem \82ª\90\90¬\82³\82ê\82½
514 // *************************************************************************
515 procedure       TBoardPlugIn.CreateBoardItem(
516         boardItem : DWORD       // BoardItem \82Ì\83C\83\93\83X\83^\83\93\83X
517 );
518 begin
519
520         if Assigned( FCreateBoardItem ) then
521                 FCreateBoardItem( boardItem );
522
523 end;
524
525 // *************************************************************************
526 // TBoardItem \82ª\94j\8aü\82³\82ê\82½
527 // *************************************************************************
528 procedure       TBoardPlugIn.DisposeBoardItem(
529         boardItem : DWORD       // BoardItem \82Ì\83C\83\93\83X\83^\83\93\83X
530 );
531 begin
532
533         if Assigned( FDisposeBoardItem ) then
534                 FDisposeBoardItem( boardItem );
535
536 end;
537
538 // *************************************************************************
539 // \83_\83E\83\93\83\8d\81[\83h\82ð\8ew\8e¦
540 // *************************************************************************
541 function        TBoardPlugIn.DownloadBoard(
542         boardItem : DWORD       // BoardItem \82Ì\83C\83\93\83X\83^\83\93\83X
543 ) : TDownloadState;
544 begin
545
546         if Assigned( FDownloadBoard ) then
547                 Result := FDownloadBoard( boardItem )
548         else
549                 Result := dsError;
550
551 end;
552
553 // *************************************************************************
554 // \83X\83\8c\97§\82Ä\82ð\8ew\8e¦
555 // *************************************************************************
556 function        TBoardPlugIn.CreateThread(
557         boardItem               : DWORD;        // BoardItem \82Ì\83C\83\93\83X\83^\83\93\83X
558         inSubject               : string;       // \83X\83\8c\83^\83C
559         inName                  : string;       // \96¼\91O(\83n\83\93\83h\83\8b)
560         inMail                  : string;       // \83\81\81[\83\8b\83A\83h\83\8c\83X
561         inMessage               : string        // \96{\95
562 ) : TDownloadState;                     // \8f\91\82«\8d\9e\82Ý\82ª\90¬\8c÷\82µ\82½\82©\82Ç\82¤\82©
563 begin
564
565         if Assigned( FCreateThread ) then
566                 Result := FCreateThread( boardItem, PChar( inSubject ), PChar( inName ), PChar( inMail ), PChar( inMessage ) )
567         else
568                 Result := dsError;
569
570 end;
571
572 // *************************************************************************
573 // \82±\82Ì\94Â\82É\95Û\97L\82µ\82Ä\82¢\82é\83X\83\8c\82ð\97ñ\8b\93
574 // *************************************************************************
575 procedure TBoardPlugIn.EnumThread(
576         boardItem               : DWORD;        // BoardItem \82Ì\83C\83\93\83X\83^\83\93\83X
577         inCallBack      : TBoardItemEnumThreadCallBack
578 );
579 begin
580
581         if Assigned( FEnumThread ) then
582                 FEnumThread( boardItem, inCallBack );
583
584 end;
585
586 // *************************************************************************
587 // \83t\83@\83C\83\8b\96¼\82©\82ç\83X\83\8c\83b\83h\82Ì URL \82ð\97v\8b\81
588 // *************************************************************************
589 function        TBoardPlugIn.FileName2ThreadURL(
590         boardItem               : DWORD;        // BoardItem \82Ì\83C\83\93\83X\83^\83\93\83X
591         inFileName      : string
592 ) : string;
593 var
594         tmp                                                             : PChar;
595 begin
596
597         if Assigned( FFileName2ThreadURL ) then begin
598                 tmp                     := FFileName2ThreadURL( boardItem, PChar( inFileName ) );
599                 Result  := string( tmp );
600                 DisposeResultString( tmp );
601         end;
602
603 end;
604
605 // *************************************************************************
606 // \83v\83\89\83O\83C\83\93\82Ì API \82ð\8eæ\93¾
607 // *************************************************************************
608 procedure TBoardPlugIn.LoadPlugInAPI;
609 begin
610
611         try
612                 if Assigned( Pointer( FModule ) ) then begin
613                         FLoad                                                           := GetProcAddress( FModule, 'OnLoad' );
614                         FVersionInfo                            := GetProcAddress( FModule, 'OnVersionInfo' );
615                         FAcceptURL                                      := GetProcAddress( FModule, 'OnAcceptURL' );
616                         FPlugInMenu                                     := GetProcAddress( FModule, 'OnPlugInMenu' );
617
618                         FCreateThreadItem               := GetProcAddress( FModule, 'ThreadItemCreate' );
619                         FDisposeThreadItem      := GetProcAddress( FModule, 'ThreadItemDispose' );
620                         FDownloadThread                 := GetProcAddress( FModule, 'ThreadItemOnDownload' );
621                         FWriteThread                            := GetProcAddress( FModule, 'ThreadItemOnWrite' );
622                         FGetRes                                                 := GetProcAddress( FModule, 'ThreadItemOnGetRes' );
623                         FGetDat                                                 := GetProcAddress( FModule, 'ThreadItemOnGetDat' );
624                         FGetHeader                                      := GetProcAddress( FModule, 'ThreadItemOnGetHeader' );
625                         FGetFooter                                      := GetProcAddress( FModule, 'ThreadItemOnGetFooter' );
626                         FGetBoardURL                            := GetProcAddress( FModule, 'ThreadItemOnGetBoardURL' );
627
628                         FCreateBoardItem                := GetProcAddress( FModule, 'BoardItemCreate' );
629                         FDisposeBoardItem               := GetProcAddress( FModule, 'BoardItemDispose' );
630                         FDownloadBoard                  := GetProcAddress( FModule, 'BoardItemOnDownload' );
631                         FCreateThread                           := GetProcAddress( FModule, 'BoardItemOnCreateThread' );
632                         FEnumThread                                     := GetProcAddress( FModule, 'BoardItemOnEnumThread' );
633                         FFileName2ThreadURL     := GetProcAddress( FModule, 'BoardItemOnFileName2ThreadURL' );
634                 end;
635         except
636         end;
637
638 end;
639
640 end.
641