FFilePath : string; // \83v\83\89\83O\83C\83\93\82ð\8e¦\82·\83p\83X
FModule : HMODULE; // \83v\83\89\83O\83C\83\93\82Ì\83\82\83W\83\85\81[\83\8b\83n\83\93\83h\83\8b
+ FLoad : TOnLoad;
FVersionInfo : TOnVersionInfo;
FAcceptURL : TOnAcceptURL;
+ FExtractBoardURL : TOnExtractBoardURL;
+ FPlugInMenu : TOnPlugInMenu;
FCreateThreadItem : TThreadItemCreate;
FDisposeThreadItem : TThreadItemDispose;
FDownloadThread : TThreadItemOnDownload;
FWriteThread : TThreadItemOnWrite;
FGetRes : TThreadItemOnGetRes;
- FGetDat : TThreadItemOnGetDat;
+ FGetDat : TThreadItemOnGetDat;
FGetHeader : TThreadItemOnGetHeader;
FGetFooter : TThreadItemOnGetFooter;
FGetBoardURL : TThreadItemOnGetBoardURL;
procedure LoadFromModule( inModule : HMODULE );
//===== PlugInMain \8aÖ\98A
+ // \83v\83\89\83O\83C\83\93\82ª(\90³\82µ\82)\83\8d\81[\83h\82³\82ê\82½
+ procedure Loaded;
// \83o\81[\83W\83\87\83\93\8fî\95ñ
procedure VersionInfo( var outAgent : string;
var outMajor : DWORD; var outMinor : DWORD;
var outRelease : string; var outRevision : DWORD );
// \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©
function AcceptURL( inURL : string ) : TAcceptType;
+ // URL\82©\82ç\8eg\82¦\82éBoard\82ÌURL\82ð\93±\82«\8fo\82·
+ function ExtractBoardURL( inURL : string ): string;
+ // \83\81\83j\83\85\81[\83n\83\93\83h\83\89
+ procedure PlugInMenu( inHandle : HMENU );
//===== TThreadItem \8aÖ\98A
// TThreadItem \82ª\90¶\90¬\82³\82ê\82½
implementation
-uses GikoSystem;
+uses GikoSystem, BoardGroup;
// *************************************************************************
// BoardPlugin \83t\83H\83\8b\83_\82É\82 \82é\83v\83\89\83O\83C\83\93\82ð\91S\82Ä\83\8d\81[\83h
pluginNames := TStringList.Create;
try
- GikoSys.GetFileList( GikoSys.Setting.GetBoardPlugInDir, '*', pluginNames, False, False );
+ //GikoSys.GetFileList( GikoSys.Setting.GetBoardPlugInDir, '*', pluginNames, False, False );
+ pluginNames.BeginUpdate;
+ GikoSys.GetFileList( GikoSys.Setting.GetBoardPlugInDir, '*.dll', pluginNames, False );
+ pluginNames.EndUpdate;
SetLength( BoardPlugIns, pluginNames.Count );
-
+ //
+ SetLength( BoardGroups, pluginNames.Count + 1 );
+ BoardGroups[0] := TBoardGroup.Create;
+ BoardGroups[0].Sorted := true;
+ BoardGroups[0].BoardPlugIn := nil;
+ //
bound := pluginNames.Count - 1;
- for i := 0 to bound do
- BoardPlugIns[ i ] := TBoardPlugIn.CreateFromName( pluginNames.Strings[ i ] );
+ for i := 0 to bound do begin
+ try
+ BoardPlugIns[ i ] := TBoardPlugIn.CreateFromName( pluginNames.Strings[ i ] );
+ BoardPlugIns[ i ].Loaded;
+ BoardGroups[ i + 1 ] := TBoardGroup.Create;
+ BoardGroups[ i + 1 ].Sorted := True;
+ BoardGroups[ i + 1 ].BoardPlugIn := BoardPlugIns[ i ];
+ except end;
+ end;
finally
pluginNames.Free;
end;
inherited;
+ FLoad := nil;
FVersionInfo := nil;
FAcceptURL := nil;
+ FExtractBoardURL := nil;
+ FPlugInMenu := nil;
FCreateThreadItem := nil;
FDisposeThreadItem := nil;
FDownloadThread := nil;
FWriteThread := nil;
FGetRes := nil;
- FGetDat := nil;
+ FGetDat := nil;
FGetHeader := nil;
FGetFooter := nil;
end;
// *************************************************************************
+// \83v\83\89\83O\83C\83\93\82ª(\90³\82µ\82)\83\8d\81[\83h\82³\82ê\82½
+// *************************************************************************
+procedure TBoardPlugIn.Loaded;
+begin
+
+ if Assigned( FLoad ) then
+ FLoad( DWORD( Self ) );
+
+end;
+
+// *************************************************************************
// \83o\81[\83W\83\87\83\93\8fî\95ñ
// *************************************************************************
procedure TBoardPlugIn.VersionInfo(
Result := atNoAccept;
end;
+// *************************************************************************
+// \8ew\92è\82µ\82½ URL \82©\82ç\8eg\82¦\82éBoard\82ÌURL\82ð\93±\82«\8fo\82·
+// *************************************************************************
+function TBoardPlugIn.ExtractBoardURL(
+ inURL : string
+) : string;
+var
+ URL : PChar;
+// tmp : string;
+begin
+ Result := inURL;
+ if Assigned( FExtractBoardURL ) then begin
+ FExtractBoardURL( PChar(inURL), URL);
+ Result := string(URL);
+ DisposeResultString(URL);
+ end;
+end;
+// *************************************************************************
+// \83\81\83j\83\85\81[\83n\83\93\83h\83\89
+// *************************************************************************
+procedure TBoardPlugIn.PlugInMenu(
+ inHandle : HMENU // \83\81\83j\83\85\81[\83n\83\93\83h\83\8b
+);
+begin
+
+ if Assigned( FPlugInMenu ) then
+ FPlugInMenu( inHandle );
+
+end;
// *************************************************************************
// TThreadItem \82ª\90¶\90¬\82³\82ê\82½
function TBoardPlugIn.GetDat(
threadItem : DWORD; // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
inNo : DWORD // \95\\8e¦\82·\82é\83\8c\83X\94Ô\8d\86
-) : string; // \82Q\82¿\82á\82ñ\82Ë\82é\82Ìdat\8c`\8e®
+) : string; // \82Q\82¿\82á\82ñ\82Ë\82é\82Ìdat\8c`\8e®
+var
+ tmp : PChar;
begin
if Assigned( FGetDat ) then begin
- Result := FGetDat( threadItem, inNo );
+ tmp := FGetDat( threadItem, inNo );
+ try
+ Result := string( tmp );
+ finally
+ DisposeResultString(tmp); end;
end;
end;
try
if Assigned( Pointer( FModule ) ) then begin
+ FLoad := GetProcAddress( FModule, 'OnLoad' );
FVersionInfo := GetProcAddress( FModule, 'OnVersionInfo' );
FAcceptURL := GetProcAddress( FModule, 'OnAcceptURL' );
+ FExtractBoardURL := GetProcAddress( FModule, 'OnExtractBoardURL' );
+ FPlugInMenu := GetProcAddress( FModule, 'OnPlugInMenu' );
FCreateThreadItem := GetProcAddress( FModule, 'ThreadItemCreate' );
FDisposeThreadItem := GetProcAddress( FModule, 'ThreadItemDispose' );
FDownloadThread := GetProcAddress( FModule, 'ThreadItemOnDownload' );
FWriteThread := GetProcAddress( FModule, 'ThreadItemOnWrite' );
FGetRes := GetProcAddress( FModule, 'ThreadItemOnGetRes' );
- FGetDat := GetProcAddress( FModule, 'ThreadItemOnGetDat' );
+ FGetDat := GetProcAddress( FModule, 'ThreadItemOnGetDat' );
FGetHeader := GetProcAddress( FModule, 'ThreadItemOnGetHeader' );
FGetFooter := GetProcAddress( FModule, 'ThreadItemOnGetFooter' );
FGetBoardURL := GetProcAddress( FModule, 'ThreadItemOnGetBoardURL' );