1 unit ExternalBoardManager;
6 Windows, Classes, SysUtils,
7 IdHTTP, IdComponent, IdGlobal, IdException,
11 // TThreadItem
\82Ì
\83v
\83\8d\83p
\83e
\83B
\90Ý
\92è
\81^
\8eæ
\93¾ ID
12 TThreadItemProperty = (
13 tipContext, // : DWORD //
\8e©
\97R
\82É
\90Ý
\92è
\82µ
\82Ä
\82¢
\82¢
\92l
14 tipNo, // : Integer //
\94Ô
\8d\86
15 tipFileName, // : string //
\83X
\83\8c\83b
\83h
\83t
\83@
\83C
\83\8b\96¼
16 tipTitle, // : string //
\83X
\83\8c\83b
\83h
\83^
\83C
\83g
\83\8b
17 tipRoundDate, // : TDateTime //
\83X
\83\8c\83b
\83h
\82ð
\8eæ
\93¾
\82µ
\82½
\93ú
\8e\9e\81i
\8f\84\89ñ
\93ú
\8e\9e\81j
18 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
19 tipCount, // : Integer //
\83X
\83\8c\83b
\83h
\83J
\83E
\83\93\83g
\81i
\83\8d\81[
\83J
\83\8b\81j
20 tipAllResCount, // : Integer //
\83X
\83\8c\83b
\83h
\83J
\83E
\83\93\83g
\81i
\83T
\81[
\83o
\81j
21 tipNewResCount, // : Integer //
\83X
\83\8c\83b
\83h
\90V
\92\85\90\94
22 tipSize, // : Integer //
\83X
\83\8c\83b
\83h
\83T
\83C
\83Y
23 tipRound, // : Boolean //
\8f\84\89ñ
\83t
\83\89\83O
24 tipRoundName, // : string //
\8f\84\89ñ
\96¼
25 tipIsLogFile, // : Boolean //
\83\8d\83O
\91¶
\8dÝ
\83t
\83\89\83O
26 tipKokomade, // : Integer //
\83R
\83R
\82Ü
\82Å
\93Ç
\82ñ
\82¾
\94Ô
\8d\86
27 tipNewReceive, // : Integer //
\83R
\83R
\82©
\82ç
\90V
\8bK
\8eó
\90M
28 tipNewArrival, // : Boolean //
\90V
\92\85
29 tipUnRead, // : Boolean //
\96¢
\93Ç
\83t
\83\89\83O
30 tipScrollTop, // : Integer //
\83X
\83N
\83\8d\81[
\83\8b\88Ê
\92u
31 tipDownloadHost, // : string //
\8d¡
\82Ì
\83z
\83X
\83g
\82Æ
\88á
\82¤
\8fê
\8d\87\82Ì
\83z
\83X
\83g
32 tipAgeSage, // : TThreadAgeSage //
\83A
\83C
\83e
\83\80\82Ì
\8fã
\82°
\89º
\82°
33 tipURL, // : string //
\83X
\83\8c\83b
\83h
\82ð
\83u
\83\89\83E
\83U
\82Å
\95\
\8e¦
\82·
\82é
\8dÛ
\82Ì URL
34 tipFilePath // : string //
\82±
\82Ì
\83X
\83\8c\82ª
\95Û
\91¶
\82³
\82ê
\82Ä
\82¢
\82é
\83p
\83X
37 // *************************************************************************
38 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83o
\81[
\83W
\83\87\83\93
39 // *************************************************************************
40 TOnVersionInfo = procedure(
41 var outAgent : PChar; //
\83o
\81[
\83W
\83\87\83\93\82ð
\88ê
\90Ø
\8aÜ
\82Ü
\82È
\82¢
\8f\83\90\88\82È
\96¼
\8fÌ
42 var outMajor : DWORD; //
\83\81\83W
\83\83\81[
\83o
\81[
\83W
\83\87\83\93
43 var outMinor : DWORD; //
\83}
\83C
\83i
\81[
\83o
\81[
\83W
\83\87\83\93
44 var outRelease : PChar; //
\83\8a\83\8a\81[
\83X
\92i
\8aK
\96¼
45 var outRevision : DWORD //
\83\8a\83r
\83W
\83\87\83\93\83i
\83\93\83o
\81[
48 // *************************************************************************
49 //
\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©
50 // *************************************************************************
51 TOnAcceptURL = function(
52 inURL : PChar //
\94»
\92f
\82ð
\8bÂ
\82¢
\82Å
\82¢
\82é URL
53 ): Boolean; stdcall; //
\8eó
\82¯
\95t
\82¯
\82é
\82È
\82ç True
55 // *************************************************************************
56 // TThreadItem
\82ª
\90¶
\90¬
\82³
\82ê
\82½
57 // *************************************************************************
58 TThreadItemCreate = procedure(
62 // *************************************************************************
63 // TThreadItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
64 // *************************************************************************
65 TThreadItemDispose = procedure(
69 // *************************************************************************
70 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
\82³
\82ê
\82½
71 // *************************************************************************
72 TThreadItemOnDownload = procedure(
73 inInstance : DWORD //
\83C
\83\93\83X
\83^
\83\93\83X
74 ); stdcall; //
\83_
\83E
\83\93\83\8d\81[
\83h
\82³
\82ê
\82½
\83X
\83\8c\83b
\83h
76 // *************************************************************************
77 //
\83\8c\83X
\94Ô
\8d\86 n
\82É
\91Î
\82·
\82é html
\82ð
\97v
\8b\81\82³
\82ê
\82½
78 // *************************************************************************
79 TThreadItemOnGetRes = function(
80 inInstance : DWORD; //
\83C
\83\93\83X
\83^
\83\93\83X
81 inNo : DWORD //
\95\
\8e¦
\82·
\82é
\83\8c\83X
\94Ô
\8d\86
82 ) : PChar; stdcall; //
\95\
\8e¦
\82·
\82é HTML
84 // *************************************************************************
85 //
\83X
\83\8c\83b
\83h
\82Ì
\83w
\83b
\83_ html
\82ð
\97v
\8b\81\82³
\82ê
\82½
86 // *************************************************************************
87 TThreadItemOnGetHeader = function(
88 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
89 inOptionalHeader : PChar //
\92Ç
\89Á
\82Ì
\83w
\83b
\83_
90 ) : PChar; stdcall; //
\90®
\8c`
\82³
\82ê
\82½ HTML
92 // *************************************************************************
93 //
\83X
\83\8c\83b
\83h
\82Ì
\83t
\83b
\83^ html
\82ð
\97v
\8b\81\82³
\82ê
\82½
94 // *************************************************************************
95 TThreadItemOnGetFooter = function(
96 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
97 inOptionalFooter : PChar //
\92Ç
\89Á
\82Ì
\83t
\83b
\83^
98 ) : PChar; stdcall; //
\90®
\8c`
\82³
\82ê
\82½ HTML
102 // =========================================================================
103 //
\83v
\83\89\83O
\83C
\83\93\82ð
\8aÇ
\97\9d\82·
\82é TBoardPlugin
\83N
\83\89\83X
104 // =========================================================================
105 TBoardPlugIn = class( TObject )
107 FFilePath : string; //
\83v
\83\89\83O
\83C
\83\93\82ð
\8e¦
\82·
\83p
\83X
108 FModule : HMODULE; //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b
110 FVersionInfo : TOnVersionInfo;
111 FAcceptURL : TOnAcceptURL;
112 FCreateThreadItem : TThreadItemCreate;
113 FDisposeThreadItem : TThreadItemDispose;
114 FDownload : TThreadItemOnDownload;
115 FGetRes : TThreadItemOnGetRes;
116 FGetHeader : TThreadItemOnGetHeader;
117 FGetFooter : TThreadItemOnGetFooter;
120 //
\83R
\83\93\83X
\83g
\83\89\83N
\83^
122 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
123 constructor CreateFromPath( inPath : string );
124 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
125 constructor CreateFromName( inName : string );
126 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
127 constructor CreateFromModule( inModule : HMODULE );
129 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
130 procedure LoadFromPath( inPath : string );
131 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
132 procedure LoadFromName( inName : string );
133 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
134 procedure LoadFromModule( inModule : HMODULE );
135 //
\83o
\81[
\83W
\83\87\83\93\8fî
\95ñ
136 procedure VersionInfo( var outAgent : string;
137 var outMajor : DWORD; var outMinor : DWORD;
138 var outRelease : string; var outRevision : DWORD );
139 //
\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©
140 function AcceptURL( inURL : string ) : Boolean;
141 // TThreadItem
\82ª
\90¶
\90¬
\82³
\82ê
\82½
142 procedure CreateThreadItem( threadItem : DWORD );
143 // TThreadItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
144 procedure DisposeThreadItem( threadItem : DWORD );
145 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
146 procedure Download( threadItem: DWORD );
147 //
\83\8c\83X
\94Ô
\8d\86 n
\82É
\91Î
\82·
\82é html
\82ð
\97v
\8b\81
148 function GetRes( threadItem : DWORD; inNo : DWORD ) : string;
149 //
\83X
\83\8c\83b
\83h
\82Ì
\83w
\83b
\83_ html
\82ð
\97v
\8b\81
150 function GetHeader( threadItem : DWORD; inOptionalHeader : string ) : string;
151 //
\83X
\83\8c\83b
\83h
\82Ì
\83t
\83b
\83^ html
\82ð
\97v
\8b\81
152 function GetFooter( threadItem : DWORD; inOptionalFooter : string ) : string;
155 procedure LoadPlugInAPI;
158 property FilePath : string read FFilePath;
159 property Module : HMODULE read FModule;
164 OnWorkBegin : TWorkBeginEvent;
165 OnWorkEnd : TWorkEndEvent;
167 BoardPlugIns : array of TBoardPlugIn;
169 procedure InitializeBoardPlugIns;
171 function CreateResultString(
175 function ThreadItemDat2HTML(
176 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
177 inDatRes : PChar; //
\96¼
\91O<>
\83\81\81[
\83\8b<>
\93ú
\95tID<>
\96{
\95¶<>
\82Å
\8d\
\90¬
\82³
\82ê
\82½
\83e
\83L
\83X
\83g
178 inResNo : DWORD; //
\83\8c\83X
\94Ô
\8d\86
179 inIsNew : Boolean //
\90V
\92\85\83\8c\83X
\82È
\82ç True
180 ) : PChar; stdcall; //
\90®
\8c`
\82³
\82ê
\82½ HTML
182 procedure DisposeResultString(
188 uses GikoSystem, BoardGroup;
190 // =========================================================================
191 //
\83v
\83\89\83O
\83C
\83\93\82ð
\8aÇ
\97\9d\82·
\82é TBoardPlugin
\83N
\83\89\83X
192 // =========================================================================
194 // *************************************************************************
195 // BoardPlugin
\83t
\83H
\83\8b\83_
\82É
\82 \82é
\83v
\83\89\83O
\83C
\83\93\82ð
\91S
\82Ä
\83\8d\81[
\83h
196 // *************************************************************************
197 procedure InitializeBoardPlugIns;
200 pluginNames : TStringList;
203 pluginNames := TStringList.Create;
205 GikoSys.GetFileList( GikoSys.Setting.GetBoardPlugInDir, '*', pluginNames, False, False );
206 SetLength( BoardPlugIns, pluginNames.Count );
208 bound := pluginNames.Count - 1;
209 for i := 0 to bound do
210 BoardPlugIns[ i ] := TBoardPlugIn.CreateFromName( pluginNames.Strings[ i ] );
219 // =========================================================================
220 //
\83v
\83\89\83O
\83C
\83\93\82ð
\8aÇ
\97\9d\82·
\82é TBoardPlugin
\83N
\83\89\83X
221 // =========================================================================
223 // *************************************************************************
224 //
\83R
\83\93\83X
\83g
\83\89\83N
\83^
225 // *************************************************************************
226 constructor TBoardPlugIn.Create;
233 FCreateThreadItem := nil;
234 FDisposeThreadItem := nil;
242 // *************************************************************************
243 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
244 // *************************************************************************
245 constructor TBoardPlugIn.CreateFromPath(
252 LoadFromPath( inPath );
256 // *************************************************************************
257 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
258 // *************************************************************************
259 constructor TBoardPlugIn.CreateFromName(
266 LoadFromName( inName );
270 // *************************************************************************
271 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
272 // *************************************************************************
273 constructor TBoardPlugIn.CreateFromModule(
280 LoadFromModule( inModule );
284 // *************************************************************************
285 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
286 // *************************************************************************
287 procedure TBoardPlugIn.LoadFromPath(
293 if FileExists( inPath ) then
294 FModule := LoadLibrary( PChar( inPath ) )
295 else if FileExists( inPath + '.dll' ) then
296 FModule := LoadLibrary( PChar( inPath + '.dll' ) );
302 // *************************************************************************
303 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
304 // *************************************************************************
305 procedure TBoardPlugIn.LoadFromName(
310 LoadFromPath( GikoSys.Setting.GetBoardPlugInDir + inName );
314 // *************************************************************************
315 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
316 // *************************************************************************
317 procedure TBoardPlugIn.LoadFromModule(
321 tmp : array [0..MAX_PATH] of Char;
324 GetModuleFileName( inModule, tmp, SizeOf( tmp ) );
332 // *************************************************************************
333 //
\83o
\81[
\83W
\83\87\83\93\8fî
\95ñ
334 // *************************************************************************
335 procedure TBoardPlugIn.VersionInfo(
336 var outAgent : string; //
\83o
\81[
\83W
\83\87\83\93\82ð
\88ê
\90Ø
\8aÜ
\82Ü
\82È
\82¢
\8f\83\90\88\82È
\96¼
\8fÌ
337 var outMajor : DWORD; //
\83\81\83W
\83\83\81[
\83o
\81[
\83W
\83\87\83\93
338 var outMinor : DWORD; //
\83}
\83C
\83i
\81[
\83o
\81[
\83W
\83\87\83\93
339 var outRelease : string; //
\83\8a\83\8a\81[
\83X
\92i
\8aK
\96¼
340 var outRevision : DWORD //
\83\8a\83r
\83W
\83\87\83\93\83i
\83\93\83o
\81[
347 if Assigned( FVersionInfo ) then begin
348 FVersionInfo( agent, outMajor, outMinor, release, outRevision );
349 outAgent := string( agent );
350 outRelease := string( release );
351 DisposeResultString( agent );
352 DisposeResultString( release );
357 // *************************************************************************
358 //
\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©
359 // *************************************************************************
360 function TBoardPlugIn.AcceptURL(
365 if Assigned( FAcceptURL ) then
366 Result := FAcceptURL( PChar( inURL ) )
372 // *************************************************************************
373 // TThreadItem
\82ª
\90¶
\90¬
\82³
\82ê
\82½
374 // *************************************************************************
375 procedure TBoardPlugIn.CreateThreadItem(
380 if Assigned( FCreateThreadItem ) then
381 FCreateThreadItem( threadItem );
385 // *************************************************************************
386 // TThreadItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
387 // *************************************************************************
388 procedure TBoardPlugIn.DisposeThreadItem(
393 if Assigned( FDisposeThreadItem ) then
394 FDisposeThreadItem( threadItem );
398 // *************************************************************************
399 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
400 // *************************************************************************
401 procedure TBoardPlugIn.Download( threadItem: DWORD );
404 if Assigned( FDownload ) then
405 FDownload( threadItem );
409 // *************************************************************************
410 //
\83\8c\83X
\94Ô
\8d\86 n
\82É
\91Î
\82·
\82é html
\82ð
\97v
\8b\81
411 // *************************************************************************
412 function TBoardPlugIn.GetRes(
413 threadItem : DWORD; //
\83C
\83\93\83X
\83^
\83\93\83X
414 inNo : DWORD //
\95\
\8e¦
\82·
\82é
\83\8c\83X
\94Ô
\8d\86
415 ) : string; //
\95\
\8e¦
\82·
\82é HTML
420 if Assigned( FGetRes ) then begin
421 tmp := FGetRes( threadItem, inNo );
422 Result := string( tmp );
423 DisposeResultString( tmp );
428 // *************************************************************************
429 //
\83X
\83\8c\83b
\83h
\82Ì
\83w
\83b
\83_ html
\82ð
\97v
\8b\81
430 // *************************************************************************
431 function TBoardPlugIn.GetHeader(
432 threadItem : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
433 inOptionalHeader : string //
\92Ç
\89Á
\82Ì
\83w
\83b
\83_
434 ) : string; //
\90®
\8c`
\82³
\82ê
\82½ HTML
439 if Assigned( FGetHeader ) then begin
440 tmp := FGetHeader( threadItem, PChar( inOptionalHeader ) );
441 Result := string( tmp );
442 DisposeResultString( tmp );
447 // *************************************************************************
448 //
\83X
\83\8c\83b
\83h
\82Ì
\83t
\83b
\83^ html
\82ð
\97v
\8b\81
449 // *************************************************************************
450 function TBoardPlugIn.GetFooter(
451 threadItem : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
452 inOptionalFooter : string //
\92Ç
\89Á
\82Ì
\83t
\83b
\83^
453 ) : string; //
\90®
\8c`
\82³
\82ê
\82½ HTML
458 if Assigned( FGetFooter ) then begin
459 tmp := FGetFooter( threadItem, PChar( inOptionalFooter ) );
460 Result := string( tmp );
461 DisposeResultString( tmp );
466 // *************************************************************************
467 //
\83v
\83\89\83O
\83C
\83\93\82Ì API
\82ð
\8eæ
\93¾
468 // *************************************************************************
469 procedure TBoardPlugIn.LoadPlugInAPI;
473 if Assigned( Pointer( FModule ) ) then begin
474 FVersionInfo := GetProcAddress( FModule, 'OnVersionInfo' );
475 FAcceptURL := GetProcAddress( FModule, 'OnAcceptURL' );
476 FCreateThreadItem := GetProcAddress( FModule, 'ThreadItemCreate' );
477 FDisposeThreadItem := GetProcAddress( FModule, 'ThreadItemDispose' );
478 FDownload := GetProcAddress( FModule, 'ThreadItemOnDownload' );
479 FGetRes := GetProcAddress( FModule, 'ThreadItemOnGetRes' );
480 FGetHeader := GetProcAddress( FModule, 'ThreadItemOnGetHeader' );
481 FGetFooter := GetProcAddress( FModule, 'ThreadItemOnGetFooter' );
490 // =========================================================================
492 // =========================================================================
494 // *************************************************************************
495 //
\96ß
\82è
\92l
\82ª PChar
\82Å
\82 \82é API
\82Ì
\83\81\83\82\83\8a\82ð
\8am
\95Û
\82·
\82é
496 // *************************************************************************
497 function CreateResultString(
504 tmp := PChar( resultStr );
505 GetMem( Result, Length( tmp ) + 1 );
506 Move( tmp^, Result^, Length( tmp ) + 1 );
510 // *************************************************************************
511 //
\96ß
\82è
\92l
\82ª PChar
\82Å
\82 \82é API
\82Ì
\83\81\83\82\83\8a\82ð
\8aJ
\95ú
\82·
\82é
512 // *************************************************************************
513 procedure DisposeResultString(
518 FreeMem( resultStr );
522 // *************************************************************************
523 //
\83v
\83\8d\83O
\83\89\83\80\96{
\91Ì
\82Ì
\83o
\81[
\83W
\83\87\83\93\82ð
\8eæ
\93¾
\82·
\82é
524 // *************************************************************************
525 procedure VersionInfo(
526 var outAgent : PChar; //
\83o
\81[
\83W
\83\87\83\93\82ð
\88ê
\90Ø
\8aÜ
\82Ü
\82È
\82¢
\8f\83\90\88\82È
\96¼
\8fÌ
527 var outMajor : DWORD; //
\83\81\83W
\83\83\81[
\83o
\81[
\83W
\83\87\83\93
528 var outMinor : DWORD; //
\83}
\83C
\83i
\81[
\83o
\81[
\83W
\83\87\83\93
529 var outRelease : PChar; //
\83\8a\83\8a\81[
\83X
\92i
\8aK
\96¼
530 var outRevision : DWORD //
\83\8a\83r
\83W
\83\87\83\93\83i
\83\93\83o
\81[
534 outAgent := CreateResultString( PChar( APP_NAME ) );
537 outRelease := CreateResultString( PChar( BETA_VERSION_NAME_E ) );
538 outRevision := BETA_VERSION;
542 // *************************************************************************
543 //
\8ew
\92è
\82µ
\82½ URL
\82ð
\83_
\83E
\83\93\83\8d\81[
\83h
\82µ
\82Ä
\95Ô
\82·
544 // *************************************************************************
545 function InternalDownload(
546 inURL : PChar; //
\83_
\83E
\83\93\83\8d\81[
\83h
\82·
\82é URL
547 var ioModified : Double; //
\8dÅ
\8cã
\82É
\8eæ
\93¾
\82µ
\82½
\93ú
\8e\9e
548 var outResultData : PChar; //
\83_
\83E
\83\93\83\8d\81[
\83h
\82³
\82ê
\82½
\95¶
\8e\9a\97ñ
549 inRangeStart : DWORD; //
\8aJ
\8en
\88Ê
\92u
550 inRangeEnd : DWORD //
\8fI
\97¹
\88Ê
\92u
551 ) : Longint; stdcall; //
\83\8c\83X
\83|
\83\93\83X
\83R
\81[
\83h
553 httpSocket : TIdHTTP;
554 resStream : TMemoryStream;
560 httpSocket := TIdHTTP.Create( nil );
562 //
\83C
\83x
\83\93\83g
\82Ì
\90Ý
\92è
563 if Assigned( OnWork ) then
564 httpSocket.OnWork := OnWork;
565 if Assigned( OnWorkBegin ) then
566 httpSocket.OnWorkBegin := OnWorkBegin;
567 if Assigned( OnWorkEnd ) then
568 httpSocket.OnWorkEnd := OnWorkEnd;
570 //
\92Ê
\90M
\82É
\8aÖ
\82·
\82é
\90Ý
\92è
571 httpSocket.Request.CustomHeaders.Clear;
572 httpSocket.Response.Clear;
573 httpSocket.Request.Clear;
575 httpSocket.Request.UserAgent := GikoSys.GetUserAgent;
576 httpSocket.RecvBufferSize := Gikosys.Setting.RecvBufferSize;
577 httpSocket.ProxyParams.BasicAuthentication := False;
579 Writeln('------------------------------------------------------------');
581 //httpSocket.AllowCookies := False;
582 if GikoSys.Setting.ReadProxy then begin
583 if GikoSys.Setting.ProxyProtocol then
584 httpSocket.ProtocolVersion := pv1_1
586 httpSocket.ProtocolVersion := pv1_0;
587 httpSocket.ProxyParams.ProxyServer := GikoSys.Setting.ReadProxyAddress;
588 httpSocket.ProxyParams.ProxyPort := GikoSys.Setting.ReadProxyPort;
589 httpSocket.ProxyParams.ProxyUsername := GikoSys.Setting.ReadProxyUserID;
590 httpSocket.ProxyParams.ProxyPassword := GikoSys.Setting.ReadProxyPassword;
591 if GikoSys.Setting.ReadProxyUserID <> '' then
592 httpSocket.ProxyParams.BasicAuthentication := True;
594 Writeln('
\83v
\83\8d\83L
\83V
\90Ý
\92è
\82 \82è');
595 Writeln('
\83z
\83X
\83g: ' + GikoSys.Setting.ReadProxyAddress);
596 Writeln('
\83|
\81[
\83g: ' + IntToStr( GikoSys.Setting.ReadProxyPort ));
599 if GikoSys.Setting.Protocol then
600 httpSocket.ProtocolVersion := pv1_1
602 httpSocket.ProtocolVersion := pv1_0;
603 httpSocket.ProxyParams.ProxyServer := '';
604 httpSocket.ProxyParams.ProxyPort := 80;
605 httpSocket.ProxyParams.ProxyUsername := '';
606 httpSocket.ProxyParams.ProxyPassword := '';
608 Writeln('
\83v
\83\8d\83L
\83V
\90Ý
\92è
\82È
\82µ');
612 httpSocket.Request.ContentRangeStart := inRangeStart;
613 httpSocket.Request.ContentRangeEnd := inRangeEnd;
614 if (ioModified <> 0) and (ioModified <> ZERO_DATE) then
615 httpSocket.Request.LastModified := ioModified - OffsetFromUTC;
616 if inRangeStart = 0 then
617 httpSocket.Request.AcceptEncoding := 'gzip'
619 httpSocket.Request.AcceptEncoding := '';
620 httpSocket.Request.Accept := 'text/html';
622 resStream := TMemoryStream.Create;
628 Writeln('URL: ' + inURL);
630 httpSocket.Get( inURL, resStream );
632 Writeln('
\8eæ
\93¾
\82Å
\97á
\8aO
\82È
\82µ');
635 content := GikoSys.GzipDecompress( resStream, httpSocket.Response.ContentEncoding );
636 ioModified := httpSocket.Response.LastModified;
638 Result := httpSocket.ResponseCode;
639 if (Length( content ) = 0) and (Result = 206) then
642 outResultData := CreateResultString( content );
644 on E: EIdSocketError do begin
645 ioModified := ZERO_DATE;
646 outResultData := nil;
648 on E: EIdConnectException do begin
649 ioModified := ZERO_DATE;
650 outResultData := nil;
651 //Item.ErrText := E.Message;
653 on E: Exception do begin
655 Writeln('
\8eæ
\93¾
\82Å
\97á
\8aO
\82 \82è');
656 Writeln('E.Message: ' + E.Message);
658 ioModified := ZERO_DATE;
659 outResultData := nil;
660 Result := httpSocket.ResponseCode;
661 //Item.ErrText := E.Message;
674 // *************************************************************************
675 //
\82Q
\82¿
\82á
\82ñ
\82Ë
\82é
\82Ì dat
\8c`
\8e®
\82ð
\83\8d\81[
\83J
\83\8b\82 \82Ú
\81`
\82ñ
\82É
\92Ê
\82·
676 // *************************************************************************
677 function InternalAbon(
678 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
679 ) : PChar; stdcall; //
\82 \82Ú
\81`
\82ñ
\8dÏ
\82Ý
\82Ì dat
\8c`
\8e®
\83e
\83L
\83X
\83g
681 datList : TStringList;
684 datList := TStringList.Create;
685 datList.Text := string( inDatText );
686 //GikoSys.FAbon.IndividualAbon( datList, ChangeFileExt(FileName,'.NG'));
687 GikoSys.FAbon.Execute( datList );
688 GikoSys.FSelectResFilter.Execute( datList );
690 Result := CreateResultString( datList.Text );
694 // *************************************************************************
695 //
\82Q
\82¿
\82á
\82ñ
\82Ë
\82é
\82Ì dat
\8c`
\8e® 1
\8ds
\82ð HTML
\82É
\95Ï
\8a·
\82·
\82é
696 // *************************************************************************
697 function InternalDat2HTML(
698 inDatRes : PChar; //
\96¼
\91O<>
\83\81\81[
\83\8b<>
\93ú
\95tID<>
\96{
\95¶<>
\82Å
\8d\
\90¬
\82³
\82ê
\82½
\83e
\83L
\83X
\83g
699 inResNo : DWORD; //
\83\8c\83X
\94Ô
\8d\86
700 inIsNew : Boolean //
\90V
\92\85\83\8c\83X
\82È
\82ç True
701 ) : PChar; stdcall; //
\90®
\8c`
\82³
\82ê
\82½ HTML
704 threadItem : TThreadItem;
707 //
\83_
\83~
\81[
\82Ì
\83N
\83\89\83X
708 board := TBoard.Create;
709 threadItem := TThreadItem.Create;
712 threadItem.ParentBoard := Board;
714 Result := ThreadItemDat2HTML( DWORD( threadItem ), inDatRes, inResNo, inIsNew );
723 // =========================================================================
725 // =========================================================================
727 // *************************************************************************
728 //
\83u
\83\89\83E
\83U
\96{
\91Ì
\82ª
\92u
\82¢
\82Ä
\82 \82é
\83t
\83H
\83\8b\83_
729 // *************************************************************************
730 function ApplicationFolder : PChar; stdcall;
733 Result := CreateResultString( GikoSys.GetAppDir );
737 // *************************************************************************
738 //
\8f\89\8aú
\90Ý
\92è
\83t
\83H
\83\8b\83_
739 // *************************************************************************
740 function PreferencesFolder : PChar; stdcall;
743 Result := CreateResultString( GikoSys.GetConfigDir );
747 // *************************************************************************
748 //
\8f\89\8aú
\90Ý
\92è
\83t
\83@
\83C
\83\8b
749 // *************************************************************************
750 function PreferencesFile : PChar; stdcall;
753 Result := CreateResultString( GikoSys.GetAppDir + 'gikoNavi.ini' );
757 // *************************************************************************
758 //
\83\8d\83O
\83t
\83H
\83\8b\83_
759 // *************************************************************************
760 function LogFolder : PChar; stdcall;
763 Result := CreateResultString( GikoSys.GetAppDir + 'Log\' );
767 // *************************************************************************
768 // CSS
\83t
\83H
\83\8b\83_
769 // *************************************************************************
770 function CSSFolder : PChar; stdcall;
773 Result := CreateResultString( GikoSys.GetStyleSheetDir );
777 // *************************************************************************
778 //
\83X
\83L
\83\93\82ð
\93ü
\82ê
\82Ä
\82¨
\82
\83t
\83H
\83\8b\83_
779 // *************************************************************************
780 function SkinFolder : PChar; stdcall;
783 Result := CreateResultString( GikoSys.GetSkinDir );
787 // *************************************************************************
788 //
\8eg
\97p
\82µ
\82Ä
\82¢
\82é CSS /
\83X
\83L
\83\93
789 // *************************************************************************
790 function SkinFile : PChar; stdcall;
793 Result := CreateResultString( GikoSys.Setting.CSSFileName );
797 // *************************************************************************
798 //
\82 \82Ú
\81[
\82ñ
\8bK
\91¥
\82ª
\92u
\82¢
\82Ä
\82 \82é
\83f
\83B
\83\8c\83N
\83g
\83\8a
799 // *************************************************************************
800 function AbonFolder : PChar; stdcall;
803 Result := CreateResultString( GikoSys.Setting.GetNGWordsDir );
807 // *************************************************************************
808 //
\8eg
\97p
\82µ
\82Ä
\82¢
\82é
\82 \82Ú
\81[
\82ñ
\8bK
\91¥
809 // *************************************************************************
810 function AbonFile : PChar; stdcall;
813 Result := CreateResultString( GikoSys.FAbon.GetNGwordpath );
819 // =========================================================================
821 // =========================================================================
823 // *************************************************************************
824 // TThreadItem
\83N
\83\89\83X
\82Ì
\83v
\83\8d\83p
\83e
\83B
\82ð
\8eæ
\93¾
\82·
\82é
825 // *************************************************************************
826 function ThreadItemGetLong(
828 propertyID : TThreadItemProperty
831 threadItem : TThreadItem;
834 threadItem := TThreadItem( instance );
836 tipContext: // : DWORD //
\8e©
\97R
\82É
\90Ý
\92è
\82µ
\82Ä
\82¢
\82¢
\92l
837 Result := threadItem.Context;
838 tipNo: // : Integer //
\94Ô
\8d\86
839 Result := threadItem.No;
840 tipFileName: // : string //
\83X
\83\8c\83b
\83h
\83t
\83@
\83C
\83\8b\96¼
841 Result := DWORD( CreateResultString( threadItem.FileName ) );
842 tipTitle: // : string //
\83X
\83\8c\83b
\83h
\83^
\83C
\83g
\83\8b
843 Result := DWORD( CreateResultString( threadItem.Title ) );
844 tipCount: // : Integer //
\83X
\83\8c\83b
\83h
\83J
\83E
\83\93\83g
\81i
\83\8d\81[
\83J
\83\8b\81j
845 Result := threadItem.Count;
846 tipAllResCount: // : Integer //
\83X
\83\8c\83b
\83h
\83J
\83E
\83\93\83g
\81i
\83T
\81[
\83o
\81j
847 Result := threadItem.AllResCount;
848 tipNewResCount: // : Integer //
\83X
\83\8c\83b
\83h
\90V
\92\85\90\94
849 Result := threadItem.NewResCount;
850 tipSize: // : Integer //
\83X
\83\8c\83b
\83h
\83T
\83C
\83Y
851 Result := threadItem.Size;
852 tipRound: // : Boolean //
\8f\84\89ñ
\83t
\83\89\83O
853 Result := DWORD( threadItem.Round );
854 tipRoundName: // : string //
\8f\84\89ñ
\96¼
855 Result := DWORD( CreateResultString( threadItem.RoundName ) );
856 tipIsLogFile: // : Boolean //
\83\8d\83O
\91¶
\8dÝ
\83t
\83\89\83O
857 Result := DWORD( threadItem.IsLogFile );
858 tipKokomade: // : Integer //
\83R
\83R
\82Ü
\82Å
\93Ç
\82ñ
\82¾
\94Ô
\8d\86
859 Result := threadItem.Kokomade;
860 tipNewReceive: // : Integer //
\83R
\83R
\82©
\82ç
\90V
\8bK
\8eó
\90M
861 Result := threadItem.NewReceive;
862 tipNewArrival: // : Boolean //
\90V
\92\85
863 Result := DWORD( threadItem.NewArrival );
864 tipUnRead: // : Boolean //
\96¢
\93Ç
\83t
\83\89\83O
865 Result := DWORD( threadItem.UnRead );
866 tipScrollTop: // : Integer //
\83X
\83N
\83\8d\81[
\83\8b\88Ê
\92u
867 Result := threadItem.ScrollTop;
868 tipDownloadHost: // : string //
\8d¡
\82Ì
\83z
\83X
\83g
\82Æ
\88á
\82¤
\8fê
\8d\87\82Ì
\83z
\83X
\83g
869 Result := DWORD( CreateResultString( threadItem.DownloadHost ) );
870 tipAgeSage: // : TThreadAgeSage //
\83A
\83C
\83e
\83\80\82Ì
\8fã
\82°
\89º
\82°
871 Result := DWORD( threadItem.AgeSage );
872 tipURL: // : string //
\83X
\83\8c\83b
\83h
\82ð
\83u
\83\89\83E
\83U
\82Å
\95\
\8e¦
\82·
\82é
\8dÛ
\82Ì URL
873 Result := DWORD( CreateResultString( threadItem.URL ) );
874 tipFilePath: //
\82±
\82Ì
\83X
\83\8c\82ª
\95Û
\91¶
\82³
\82ê
\82Ä
\82¢
\82é
\83p
\83X
875 Result := DWORD( CreateResultString( threadItem.FilePath ) );
881 // *************************************************************************
882 // TThreadItem
\83N
\83\89\83X
\82Ì
\83v
\83\8d\83p
\83e
\83B
\82ð
\90Ý
\92è
\82·
\82é
883 // *************************************************************************
884 procedure ThreadItemSetLong(
886 propertyID : TThreadItemProperty;
890 threadItem : TThreadItem;
893 threadItem := TThreadItem( instance );
895 tipContext: // : DWORD //
\8e©
\97R
\82É
\90Ý
\92è
\82µ
\82Ä
\82¢
\82¢
\92l
896 threadItem.Context := param;
897 tipNo: // : Integer //
\94Ô
\8d\86
898 threadItem.No := param;
899 tipFileName: // : string //
\83X
\83\8c\83b
\83h
\83t
\83@
\83C
\83\8b\96¼
900 threadItem.FileName := string( PChar( param ) );
901 tipTitle: // : string //
\83X
\83\8c\83b
\83h
\83^
\83C
\83g
\83\8b
902 threadItem.Title := string( PChar( param ) );
903 tipCount: // : Integer //
\83X
\83\8c\83b
\83h
\83J
\83E
\83\93\83g
\81i
\83\8d\81[
\83J
\83\8b\81j
904 threadItem.Count := param;
905 tipAllResCount: // : Integer //
\83X
\83\8c\83b
\83h
\83J
\83E
\83\93\83g
\81i
\83T
\81[
\83o
\81j
906 threadItem.AllResCount := param;
907 tipNewResCount: // : Integer //
\83X
\83\8c\83b
\83h
\90V
\92\85\90\94
908 threadItem.NewResCount := param;
909 tipSize: // : Integer //
\83X
\83\8c\83b
\83h
\83T
\83C
\83Y
910 threadItem.Size := param;
911 tipRound: // : Boolean //
\8f\84\89ñ
\83t
\83\89\83O
912 threadItem.Round := Boolean( param );
913 tipRoundName: // : string //
\8f\84\89ñ
\96¼
914 threadItem.RoundName := string( PChar( param ) );
915 tipIsLogFile: // : Boolean //
\83\8d\83O
\91¶
\8dÝ
\83t
\83\89\83O
916 threadItem.IsLogFile := Boolean( param );
917 tipKokomade: // : Integer //
\83R
\83R
\82Ü
\82Å
\93Ç
\82ñ
\82¾
\94Ô
\8d\86
918 threadItem.Kokomade := param;
919 tipNewReceive: // : Integer //
\83R
\83R
\82©
\82ç
\90V
\8bK
\8eó
\90M
920 threadItem.NewReceive := param;
921 tipNewArrival: // : Boolean //
\90V
\92\85
922 threadItem.NewArrival := Boolean( param );
923 tipUnRead: // : Boolean //
\96¢
\93Ç
\83t
\83\89\83O
924 threadItem.UnRead := Boolean( param );
925 tipScrollTop: // : Integer //
\83X
\83N
\83\8d\81[
\83\8b\88Ê
\92u
926 threadItem.ScrollTop := param;
927 tipDownloadHost: // : string //
\8d¡
\82Ì
\83z
\83X
\83g
\82Æ
\88á
\82¤
\8fê
\8d\87\82Ì
\83z
\83X
\83g
928 threadItem.DownloadHost := string( PChar( param ) );
929 tipAgeSage: // : TThreadAgeSage //
\83A
\83C
\83e
\83\80\82Ì
\8fã
\82°
\89º
\82°
930 threadItem.AgeSage := TGikoAgeSage( param );
931 tipURL: // : string //
\83X
\83\8c\83b
\83h
\82ð
\83u
\83\89\83E
\83U
\82Å
\95\
\8e¦
\82·
\82é
\8dÛ
\82Ì URL
932 threadItem.URL := string( PChar( param ) );
933 tipFilePath: // : string //
\82±
\82Ì
\83X
\83\8c\82ª
\95Û
\91¶
\82³
\82ê
\82Ä
\82¢
\82é
\83p
\83X
934 threadItem.FilePath := string( PChar( param ) );
939 // *************************************************************************
940 // TThreadItem
\83N
\83\89\83X
\82Ì
\83v
\83\8d\83p
\83e
\83B
\82ð
\8eæ
\93¾
\82·
\82é
941 // *************************************************************************
942 function ThreadItemGetDouble(
944 propertyID : TThreadItemProperty
947 threadItem : TThreadItem;
950 threadItem := TThreadItem( instance );
952 tipRoundDate: // : TDateTime //
\83X
\83\8c\83b
\83h
\82ð
\8eæ
\93¾
\82µ
\82½
\93ú
\8e\9e\81i
\8f\84\89ñ
\93ú
\8e\9e\81j
953 Result := threadItem.RoundDate;
954 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
955 Result := threadItem.LastModified;
962 // *************************************************************************
963 // TThreadItem
\83N
\83\89\83X
\82Ì
\83v
\83\8d\83p
\83e
\83B
\82ð
\90Ý
\92è
\82·
\82é
964 // *************************************************************************
965 procedure ThreadItemSetDouble(
967 propertyID : TThreadItemProperty;
971 threadItem : TThreadItem;
974 threadItem := TThreadItem( instance );
976 tipRoundDate: // : TDateTime //
\83X
\83\8c\83b
\83h
\82ð
\8eæ
\93¾
\82µ
\82½
\93ú
\8e\9e\81i
\8f\84\89ñ
\93ú
\8e\9e\81j
977 threadItem.RoundDate := param;
978 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
979 threadItem.LastModified := param;
984 // *************************************************************************
985 // 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é
986 // *************************************************************************
987 function ThreadItemDat2HTML(
988 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
989 inDatRes : PChar; //
\96¼
\91O<>
\83\81\81[
\83\8b<>
\93ú
\95tID<>
\96{
\95¶<>
\82Å
\8d\
\90¬
\82³
\82ê
\82½
\83e
\83L
\83X
\83g
990 inResNo : DWORD; //
\83\8c\83X
\94Ô
\8d\86
991 inIsNew : Boolean //
\90V
\92\85\83\8c\83X
\82È
\82ç True
992 ) : PChar; stdcall; //
\90®
\8c`
\82³
\82ê
\82½ HTML
994 threadItem : TThreadItem;
999 threadItem := TThreadItem( inInstance );
1000 //
\88ø
\90\94\82ð
\95ª
\89ð
1001 res := GikoSys.DivideStrLine( string( inDatRes ) );
1002 no := IntToStr( inResNo );
1005 if GikoSys.Setting.UseSkin then begin
1008 Result := CreateResultString( GikoSys.SkinedRes(
1009 GikoSys.LoadFromSkin(
1010 GikoSys.Setting.GetSkinNewResFileName, threadItem, threadItem.SizeByte
1014 Result := CreateResultString( GikoSys.SkinedRes(
1015 GikoSys.LoadFromSkin(
1016 GikoSys.Setting.GetSkinResFileName, threadItem, threadItem.SizeByte
1020 // CSS or
\83f
\83t
\83H
\83\8b\83g
1021 if res.FName = '' then
1022 res.FName := ' ';
1023 if res.FMailTo = '' then
1024 Result := CreateResultString( '<a name="' + no + '"></a>'
1025 + '<div class="header"><span class="no"><a href="menu:' + No + '">' + no + '</a></span> '
1026 + '<span class="name_label">
\96¼
\91O
\81F</span> '
1027 + '<span class="name"><b>' + res.FName + '</b></span> '
1028 + '<span class="date_label">
\93\8a\8de
\93ú
\81F</span> '
1029 + '<span class="date">' + res.FDateTime+ '</span></div>'
1030 + '<div class="mes">' + res.FBody + ' </div>' )
1031 else if GikoSys.Setting.ShowMail then
1032 Result := CreateResultString( '<a name="' + no + '"></a>'
1033 + '<div class="header"><span class="no"><a href="menu:' + no + '">' + no + '</a></span>'
1034 + '<span class="name_label">
\96¼
\91O
\81F </span>'
1035 + '<a class="name_mail" href="mailto:' + res.FMailTo + '">'
1036 + '<b>' + res.FName + '</b></a><span class="mail"> [' + res.FMailTo + ']</span>'
1037 + '<span class="date_label">
\93\8a\8de
\93ú
\81F</span>'
1038 + '<span class="date"> ' + res.FDateTime+ '</span></div>'
1039 + '<div class="mes">' + res.FBody + ' </div>' )
1041 Result := CreateResultString( '<a name="' + no + '"></a>'
1042 + '<div class="header"><span class="no"><a href="menu:' + no + '">' + no + '</a></span>'
1043 + '<span class="name_label">
\96¼
\91O
\81F </span>'
1044 + '<a class="name_mail" href="mailto:' + res.FMailTo + '">'
1045 + '<b>' + res.FName + '</b></a>'
1046 + '<span class="date_label">
\93\8a\8de
\93ú
\81F</span>'
1047 + '<span class="date"> ' + res.FDateTime+ '</span></div>'
1048 + '<div class="mes">' + res.FBody + ' </div>' );
1056 // *************************************************************************
1057 // TThreadItem
\83N
\83\89\83X
\82ð
\8c³
\82É
\83X
\83\8c\83b
\83h
\82Ì
\83w
\83b
\83_
\82ð
\8eæ
\93¾
\82·
\82é
1058 // *************************************************************************
1059 function ThreadItemGetHeader(
1060 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
1061 inOptionalHeader : PChar //
\92Ç
\89Á
\82Ì
\83w
\83b
\83_
1062 ) : PChar; stdcall; //
\90®
\8c`
\82³
\82ê
\82½ HTML
1064 threadItem : TThreadItem;
1065 skinHeader : string;
1066 optionalHeader : string;
1069 threadItem := TThreadItem( inInstance );
1070 optionalHeader := string( inOptionalHeader );
1073 if GikoSys.Setting.UseSkin then begin
1075 skinHeader := GikoSys.LoadFromSkin( GikoSys.Setting.GetSkinHeaderFileName, threadItem, threadItem.SizeByte );
1076 if Length( optionalHeader ) > 0 then
1078 StringReplace( skinHeader, '</head>', optionalHeader + '</head>', [] );
1079 end else if GikoSys.Setting.UseCSS then begin
1083 '<title>' + threadItem.Title + '</title>' +
1084 '<link rel="stylesheet" href="'+ GikoSys.Setting.GetStyleSheetDir + GikoSys.Setting.CSSFileName +'" type="text/css">' +
1088 '<div class="title">' + threadItem.Title + '</div>';
1090 //
\83f
\83t
\83H
\83\8b\83g
1093 '<title>' + threadItem.Title + '</title>' +
1097 '<div class="title">' + threadItem.Title + '</div>';
1102 Result := CreateResultString( skinHeader );
1106 // *************************************************************************
1107 // TThreadItem
\83N
\83\89\83X
\82ð
\8c³
\82É
\83X
\83\8c\83b
\83h
\82Ì
\83t
\83b
\83^
\82ð
\8eæ
\93¾
\82·
\82é
1108 // *************************************************************************
1109 function ThreadItemGetFooter(
1110 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
1111 inOptionalFooter : PChar //
\92Ç
\89Á
\82Ì
\83t
\83b
\83^
1112 ) : PChar; stdcall; //
\90®
\8c`
\82³
\82ê
\82½ HTML
1114 threadItem : TThreadItem;
1115 skinFooter : string;
1116 optionalFooter : string;
1119 threadItem := TThreadItem( inInstance );
1120 optionalFooter := string( inOptionalFooter );
1123 if GikoSys.Setting.UseSkin then begin
1124 skinFooter := GikoSys.LoadFromSkin( GikoSys.Setting.GetSkinFooterFileName, threadItem, threadItem.SizeByte );
1125 if Length( optionalFooter ) > 0 then
1127 StringReplace( skinFooter, '</body>', optionalFooter + '</body>', [] );
1130 '<a name="bottom"></a>' +
1133 '<a name="last"></a>' +
1139 Result := CreateResultString( skinFooter );
1143 // *************************************************************************
1144 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\90i
\8ds
\82µ
\82½
1145 // *************************************************************************
1146 procedure ThreadItemWork(
1147 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
1148 inWorkCount : Integer //
\8c»
\8dÝ
\82Ì
\90i
\95à
\8fó
\8bµ(
\83J
\83E
\83\93\83g)
1152 if Assigned( OnWork ) then
1153 OnWork( TObject( inInstance ), wmRead, inWorkCount );
1157 // *************************************************************************
1158 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8en
\82Ü
\82Á
\82½
1159 // *************************************************************************
1160 procedure ThreadItemWorkBegin(
1161 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
1162 inWorkCountMax : Integer //
\92Ê
\90M
\82Ì
\8fI
\82í
\82è
\82ð
\8e¦
\82·
\83J
\83E
\83\93\83g
1166 if Assigned( OnWorkBegin ) then
1167 OnWorkBegin( TObject( inInstance ), wmRead, inWorkCountMax );
1171 // *************************************************************************
1172 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8fI
\82í
\82Á
\82½
1173 // *************************************************************************
1174 procedure ThreadItemWorkEnd(
1175 inInstance : DWORD //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
1179 if Assigned( OnWorkEnd ) then
1180 OnWorkEnd( TObject( inInstance ), wmRead );
1186 DisposeResultString,
1202 ThreadItemGetDouble,
1203 ThreadItemSetDouble,
1205 ThreadItemGetHeader,
1206 ThreadItemGetFooter,
1208 ThreadItemWorkBegin,