1 unit ExternalBoardManager;
6 Windows, Classes, SysUtils,
7 IdHTTP, IdComponent, IdGlobal, IdException,
8 GikoSystem, BoardGroup, AbonUnit;
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
38 OnWorkBegin : TWorkBeginEvent;
39 OnWorkEnd : TWorkEndEvent;
41 function ThreadItemDat2HTML(
42 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
43 inDatRes : PChar; //
\96¼
\91O<>
\83\81\81[
\83\8b<>
\93ú
\95tID<>
\96{
\95¶<>
\82Å
\8d\
\90¬
\82³
\82ê
\82½
\83e
\83L
\83X
\83g
44 inResNo : DWORD; //
\83\8c\83X
\94Ô
\8d\86
45 inIsNew : Boolean //
\90V
\92\85\83\8c\83X
\82È
\82ç True
46 ) : PChar; stdcall; //
\90®
\8c`
\82³
\82ê
\82½ HTML
50 // =========================================================================
52 // =========================================================================
54 // *************************************************************************
55 //
\96ß
\82è
\92l
\82ª PChar
\82Å
\82 \82é API
\82Ì
\83\81\83\82\83\8a\82ð
\8am
\95Û
\82·
\82é
56 // *************************************************************************
57 function CreateResultString(
64 tmp := PChar( resultStr );
65 GetMem( Result, Length( resultStr ) + 1 );
66 Move( tmp, Result, Length( resultStr ) + 1 );
70 // *************************************************************************
71 //
\96ß
\82è
\92l
\82ª PChar
\82Å
\82 \82é API
\82Ì
\83\81\83\82\83\8a\82ð
\8aJ
\95ú
\82·
\82é
72 // *************************************************************************
73 procedure DisposeResultString(
82 // *************************************************************************
83 //
\83v
\83\8d\83O
\83\89\83\80\96{
\91Ì
\82Ì
\83o
\81[
\83W
\83\87\83\93\82ð
\8eæ
\93¾
\82·
\82é
84 // *************************************************************************
85 procedure VersionInfo(
86 var outAgent : PChar; //
\83o
\81[
\83W
\83\87\83\93\82ð
\88ê
\90Ø
\8aÜ
\82Ü
\82È
\82¢
\8f\83\90\88\82È
\96¼
\8fÌ
87 var outMajor : DWORD; //
\83\81\83W
\83\83\81[
\83o
\81[
\83W
\83\87\83\93
88 var outMinor : DWORD; //
\83}
\83C
\83i
\81[
\83o
\81[
\83W
\83\87\83\93
89 var outRelease : PChar; //
\83\8a\83\8a\81[
\83X
\92i
\8aK
\96¼
90 var outRevision : DWORD //
\83\8a\83r
\83W
\83\87\83\93\83i
\83\93\83o
\81[
94 outAgent := CreateResultString( PChar( APP_NAME ) );
97 outRelease := CreateResultString( PChar( BETA_VERSION_NAME_E ) );
98 outRevision := BETA_VERSION;
102 // *************************************************************************
103 //
\8ew
\92è
\82µ
\82½ URL
\82ð
\83_
\83E
\83\93\83\8d\81[
\83h
\82µ
\82Ä
\95Ô
\82·
104 // *************************************************************************
105 function InternalDownload(
106 inURL : PChar; //
\83_
\83E
\83\93\83\8d\81[
\83h
\82·
\82é URL
107 var ioModified : Double; //
\8dÅ
\8cã
\82É
\8eæ
\93¾
\82µ
\82½
\93ú
\8e\9e
108 var outResultData : PChar; //
\83_
\83E
\83\93\83\8d\81[
\83h
\82³
\82ê
\82½
\95¶
\8e\9a\97ñ
109 inRangeStart : DWORD; //
\8aJ
\8en
\88Ê
\92u
110 inRangeEnd : DWORD //
\8fI
\97¹
\88Ê
\92u
111 ) : Longint; stdcall; //
\83\8c\83X
\83|
\83\93\83X
\83R
\81[
\83h
113 httpSocket : TIdHTTP;
114 resStream : TMemoryStream;
120 httpSocket := TIdHTTP.Create( nil );
123 //
\83C
\83x
\83\93\83g
\82Ì
\90Ý
\92è
124 if Assigned( OnWork ) then
125 httpSocket.OnWork := OnWork;
126 if Assigned( OnWorkBegin ) then
127 httpSocket.OnWorkBegin := OnWorkBegin;
128 if Assigned( OnWorkEnd ) then
129 httpSocket.OnWorkEnd := OnWorkEnd;
131 httpSocket.Request.CustomHeaders.Clear;
132 httpSocket.Request.ContentRangeStart := inRangeStart;
133 httpSocket.Request.ContentRangeEnd := inRangeEnd;
134 if (ioModified <> 0) and (ioModified <> ZERO_DATE) then
135 httpSocket.Request.LastModified := ioModified - OffsetFromUTC;
136 if inRangeStart = 0 then
137 httpSocket.Request.AcceptEncoding := 'gzip'
139 httpSocket.Request.AcceptEncoding := '';
140 httpSocket.Request.Accept := 'text/html';
142 resStream := TMemoryStream.Create;
148 Writeln('URL: ' + inURL);
150 httpSocket.Get( inURL, resStream );
152 Writeln('
\8eæ
\93¾
\82Å
\97á
\8aO
\82È
\82µ');
155 content := GikoSys.GzipDecompress( resStream, httpSocket.Response.ContentEncoding );
156 ioModified := httpSocket.Response.LastModified;
158 Result := httpSocket.ResponseCode;
159 if (Length( content ) = 0) and (Result = 206) then
162 outResultData := CreateResultString( content );
164 on E: EIdSocketError do begin
165 ioModified := ZERO_DATE;
166 outResultData := nil;
168 on E: EIdConnectException do begin
169 ioModified := ZERO_DATE;
170 outResultData := nil;
171 //Item.ErrText := E.Message;
173 on E: Exception do begin
175 Writeln('
\8eæ
\93¾
\82Å
\97á
\8aO
\82 \82è');
176 Writeln('E.Message: ' + E.Message);
178 ioModified := ZERO_DATE;
179 outResultData := nil;
180 Result := httpSocket.ResponseCode;
181 //Item.ErrText := E.Message;
194 // *************************************************************************
195 //
\82Q
\82¿
\82á
\82ñ
\82Ë
\82é
\82Ì dat
\8c`
\8e®
\82ð
\83\8d\81[
\83J
\83\8b\82 \82Ú
\81`
\82ñ
\82É
\92Ê
\82·
196 // *************************************************************************
197 function InternalAbon(
198 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
199 ) : PChar; stdcall; //
\82 \82Ú
\81`
\82ñ
\8dÏ
\82Ý
\82Ì dat
\8c`
\8e®
\83e
\83L
\83X
\83g
201 datList : TStringList;
205 datList := TStringList.Create;
206 datList.Text := string( inDatText );
207 //GikoSys.FAbon.IndividualAbon( datList, ChangeFileExt(FileName,'.NG'));
208 GikoSys.FAbon.Execute( datList );
209 GikoSys.FSelectResFilter.Execute( datList );
211 Result := CreateResultString( datList.Text );
215 // *************************************************************************
216 //
\82Q
\82¿
\82á
\82ñ
\82Ë
\82é
\82Ì dat
\8c`
\8e® 1
\8ds
\82ð HTML
\82É
\95Ï
\8a·
\82·
\82é
217 // *************************************************************************
218 function InternalDat2HTML(
219 inDatRes : PChar; //
\96¼
\91O<>
\83\81\81[
\83\8b<>
\93ú
\95tID<>
\96{
\95¶<>
\82Å
\8d\
\90¬
\82³
\82ê
\82½
\83e
\83L
\83X
\83g
220 inResNo : DWORD; //
\83\8c\83X
\94Ô
\8d\86
221 inIsNew : Boolean //
\90V
\92\85\83\8c\83X
\82È
\82ç True
222 ) : PChar; stdcall; //
\90®
\8c`
\82³
\82ê
\82½ HTML
225 threadItem : TThreadItem;
228 //
\83_
\83~
\81[
\82Ì
\83N
\83\89\83X
229 board := TBoard.Create;
230 threadItem := TThreadItem.Create;
233 threadItem.ParentBoard := Board;
235 Result := ThreadItemDat2HTML( DWORD( threadItem ), inDatRes, inResNo, inIsNew );
243 // =========================================================================
245 // =========================================================================
247 // *************************************************************************
248 //
\83u
\83\89\83E
\83U
\96{
\91Ì
\82ª
\92u
\82¢
\82Ä
\82 \82é
\83t
\83H
\83\8b\83_
249 // *************************************************************************
250 function ApplicationFolder : PChar; stdcall;
253 Result := CreateResultString( GikoSys.GetAppDir );
257 // *************************************************************************
258 //
\8f\89\8aú
\90Ý
\92è
\83t
\83H
\83\8b\83_
259 // *************************************************************************
260 function PreferencesFolder : PChar; stdcall;
263 Result := CreateResultString( GikoSys.GetConfigDir );
267 // *************************************************************************
268 //
\8f\89\8aú
\90Ý
\92è
\83t
\83@
\83C
\83\8b
269 // *************************************************************************
270 function PreferencesFile : PChar; stdcall;
273 Result := CreateResultString( GikoSys.GetAppDir + 'gikoNavi.ini' );
277 // *************************************************************************
278 //
\83\8d\83O
\83t
\83H
\83\8b\83_
279 // *************************************************************************
280 function LogFolder : PChar; stdcall;
283 Result := CreateResultString( GikoSys.GetAppDir + 'Log\' );
287 // *************************************************************************
288 // CSS
\83t
\83H
\83\8b\83_
289 // *************************************************************************
290 function CSSFolder : PChar; stdcall;
293 Result := CreateResultString( GikoSys.GetStyleSheetDir );
297 // *************************************************************************
298 //
\83X
\83L
\83\93\82ð
\93ü
\82ê
\82Ä
\82¨
\82
\83t
\83H
\83\8b\83_
299 // *************************************************************************
300 function SkinFolder : PChar; stdcall;
303 Result := CreateResultString( GikoSys.GetSkinDir );
307 // *************************************************************************
308 //
\8eg
\97p
\82µ
\82Ä
\82¢
\82é CSS /
\83X
\83L
\83\93
309 // *************************************************************************
310 function SkinFile : PChar; stdcall;
313 Result := CreateResultString( GikoSys.Setting.CSSFileName );
317 // *************************************************************************
318 //
\82 \82Ú
\81[
\82ñ
\8bK
\91¥
\82ª
\92u
\82¢
\82Ä
\82 \82é
\83f
\83B
\83\8c\83N
\83g
\83\8a
319 // *************************************************************************
320 function AbonFolder : PChar; stdcall;
323 Result := CreateResultString( GikoSys.Setting.GetNGWordsDir );
327 // *************************************************************************
328 //
\8eg
\97p
\82µ
\82Ä
\82¢
\82é
\82 \82Ú
\81[
\82ñ
\8bK
\91¥
329 // *************************************************************************
330 function AbonFile : PChar; stdcall;
333 Result := CreateResultString( GikoSys.FAbon.GetNGwordpath );
339 // =========================================================================
341 // =========================================================================
343 // *************************************************************************
344 // TThreadItem
\83N
\83\89\83X
\82Ì
\83v
\83\8d\83p
\83e
\83B
\82ð
\8eæ
\93¾
\82·
\82é
345 // *************************************************************************
346 function ThreadItemGetLong(
348 propertyID : TThreadItemProperty
351 threadItem : TThreadItem;
354 threadItem := TThreadItem( instance );
356 tipContext: // : DWORD //
\8e©
\97R
\82É
\90Ý
\92è
\82µ
\82Ä
\82¢
\82¢
\92l
357 Result := threadItem.Context;
358 tipNo: // : Integer //
\94Ô
\8d\86
359 Result := threadItem.No;
360 tipFileName: // : string //
\83X
\83\8c\83b
\83h
\83t
\83@
\83C
\83\8b\96¼
361 Result := DWORD( CreateResultString( threadItem.FileName ) );
362 tipTitle: // : string //
\83X
\83\8c\83b
\83h
\83^
\83C
\83g
\83\8b
363 Result := DWORD( CreateResultString( threadItem.Title ) );
364 tipCount: // : Integer //
\83X
\83\8c\83b
\83h
\83J
\83E
\83\93\83g
\81i
\83\8d\81[
\83J
\83\8b\81j
365 Result := threadItem.Count;
366 tipAllResCount: // : Integer //
\83X
\83\8c\83b
\83h
\83J
\83E
\83\93\83g
\81i
\83T
\81[
\83o
\81j
367 Result := threadItem.AllResCount;
368 tipNewResCount: // : Integer //
\83X
\83\8c\83b
\83h
\90V
\92\85\90\94
369 Result := threadItem.NewResCount;
370 tipSize: // : Integer //
\83X
\83\8c\83b
\83h
\83T
\83C
\83Y
371 Result := threadItem.Size;
372 tipRound: // : Boolean //
\8f\84\89ñ
\83t
\83\89\83O
373 Result := DWORD( threadItem.Round );
374 tipRoundName: // : string //
\8f\84\89ñ
\96¼
375 Result := DWORD( CreateResultString( threadItem.RoundName ) );
376 tipIsLogFile: // : Boolean //
\83\8d\83O
\91¶
\8dÝ
\83t
\83\89\83O
377 Result := DWORD( threadItem.IsLogFile );
378 tipKokomade: // : Integer //
\83R
\83R
\82Ü
\82Å
\93Ç
\82ñ
\82¾
\94Ô
\8d\86
379 Result := threadItem.Kokomade;
380 tipNewReceive: // : Integer //
\83R
\83R
\82©
\82ç
\90V
\8bK
\8eó
\90M
381 Result := threadItem.NewReceive;
382 tipNewArrival: // : Boolean //
\90V
\92\85
383 Result := DWORD( threadItem.NewArrival );
384 tipUnRead: // : Boolean //
\96¢
\93Ç
\83t
\83\89\83O
385 Result := DWORD( threadItem.UnRead );
386 tipScrollTop: // : Integer //
\83X
\83N
\83\8d\81[
\83\8b\88Ê
\92u
387 Result := threadItem.ScrollTop;
388 tipDownloadHost: // : string //
\8d¡
\82Ì
\83z
\83X
\83g
\82Æ
\88á
\82¤
\8fê
\8d\87\82Ì
\83z
\83X
\83g
389 Result := DWORD( CreateResultString( threadItem.DownloadHost ) );
390 tipAgeSage: // : TThreadAgeSage //
\83A
\83C
\83e
\83\80\82Ì
\8fã
\82°
\89º
\82°
391 Result := DWORD( threadItem.AgeSage );
392 tipURL: // : string //
\83X
\83\8c\83b
\83h
\82ð
\83u
\83\89\83E
\83U
\82Å
\95\
\8e¦
\82·
\82é
\8dÛ
\82Ì URL
393 Result := DWORD( CreateResultString( threadItem.URL ) );
397 // *************************************************************************
398 // TThreadItem
\83N
\83\89\83X
\82Ì
\83v
\83\8d\83p
\83e
\83B
\82ð
\90Ý
\92è
\82·
\82é
399 // *************************************************************************
400 procedure ThreadItemSetLong(
402 propertyID : TThreadItemProperty;
406 threadItem : TThreadItem;
409 threadItem := TThreadItem( instance );
411 tipContext: // : DWORD //
\8e©
\97R
\82É
\90Ý
\92è
\82µ
\82Ä
\82¢
\82¢
\92l
412 threadItem.Context := param;
413 tipNo: // : Integer //
\94Ô
\8d\86
414 threadItem.No := param;
415 tipFileName: // : string //
\83X
\83\8c\83b
\83h
\83t
\83@
\83C
\83\8b\96¼
417 threadItem.FileName := string( PChar( param ) );
418 DisposeResultString( PChar( param ) );
420 tipTitle: // : string //
\83X
\83\8c\83b
\83h
\83^
\83C
\83g
\83\8b
422 threadItem.Title := string( PChar( param ) );
423 DisposeResultString( PChar( param ) );
425 tipCount: // : Integer //
\83X
\83\8c\83b
\83h
\83J
\83E
\83\93\83g
\81i
\83\8d\81[
\83J
\83\8b\81j
426 threadItem.Count := param;
427 tipAllResCount: // : Integer //
\83X
\83\8c\83b
\83h
\83J
\83E
\83\93\83g
\81i
\83T
\81[
\83o
\81j
428 threadItem.AllResCount := param;
429 tipNewResCount: // : Integer //
\83X
\83\8c\83b
\83h
\90V
\92\85\90\94
430 threadItem.NewResCount := param;
431 tipSize: // : Integer //
\83X
\83\8c\83b
\83h
\83T
\83C
\83Y
432 threadItem.Size := param;
433 tipRound: // : Boolean //
\8f\84\89ñ
\83t
\83\89\83O
434 threadItem.Round := Boolean( param );
435 tipRoundName: // : string //
\8f\84\89ñ
\96¼
437 threadItem.RoundName := string( PChar( param ) );
438 DisposeResultString( PChar( param ) );
440 tipIsLogFile: // : Boolean //
\83\8d\83O
\91¶
\8dÝ
\83t
\83\89\83O
441 threadItem.IsLogFile := Boolean( param );
442 tipKokomade: // : Integer //
\83R
\83R
\82Ü
\82Å
\93Ç
\82ñ
\82¾
\94Ô
\8d\86
443 threadItem.Kokomade := param;
444 tipNewReceive: // : Integer //
\83R
\83R
\82©
\82ç
\90V
\8bK
\8eó
\90M
445 threadItem.NewReceive := param;
446 tipNewArrival: // : Boolean //
\90V
\92\85
447 threadItem.NewArrival := Boolean( param );
448 tipUnRead: // : Boolean //
\96¢
\93Ç
\83t
\83\89\83O
449 threadItem.UnRead := Boolean( param );
450 tipScrollTop: // : Integer //
\83X
\83N
\83\8d\81[
\83\8b\88Ê
\92u
451 threadItem.ScrollTop := param;
452 tipDownloadHost: // : string //
\8d¡
\82Ì
\83z
\83X
\83g
\82Æ
\88á
\82¤
\8fê
\8d\87\82Ì
\83z
\83X
\83g
454 threadItem.DownloadHost := string( PChar( param ) );
455 DisposeResultString( PChar( param ) );
457 tipAgeSage: // : TThreadAgeSage //
\83A
\83C
\83e
\83\80\82Ì
\8fã
\82°
\89º
\82°
458 threadItem.AgeSage := TGikoAgeSage( param );
459 tipURL: // : string //
\83X
\83\8c\83b
\83h
\82ð
\83u
\83\89\83E
\83U
\82Å
\95\
\8e¦
\82·
\82é
\8dÛ
\82Ì URL
461 threadItem.URL := string( PChar( param ) );
462 DisposeResultString( PChar( param ) );
468 // *************************************************************************
469 // TThreadItem
\83N
\83\89\83X
\82Ì
\83v
\83\8d\83p
\83e
\83B
\82ð
\8eæ
\93¾
\82·
\82é
470 // *************************************************************************
471 function ThreadItemGetDouble(
473 propertyID : TThreadItemProperty
476 threadItem : TThreadItem;
479 threadItem := TThreadItem( instance );
481 tipRoundDate: // : TDateTime //
\83X
\83\8c\83b
\83h
\82ð
\8eæ
\93¾
\82µ
\82½
\93ú
\8e\9e\81i
\8f\84\89ñ
\93ú
\8e\9e\81j
482 Result := threadItem.RoundDate;
483 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
484 Result := threadItem.LastModified;
489 // *************************************************************************
490 // TThreadItem
\83N
\83\89\83X
\82Ì
\83v
\83\8d\83p
\83e
\83B
\82ð
\90Ý
\92è
\82·
\82é
491 // *************************************************************************
492 procedure ThreadItemSetDouble(
494 propertyID : TThreadItemProperty;
498 threadItem : TThreadItem;
501 threadItem := TThreadItem( instance );
503 tipRoundDate: // : TDateTime //
\83X
\83\8c\83b
\83h
\82ð
\8eæ
\93¾
\82µ
\82½
\93ú
\8e\9e\81i
\8f\84\89ñ
\93ú
\8e\9e\81j
504 threadItem.RoundDate := param;
505 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
506 threadItem.LastModified := param;
511 // *************************************************************************
512 // 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é
513 // *************************************************************************
514 function ThreadItemDat2HTML(
515 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
516 inDatRes : PChar; //
\96¼
\91O<>
\83\81\81[
\83\8b<>
\93ú
\95tID<>
\96{
\95¶<>
\82Å
\8d\
\90¬
\82³
\82ê
\82½
\83e
\83L
\83X
\83g
517 inResNo : DWORD; //
\83\8c\83X
\94Ô
\8d\86
518 inIsNew : Boolean //
\90V
\92\85\83\8c\83X
\82È
\82ç True
519 ) : PChar; stdcall; //
\90®
\8c`
\82³
\82ê
\82½ HTML
521 threadItem : TThreadItem;
526 threadItem := TThreadItem( inInstance );
527 //
\88ø
\90\94\82ð
\95ª
\89ð
528 res := GikoSys.DivideStrLine( string( inDatRes ) );
529 no := IntToStr( inResNo );
532 if GikoSys.Setting.UseSkin then begin
535 Result := CreateResultString( GikoSys.SkinedRes(
536 GikoSys.LoadFromSkin(
537 GikoSys.Setting.GetSkinNewResFileName, threadItem, 0
541 Result := CreateResultString( GikoSys.SkinedRes(
542 GikoSys.LoadFromSkin(
543 GikoSys.Setting.GetSkinResFileName, threadItem, 0
547 // CSS or
\83f
\83t
\83H
\83\8b\83g
548 if res.FName = '' then
549 res.FName := ' ';
550 if res.FMailTo = '' then
551 Result := CreateResultString( '<a name="' + no + '"></a>'
552 + '<div class="header"><span class="no"><a href="menu:' + No + '">' + no + '</a></span> '
553 + '<span class="name_label">
\96¼
\91O
\81F</span> '
554 + '<span class="name"><b>' + res.FName + '</b></span> '
555 + '<span class="date_label">
\93\8a\8de
\93ú
\81F</span> '
556 + '<span class="date">' + res.FDateTime+ '</span></div>'
557 + '<div class="mes">' + res.FBody + ' </div>' )
558 else if GikoSys.Setting.ShowMail then
559 Result := CreateResultString( '<a name="' + no + '"></a>'
560 + '<div class="header"><span class="no"><a href="menu:' + no + '">' + no + '</a></span>'
561 + '<span class="name_label">
\96¼
\91O
\81F </span>'
562 + '<a class="name_mail" href="mailto:' + res.FMailTo + '">'
563 + '<b>' + res.FName + '</b></a><span class="mail"> [' + res.FMailTo + ']</span>'
564 + '<span class="date_label">
\93\8a\8de
\93ú
\81F</span>'
565 + '<span class="date"> ' + res.FDateTime+ '</span></div>'
566 + '<div class="mes">' + res.FBody + ' </div>' )
568 Result := CreateResultString( '<a name="' + no + '"></a>'
569 + '<div class="header"><span class="no"><a href="menu:' + no + '">' + no + '</a></span>'
570 + '<span class="name_label">
\96¼
\91O
\81F </span>'
571 + '<a class="name_mail" href="mailto:' + res.FMailTo + '">'
572 + '<b>' + res.FName + '</b></a>'
573 + '<span class="date_label">
\93\8a\8de
\93ú
\81F</span>'
574 + '<span class="date"> ' + res.FDateTime+ '</span></div>'
575 + '<div class="mes">' + res.FBody + ' </div>' );
582 // *************************************************************************
583 // TThreadItem
\83N
\83\89\83X
\82ð
\8c³
\82É
\83X
\83\8c\83b
\83h
\82Ì
\83w
\83b
\83_
\82ð
\8eæ
\93¾
\82·
\82é
584 // *************************************************************************
585 function ThreadItemGetHeader(
586 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
587 inOptionalHeader : PChar //
\92Ç
\89Á
\82Ì
\83w
\83b
\83_
588 ) : PChar; stdcall; //
\90®
\8c`
\82³
\82ê
\82½ HTML
590 threadItem : TThreadItem;
592 optionalHeader : string;
595 threadItem := TThreadItem( inInstance );
596 optionalHeader := string( inOptionalHeader );
597 skinHeader := GikoSys.LoadFromSkin( GikoSys.Setting.GetSkinHeaderFileName, threadItem, 0 );
598 if Length( optionalHeader ) > 0 then
599 skinHeader := StringReplace( skinHeader, '</head>',
600 string( optionalHeader ) + '</head>', [rfReplaceAll] );
602 Result := CreateResultString( skinHeader );
606 // *************************************************************************
607 // TThreadItem
\83N
\83\89\83X
\82ð
\8c³
\82É
\83X
\83\8c\83b
\83h
\82Ì
\83t
\83b
\83^
\82ð
\8eæ
\93¾
\82·
\82é
608 // *************************************************************************
609 function ThreadItemGetFooter(
610 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
611 inOptionalFooter : PChar //
\92Ç
\89Á
\82Ì
\83t
\83b
\83^
612 ) : PChar; stdcall; //
\90®
\8c`
\82³
\82ê
\82½ HTML
614 threadItem : TThreadItem;
616 optionalFooter : string;
619 threadItem := TThreadItem( inInstance );
620 optionalFooter := string( inOptionalFooter );
621 skinFooter := GikoSys.LoadFromSkin( GikoSys.Setting.GetSkinFooterFileName, threadItem, 0 );
622 if Length( optionalFooter ) > 0 then
623 skinFooter := StringReplace( skinFooter, '</body>',
624 string( optionalFooter ) + '</body>', [rfReplaceAll] );
626 Result := CreateResultString( skinFooter );
630 // *************************************************************************
631 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\90i
\8ds
\82µ
\82½
632 // *************************************************************************
633 procedure ThreadItemWork(
634 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
635 inWorkCount : Integer //
\8c»
\8dÝ
\82Ì
\90i
\95à
\8fó
\8bµ(
\83J
\83E
\83\93\83g)
639 if Assigned( OnWork ) then
640 OnWork( TObject( inInstance ), wmRead, inWorkCount );
644 // *************************************************************************
645 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8en
\82Ü
\82Á
\82½
646 // *************************************************************************
647 procedure ThreadItemWorkBegin(
648 inInstance : DWORD; //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
649 inWorkCountMax : Integer //
\92Ê
\90M
\82Ì
\8fI
\82í
\82è
\82ð
\8e¦
\82·
\83J
\83E
\83\93\83g
653 if Assigned( OnWorkBegin ) then
654 OnWorkBegin( TObject( inInstance ), wmRead, inWorkCountMax );
658 // *************************************************************************
659 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8fI
\82í
\82Á
\82½
660 // *************************************************************************
661 procedure ThreadItemWorkEnd(
662 inInstance : DWORD //
\83N
\83\89\83X
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
666 if Assigned( OnWorkEnd ) then
667 OnWorkEnd( TObject( inInstance ), wmRead );