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(
71 // =========================================================================
72 //
\83v
\83\89\83O
\83C
\83\93\82ð
\8aÇ
\97\9d\82·
\82é TBoardPlugin
\83N
\83\89\83X
73 // =========================================================================
74 TBoardPlugIn = class( TObject )
76 FFilePath : string; //
\83v
\83\89\83O
\83C
\83\93\82ð
\8e¦
\82·
\83p
\83X
77 FModule : HMODULE; //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b
79 FVersionInfo : TOnVersionInfo;
80 FAcceptURL : TOnAcceptURL;
81 FCreateThreadItem : TThreadItemCreate;
82 FDisposeThreadItem : TThreadItemDispose;
85 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
86 constructor CreateFromPath( inPath : string );
87 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
88 constructor CreateFromName( inName : string );
89 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
90 constructor CreateFromModule( inModule : HMODULE );
92 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
93 procedure LoadFromPath( inPath : string );
94 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
95 procedure LoadFromName( inName : string );
96 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
97 procedure LoadFromModule( inModule : HMODULE );
98 //
\83o
\81[
\83W
\83\87\83\93\8fî
\95ñ
99 procedure VersionInfo( var outAgent : string;
100 var outMajor : DWORD; var outMinor : DWORD;
101 var outRelease : string; var outRevision : DWORD );
102 //
\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©
103 function AcceptURL( inURL : string ) : Boolean;
104 procedure CreateThreadItem( threadItem : DWORD );
105 procedure DisposeThreadItem( threadItem : DWORD );
108 procedure LoadPlugInAPI;
111 property FilePath : string read FFilePath;
112 property Module : HMODULE read FModule;
117 OnWorkBegin : TWorkBeginEvent;
118 OnWorkEnd : TWorkEndEvent;
120 BoardPlugIns : array of TBoardPlugIn;
122 procedure InitializeBoardPlugIns;
124 function CreateResultString(
128 function ThreadItemDat2HTML(
129 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
130 inDatRes : PChar; //
\96¼
\91O<>
\83\81\81[
\83\8b<>
\93ú
\95tID<>
\96{
\95¶<>
\82Å
\8d\
\90¬
\82³
\82ê
\82½
\83e
\83L
\83X
\83g
131 inResNo : DWORD; //
\83\8c\83X
\94Ô
\8d\86
132 inIsNew : Boolean //
\90V
\92\85\83\8c\83X
\82È
\82ç True
133 ) : PChar; stdcall; //
\90®
\8c`
\82³
\82ê
\82½ HTML
135 procedure DisposeResultString(
141 uses GikoSystem, BoardGroup;
143 // =========================================================================
144 //
\83v
\83\89\83O
\83C
\83\93\82ð
\8aÇ
\97\9d\82·
\82é TBoardPlugin
\83N
\83\89\83X
145 // =========================================================================
147 // *************************************************************************
148 // BoardPlugin
\83t
\83H
\83\8b\83_
\82É
\82 \82é
\83v
\83\89\83O
\83C
\83\93\82ð
\91S
\82Ä
\83\8d\81[
\83h
149 // *************************************************************************
150 procedure InitializeBoardPlugIns;
153 pluginNames : TStringList;
156 pluginNames := TStringList.Create;
158 GikoSys.GetFileList( GikoSys.Setting.GetBoardPlugInDir, '*', pluginNames, False, False );
159 SetLength( BoardPlugIns, pluginNames.Count );
161 bound := pluginNames.Count - 1;
162 for i := 0 to bound do
163 BoardPlugIns[ i ] := TBoardPlugIn.CreateFromName( pluginNames.Strings[ i ] );
172 // =========================================================================
173 //
\83v
\83\89\83O
\83C
\83\93\82ð
\8aÇ
\97\9d\82·
\82é TBoardPlugin
\83N
\83\89\83X
174 // =========================================================================
176 // *************************************************************************
177 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
178 // *************************************************************************
179 constructor TBoardPlugIn.CreateFromPath(
186 LoadFromPath( inPath );
190 // *************************************************************************
191 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
192 // *************************************************************************
193 constructor TBoardPlugIn.CreateFromName(
200 LoadFromName( inName );
204 // *************************************************************************
205 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
206 // *************************************************************************
207 constructor TBoardPlugIn.CreateFromModule(
214 LoadFromModule( inModule );
218 // *************************************************************************
219 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
220 // *************************************************************************
221 procedure TBoardPlugIn.LoadFromPath(
227 if FileExists( inPath ) then
228 FModule := LoadLibrary( PChar( inPath ) )
229 else if FileExists( inPath + '.dll' ) then
230 FModule := LoadLibrary( PChar( inPath + '.dll' ) );
236 // *************************************************************************
237 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
238 // *************************************************************************
239 procedure TBoardPlugIn.LoadFromName(
244 LoadFromPath( GikoSys.Setting.GetBoardPlugInDir + inName );
248 // *************************************************************************
249 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
250 // *************************************************************************
251 procedure TBoardPlugIn.LoadFromModule(
255 tmp : array [0..MAX_PATH] of Char;
258 GetModuleFileName( inModule, tmp, SizeOf( tmp ) );
266 // *************************************************************************
267 //
\83o
\81[
\83W
\83\87\83\93\8fî
\95ñ
268 // *************************************************************************
269 procedure TBoardPlugIn.VersionInfo(
270 var outAgent : string; //
\83o
\81[
\83W
\83\87\83\93\82ð
\88ê
\90Ø
\8aÜ
\82Ü
\82È
\82¢
\8f\83\90\88\82È
\96¼
\8fÌ
271 var outMajor : DWORD; //
\83\81\83W
\83\83\81[
\83o
\81[
\83W
\83\87\83\93
272 var outMinor : DWORD; //
\83}
\83C
\83i
\81[
\83o
\81[
\83W
\83\87\83\93
273 var outRelease : string; //
\83\8a\83\8a\81[
\83X
\92i
\8aK
\96¼
274 var outRevision : DWORD //
\83\8a\83r
\83W
\83\87\83\93\83i
\83\93\83o
\81[
281 if Assigned( FVersionInfo ) then begin
282 FVersionInfo( agent, outMajor, outMinor, release, outRevision );
283 outAgent := string( agent );
284 outRelease := string( release );
285 DisposeResultString( agent );
286 DisposeResultString( release );
291 // *************************************************************************
292 //
\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©
293 // *************************************************************************
294 function TBoardPlugIn.AcceptURL(
299 if Assigned( FAcceptURL ) then
300 Result := FAcceptURL( PChar( inURL ) )
306 // *************************************************************************
307 // TThreadItem
\82ª
\90¶
\90¬
\82³
\82ê
\82½
308 // *************************************************************************
309 procedure TBoardPlugIn.CreateThreadItem(
314 if Assigned( FCreateThreadItem ) then
315 FCreateThreadItem( threadItem );
319 // *************************************************************************
320 // TThreadItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
321 // *************************************************************************
322 procedure TBoardPlugIn.DisposeThreadItem(
327 if Assigned( FDisposeThreadItem ) then
328 FDisposeThreadItem( threadItem );
332 // *************************************************************************
333 //
\83v
\83\89\83O
\83C
\83\93\82Ì API
\82ð
\8eæ
\93¾
334 // *************************************************************************
335 procedure TBoardPlugIn.LoadPlugInAPI;
339 if Assigned( Pointer( FModule ) ) then begin
340 FVersionInfo := GetProcAddress( FModule, 'OnVersionInfo' );
341 FAcceptURL := GetProcAddress( FModule, 'OnAcceptURL' );
342 FCreateThreadItem := GetProcAddress( FModule, 'ThreadItemCreate' );
343 FDisposeThreadItem := GetProcAddress( FModule, 'ThreadItemDispose' );
352 // =========================================================================
354 // =========================================================================
356 // *************************************************************************
357 //
\96ß
\82è
\92l
\82ª PChar
\82Å
\82 \82é API
\82Ì
\83\81\83\82\83\8a\82ð
\8am
\95Û
\82·
\82é
358 // *************************************************************************
359 function CreateResultString(
366 tmp := PChar( resultStr );
367 GetMem( Result, Length( tmp ) + 1 );
368 Move( tmp^, Result^, Length( tmp ) + 1 );
372 // *************************************************************************
373 //
\96ß
\82è
\92l
\82ª PChar
\82Å
\82 \82é API
\82Ì
\83\81\83\82\83\8a\82ð
\8aJ
\95ú
\82·
\82é
374 // *************************************************************************
375 procedure DisposeResultString(
380 FreeMem( resultStr );
384 // *************************************************************************
385 //
\83v
\83\8d\83O
\83\89\83\80\96{
\91Ì
\82Ì
\83o
\81[
\83W
\83\87\83\93\82ð
\8eæ
\93¾
\82·
\82é
386 // *************************************************************************
387 procedure VersionInfo(
388 var outAgent : PChar; //
\83o
\81[
\83W
\83\87\83\93\82ð
\88ê
\90Ø
\8aÜ
\82Ü
\82È
\82¢
\8f\83\90\88\82È
\96¼
\8fÌ
389 var outMajor : DWORD; //
\83\81\83W
\83\83\81[
\83o
\81[
\83W
\83\87\83\93
390 var outMinor : DWORD; //
\83}
\83C
\83i
\81[
\83o
\81[
\83W
\83\87\83\93
391 var outRelease : PChar; //
\83\8a\83\8a\81[
\83X
\92i
\8aK
\96¼
392 var outRevision : DWORD //
\83\8a\83r
\83W
\83\87\83\93\83i
\83\93\83o
\81[
396 outAgent := CreateResultString( PChar( APP_NAME ) );
399 outRelease := CreateResultString( PChar( BETA_VERSION_NAME_E ) );
400 outRevision := BETA_VERSION;
404 // *************************************************************************
405 //
\8ew
\92è
\82µ
\82½ URL
\82ð
\83_
\83E
\83\93\83\8d\81[
\83h
\82µ
\82Ä
\95Ô
\82·
406 // *************************************************************************
407 function InternalDownload(
408 inURL : PChar; //
\83_
\83E
\83\93\83\8d\81[
\83h
\82·
\82é URL
409 var ioModified : Double; //
\8dÅ
\8cã
\82É
\8eæ
\93¾
\82µ
\82½
\93ú
\8e\9e
410 var outResultData : PChar; //
\83_
\83E
\83\93\83\8d\81[
\83h
\82³
\82ê
\82½
\95¶
\8e\9a\97ñ
411 inRangeStart : DWORD; //
\8aJ
\8en
\88Ê
\92u
412 inRangeEnd : DWORD //
\8fI
\97¹
\88Ê
\92u
413 ) : Longint; stdcall; //
\83\8c\83X
\83|
\83\93\83X
\83R
\81[
\83h
415 httpSocket : TIdHTTP;
416 resStream : TMemoryStream;
422 httpSocket := TIdHTTP.Create( nil );
424 //
\83C
\83x
\83\93\83g
\82Ì
\90Ý
\92è
425 if Assigned( OnWork ) then
426 httpSocket.OnWork := OnWork;
427 if Assigned( OnWorkBegin ) then
428 httpSocket.OnWorkBegin := OnWorkBegin;
429 if Assigned( OnWorkEnd ) then
430 httpSocket.OnWorkEnd := OnWorkEnd;
432 //
\92Ê
\90M
\82É
\8aÖ
\82·
\82é
\90Ý
\92è
433 httpSocket.Request.CustomHeaders.Clear;
434 httpSocket.Response.Clear;
435 httpSocket.Request.Clear;
437 httpSocket.Request.UserAgent := GikoSys.GetUserAgent;
438 httpSocket.RecvBufferSize := Gikosys.Setting.RecvBufferSize;
439 httpSocket.ProxyParams.BasicAuthentication := False;
441 Writeln('------------------------------------------------------------');
443 //httpSocket.AllowCookies := False;
444 if GikoSys.Setting.ReadProxy then begin
445 if GikoSys.Setting.ProxyProtocol then
446 httpSocket.ProtocolVersion := pv1_1
448 httpSocket.ProtocolVersion := pv1_0;
449 httpSocket.ProxyParams.ProxyServer := GikoSys.Setting.ReadProxyAddress;
450 httpSocket.ProxyParams.ProxyPort := GikoSys.Setting.ReadProxyPort;
451 httpSocket.ProxyParams.ProxyUsername := GikoSys.Setting.ReadProxyUserID;
452 httpSocket.ProxyParams.ProxyPassword := GikoSys.Setting.ReadProxyPassword;
453 if GikoSys.Setting.ReadProxyUserID <> '' then
454 httpSocket.ProxyParams.BasicAuthentication := True;
456 Writeln('
\83v
\83\8d\83L
\83V
\90Ý
\92è
\82 \82è');
457 Writeln('
\83z
\83X
\83g: ' + GikoSys.Setting.ReadProxyAddress);
458 Writeln('
\83|
\81[
\83g: ' + IntToStr( GikoSys.Setting.ReadProxyPort ));
461 if GikoSys.Setting.Protocol then
462 httpSocket.ProtocolVersion := pv1_1
464 httpSocket.ProtocolVersion := pv1_0;
465 httpSocket.ProxyParams.ProxyServer := '';
466 httpSocket.ProxyParams.ProxyPort := 80;
467 httpSocket.ProxyParams.ProxyUsername := '';
468 httpSocket.ProxyParams.ProxyPassword := '';
470 Writeln('
\83v
\83\8d\83L
\83V
\90Ý
\92è
\82È
\82µ');
474 httpSocket.Request.ContentRangeStart := inRangeStart;
475 httpSocket.Request.ContentRangeEnd := inRangeEnd;
476 if (ioModified <> 0) and (ioModified <> ZERO_DATE) then
477 httpSocket.Request.LastModified := ioModified - OffsetFromUTC;
478 if inRangeStart = 0 then
479 httpSocket.Request.AcceptEncoding := 'gzip'
481 httpSocket.Request.AcceptEncoding := '';
482 httpSocket.Request.Accept := 'text/html';
484 resStream := TMemoryStream.Create;
490 Writeln('URL: ' + inURL);
492 httpSocket.Get( inURL, resStream );
494 Writeln('
\8eæ
\93¾
\82Å
\97á
\8aO
\82È
\82µ');
497 content := GikoSys.GzipDecompress( resStream, httpSocket.Response.ContentEncoding );
498 ioModified := httpSocket.Response.LastModified;
500 Result := httpSocket.ResponseCode;
501 if (Length( content ) = 0) and (Result = 206) then
504 outResultData := CreateResultString( content );
506 on E: EIdSocketError do begin
507 ioModified := ZERO_DATE;
508 outResultData := nil;
510 on E: EIdConnectException do begin
511 ioModified := ZERO_DATE;
512 outResultData := nil;
513 //Item.ErrText := E.Message;
515 on E: Exception do begin
517 Writeln('
\8eæ
\93¾
\82Å
\97á
\8aO
\82 \82è');
518 Writeln('E.Message: ' + E.Message);
520 ioModified := ZERO_DATE;
521 outResultData := nil;
522 Result := httpSocket.ResponseCode;
523 //Item.ErrText := E.Message;
536 // *************************************************************************
537 //
\82Q
\82¿
\82á
\82ñ
\82Ë
\82é
\82Ì dat
\8c`
\8e®
\82ð
\83\8d\81[
\83J
\83\8b\82 \82Ú
\81`
\82ñ
\82É
\92Ê
\82·
538 // *************************************************************************
539 function InternalAbon(
540 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
541 ) : PChar; stdcall; //
\82 \82Ú
\81`
\82ñ
\8dÏ
\82Ý
\82Ì dat
\8c`
\8e®
\83e
\83L
\83X
\83g
543 datList : TStringList;
546 datList := TStringList.Create;
547 datList.Text := string( inDatText );
548 //GikoSys.FAbon.IndividualAbon( datList, ChangeFileExt(FileName,'.NG'));
549 GikoSys.FAbon.Execute( datList );
550 GikoSys.FSelectResFilter.Execute( datList );
552 Result := CreateResultString( datList.Text );
556 // *************************************************************************
557 //
\82Q
\82¿
\82á
\82ñ
\82Ë
\82é
\82Ì dat
\8c`
\8e® 1
\8ds
\82ð HTML
\82É
\95Ï
\8a·
\82·
\82é
558 // *************************************************************************
559 function InternalDat2HTML(
560 inDatRes : PChar; //
\96¼
\91O<>
\83\81\81[
\83\8b<>
\93ú
\95tID<>
\96{
\95¶<>
\82Å
\8d\
\90¬
\82³
\82ê
\82½
\83e
\83L
\83X
\83g
561 inResNo : DWORD; //
\83\8c\83X
\94Ô
\8d\86
562 inIsNew : Boolean //
\90V
\92\85\83\8c\83X
\82È
\82ç True
563 ) : PChar; stdcall; //
\90®
\8c`
\82³
\82ê
\82½ HTML
566 threadItem : TThreadItem;
569 //
\83_
\83~
\81[
\82Ì
\83N
\83\89\83X
570 board := TBoard.Create;
571 threadItem := TThreadItem.Create;
574 threadItem.ParentBoard := Board;
576 Result := ThreadItemDat2HTML( DWORD( threadItem ), inDatRes, inResNo, inIsNew );
585 // =========================================================================
587 // =========================================================================
589 // *************************************************************************
590 //
\83u
\83\89\83E
\83U
\96{
\91Ì
\82ª
\92u
\82¢
\82Ä
\82 \82é
\83t
\83H
\83\8b\83_
591 // *************************************************************************
592 function ApplicationFolder : PChar; stdcall;
595 Result := CreateResultString( GikoSys.GetAppDir );
599 // *************************************************************************
600 //
\8f\89\8aú
\90Ý
\92è
\83t
\83H
\83\8b\83_
601 // *************************************************************************
602 function PreferencesFolder : PChar; stdcall;
605 Result := CreateResultString( GikoSys.GetConfigDir );
609 // *************************************************************************
610 //
\8f\89\8aú
\90Ý
\92è
\83t
\83@
\83C
\83\8b
611 // *************************************************************************
612 function PreferencesFile : PChar; stdcall;
615 Result := CreateResultString( GikoSys.GetAppDir + 'gikoNavi.ini' );
619 // *************************************************************************
620 //
\83\8d\83O
\83t
\83H
\83\8b\83_
621 // *************************************************************************
622 function LogFolder : PChar; stdcall;
625 Result := CreateResultString( GikoSys.GetAppDir + 'Log\' );
629 // *************************************************************************
630 // CSS
\83t
\83H
\83\8b\83_
631 // *************************************************************************
632 function CSSFolder : PChar; stdcall;
635 Result := CreateResultString( GikoSys.GetStyleSheetDir );
639 // *************************************************************************
640 //
\83X
\83L
\83\93\82ð
\93ü
\82ê
\82Ä
\82¨
\82
\83t
\83H
\83\8b\83_
641 // *************************************************************************
642 function SkinFolder : PChar; stdcall;
645 Result := CreateResultString( GikoSys.GetSkinDir );
649 // *************************************************************************
650 //
\8eg
\97p
\82µ
\82Ä
\82¢
\82é CSS /
\83X
\83L
\83\93
651 // *************************************************************************
652 function SkinFile : PChar; stdcall;
655 Result := CreateResultString( GikoSys.Setting.CSSFileName );
659 // *************************************************************************
660 //
\82 \82Ú
\81[
\82ñ
\8bK
\91¥
\82ª
\92u
\82¢
\82Ä
\82 \82é
\83f
\83B
\83\8c\83N
\83g
\83\8a
661 // *************************************************************************
662 function AbonFolder : PChar; stdcall;
665 Result := CreateResultString( GikoSys.Setting.GetNGWordsDir );
669 // *************************************************************************
670 //
\8eg
\97p
\82µ
\82Ä
\82¢
\82é
\82 \82Ú
\81[
\82ñ
\8bK
\91¥
671 // *************************************************************************
672 function AbonFile : PChar; stdcall;
675 Result := CreateResultString( GikoSys.FAbon.GetNGwordpath );
681 // =========================================================================
683 // =========================================================================
685 // *************************************************************************
686 // TThreadItem
\83N
\83\89\83X
\82Ì
\83v
\83\8d\83p
\83e
\83B
\82ð
\8eæ
\93¾
\82·
\82é
687 // *************************************************************************
688 function ThreadItemGetLong(
690 propertyID : TThreadItemProperty
693 threadItem : TThreadItem;
696 threadItem := TThreadItem( instance );
698 tipContext: // : DWORD //
\8e©
\97R
\82É
\90Ý
\92è
\82µ
\82Ä
\82¢
\82¢
\92l
699 Result := threadItem.Context;
700 tipNo: // : Integer //
\94Ô
\8d\86
701 Result := threadItem.No;
702 tipFileName: // : string //
\83X
\83\8c\83b
\83h
\83t
\83@
\83C
\83\8b\96¼
703 Result := DWORD( CreateResultString( threadItem.FileName ) );
704 tipTitle: // : string //
\83X
\83\8c\83b
\83h
\83^
\83C
\83g
\83\8b
705 Result := DWORD( CreateResultString( threadItem.Title ) );
706 tipCount: // : Integer //
\83X
\83\8c\83b
\83h
\83J
\83E
\83\93\83g
\81i
\83\8d\81[
\83J
\83\8b\81j
707 Result := threadItem.Count;
708 tipAllResCount: // : Integer //
\83X
\83\8c\83b
\83h
\83J
\83E
\83\93\83g
\81i
\83T
\81[
\83o
\81j
709 Result := threadItem.AllResCount;
710 tipNewResCount: // : Integer //
\83X
\83\8c\83b
\83h
\90V
\92\85\90\94
711 Result := threadItem.NewResCount;
712 tipSize: // : Integer //
\83X
\83\8c\83b
\83h
\83T
\83C
\83Y
713 Result := threadItem.Size;
714 tipRound: // : Boolean //
\8f\84\89ñ
\83t
\83\89\83O
715 Result := DWORD( threadItem.Round );
716 tipRoundName: // : string //
\8f\84\89ñ
\96¼
717 Result := DWORD( CreateResultString( threadItem.RoundName ) );
718 tipIsLogFile: // : Boolean //
\83\8d\83O
\91¶
\8dÝ
\83t
\83\89\83O
719 Result := DWORD( threadItem.IsLogFile );
720 tipKokomade: // : Integer //
\83R
\83R
\82Ü
\82Å
\93Ç
\82ñ
\82¾
\94Ô
\8d\86
721 Result := threadItem.Kokomade;
722 tipNewReceive: // : Integer //
\83R
\83R
\82©
\82ç
\90V
\8bK
\8eó
\90M
723 Result := threadItem.NewReceive;
724 tipNewArrival: // : Boolean //
\90V
\92\85
725 Result := DWORD( threadItem.NewArrival );
726 tipUnRead: // : Boolean //
\96¢
\93Ç
\83t
\83\89\83O
727 Result := DWORD( threadItem.UnRead );
728 tipScrollTop: // : Integer //
\83X
\83N
\83\8d\81[
\83\8b\88Ê
\92u
729 Result := threadItem.ScrollTop;
730 tipDownloadHost: // : string //
\8d¡
\82Ì
\83z
\83X
\83g
\82Æ
\88á
\82¤
\8fê
\8d\87\82Ì
\83z
\83X
\83g
731 Result := DWORD( CreateResultString( threadItem.DownloadHost ) );
732 tipAgeSage: // : TThreadAgeSage //
\83A
\83C
\83e
\83\80\82Ì
\8fã
\82°
\89º
\82°
733 Result := DWORD( threadItem.AgeSage );
734 tipURL: // : string //
\83X
\83\8c\83b
\83h
\82ð
\83u
\83\89\83E
\83U
\82Å
\95\
\8e¦
\82·
\82é
\8dÛ
\82Ì URL
735 Result := DWORD( CreateResultString( threadItem.URL ) );
736 tipFilePath: //
\82±
\82Ì
\83X
\83\8c\82ª
\95Û
\91¶
\82³
\82ê
\82Ä
\82¢
\82é
\83p
\83X
737 Result := DWORD( CreateResultString( threadItem.FilePath ) );
743 // *************************************************************************
744 // TThreadItem
\83N
\83\89\83X
\82Ì
\83v
\83\8d\83p
\83e
\83B
\82ð
\90Ý
\92è
\82·
\82é
745 // *************************************************************************
746 procedure ThreadItemSetLong(
748 propertyID : TThreadItemProperty;
752 threadItem : TThreadItem;
755 threadItem := TThreadItem( instance );
757 tipContext: // : DWORD //
\8e©
\97R
\82É
\90Ý
\92è
\82µ
\82Ä
\82¢
\82¢
\92l
758 threadItem.Context := param;
759 tipNo: // : Integer //
\94Ô
\8d\86
760 threadItem.No := param;
761 tipFileName: // : string //
\83X
\83\8c\83b
\83h
\83t
\83@
\83C
\83\8b\96¼
762 threadItem.FileName := string( PChar( param ) );
763 tipTitle: // : string //
\83X
\83\8c\83b
\83h
\83^
\83C
\83g
\83\8b
764 threadItem.Title := string( PChar( param ) );
765 tipCount: // : Integer //
\83X
\83\8c\83b
\83h
\83J
\83E
\83\93\83g
\81i
\83\8d\81[
\83J
\83\8b\81j
766 threadItem.Count := param;
767 tipAllResCount: // : Integer //
\83X
\83\8c\83b
\83h
\83J
\83E
\83\93\83g
\81i
\83T
\81[
\83o
\81j
768 threadItem.AllResCount := param;
769 tipNewResCount: // : Integer //
\83X
\83\8c\83b
\83h
\90V
\92\85\90\94
770 threadItem.NewResCount := param;
771 tipSize: // : Integer //
\83X
\83\8c\83b
\83h
\83T
\83C
\83Y
772 threadItem.Size := param;
773 tipRound: // : Boolean //
\8f\84\89ñ
\83t
\83\89\83O
774 threadItem.Round := Boolean( param );
775 tipRoundName: // : string //
\8f\84\89ñ
\96¼
776 threadItem.RoundName := string( PChar( param ) );
777 tipIsLogFile: // : Boolean //
\83\8d\83O
\91¶
\8dÝ
\83t
\83\89\83O
778 threadItem.IsLogFile := Boolean( param );
779 tipKokomade: // : Integer //
\83R
\83R
\82Ü
\82Å
\93Ç
\82ñ
\82¾
\94Ô
\8d\86
780 threadItem.Kokomade := param;
781 tipNewReceive: // : Integer //
\83R
\83R
\82©
\82ç
\90V
\8bK
\8eó
\90M
782 threadItem.NewReceive := param;
783 tipNewArrival: // : Boolean //
\90V
\92\85
784 threadItem.NewArrival := Boolean( param );
785 tipUnRead: // : Boolean //
\96¢
\93Ç
\83t
\83\89\83O
786 threadItem.UnRead := Boolean( param );
787 tipScrollTop: // : Integer //
\83X
\83N
\83\8d\81[
\83\8b\88Ê
\92u
788 threadItem.ScrollTop := param;
789 tipDownloadHost: // : string //
\8d¡
\82Ì
\83z
\83X
\83g
\82Æ
\88á
\82¤
\8fê
\8d\87\82Ì
\83z
\83X
\83g
790 threadItem.DownloadHost := string( PChar( param ) );
791 tipAgeSage: // : TThreadAgeSage //
\83A
\83C
\83e
\83\80\82Ì
\8fã
\82°
\89º
\82°
792 threadItem.AgeSage := TGikoAgeSage( param );
793 tipURL: // : string //
\83X
\83\8c\83b
\83h
\82ð
\83u
\83\89\83E
\83U
\82Å
\95\
\8e¦
\82·
\82é
\8dÛ
\82Ì URL
794 threadItem.URL := string( PChar( param ) );
795 tipFilePath: // : string //
\82±
\82Ì
\83X
\83\8c\82ª
\95Û
\91¶
\82³
\82ê
\82Ä
\82¢
\82é
\83p
\83X
796 threadItem.FilePath := string( PChar( param ) );
801 // *************************************************************************
802 // TThreadItem
\83N
\83\89\83X
\82Ì
\83v
\83\8d\83p
\83e
\83B
\82ð
\8eæ
\93¾
\82·
\82é
803 // *************************************************************************
804 function ThreadItemGetDouble(
806 propertyID : TThreadItemProperty
809 threadItem : TThreadItem;
812 threadItem := TThreadItem( instance );
814 tipRoundDate: // : TDateTime //
\83X
\83\8c\83b
\83h
\82ð
\8eæ
\93¾
\82µ
\82½
\93ú
\8e\9e\81i
\8f\84\89ñ
\93ú
\8e\9e\81j
815 Result := threadItem.RoundDate;
816 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
817 Result := threadItem.LastModified;
824 // *************************************************************************
825 // TThreadItem
\83N
\83\89\83X
\82Ì
\83v
\83\8d\83p
\83e
\83B
\82ð
\90Ý
\92è
\82·
\82é
826 // *************************************************************************
827 procedure ThreadItemSetDouble(
829 propertyID : TThreadItemProperty;
833 threadItem : TThreadItem;
836 threadItem := TThreadItem( instance );
838 tipRoundDate: // : TDateTime //
\83X
\83\8c\83b
\83h
\82ð
\8eæ
\93¾
\82µ
\82½
\93ú
\8e\9e\81i
\8f\84\89ñ
\93ú
\8e\9e\81j
839 threadItem.RoundDate := param;
840 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
841 threadItem.LastModified := param;
846 // *************************************************************************
847 // 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é
848 // *************************************************************************
849 function ThreadItemDat2HTML(
850 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
851 inDatRes : PChar; //
\96¼
\91O<>
\83\81\81[
\83\8b<>
\93ú
\95tID<>
\96{
\95¶<>
\82Å
\8d\
\90¬
\82³
\82ê
\82½
\83e
\83L
\83X
\83g
852 inResNo : DWORD; //
\83\8c\83X
\94Ô
\8d\86
853 inIsNew : Boolean //
\90V
\92\85\83\8c\83X
\82È
\82ç True
854 ) : PChar; stdcall; //
\90®
\8c`
\82³
\82ê
\82½ HTML
856 threadItem : TThreadItem;
861 threadItem := TThreadItem( inInstance );
862 //
\88ø
\90\94\82ð
\95ª
\89ð
863 res := GikoSys.DivideStrLine( string( inDatRes ) );
864 no := IntToStr( inResNo );
867 if GikoSys.Setting.UseSkin then begin
870 Result := CreateResultString( GikoSys.SkinedRes(
871 GikoSys.LoadFromSkin(
872 GikoSys.Setting.GetSkinNewResFileName, threadItem, 0
876 Result := CreateResultString( GikoSys.SkinedRes(
877 GikoSys.LoadFromSkin(
878 GikoSys.Setting.GetSkinResFileName, threadItem, 0
882 // CSS or
\83f
\83t
\83H
\83\8b\83g
883 if res.FName = '' then
884 res.FName := ' ';
885 if res.FMailTo = '' then
886 Result := CreateResultString( '<a name="' + no + '"></a>'
887 + '<div class="header"><span class="no"><a href="menu:' + No + '">' + no + '</a></span> '
888 + '<span class="name_label">
\96¼
\91O
\81F</span> '
889 + '<span class="name"><b>' + res.FName + '</b></span> '
890 + '<span class="date_label">
\93\8a\8de
\93ú
\81F</span> '
891 + '<span class="date">' + res.FDateTime+ '</span></div>'
892 + '<div class="mes">' + res.FBody + ' </div>' )
893 else if GikoSys.Setting.ShowMail then
894 Result := CreateResultString( '<a name="' + no + '"></a>'
895 + '<div class="header"><span class="no"><a href="menu:' + no + '">' + no + '</a></span>'
896 + '<span class="name_label">
\96¼
\91O
\81F </span>'
897 + '<a class="name_mail" href="mailto:' + res.FMailTo + '">'
898 + '<b>' + res.FName + '</b></a><span class="mail"> [' + res.FMailTo + ']</span>'
899 + '<span class="date_label">
\93\8a\8de
\93ú
\81F</span>'
900 + '<span class="date"> ' + res.FDateTime+ '</span></div>'
901 + '<div class="mes">' + res.FBody + ' </div>' )
903 Result := CreateResultString( '<a name="' + no + '"></a>'
904 + '<div class="header"><span class="no"><a href="menu:' + no + '">' + no + '</a></span>'
905 + '<span class="name_label">
\96¼
\91O
\81F </span>'
906 + '<a class="name_mail" href="mailto:' + res.FMailTo + '">'
907 + '<b>' + res.FName + '</b></a>'
908 + '<span class="date_label">
\93\8a\8de
\93ú
\81F</span>'
909 + '<span class="date"> ' + res.FDateTime+ '</span></div>'
910 + '<div class="mes">' + res.FBody + ' </div>' );
918 // *************************************************************************
919 // TThreadItem
\83N
\83\89\83X
\82ð
\8c³
\82É
\83X
\83\8c\83b
\83h
\82Ì
\83w
\83b
\83_
\82ð
\8eæ
\93¾
\82·
\82é
920 // *************************************************************************
921 function ThreadItemGetHeader(
922 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
923 inOptionalHeader : PChar //
\92Ç
\89Á
\82Ì
\83w
\83b
\83_
924 ) : PChar; stdcall; //
\90®
\8c`
\82³
\82ê
\82½ HTML
926 threadItem : TThreadItem;
928 optionalHeader : string;
931 threadItem := TThreadItem( inInstance );
932 optionalHeader := string( inOptionalHeader );
933 skinHeader := GikoSys.LoadFromSkin( GikoSys.Setting.GetSkinHeaderFileName, threadItem, 0 );
934 if Length( optionalHeader ) > 0 then
935 skinHeader := StringReplace( skinHeader, '</head>',
936 string( optionalHeader ) + '</head>', [rfReplaceAll] );
938 Result := CreateResultString( skinHeader );
942 // *************************************************************************
943 // TThreadItem
\83N
\83\89\83X
\82ð
\8c³
\82É
\83X
\83\8c\83b
\83h
\82Ì
\83t
\83b
\83^
\82ð
\8eæ
\93¾
\82·
\82é
944 // *************************************************************************
945 function ThreadItemGetFooter(
946 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
947 inOptionalFooter : PChar //
\92Ç
\89Á
\82Ì
\83t
\83b
\83^
948 ) : PChar; stdcall; //
\90®
\8c`
\82³
\82ê
\82½ HTML
950 threadItem : TThreadItem;
952 optionalFooter : string;
955 threadItem := TThreadItem( inInstance );
956 optionalFooter := string( inOptionalFooter );
957 skinFooter := GikoSys.LoadFromSkin( GikoSys.Setting.GetSkinFooterFileName, threadItem, 0 );
958 if Length( optionalFooter ) > 0 then
959 skinFooter := StringReplace( skinFooter, '</body>',
960 string( optionalFooter ) + '</body>', [rfReplaceAll] );
962 Result := CreateResultString( skinFooter );
966 // *************************************************************************
967 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\90i
\8ds
\82µ
\82½
968 // *************************************************************************
969 procedure ThreadItemWork(
970 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
971 inWorkCount : Integer //
\8c»
\8dÝ
\82Ì
\90i
\95à
\8fó
\8bµ(
\83J
\83E
\83\93\83g)
975 if Assigned( OnWork ) then
976 OnWork( TObject( inInstance ), wmRead, inWorkCount );
980 // *************************************************************************
981 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8en
\82Ü
\82Á
\82½
982 // *************************************************************************
983 procedure ThreadItemWorkBegin(
984 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
985 inWorkCountMax : Integer //
\92Ê
\90M
\82Ì
\8fI
\82í
\82è
\82ð
\8e¦
\82·
\83J
\83E
\83\93\83g
989 if Assigned( OnWorkBegin ) then
990 OnWorkBegin( TObject( inInstance ), wmRead, inWorkCountMax );
994 // *************************************************************************
995 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8fI
\82í
\82Á
\82½
996 // *************************************************************************
997 procedure ThreadItemWorkEnd(
998 inInstance : DWORD //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
1002 if Assigned( OnWorkEnd ) then
1003 OnWorkEnd( TObject( inInstance ), wmRead );
1009 DisposeResultString,
1025 ThreadItemGetDouble,
1026 ThreadItemSetDouble,
1028 ThreadItemGetHeader,
1029 ThreadItemGetFooter,
1031 ThreadItemWorkBegin,