1 unit ExternalBoardManager;
6 Windows, Classes, SysUtils,
7 IdHTTP, IdComponent, IdGlobal, IdException,
11 // =========================================================================
12 // PlugInMain
\8aÖ
\98A
13 // =========================================================================
15 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\90¬
\8c÷
\82µ
\82½
\82©
\82Ç
\82¤
\82©
16 TDownloadState = (dsWait, dsWork, dsComplete, dsDiffComplete, dsNotModify, dsAbort, dsError);
18 // *************************************************************************
19 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83o
\81[
\83W
\83\87\83\93
20 // *************************************************************************
21 TOnVersionInfo = procedure(
22 var outAgent : PChar; //
\83o
\81[
\83W
\83\87\83\93\82ð
\88ê
\90Ø
\8aÜ
\82Ü
\82È
\82¢
\8f\83\90\88\82È
\96¼
\8fÌ
23 var outMajor : DWORD; //
\83\81\83W
\83\83\81[
\83o
\81[
\83W
\83\87\83\93
24 var outMinor : DWORD; //
\83}
\83C
\83i
\81[
\83o
\81[
\83W
\83\87\83\93
25 var outRelease : PChar; //
\83\8a\83\8a\81[
\83X
\92i
\8aK
\96¼
26 var outRevision : DWORD //
\83\8a\83r
\83W
\83\87\83\93\83i
\83\93\83o
\81[
29 // *************************************************************************
30 //
\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©
31 // *************************************************************************
32 TOnAcceptURL = function(
33 inURL : PChar //
\94»
\92f
\82ð
\8bÂ
\82¢
\82Å
\82¢
\82é URL
34 ): Boolean; stdcall; //
\8eó
\82¯
\95t
\82¯
\82é
\82È
\82ç True
36 // *************************************************************************
37 //
\83X
\83\8c\88ê
\97\97\82Ì URL
\82©
\82ç
\83X
\83\8c\83b
\83h
\82Ì URL
\82ð
\93±
\82«
\8fo
\82·
38 // *************************************************************************
39 TOnListURL2ThreadURL = function(
40 inListURL : PChar; //
\83X
\83\8c\88ê
\97\97\82ð
\8e¦
\82µ
\82½ URL
41 inFileName : PChar //
\83X
\83\8c\83b
\83h
\83t
\83@
\83C
\83\8b\96¼
42 ) : PChar; stdcall; //
\83X
\83\8c\83b
\83h
\82Ì URL
46 // =========================================================================
47 // TThreadItem
\8aÖ
\98A
48 // =========================================================================
50 // TThreadItem
\82Ì
\83v
\83\8d\83p
\83e
\83B
\90Ý
\92è
\81^
\8eæ
\93¾ ID
51 TThreadItemProperty = (
52 tipContext, // : DWORD //
\8e©
\97R
\82É
\90Ý
\92è
\82µ
\82Ä
\82¢
\82¢
\92l
53 tipNo, // : Integer //
\94Ô
\8d\86
54 tipFileName, // : string //
\83X
\83\8c\83b
\83h
\83t
\83@
\83C
\83\8b\96¼
55 tipTitle, // : string //
\83X
\83\8c\83b
\83h
\83^
\83C
\83g
\83\8b
56 tipRoundDate, // : TDateTime //
\83X
\83\8c\83b
\83h
\82ð
\8eæ
\93¾
\82µ
\82½
\93ú
\8e\9e\81i
\8f\84\89ñ
\93ú
\8e\9e\81j
57 tipLastModified, // : TDateTime //
\83X
\83\8c\83b
\83h
\82ª
\8dX
\90V
\82³
\82ê
\82Ä
\82¢
\82é
\93ú
\8e\9e\81i
\83T
\81[
\83o
\91¤
\93ú
\8e\9e\81j
58 tipCount, // : Integer //
\83X
\83\8c\83b
\83h
\83J
\83E
\83\93\83g
\81i
\83\8d\81[
\83J
\83\8b\81j
59 tipAllResCount, // : Integer //
\83X
\83\8c\83b
\83h
\83J
\83E
\83\93\83g
\81i
\83T
\81[
\83o
\81j
60 tipNewResCount, // : Integer //
\83X
\83\8c\83b
\83h
\90V
\92\85\90\94
61 tipSize, // : Integer //
\83X
\83\8c\83b
\83h
\83T
\83C
\83Y
62 tipRound, // : Boolean //
\8f\84\89ñ
\83t
\83\89\83O
63 tipRoundName, // : string //
\8f\84\89ñ
\96¼
64 tipIsLogFile, // : Boolean //
\83\8d\83O
\91¶
\8dÝ
\83t
\83\89\83O
65 tipKokomade, // : Integer //
\83R
\83R
\82Ü
\82Å
\93Ç
\82ñ
\82¾
\94Ô
\8d\86
66 tipNewReceive, // : Integer //
\83R
\83R
\82©
\82ç
\90V
\8bK
\8eó
\90M
67 tipNewArrival, // : Boolean //
\90V
\92\85
68 tipUnRead, // : Boolean //
\96¢
\93Ç
\83t
\83\89\83O
69 tipScrollTop, // : Integer //
\83X
\83N
\83\8d\81[
\83\8b\88Ê
\92u
70 tipDownloadHost, // : string //
\8d¡
\82Ì
\83z
\83X
\83g
\82Æ
\88á
\82¤
\8fê
\8d\87\82Ì
\83z
\83X
\83g
71 tipAgeSage, // : TThreadAgeSage //
\83A
\83C
\83e
\83\80\82Ì
\8fã
\82°
\89º
\82°
72 tipURL, // : string //
\83X
\83\8c\83b
\83h
\82ð
\83u
\83\89\83E
\83U
\82Å
\95\
\8e¦
\82·
\82é
\8dÛ
\82Ì URL
73 tipFilePath // : string //
\82±
\82Ì
\83X
\83\8c\82ª
\95Û
\91¶
\82³
\82ê
\82Ä
\82¢
\82é
\83p
\83X
76 // *************************************************************************
77 // TThreadItem
\82ª
\90¶
\90¬
\82³
\82ê
\82½
78 // *************************************************************************
79 TThreadItemCreate = procedure(
83 // *************************************************************************
84 // TThreadItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
85 // *************************************************************************
86 TThreadItemDispose = procedure(
90 // *************************************************************************
91 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
\82³
\82ê
\82½
92 // *************************************************************************
93 TThreadItemOnDownload = function(
94 inInstance : DWORD //
\83C
\83\93\83X
\83^
\83\93\83X
95 ) : TDownloadState; stdcall; //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\90¬
\8c÷
\82µ
\82½
\82©
\82Ç
\82¤
\82©
97 // *************************************************************************
98 //
\83\8c\83X
\94Ô
\8d\86 n
\82É
\91Î
\82·
\82é html
\82ð
\97v
\8b\81\82³
\82ê
\82½
99 // *************************************************************************
100 TThreadItemOnGetRes = function(
101 inInstance : DWORD; //
\83C
\83\93\83X
\83^
\83\93\83X
102 inNo : DWORD //
\95\
\8e¦
\82·
\82é
\83\8c\83X
\94Ô
\8d\86
103 ) : PChar; stdcall; //
\95\
\8e¦
\82·
\82é HTML
105 // *************************************************************************
106 //
\83X
\83\8c\83b
\83h
\82Ì
\83w
\83b
\83_ html
\82ð
\97v
\8b\81\82³
\82ê
\82½
107 // *************************************************************************
108 TThreadItemOnGetHeader = function(
109 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
110 inOptionalHeader : PChar //
\92Ç
\89Á
\82Ì
\83w
\83b
\83_
111 ) : PChar; stdcall; //
\90®
\8c`
\82³
\82ê
\82½ HTML
113 // *************************************************************************
114 //
\83X
\83\8c\83b
\83h
\82Ì
\83t
\83b
\83^ html
\82ð
\97v
\8b\81\82³
\82ê
\82½
115 // *************************************************************************
116 TThreadItemOnGetFooter = function(
117 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
118 inOptionalFooter : PChar //
\92Ç
\89Á
\82Ì
\83t
\83b
\83^
119 ) : PChar; stdcall; //
\90®
\8c`
\82³
\82ê
\82½ HTML
123 // =========================================================================
124 // TBoardItem
\8aÖ
\98A
125 // =========================================================================
127 // TBoardItem
\82Ì
\83v
\83\8d\83p
\83e
\83B
\90Ý
\92è
\81^
\8eæ
\93¾ ID
128 TBoardItemProperty = (
129 bipContext, // : DWORD //
\8e©
\97R
\82É
\90Ý
\92è
\82µ
\82Ä
\82¢
\82¢
\92l
130 bipItems, // : TThreadItem //
\94Â
\82É
\8cq
\82ª
\82ê
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
131 bipNo, // : Integer //
\94Ô
\8d\86
132 bipTitle, // : string //
\94Â
\83^
\83C
\83g
\83\8b
133 bipRoundDate, // : TDateTime //
\94Â
\82ð
\8eæ
\93¾
\82µ
\82½
\93ú
\8e\9e\81i
\8f\84\89ñ
\93ú
\8e\9e\81j
134 bipLastModified, // : TDateTime //
\94Â
\82ª
\8dX
\90V
\82³
\82ê
\82Ä
\82¢
\82é
\93ú
\8e\9e\81i
\83T
\81[
\83o
\91¤
\93ú
\8e\9e\81j
135 bipLastGetTime, // : TDateTime //
\83X
\83\8c\83b
\83h
\82Ü
\82½
\82Í
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\8cã
\82É
\8dX
\90V
\82µ
\82½
\93ú
\8e\9e\81i
\83T
\81[
\83o
\91¤
\93ú
\8e\9e\81E
\8f\91\82«
\8d\9e\82Ý
\8e\9e\82É
\8eg
\97p
\82·
\82é
\81j
136 bipRound, // : Boolean //
\8f\84\89ñ
\97\
\96ñ
137 bipRoundName, // : string //
\8f\84\89ñ
\96¼
138 bipIsLogFile, // : Boolean //
\83\8d\83O
\91¶
\8dÝ
\83t
\83\89\83O
139 bipUnRead, // : Integer //
\83X
\83\8c\83b
\83h
\96¢
\93Ç
\90\94
140 bipURL, // : string //
\94Â
\82ð
\83u
\83\89\83E
\83U
\82Å
\95\
\8e¦
\82·
\82é
\8dÛ
\82Ì URL
141 bipFilePath // : string //
\82±
\82Ì
\94Â
\82ª
\95Û
\91¶
\82³
\82ê
\82Ä
\82¢
\82é
\83p
\83X
144 // *************************************************************************
145 // TBoardItem
\82ª
\90¶
\90¬
\82³
\82ê
\82½
146 // *************************************************************************
147 TBoardItemCreate = procedure(
151 // *************************************************************************
152 // TBoardItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
153 // *************************************************************************
154 TBoardItemDispose = procedure(
158 // *************************************************************************
159 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
\82³
\82ê
\82½
160 // *************************************************************************
161 TBoardItemOnDownload = function(
162 inInstance : DWORD //
\83C
\83\93\83X
\83^
\83\93\83X
163 ) : TDownloadState; stdcall; //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\90¬
\8c÷
\82µ
\82½
\82©
\82Ç
\82¤
\82©
165 // *************************************************************************
166 //
\8ae
\83X
\83\8c\82Ì
\8fî
\95ñ
\82ð
\95Ô
\8bp
167 // *************************************************************************
168 TBoardItemEnumThreadCallBack = function(
169 inURL : PChar; //
\83X
\83\8c\83b
\83h
\82Ì URL
170 inTitle : PChar; //
\83X
\83\8c\83^
\83C
171 inCount : DWORD //
\83\8c\83X
\82Ì
\90\94
172 ) : Boolean; stdcall; //
\97ñ
\8b\93\82ð
\91±
\82¯
\82é
\82È
\82ç True
174 // *************************************************************************
175 //
\82±
\82Ì
\94Â
\82É
\95Û
\97L
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82ð
\97ñ
\8b\93
176 // *************************************************************************
177 TBoardItemOnEnumThread = procedure(
178 inInstance : DWORD; //
\83C
\83\93\83X
\83^
\83\93\83X
179 inCallBack : TBoardItemEnumThreadCallBack //
\95Ô
\8bp
\82·
\82×
\82«
\83R
\81[
\83\8b\83o
\83b
\83N
184 // =========================================================================
185 //
\83v
\83\89\83O
\83C
\83\93\82ð
\8aÇ
\97\9d\82·
\82é TBoardPlugin
\83N
\83\89\83X
186 // =========================================================================
187 TBoardPlugIn = class( TObject )
189 FFilePath : string; //
\83v
\83\89\83O
\83C
\83\93\82ð
\8e¦
\82·
\83p
\83X
190 FModule : HMODULE; //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b
192 FVersionInfo : TOnVersionInfo;
193 FAcceptURL : TOnAcceptURL;
195 FCreateThreadItem : TThreadItemCreate;
196 FDisposeThreadItem : TThreadItemDispose;
197 FDownloadThread : TThreadItemOnDownload;
198 FGetRes : TThreadItemOnGetRes;
199 FGetHeader : TThreadItemOnGetHeader;
200 FGetFooter : TThreadItemOnGetFooter;
202 FCreateBoardItem : TBoardItemCreate;
203 FDisposeBoardItem : TBoardItemDispose;
204 FDownloadBoard : TBoardItemOnDownload;
205 FEnumThread : TBoardItemOnEnumThread;
208 //
\83R
\83\93\83X
\83g
\83\89\83N
\83^
210 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
211 constructor CreateFromPath( inPath : string );
212 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
213 constructor CreateFromName( inName : string );
214 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
215 constructor CreateFromModule( inModule : HMODULE );
217 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
218 procedure LoadFromPath( inPath : string );
219 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
220 procedure LoadFromName( inName : string );
221 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
222 procedure LoadFromModule( inModule : HMODULE );
224 //===== PlugInMain
\8aÖ
\98A
225 //
\83o
\81[
\83W
\83\87\83\93\8fî
\95ñ
226 procedure VersionInfo( var outAgent : string;
227 var outMajor : DWORD; var outMinor : DWORD;
228 var outRelease : string; var outRevision : DWORD );
229 //
\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©
230 function AcceptURL( inURL : string ) : Boolean;
232 //===== TThreadItem
\8aÖ
\98A
233 // TThreadItem
\82ª
\90¶
\90¬
\82³
\82ê
\82½
234 procedure CreateThreadItem( threadItem : DWORD );
235 // TThreadItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
236 procedure DisposeThreadItem( threadItem : DWORD );
237 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
238 function DownloadThread( threadItem : DWORD ) : TDownloadState;
239 //
\83\8c\83X
\94Ô
\8d\86 n
\82É
\91Î
\82·
\82é html
\82ð
\97v
\8b\81
240 function GetRes( threadItem : DWORD; inNo : DWORD ) : string;
241 //
\83X
\83\8c\83b
\83h
\82Ì
\83w
\83b
\83_ html
\82ð
\97v
\8b\81
242 function GetHeader( threadItem : DWORD; inOptionalHeader : string ) : string;
243 //
\83X
\83\8c\83b
\83h
\82Ì
\83t
\83b
\83^ html
\82ð
\97v
\8b\81
244 function GetFooter( threadItem : DWORD; inOptionalFooter : string ) : string;
246 //===== TBoardItem
\8aÖ
\98A
247 // TBoard
\82ª
\90¶
\90¬
\82³
\82ê
\82½
248 procedure CreateBoardItem( boardItem : DWORD );
249 // TBoardItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
250 procedure DisposeBoardItem( boardItem : DWORD );
251 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
252 function DownloadBoard( boardItem : DWORD ) : TDownloadState;
253 //
\82±
\82Ì
\94Â
\82É
\95Û
\97L
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82ð
\97ñ
\8b\93
254 procedure EnumThread( inInstance : DWORD; inCallBack : TBoardItemEnumThreadCallBack );
257 procedure LoadPlugInAPI;
260 property FilePath : string read FFilePath;
261 property Module : HMODULE read FModule;
266 OnWorkBegin : TWorkBeginEvent;
267 OnWorkEnd : TWorkEndEvent;
269 BoardPlugIns : array of TBoardPlugIn;
271 procedure InitializeBoardPlugIns;
273 function CreateResultString(
277 function ThreadItemDat2HTML(
278 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
279 inDatRes : PChar; //
\96¼
\91O<>
\83\81\81[
\83\8b<>
\93ú
\95tID<>
\96{
\95¶<>
\82Å
\8d\
\90¬
\82³
\82ê
\82½
\83e
\83L
\83X
\83g
280 inResNo : DWORD; //
\83\8c\83X
\94Ô
\8d\86
281 inIsNew : Boolean //
\90V
\92\85\83\8c\83X
\82È
\82ç True
282 ) : PChar; stdcall; //
\90®
\8c`
\82³
\82ê
\82½ HTML
284 procedure DisposeResultString(
290 uses GikoSystem, BoardGroup;
292 // *************************************************************************
293 // BoardPlugin
\83t
\83H
\83\8b\83_
\82É
\82 \82é
\83v
\83\89\83O
\83C
\83\93\82ð
\91S
\82Ä
\83\8d\81[
\83h
294 // *************************************************************************
295 procedure InitializeBoardPlugIns;
298 pluginNames : TStringList;
301 pluginNames := TStringList.Create;
303 GikoSys.GetFileList( GikoSys.Setting.GetBoardPlugInDir, '*', pluginNames, False, False );
304 SetLength( BoardPlugIns, pluginNames.Count );
306 bound := pluginNames.Count - 1;
307 for i := 0 to bound do
308 BoardPlugIns[ i ] := TBoardPlugIn.CreateFromName( pluginNames.Strings[ i ] );
317 // =========================================================================
318 //
\83v
\83\89\83O
\83C
\83\93\82ð
\8aÇ
\97\9d\82·
\82é TBoardPlugin
\83N
\83\89\83X
319 // =========================================================================
321 // *************************************************************************
322 //
\83R
\83\93\83X
\83g
\83\89\83N
\83^
323 // *************************************************************************
324 constructor TBoardPlugIn.Create;
332 FCreateThreadItem := nil;
333 FDisposeThreadItem := nil;
334 FDownloadThread := nil;
339 FCreateBoardItem := nil;
340 FDisposeBoardItem := nil;
341 FDownloadBoard := nil;
346 // *************************************************************************
347 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
348 // *************************************************************************
349 constructor TBoardPlugIn.CreateFromPath(
356 LoadFromPath( inPath );
360 // *************************************************************************
361 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
362 // *************************************************************************
363 constructor TBoardPlugIn.CreateFromName(
370 LoadFromName( inName );
374 // *************************************************************************
375 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
376 // *************************************************************************
377 constructor TBoardPlugIn.CreateFromModule(
384 LoadFromModule( inModule );
388 // *************************************************************************
389 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
390 // *************************************************************************
391 procedure TBoardPlugIn.LoadFromPath(
397 if FileExists( inPath ) then
398 FModule := LoadLibrary( PChar( inPath ) )
399 else if FileExists( inPath + '.dll' ) then
400 FModule := LoadLibrary( PChar( inPath + '.dll' ) );
406 // *************************************************************************
407 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
408 // *************************************************************************
409 procedure TBoardPlugIn.LoadFromName(
414 LoadFromPath( GikoSys.Setting.GetBoardPlugInDir + inName );
418 // *************************************************************************
419 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
420 // *************************************************************************
421 procedure TBoardPlugIn.LoadFromModule(
425 tmp : array [0..MAX_PATH] of Char;
428 GetModuleFileName( inModule, tmp, SizeOf( tmp ) );
436 // *************************************************************************
437 //
\83o
\81[
\83W
\83\87\83\93\8fî
\95ñ
438 // *************************************************************************
439 procedure TBoardPlugIn.VersionInfo(
440 var outAgent : string; //
\83o
\81[
\83W
\83\87\83\93\82ð
\88ê
\90Ø
\8aÜ
\82Ü
\82È
\82¢
\8f\83\90\88\82È
\96¼
\8fÌ
441 var outMajor : DWORD; //
\83\81\83W
\83\83\81[
\83o
\81[
\83W
\83\87\83\93
442 var outMinor : DWORD; //
\83}
\83C
\83i
\81[
\83o
\81[
\83W
\83\87\83\93
443 var outRelease : string; //
\83\8a\83\8a\81[
\83X
\92i
\8aK
\96¼
444 var outRevision : DWORD //
\83\8a\83r
\83W
\83\87\83\93\83i
\83\93\83o
\81[
451 if Assigned( FVersionInfo ) then begin
452 FVersionInfo( agent, outMajor, outMinor, release, outRevision );
453 outAgent := string( agent );
454 outRelease := string( release );
455 DisposeResultString( agent );
456 DisposeResultString( release );
461 // *************************************************************************
462 //
\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©
463 // *************************************************************************
464 function TBoardPlugIn.AcceptURL(
469 if Assigned( FAcceptURL ) then
470 Result := FAcceptURL( PChar( inURL ) )
476 // *************************************************************************
477 // TThreadItem
\82ª
\90¶
\90¬
\82³
\82ê
\82½
478 // *************************************************************************
479 procedure TBoardPlugIn.CreateThreadItem(
484 if Assigned( FCreateThreadItem ) then
485 FCreateThreadItem( threadItem );
489 // *************************************************************************
490 // TThreadItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
491 // *************************************************************************
492 procedure TBoardPlugIn.DisposeThreadItem(
497 if Assigned( FDisposeThreadItem ) then
498 FDisposeThreadItem( threadItem );
502 // *************************************************************************
503 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
504 // *************************************************************************
505 function TBoardPlugIn.DownloadThread(
510 if Assigned( FDownloadThread ) then
511 Result := FDownloadThread( threadItem )
517 // *************************************************************************
518 //
\83\8c\83X
\94Ô
\8d\86 n
\82É
\91Î
\82·
\82é html
\82ð
\97v
\8b\81
519 // *************************************************************************
520 function TBoardPlugIn.GetRes(
521 threadItem : DWORD; //
\83C
\83\93\83X
\83^
\83\93\83X
522 inNo : DWORD //
\95\
\8e¦
\82·
\82é
\83\8c\83X
\94Ô
\8d\86
523 ) : string; //
\95\
\8e¦
\82·
\82é HTML
528 if Assigned( FGetRes ) then begin
529 tmp := FGetRes( threadItem, inNo );
530 Result := string( tmp );
531 DisposeResultString( tmp );
536 // *************************************************************************
537 //
\83X
\83\8c\83b
\83h
\82Ì
\83w
\83b
\83_ html
\82ð
\97v
\8b\81
538 // *************************************************************************
539 function TBoardPlugIn.GetHeader(
540 threadItem : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
541 inOptionalHeader : string //
\92Ç
\89Á
\82Ì
\83w
\83b
\83_
542 ) : string; //
\90®
\8c`
\82³
\82ê
\82½ HTML
547 if Assigned( FGetHeader ) then begin
548 tmp := FGetHeader( threadItem, PChar( inOptionalHeader ) );
549 Result := string( tmp );
550 DisposeResultString( tmp );
555 // *************************************************************************
556 //
\83X
\83\8c\83b
\83h
\82Ì
\83t
\83b
\83^ html
\82ð
\97v
\8b\81
557 // *************************************************************************
558 function TBoardPlugIn.GetFooter(
559 threadItem : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
560 inOptionalFooter : string //
\92Ç
\89Á
\82Ì
\83t
\83b
\83^
561 ) : string; //
\90®
\8c`
\82³
\82ê
\82½ HTML
566 if Assigned( FGetFooter ) then begin
567 tmp := FGetFooter( threadItem, PChar( inOptionalFooter ) );
568 Result := string( tmp );
569 DisposeResultString( tmp );
574 // *************************************************************************
575 // TBoardItem
\82ª
\90¶
\90¬
\82³
\82ê
\82½
576 // *************************************************************************
577 procedure TBoardPlugIn.CreateBoardItem(
582 if Assigned( FCreateBoardItem ) then
583 FCreateBoardItem( BoardItem );
587 // *************************************************************************
588 // TBoardItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
589 // *************************************************************************
590 procedure TBoardPlugIn.DisposeBoardItem(
595 if Assigned( FDisposeBoardItem ) then
596 FDisposeBoardItem( BoardItem );
600 // *************************************************************************
601 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
602 // *************************************************************************
603 function TBoardPlugIn.DownloadBoard(
608 if Assigned( FDownloadBoard ) then
609 Result := FDownloadBoard( BoardItem )
615 // *************************************************************************
616 //
\82±
\82Ì
\94Â
\82É
\95Û
\97L
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82ð
\97ñ
\8b\93
617 // *************************************************************************
618 procedure TBoardPlugIn.EnumThread(
620 inCallBack : TBoardItemEnumThreadCallBack
624 if Assigned( FEnumThread ) then
625 FEnumThread( inInstance, inCallBack );
629 // *************************************************************************
630 //
\83v
\83\89\83O
\83C
\83\93\82Ì API
\82ð
\8eæ
\93¾
631 // *************************************************************************
632 procedure TBoardPlugIn.LoadPlugInAPI;
636 if Assigned( Pointer( FModule ) ) then begin
637 FVersionInfo := GetProcAddress( FModule, 'OnVersionInfo' );
638 FAcceptURL := GetProcAddress( FModule, 'OnAcceptURL' );
640 FCreateThreadItem := GetProcAddress( FModule, 'ThreadItemCreate' );
641 FDisposeThreadItem := GetProcAddress( FModule, 'ThreadItemDispose' );
642 FDownloadThread := GetProcAddress( FModule, 'ThreadItemOnDownload' );
643 FGetRes := GetProcAddress( FModule, 'ThreadItemOnGetRes' );
644 FGetHeader := GetProcAddress( FModule, 'ThreadItemOnGetHeader' );
645 FGetFooter := GetProcAddress( FModule, 'ThreadItemOnGetFooter' );
647 FCreateBoardItem := GetProcAddress( FModule, 'BoardItemCreate' );
648 FDisposeBoardItem := GetProcAddress( FModule, 'BoardItemDispose' );
649 FDownloadBoard := GetProcAddress( FModule, 'BoardItemOnDownload' );
650 FEnumThread := GetProcAddress( FModule, 'BoardItemOnEnumThread' );
659 // =========================================================================
661 // =========================================================================
663 // *************************************************************************
664 //
\96ß
\82è
\92l
\82ª PChar
\82Å
\82 \82é API
\82Ì
\83\81\83\82\83\8a\82ð
\8am
\95Û
\82·
\82é
665 // *************************************************************************
666 function CreateResultString(
673 tmp := PChar( resultStr );
674 GetMem( Result, Length( tmp ) + 1 );
675 Move( tmp^, Result^, Length( tmp ) + 1 );
679 // *************************************************************************
680 //
\96ß
\82è
\92l
\82ª PChar
\82Å
\82 \82é API
\82Ì
\83\81\83\82\83\8a\82ð
\8aJ
\95ú
\82·
\82é
681 // *************************************************************************
682 procedure DisposeResultString(
687 FreeMem( resultStr );
691 // *************************************************************************
692 //
\83v
\83\8d\83O
\83\89\83\80\96{
\91Ì
\82Ì
\83o
\81[
\83W
\83\87\83\93\82ð
\8eæ
\93¾
\82·
\82é
693 // *************************************************************************
694 procedure VersionInfo(
695 var outAgent : PChar; //
\83o
\81[
\83W
\83\87\83\93\82ð
\88ê
\90Ø
\8aÜ
\82Ü
\82È
\82¢
\8f\83\90\88\82È
\96¼
\8fÌ
696 var outMajor : DWORD; //
\83\81\83W
\83\83\81[
\83o
\81[
\83W
\83\87\83\93
697 var outMinor : DWORD; //
\83}
\83C
\83i
\81[
\83o
\81[
\83W
\83\87\83\93
698 var outRelease : PChar; //
\83\8a\83\8a\81[
\83X
\92i
\8aK
\96¼
699 var outRevision : DWORD //
\83\8a\83r
\83W
\83\87\83\93\83i
\83\93\83o
\81[
703 outAgent := CreateResultString( PChar( APP_NAME ) );
706 outRelease := CreateResultString( PChar( BETA_VERSION_NAME_E ) );
707 outRevision := BETA_VERSION;
711 // *************************************************************************
712 //
\8ew
\92è
\82µ
\82½ URL
\82ð
\83_
\83E
\83\93\83\8d\81[
\83h
\82µ
\82Ä
\95Ô
\82·
713 // *************************************************************************
714 function InternalDownload(
715 inURL : PChar; //
\83_
\83E
\83\93\83\8d\81[
\83h
\82·
\82é URL
716 var ioModified : Double; //
\8dÅ
\8cã
\82É
\8eæ
\93¾
\82µ
\82½
\93ú
\8e\9e
717 var outResultData : PChar; //
\83_
\83E
\83\93\83\8d\81[
\83h
\82³
\82ê
\82½
\95¶
\8e\9a\97ñ
718 inRangeStart : DWORD; //
\8aJ
\8en
\88Ê
\92u
719 inRangeEnd : DWORD //
\8fI
\97¹
\88Ê
\92u
720 ) : Longint; stdcall; //
\83\8c\83X
\83|
\83\93\83X
\83R
\81[
\83h
722 httpSocket : TIdHTTP;
723 resStream : TMemoryStream;
729 httpSocket := TIdHTTP.Create( nil );
731 //
\83C
\83x
\83\93\83g
\82Ì
\90Ý
\92è
732 if Assigned( OnWork ) then
733 httpSocket.OnWork := OnWork;
734 if Assigned( OnWorkBegin ) then
735 httpSocket.OnWorkBegin := OnWorkBegin;
736 if Assigned( OnWorkEnd ) then
737 httpSocket.OnWorkEnd := OnWorkEnd;
739 //
\92Ê
\90M
\82É
\8aÖ
\82·
\82é
\90Ý
\92è
740 httpSocket.Request.CustomHeaders.Clear;
741 httpSocket.Response.Clear;
742 httpSocket.Request.Clear;
744 httpSocket.Request.UserAgent := GikoSys.GetUserAgent;
745 httpSocket.RecvBufferSize := Gikosys.Setting.RecvBufferSize;
746 httpSocket.ProxyParams.BasicAuthentication := False;
748 Writeln('------------------------------------------------------------');
750 //httpSocket.AllowCookies := False;
751 if GikoSys.Setting.ReadProxy then begin
752 if GikoSys.Setting.ProxyProtocol then
753 httpSocket.ProtocolVersion := pv1_1
755 httpSocket.ProtocolVersion := pv1_0;
756 httpSocket.ProxyParams.ProxyServer := GikoSys.Setting.ReadProxyAddress;
757 httpSocket.ProxyParams.ProxyPort := GikoSys.Setting.ReadProxyPort;
758 httpSocket.ProxyParams.ProxyUsername := GikoSys.Setting.ReadProxyUserID;
759 httpSocket.ProxyParams.ProxyPassword := GikoSys.Setting.ReadProxyPassword;
760 if GikoSys.Setting.ReadProxyUserID <> '' then
761 httpSocket.ProxyParams.BasicAuthentication := True;
763 Writeln('
\83v
\83\8d\83L
\83V
\90Ý
\92è
\82 \82è');
764 Writeln('
\83z
\83X
\83g: ' + GikoSys.Setting.ReadProxyAddress);
765 Writeln('
\83|
\81[
\83g: ' + IntToStr( GikoSys.Setting.ReadProxyPort ));
768 if GikoSys.Setting.Protocol then
769 httpSocket.ProtocolVersion := pv1_1
771 httpSocket.ProtocolVersion := pv1_0;
772 httpSocket.ProxyParams.ProxyServer := '';
773 httpSocket.ProxyParams.ProxyPort := 80;
774 httpSocket.ProxyParams.ProxyUsername := '';
775 httpSocket.ProxyParams.ProxyPassword := '';
777 Writeln('
\83v
\83\8d\83L
\83V
\90Ý
\92è
\82È
\82µ');
781 httpSocket.Request.ContentRangeStart := inRangeStart;
782 httpSocket.Request.ContentRangeEnd := inRangeEnd;
783 if (ioModified <> 0) and (ioModified <> ZERO_DATE) then
784 httpSocket.Request.LastModified := ioModified - OffsetFromUTC;
785 if inRangeStart = 0 then
786 httpSocket.Request.AcceptEncoding := 'gzip'
788 httpSocket.Request.AcceptEncoding := '';
789 httpSocket.Request.Accept := 'text/html';
791 resStream := TMemoryStream.Create;
797 Writeln('URL: ' + inURL);
799 httpSocket.Get( inURL, resStream );
801 Writeln('
\8eæ
\93¾
\82Å
\97á
\8aO
\82È
\82µ');
804 content := GikoSys.GzipDecompress( resStream, httpSocket.Response.ContentEncoding );
805 ioModified := httpSocket.Response.LastModified;
807 Result := httpSocket.ResponseCode;
808 if (Length( content ) = 0) and (Result = 206) then
811 outResultData := CreateResultString( content );
813 on E: EIdSocketError do begin
814 ioModified := ZERO_DATE;
815 outResultData := nil;
817 on E: EIdConnectException do begin
818 ioModified := ZERO_DATE;
819 outResultData := nil;
820 //Item.ErrText := E.Message;
822 on E: Exception do begin
824 Writeln('
\8eæ
\93¾
\82Å
\97á
\8aO
\82 \82è');
825 Writeln('E.Message: ' + E.Message);
827 ioModified := ZERO_DATE;
828 outResultData := nil;
829 Result := httpSocket.ResponseCode;
830 //Item.ErrText := E.Message;
843 // *************************************************************************
844 //
\82Q
\82¿
\82á
\82ñ
\82Ë
\82é
\82Ì dat
\8c`
\8e®
\82ð
\83\8d\81[
\83J
\83\8b\82 \82Ú
\81`
\82ñ
\82É
\92Ê
\82·
845 // *************************************************************************
846 function InternalAbon(
847 inDatText : PChar //
\96¼
\91O<>
\83\81\81[
\83\8b<>
\93ú
\95tID<>
\96{
\95¶<>[
\89ü
\8ds]
\82Å
\8d\
\90¬
\82³
\82ê
\82½
\83e
\83L
\83X
\83g
848 ) : PChar; stdcall; //
\82 \82Ú
\81`
\82ñ
\8dÏ
\82Ý
\82Ì dat
\8c`
\8e®
\83e
\83L
\83X
\83g
850 datList : TStringList;
853 datList := TStringList.Create;
854 datList.Text := string( inDatText );
855 //GikoSys.FAbon.IndividualAbon( datList, ChangeFileExt(FileName,'.NG'));
856 GikoSys.FAbon.Execute( datList );
857 GikoSys.FSelectResFilter.Execute( datList );
859 Result := CreateResultString( datList.Text );
863 // *************************************************************************
864 //
\82Q
\82¿
\82á
\82ñ
\82Ë
\82é
\82Ì dat
\8c`
\8e® 1
\8ds
\82ð HTML
\82É
\95Ï
\8a·
\82·
\82é
865 // *************************************************************************
866 function InternalDat2HTML(
867 inDatRes : PChar; //
\96¼
\91O<>
\83\81\81[
\83\8b<>
\93ú
\95tID<>
\96{
\95¶<>
\82Å
\8d\
\90¬
\82³
\82ê
\82½
\83e
\83L
\83X
\83g
868 inResNo : DWORD; //
\83\8c\83X
\94Ô
\8d\86
869 inIsNew : Boolean //
\90V
\92\85\83\8c\83X
\82È
\82ç True
870 ) : PChar; stdcall; //
\90®
\8c`
\82³
\82ê
\82½ HTML
873 threadItem : TThreadItem;
876 //
\83_
\83~
\81[
\82Ì
\83N
\83\89\83X
877 board := TBoard.Create;
878 threadItem := TThreadItem.Create;
881 threadItem.ParentBoard := Board;
883 Result := ThreadItemDat2HTML( DWORD( threadItem ), inDatRes, inResNo, inIsNew );
892 // =========================================================================
894 // =========================================================================
896 // *************************************************************************
897 //
\83u
\83\89\83E
\83U
\96{
\91Ì
\82ª
\92u
\82¢
\82Ä
\82 \82é
\83t
\83H
\83\8b\83_
898 // *************************************************************************
899 function ApplicationFolder : PChar; stdcall;
902 Result := CreateResultString( GikoSys.GetAppDir );
906 // *************************************************************************
907 //
\8f\89\8aú
\90Ý
\92è
\83t
\83H
\83\8b\83_
908 // *************************************************************************
909 function PreferencesFolder : PChar; stdcall;
912 Result := CreateResultString( GikoSys.GetConfigDir );
916 // *************************************************************************
917 //
\8f\89\8aú
\90Ý
\92è
\83t
\83@
\83C
\83\8b
918 // *************************************************************************
919 function PreferencesFile : PChar; stdcall;
922 Result := CreateResultString( GikoSys.GetAppDir + 'gikoNavi.ini' );
926 // *************************************************************************
927 //
\83\8d\83O
\83t
\83H
\83\8b\83_
928 // *************************************************************************
929 function LogFolder : PChar; stdcall;
932 Result := CreateResultString( GikoSys.GetAppDir + 'Log\' );
936 // *************************************************************************
937 // CSS
\83t
\83H
\83\8b\83_
938 // *************************************************************************
939 function CSSFolder : PChar; stdcall;
942 Result := CreateResultString( GikoSys.GetStyleSheetDir );
946 // *************************************************************************
947 //
\83X
\83L
\83\93\82ð
\93ü
\82ê
\82Ä
\82¨
\82
\83t
\83H
\83\8b\83_
948 // *************************************************************************
949 function SkinFolder : PChar; stdcall;
952 Result := CreateResultString( GikoSys.GetSkinDir );
956 // *************************************************************************
957 //
\8eg
\97p
\82µ
\82Ä
\82¢
\82é CSS /
\83X
\83L
\83\93
958 // *************************************************************************
959 function SkinFile : PChar; stdcall;
962 Result := CreateResultString( GikoSys.Setting.CSSFileName );
966 // *************************************************************************
967 //
\82 \82Ú
\81[
\82ñ
\8bK
\91¥
\82ª
\92u
\82¢
\82Ä
\82 \82é
\83f
\83B
\83\8c\83N
\83g
\83\8a
968 // *************************************************************************
969 function AbonFolder : PChar; stdcall;
972 Result := CreateResultString( GikoSys.Setting.GetNGWordsDir );
976 // *************************************************************************
977 //
\8eg
\97p
\82µ
\82Ä
\82¢
\82é
\82 \82Ú
\81[
\82ñ
\8bK
\91¥
978 // *************************************************************************
979 function AbonFile : PChar; stdcall;
982 Result := CreateResultString( GikoSys.FAbon.GetNGwordpath );
988 // =========================================================================
990 // =========================================================================
992 // *************************************************************************
993 // TThreadItem
\83N
\83\89\83X
\82Ì
\83v
\83\8d\83p
\83e
\83B
\82ð
\8eæ
\93¾
\82·
\82é
994 // *************************************************************************
995 function ThreadItemGetLong(
997 propertyID : TThreadItemProperty
1000 threadItem : TThreadItem;
1003 threadItem := TThreadItem( instance );
1005 tipContext: // : DWORD //
\8e©
\97R
\82É
\90Ý
\92è
\82µ
\82Ä
\82¢
\82¢
\92l
1006 Result := threadItem.Context;
1007 tipNo: // : Integer //
\94Ô
\8d\86
1008 Result := threadItem.No;
1009 tipFileName: // : string //
\83X
\83\8c\83b
\83h
\83t
\83@
\83C
\83\8b\96¼
1010 Result := DWORD( CreateResultString( threadItem.FileName ) );
1011 tipTitle: // : string //
\83X
\83\8c\83b
\83h
\83^
\83C
\83g
\83\8b
1012 Result := DWORD( CreateResultString( threadItem.Title ) );
1013 tipCount: // : Integer //
\83X
\83\8c\83b
\83h
\83J
\83E
\83\93\83g
\81i
\83\8d\81[
\83J
\83\8b\81j
1014 Result := threadItem.Count;
1015 tipAllResCount: // : Integer //
\83X
\83\8c\83b
\83h
\83J
\83E
\83\93\83g
\81i
\83T
\81[
\83o
\81j
1016 Result := threadItem.AllResCount;
1017 tipNewResCount: // : Integer //
\83X
\83\8c\83b
\83h
\90V
\92\85\90\94
1018 Result := threadItem.NewResCount;
1019 tipSize: // : Integer //
\83X
\83\8c\83b
\83h
\83T
\83C
\83Y
1020 Result := threadItem.Size;
1021 tipRound: // : Boolean //
\8f\84\89ñ
\83t
\83\89\83O
1022 Result := DWORD( threadItem.Round );
1023 tipRoundName: // : string //
\8f\84\89ñ
\96¼
1024 Result := DWORD( CreateResultString( threadItem.RoundName ) );
1025 tipIsLogFile: // : Boolean //
\83\8d\83O
\91¶
\8dÝ
\83t
\83\89\83O
1026 Result := DWORD( threadItem.IsLogFile );
1027 tipKokomade: // : Integer //
\83R
\83R
\82Ü
\82Å
\93Ç
\82ñ
\82¾
\94Ô
\8d\86
1028 Result := threadItem.Kokomade;
1029 tipNewReceive: // : Integer //
\83R
\83R
\82©
\82ç
\90V
\8bK
\8eó
\90M
1030 Result := threadItem.NewReceive;
1031 tipNewArrival: // : Boolean //
\90V
\92\85
1032 Result := DWORD( threadItem.NewArrival );
1033 tipUnRead: // : Boolean //
\96¢
\93Ç
\83t
\83\89\83O
1034 Result := DWORD( threadItem.UnRead );
1035 tipScrollTop: // : Integer //
\83X
\83N
\83\8d\81[
\83\8b\88Ê
\92u
1036 Result := threadItem.ScrollTop;
1037 tipDownloadHost: // : string //
\8d¡
\82Ì
\83z
\83X
\83g
\82Æ
\88á
\82¤
\8fê
\8d\87\82Ì
\83z
\83X
\83g
1038 Result := DWORD( CreateResultString( threadItem.DownloadHost ) );
1039 tipAgeSage: // : TThreadAgeSage //
\83A
\83C
\83e
\83\80\82Ì
\8fã
\82°
\89º
\82°
1040 Result := DWORD( threadItem.AgeSage );
1041 tipURL: // : string //
\83X
\83\8c\83b
\83h
\82ð
\83u
\83\89\83E
\83U
\82Å
\95\
\8e¦
\82·
\82é
\8dÛ
\82Ì URL
1042 Result := DWORD( CreateResultString( threadItem.URL ) );
1043 tipFilePath: //
\82±
\82Ì
\83X
\83\8c\82ª
\95Û
\91¶
\82³
\82ê
\82Ä
\82¢
\82é
\83p
\83X
1044 Result := DWORD( CreateResultString( threadItem.FilePath ) );
1050 // *************************************************************************
1051 // TThreadItem
\83N
\83\89\83X
\82Ì
\83v
\83\8d\83p
\83e
\83B
\82ð
\90Ý
\92è
\82·
\82é
1052 // *************************************************************************
1053 procedure ThreadItemSetLong(
1055 propertyID : TThreadItemProperty;
1059 threadItem : TThreadItem;
1062 threadItem := TThreadItem( instance );
1064 tipContext: // : DWORD //
\8e©
\97R
\82É
\90Ý
\92è
\82µ
\82Ä
\82¢
\82¢
\92l
1065 threadItem.Context := param;
1066 tipNo: // : Integer //
\94Ô
\8d\86
1067 threadItem.No := param;
1068 tipFileName: // : string //
\83X
\83\8c\83b
\83h
\83t
\83@
\83C
\83\8b\96¼
1069 threadItem.FileName := string( PChar( param ) );
1070 tipTitle: // : string //
\83X
\83\8c\83b
\83h
\83^
\83C
\83g
\83\8b
1071 threadItem.Title := string( PChar( param ) );
1072 tipCount: // : Integer //
\83X
\83\8c\83b
\83h
\83J
\83E
\83\93\83g
\81i
\83\8d\81[
\83J
\83\8b\81j
1073 threadItem.Count := param;
1074 tipAllResCount: // : Integer //
\83X
\83\8c\83b
\83h
\83J
\83E
\83\93\83g
\81i
\83T
\81[
\83o
\81j
1075 threadItem.AllResCount := param;
1076 tipNewResCount: // : Integer //
\83X
\83\8c\83b
\83h
\90V
\92\85\90\94
1077 threadItem.NewResCount := param;
1078 tipSize: // : Integer //
\83X
\83\8c\83b
\83h
\83T
\83C
\83Y
1079 threadItem.Size := param;
1080 tipRound: // : Boolean //
\8f\84\89ñ
\83t
\83\89\83O
1081 threadItem.Round := Boolean( param );
1082 tipRoundName: // : string //
\8f\84\89ñ
\96¼
1083 threadItem.RoundName := string( PChar( param ) );
1084 tipIsLogFile: // : Boolean //
\83\8d\83O
\91¶
\8dÝ
\83t
\83\89\83O
1085 threadItem.IsLogFile := Boolean( param );
1086 tipKokomade: // : Integer //
\83R
\83R
\82Ü
\82Å
\93Ç
\82ñ
\82¾
\94Ô
\8d\86
1087 threadItem.Kokomade := param;
1088 tipNewReceive: // : Integer //
\83R
\83R
\82©
\82ç
\90V
\8bK
\8eó
\90M
1089 threadItem.NewReceive := param;
1090 tipNewArrival: // : Boolean //
\90V
\92\85
1091 threadItem.NewArrival := Boolean( param );
1092 tipUnRead: // : Boolean //
\96¢
\93Ç
\83t
\83\89\83O
1093 threadItem.UnRead := Boolean( param );
1094 tipScrollTop: // : Integer //
\83X
\83N
\83\8d\81[
\83\8b\88Ê
\92u
1095 threadItem.ScrollTop := param;
1096 tipDownloadHost: // : string //
\8d¡
\82Ì
\83z
\83X
\83g
\82Æ
\88á
\82¤
\8fê
\8d\87\82Ì
\83z
\83X
\83g
1097 threadItem.DownloadHost := string( PChar( param ) );
1098 tipAgeSage: // : TThreadAgeSage //
\83A
\83C
\83e
\83\80\82Ì
\8fã
\82°
\89º
\82°
1099 threadItem.AgeSage := TGikoAgeSage( param );
1100 tipURL: // : string //
\83X
\83\8c\83b
\83h
\82ð
\83u
\83\89\83E
\83U
\82Å
\95\
\8e¦
\82·
\82é
\8dÛ
\82Ì URL
1101 threadItem.URL := string( PChar( param ) );
1102 tipFilePath: // : string //
\82±
\82Ì
\83X
\83\8c\82ª
\95Û
\91¶
\82³
\82ê
\82Ä
\82¢
\82é
\83p
\83X
1103 threadItem.FilePath := string( PChar( param ) );
1108 // *************************************************************************
1109 // TThreadItem
\83N
\83\89\83X
\82Ì
\83v
\83\8d\83p
\83e
\83B
\82ð
\8eæ
\93¾
\82·
\82é
1110 // *************************************************************************
1111 function ThreadItemGetDouble(
1113 propertyID : TThreadItemProperty
1114 ) : Double; stdcall;
1116 threadItem : TThreadItem;
1119 threadItem := TThreadItem( instance );
1121 tipRoundDate: // : TDateTime //
\83X
\83\8c\83b
\83h
\82ð
\8eæ
\93¾
\82µ
\82½
\93ú
\8e\9e\81i
\8f\84\89ñ
\93ú
\8e\9e\81j
1122 Result := threadItem.RoundDate;
1123 tipLastModified: // : TDateTime //
\83X
\83\8c\83b
\83h
\82ª
\8dX
\90V
\82³
\82ê
\82Ä
\82¢
\82é
\93ú
\8e\9e\81i
\83T
\81[
\83o
\91¤
\93ú
\8e\9e\81j
1124 Result := threadItem.LastModified;
1131 // *************************************************************************
1132 // TThreadItem
\83N
\83\89\83X
\82Ì
\83v
\83\8d\83p
\83e
\83B
\82ð
\90Ý
\92è
\82·
\82é
1133 // *************************************************************************
1134 procedure ThreadItemSetDouble(
1136 propertyID : TThreadItemProperty;
1140 threadItem : TThreadItem;
1143 threadItem := TThreadItem( instance );
1145 tipRoundDate: // : TDateTime //
\83X
\83\8c\83b
\83h
\82ð
\8eæ
\93¾
\82µ
\82½
\93ú
\8e\9e\81i
\8f\84\89ñ
\93ú
\8e\9e\81j
1146 threadItem.RoundDate := param;
1147 tipLastModified: // : TDateTime //
\83X
\83\8c\83b
\83h
\82ª
\8dX
\90V
\82³
\82ê
\82Ä
\82¢
\82é
\93ú
\8e\9e\81i
\83T
\81[
\83o
\91¤
\93ú
\8e\9e\81j
1148 threadItem.LastModified := param;
1153 // *************************************************************************
1154 // TThreadItem
\83N
\83\89\83X
\82ð
\8c³
\82É
\82Q
\82¿
\82á
\82ñ
\82Ë
\82é
\82Ì dat
\8c`
\8e® 1
\8ds
\82ð HTML
\82É
\95Ï
\8a·
\82·
\82é
1155 // *************************************************************************
1156 function ThreadItemDat2HTML(
1157 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
1158 inDatRes : PChar; //
\96¼
\91O<>
\83\81\81[
\83\8b<>
\93ú
\95tID<>
\96{
\95¶<>
\82Å
\8d\
\90¬
\82³
\82ê
\82½
\83e
\83L
\83X
\83g
1159 inResNo : DWORD; //
\83\8c\83X
\94Ô
\8d\86
1160 inIsNew : Boolean //
\90V
\92\85\83\8c\83X
\82È
\82ç True
1161 ) : PChar; stdcall; //
\90®
\8c`
\82³
\82ê
\82½ HTML
1163 threadItem : TThreadItem;
1168 threadItem := TThreadItem( inInstance );
1169 //
\88ø
\90\94\82ð
\95ª
\89ð
1170 res := GikoSys.DivideStrLine( string( inDatRes ) );
1171 no := IntToStr( inResNo );
1174 if GikoSys.Setting.UseSkin then begin
1177 Result := CreateResultString( GikoSys.SkinedRes(
1178 GikoSys.LoadFromSkin(
1179 GikoSys.Setting.GetSkinNewResFileName, threadItem, threadItem.SizeByte
1183 Result := CreateResultString( GikoSys.SkinedRes(
1184 GikoSys.LoadFromSkin(
1185 GikoSys.Setting.GetSkinResFileName, threadItem, threadItem.SizeByte
1189 // CSS or
\83f
\83t
\83H
\83\8b\83g
1190 if res.FName = '' then
1191 res.FName := ' ';
1192 if res.FMailTo = '' then
1193 Result := CreateResultString( '<a name="' + no + '"></a>'
1194 + '<div class="header"><span class="no"><a href="menu:' + No + '">' + no + '</a></span> '
1195 + '<span class="name_label">
\96¼
\91O
\81F</span> '
1196 + '<span class="name"><b>' + res.FName + '</b></span> '
1197 + '<span class="date_label">
\93\8a\8de
\93ú
\81F</span> '
1198 + '<span class="date">' + res.FDateTime+ '</span></div>'
1199 + '<div class="mes">' + res.FBody + ' </div>' )
1200 else if GikoSys.Setting.ShowMail then
1201 Result := CreateResultString( '<a name="' + no + '"></a>'
1202 + '<div class="header"><span class="no"><a href="menu:' + no + '">' + no + '</a></span>'
1203 + '<span class="name_label">
\96¼
\91O
\81F </span>'
1204 + '<a class="name_mail" href="mailto:' + res.FMailTo + '">'
1205 + '<b>' + res.FName + '</b></a><span class="mail"> [' + res.FMailTo + ']</span>'
1206 + '<span class="date_label">
\93\8a\8de
\93ú
\81F</span>'
1207 + '<span class="date"> ' + res.FDateTime+ '</span></div>'
1208 + '<div class="mes">' + res.FBody + ' </div>' )
1210 Result := CreateResultString( '<a name="' + no + '"></a>'
1211 + '<div class="header"><span class="no"><a href="menu:' + no + '">' + no + '</a></span>'
1212 + '<span class="name_label">
\96¼
\91O
\81F </span>'
1213 + '<a class="name_mail" href="mailto:' + res.FMailTo + '">'
1214 + '<b>' + res.FName + '</b></a>'
1215 + '<span class="date_label">
\93\8a\8de
\93ú
\81F</span>'
1216 + '<span class="date"> ' + res.FDateTime+ '</span></div>'
1217 + '<div class="mes">' + res.FBody + ' </div>' );
1225 // *************************************************************************
1226 // TThreadItem
\83N
\83\89\83X
\82ð
\8c³
\82É
\83X
\83\8c\83b
\83h
\82Ì
\83w
\83b
\83_
\82ð
\8eæ
\93¾
\82·
\82é
1227 // *************************************************************************
1228 function ThreadItemGetHeader(
1229 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
1230 inOptionalHeader : PChar //
\92Ç
\89Á
\82Ì
\83w
\83b
\83_
1231 ) : PChar; stdcall; //
\90®
\8c`
\82³
\82ê
\82½ HTML
1233 threadItem : TThreadItem;
1234 skinHeader : string;
1235 optionalHeader : string;
1238 threadItem := TThreadItem( inInstance );
1239 optionalHeader := string( inOptionalHeader );
1242 if GikoSys.Setting.UseSkin then begin
1244 skinHeader := GikoSys.LoadFromSkin( GikoSys.Setting.GetSkinHeaderFileName, threadItem, threadItem.SizeByte );
1245 if Length( optionalHeader ) > 0 then
1247 StringReplace( skinHeader, '</head>', optionalHeader + '</head>', [] );
1248 end else if GikoSys.Setting.UseCSS then begin
1252 '<title>' + threadItem.Title + '</title>' +
1253 '<link rel="stylesheet" href="'+ GikoSys.Setting.GetStyleSheetDir + GikoSys.Setting.CSSFileName +'" type="text/css">' +
1257 '<div class="title">' + threadItem.Title + '</div>';
1259 //
\83f
\83t
\83H
\83\8b\83g
1262 '<title>' + threadItem.Title + '</title>' +
1266 '<div class="title">' + threadItem.Title + '</div>';
1271 Result := CreateResultString( skinHeader );
1275 // *************************************************************************
1276 // TThreadItem
\83N
\83\89\83X
\82ð
\8c³
\82É
\83X
\83\8c\83b
\83h
\82Ì
\83t
\83b
\83^
\82ð
\8eæ
\93¾
\82·
\82é
1277 // *************************************************************************
1278 function ThreadItemGetFooter(
1279 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
1280 inOptionalFooter : PChar //
\92Ç
\89Á
\82Ì
\83t
\83b
\83^
1281 ) : PChar; stdcall; //
\90®
\8c`
\82³
\82ê
\82½ HTML
1283 threadItem : TThreadItem;
1284 skinFooter : string;
1285 optionalFooter : string;
1288 threadItem := TThreadItem( inInstance );
1289 optionalFooter := string( inOptionalFooter );
1292 if GikoSys.Setting.UseSkin then begin
1293 skinFooter := GikoSys.LoadFromSkin( GikoSys.Setting.GetSkinFooterFileName, threadItem, threadItem.SizeByte );
1294 if Length( optionalFooter ) > 0 then
1296 StringReplace( skinFooter, '</body>', optionalFooter + '</body>', [] );
1299 '<a name="bottom"></a>' +
1302 '<a name="last"></a>' +
1308 Result := CreateResultString( skinFooter );
1312 // *************************************************************************
1313 //
\83X
\83\8c\83b
\83h
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\90i
\8ds
\82µ
\82½
1314 // *************************************************************************
1315 procedure ThreadItemWork(
1316 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
1317 inWorkCount : Integer //
\8c»
\8dÝ
\82Ì
\90i
\95à
\8fó
\8bµ(
\83J
\83E
\83\93\83g)
1321 if Assigned( OnWork ) then
1322 OnWork( TObject( inInstance ), wmRead, inWorkCount );
1326 // *************************************************************************
1327 //
\83X
\83\8c\83b
\83h
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8en
\82Ü
\82Á
\82½
1328 // *************************************************************************
1329 procedure ThreadItemWorkBegin(
1330 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
1331 inWorkCountMax : Integer //
\92Ê
\90M
\82Ì
\8fI
\82í
\82è
\82ð
\8e¦
\82·
\83J
\83E
\83\93\83g
1335 if Assigned( OnWorkBegin ) then
1336 OnWorkBegin( TObject( inInstance ), wmRead, inWorkCountMax );
1340 // *************************************************************************
1341 //
\83X
\83\8c\83b
\83h
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8fI
\82í
\82Á
\82½
1342 // *************************************************************************
1343 procedure ThreadItemWorkEnd(
1344 inInstance : DWORD //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
1348 if Assigned( OnWorkEnd ) then
1349 OnWorkEnd( TObject( inInstance ), wmRead );
1355 // =========================================================================
1357 // =========================================================================
1359 // *************************************************************************
1360 // TBoardItem
\83N
\83\89\83X
\82Ì
\83v
\83\8d\83p
\83e
\83B
\82ð
\8eæ
\93¾
\82·
\82é
1361 // *************************************************************************
1362 function BoardItemGetLong(
1364 propertyID : TBoardItemProperty
1370 boardItem := TBoard( instance );
1372 bipContext: // : DWORD //
\8e©
\97R
\82É
\90Ý
\92è
\82µ
\82Ä
\82¢
\82¢
\92l
1373 Result := boardItem.Context;
1374 bipNo: // : Integer //
\94Ô
\8d\86
1375 Result := boardItem.No;
1376 bipTitle: // : string //
\83X
\83\8c\83b
\83h
\83^
\83C
\83g
\83\8b
1377 Result := DWORD( CreateResultString( boardItem.Title ) );
1378 bipRound: // : Boolean //
\8f\84\89ñ
\83t
\83\89\83O
1379 Result := DWORD( boardItem.Round );
1380 bipRoundName: // : string //
\8f\84\89ñ
\96¼
1381 Result := DWORD( CreateResultString( boardItem.RoundName ) );
1382 bipIsLogFile: // : Boolean //
\83\8d\83O
\91¶
\8dÝ
\83t
\83\89\83O
1383 Result := DWORD( boardItem.IsLogFile );
1384 bipUnRead: // : Integer //
\83X
\83\8c\83b
\83h
\96¢
\93Ç
\90\94
1385 Result := DWORD( boardItem.UnRead );
1386 bipURL: // : string //
\83X
\83\8c\83b
\83h
\82ð
\83u
\83\89\83E
\83U
\82Å
\95\
\8e¦
\82·
\82é
\8dÛ
\82Ì URL
1387 Result := DWORD( CreateResultString( boardItem.URL ) );
1388 bipFilePath: //
\82±
\82Ì
\83X
\83\8c\82ª
\95Û
\91¶
\82³
\82ê
\82Ä
\82¢
\82é
\83p
\83X
1389 Result := DWORD( CreateResultString( boardItem.FilePath ) );
1395 // *************************************************************************
1396 // TBoardItem
\83N
\83\89\83X
\82Ì
\83v
\83\8d\83p
\83e
\83B
\82ð
\90Ý
\92è
\82·
\82é
1397 // *************************************************************************
1398 procedure BoardItemSetLong(
1400 propertyID : TBoardItemProperty;
1407 boardItem := TBoard( instance );
1409 bipContext: // : DWORD //
\8e©
\97R
\82É
\90Ý
\92è
\82µ
\82Ä
\82¢
\82¢
\92l
1410 boardItem.Context := param;
1411 bipNo: // : Integer //
\94Ô
\8d\86
1412 boardItem.No := param;
1413 bipTitle: // : string //
\83X
\83\8c\83b
\83h
\83^
\83C
\83g
\83\8b
1414 boardItem.Title := string( PChar( param ) );
1415 bipRound: // : Boolean //
\8f\84\89ñ
\83t
\83\89\83O
1416 boardItem.Round := Boolean( param );
1417 bipRoundName: // : string //
\8f\84\89ñ
\96¼
1418 boardItem.RoundName := string( PChar( param ) );
1419 bipIsLogFile: // : Boolean //
\83\8d\83O
\91¶
\8dÝ
\83t
\83\89\83O
1420 boardItem.IsLogFile := Boolean( param );
1421 bipUnRead: // : Integer //
\83X
\83\8c\83b
\83h
\96¢
\93Ç
\90\94
1422 boardItem.UnRead := Integer( param );
1423 bipURL: // : string //
\83X
\83\8c\83b
\83h
\82ð
\83u
\83\89\83E
\83U
\82Å
\95\
\8e¦
\82·
\82é
\8dÛ
\82Ì URL
1424 boardItem.URL := string( PChar( param ) );
1425 bipFilePath: // : string //
\82±
\82Ì
\83X
\83\8c\82ª
\95Û
\91¶
\82³
\82ê
\82Ä
\82¢
\82é
\83p
\83X
1426 boardItem.FilePath := string( PChar( param ) );
1431 // *************************************************************************
1432 // TBoardItem
\83N
\83\89\83X
\82Ì
\83v
\83\8d\83p
\83e
\83B
\82ð
\8eæ
\93¾
\82·
\82é
1433 // *************************************************************************
1434 function BoardItemGetDouble(
1436 propertyID : TBoardItemProperty
1437 ) : Double; stdcall;
1442 boardItem := TBoard( instance );
1444 bipRoundDate: // : TDateTime //
\83X
\83\8c\83b
\83h
\82ð
\8eæ
\93¾
\82µ
\82½
\93ú
\8e\9e\81i
\8f\84\89ñ
\93ú
\8e\9e\81j
1445 Result := boardItem.RoundDate;
1446 bipLastModified: // : TDateTime //
\83X
\83\8c\83b
\83h
\82ª
\8dX
\90V
\82³
\82ê
\82Ä
\82¢
\82é
\93ú
\8e\9e\81i
\83T
\81[
\83o
\91¤
\93ú
\8e\9e\81j
1447 Result := boardItem.LastModified;
1448 bipLastGetTime: // : TDateTime //
\83X
\83\8c\83b
\83h
\82Ü
\82½
\82Í
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\8cã
\82É
\8dX
\90V
\82µ
\82½
\93ú
\8e\9e\81i
\83T
\81[
\83o
\91¤
\93ú
\8e\9e\81E
\8f\91\82«
\8d\9e\82Ý
\8e\9e\82É
\8eg
\97p
\82·
\82é
\81j
1449 Result := boardItem.LastGetTime;
1456 // *************************************************************************
1457 // TBoardItem
\83N
\83\89\83X
\82Ì
\83v
\83\8d\83p
\83e
\83B
\82ð
\90Ý
\92è
\82·
\82é
1458 // *************************************************************************
1459 procedure BoardItemSetDouble(
1461 propertyID : TBoardItemProperty;
1468 boardItem := TBoard( instance );
1470 bipRoundDate: // : TDateTime //
\83X
\83\8c\83b
\83h
\82ð
\8eæ
\93¾
\82µ
\82½
\93ú
\8e\9e\81i
\8f\84\89ñ
\93ú
\8e\9e\81j
1471 boardItem.RoundDate := param;
1472 bipLastModified: // : TDateTime //
\83X
\83\8c\83b
\83h
\82ª
\8dX
\90V
\82³
\82ê
\82Ä
\82¢
\82é
\93ú
\8e\9e\81i
\83T
\81[
\83o
\91¤
\93ú
\8e\9e\81j
1473 boardItem.LastModified := param;
1474 bipLastGetTime: // : TDateTime //
\83X
\83\8c\83b
\83h
\82Ü
\82½
\82Í
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\8cã
\82É
\8dX
\90V
\82µ
\82½
\93ú
\8e\9e\81i
\83T
\81[
\83o
\91¤
\93ú
\8e\9e\81E
\8f\91\82«
\8d\9e\82Ý
\8e\9e\82É
\8eg
\97p
\82·
\82é
\81j
1475 boardItem.LastGetTime := param;
1480 // *************************************************************************
1481 // TBoardItem
\83N
\83\89\83X
\82É
\8cq
\82ª
\82ê
\82Ä
\82¢
\82é TThreadItem
\83N
\83\89\83X
\82ð
\8eæ
\93¾
\82·
\82é
1482 // *************************************************************************
1483 function BoardItemGetItems(
1491 boardItem := TBoard( instance );
1492 Result := DWORD( boardItem.Items[ index ] );
1496 // *************************************************************************
1497 //
\94Â
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\90i
\8ds
\82µ
\82½
1498 // *************************************************************************
1499 procedure BoardItemWork(
1500 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
1501 inWorkCount : Integer //
\8c»
\8dÝ
\82Ì
\90i
\95à
\8fó
\8bµ(
\83J
\83E
\83\93\83g)
1505 if Assigned( OnWork ) then
1506 OnWork( TObject( inInstance ), wmRead, inWorkCount );
1510 // *************************************************************************
1511 //
\94Â
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8en
\82Ü
\82Á
\82½
1512 // *************************************************************************
1513 procedure BoardItemWorkBegin(
1514 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
1515 inWorkCountMax : Integer //
\92Ê
\90M
\82Ì
\8fI
\82í
\82è
\82ð
\8e¦
\82·
\83J
\83E
\83\93\83g
1519 if Assigned( OnWorkBegin ) then
1520 OnWorkBegin( TObject( inInstance ), wmRead, inWorkCountMax );
1524 // *************************************************************************
1525 //
\94Â
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8fI
\82í
\82Á
\82½
1526 // *************************************************************************
1527 procedure BoardItemWorkEnd(
1528 inInstance : DWORD //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
1532 if Assigned( OnWorkEnd ) then
1533 OnWorkEnd( TObject( inInstance ), wmRead );
1537 // *************************************************************************
1538 //
\94Â
\82ª
\95Û
\97L
\82·
\82é
\83X
\83\8c\88ê
\97\97\82Ì
\97ñ
\8b\93\8f\88\97\9d\82ð
\83v
\83\8d\83O
\83\89\83\80\96{
\91Ì
\82É
\94C
\82³
\82ê
\82½
1539 // *************************************************************************
1540 procedure BoardItemEnumThread(
1542 inCallBack : TBoardItemEnumThreadCallBack;
1543 inSubjectText : PChar
1547 subject : TStringList;
1550 isContinue : Boolean;
1554 board := TBoard( inInstance );
1555 subject := TStringList.Create;
1557 subject.Text := inSubjectText;
1559 for i := 0 to subject.Count - 1 do begin
1560 rec := GikoSys.DivideSubject( subject[i] );
1561 rec.FFileName := Trim(rec.FFileName);
1562 if (rec.FTitle = '') and (rec.FCount = 0) then
1565 isContinue := inCallBack(
1566 PChar( GikoSys.GetURL( board.BBSID, rec.FFileName ) ),
1567 PChar( rec.FTitle ),
1568 DWORD( rec.FCount ) );
1570 if ( not isContinue ) then
1583 DisposeResultString,
1599 ThreadItemGetDouble,
1600 ThreadItemSetDouble,
1602 ThreadItemGetHeader,
1603 ThreadItemGetFooter,
1605 ThreadItemWorkBegin,
1612 BoardItemEnumThread,