• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

ギコナビ


Commit MetaInfo

Revisionb4c0d747ed2c93613a487d147a4bd761f4acb62d (tree)
Time2006-02-26 13:12:26
Authorcvs2git <cvs2git>
Commitercvs2git

Log Message

This commit was manufactured by cvs2svn to create tag 'v1_52_0_649'.

Change Summary

Incremental Difference

--- a/BoardGroup.pas
+++ b/BoardGroup.pas
@@ -8,9 +8,9 @@ uses
88
99 type
1010 //ƒŠƒXƒg‚Ì•\Ž¦ƒAƒCƒeƒ€‘I‘ð
11- TGikoViewType = (gvtAll, gvtLog, gvtNew, gvtUser);
11+ TGikoViewType = (gvtAll, gvtLog, gvtNew, gvtLive, gvtArch, gvtUser);
1212 //ƒŠƒXƒg‚̏グ‰º‚°
13- TGikoAgeSage = (gasNone, gasAge, gasSage, gasNew, gasNull);
13+ TGikoAgeSage = (gasNone, gasAge, gasSage, gasNew, gasArch, gasNull);
1414
1515 TCategory = class;
1616 TBoard = class;
@@ -138,7 +138,8 @@ type
138138 FNewThreadCount: Integer; //V’…ƒXƒŒƒbƒh‚̐”
139139 FLogThreadCount: Integer; //ƒƒO—L‚èƒXƒŒƒbƒh‚̐”
140140 FUserThreadCount: Integer; //H
141-
141+ FLiveThreadCount: Integer; //¶‘¶ƒXƒŒƒbƒh”
142+ FArchiveThreadCount: Integer; //DAT—Ž‚¿ƒXƒŒƒbƒh”
142143 function GetThreadItem(index: integer): TThreadItem;
143144 procedure SetThreadItem(index: integer; value: TThreadItem);
144145 procedure SetRound(b: Boolean);
@@ -200,10 +201,14 @@ type
200201
201202 function GetNewThreadCount: Integer;
202203 function GetLogThreadCount: Integer;
204+ function GetArchiveThreadCount: Integer;
205+ function GetLiveThreadCount: Integer;
203206 function GetUserThreadCount: Integer;
204207 function GetNewThread(Index: Integer): TThreadItem;
205208 function GetLogThread(Index: Integer): TThreadItem; overload;
206209 function GetLogThread(Index: Integer; Base: Integer): TThreadItem; overload;
210+ function GetArchiveThread(Index: Integer): TThreadItem;
211+ function GetLiveThread(Index: Integer): TThreadItem;
207212 function GetUserThread(Index: Integer): TThreadItem;
208213
209214 procedure BeginUpdate;
@@ -225,6 +230,9 @@ type
225230 property NewThreadCount: Integer read FNewThreadCount write FNewThreadCount; //V’…ƒXƒŒƒbƒh‚̐”
226231 property LogThreadCount: Integer read FLogThreadCount write FLogThreadCount; //ƒƒO—L‚èƒXƒŒƒbƒh‚̐”
227232 property UserThreadCount: Integer read FUserThreadCount write FUserThreadCount; //H
233+ property LiveThreadCount: Integer read FLiveThreadCount write FLiveThreadCount;
234+ property ArchiveThreadCount: Integer read FArchiveThreadCount write FArchiveThreadCount;
235+
228236 property Cookie: string read FCookie write FCookie;
229237 property Expires: TDateTime read FExpires write FExpires;
230238 end;
@@ -233,7 +241,6 @@ type
233241 TThreadItem = class(TObject)
234242 private
235243 FContext: DWORD; // ƒvƒ‰ƒOƒCƒ“‚ªŽ©—R‚ɐݒ肵‚Ä‚¢‚¢’l(Žå‚ɃCƒ“ƒXƒ^ƒ“ƒX‚ª“ü‚é)
236-
237244 FNo: Integer; //”ԍ†
238245 FFileName: string; //ƒXƒŒƒbƒhƒtƒ@ƒCƒ‹–¼
239246 FTitle: string; //ƒXƒŒƒbƒhƒ^ƒCƒgƒ‹
@@ -246,7 +253,6 @@ type
246253 FSize: Integer; //ƒXƒŒƒbƒhƒTƒCƒY
247254 FRound: Boolean; //„‰ñƒtƒ‰ƒO
248255 FRoundName: string; //„‰ñ–¼
249- //FRoundName: PChar; //„‰ñ–¼
250256 FIsLogFile: Boolean; //ƒƒO‘¶Ýƒtƒ‰ƒO
251257 FParentBoard: TBoard; //eƒ{[ƒh
252258 FKokomade: Integer; //ƒRƒR‚Ü‚Å“Ç‚ñ‚¾”ԍ†
@@ -256,14 +262,10 @@ type
256262 FScrollTop: Integer; //ƒXƒNƒ[ƒ‹ˆÊ’u
257263 FDownloadHost: string; //¡‚̃zƒXƒg‚ƈႤê‡‚̃zƒXƒg
258264 FAgeSage: TGikoAgeSage; //ƒAƒCƒeƒ€‚̏グ‰º‚°
259-// FSPID: string; //‘‚«ž‚Ý—pSPID
260-
261265 FUpdate: Boolean;
262266 FExpand: Boolean;
263267 FURL : string; // ‚±‚̃XƒŒ‚ðƒuƒ‰ƒEƒU‚Å•\Ž¦‚·‚éÛ‚Ì URL
264- //FBoardPlugIn : TBoardPlugIn; // ‚±‚̃XƒŒ‚ðƒTƒ|[ƒg‚·‚éƒvƒ‰ƒOƒCƒ“
265- //FFilePath : string; // ‚±‚̃XƒŒ‚ª•Û‘¶‚³‚ê‚Ä‚¢‚éƒpƒX
266-
268+ FJumpAddress : Integer; //ƒŒƒX”ԍ†Žw’èURL‚𓥂ñ‚¾‚Æ‚«‚ÉŽw’肳‚ê‚郌ƒX‚̔ԍ†‚ª“ü‚é
267269 procedure SetLastModified(d: TDateTime);
268270 procedure SetRound(b: Boolean);
269271 procedure SetRoundName(const s: string);
@@ -320,6 +322,7 @@ type
320322 property CreateDate: TDateTime read GetCreateDate;
321323 property URL : string read FURL write FURL;
322324 property FilePath : string read GetFilePath;
325+ property JumpAddress : Integer read FJumpAddress write FJumpAddress;
323326 end;
324327
325328 TBoardGroup = class(TStringList)
@@ -1404,7 +1407,125 @@ begin
14041407 inc(Result);
14051408 end;
14061409 end;
1410+function TBoard.GetArchiveThreadCount: Integer;
1411+var
1412+ i: Integer;
1413+begin
1414+ Result := 0;
1415+ if Length( ParentCategory.ParenTBBS.ShortSelectText ) = 0 then
1416+ begin
1417+ for i := 0 to Count - 1 do begin
1418+ if Items[i].AgeSage = gasArch then
1419+ inc(Result);
1420+ end;
1421+ end else begin
1422+ for i := 0 to Count - 1 do begin
1423+ if Items[i].AgeSage = gasArch then
1424+ begin
1425+ if Items[i].ShortTitle = '' then
1426+ Items[i].ShortTitle := CustomStringReplace(ZenToHan(Items[i].Title), ' ', '');
1427+ if AnsiPos(ParentCategory.ParenTBBS.ShortSelectText, Items[i].ShortTitle) <> 0 then
1428+ inc(Result);
1429+ end;
1430+ end;
1431+ end;
1432+end;
14071433
1434+function TBoard.GetLiveThreadCount: Integer;
1435+var
1436+ i: Integer;
1437+begin
1438+ Result := 0;
1439+ if Length( ParentCategory.ParenTBBS.ShortSelectText ) = 0 then
1440+ begin
1441+ for i := 0 to Count - 1 do begin
1442+ if Items[i].AgeSage <> gasArch then
1443+ inc(Result);
1444+ end;
1445+ end else begin
1446+ for i := 0 to Count - 1 do begin
1447+ if Items[i].AgeSage <> gasArch then
1448+ begin
1449+ if Items[i].ShortTitle = '' then
1450+ Items[i].ShortTitle := CustomStringReplace(ZenToHan(Items[i].Title), ' ', '');
1451+ if AnsiPos(ParentCategory.ParenTBBS.ShortSelectText, Items[i].ShortTitle) <> 0 then
1452+ inc(Result);
1453+ end;
1454+ end;
1455+ end;
1456+end;
1457+function TBoard.GetArchiveThread(Index: Integer): TThreadItem;
1458+var
1459+ i: Integer;
1460+ Cnt: Integer;
1461+begin
1462+ Result := nil;
1463+ Cnt := 0;
1464+ if Length( ParentCategory.ParenTBBS.ShortSelectText ) = 0 then
1465+ begin
1466+ for i := 0 to Count - 1 do begin
1467+ if Items[i].AgeSage = gasArch then
1468+ begin
1469+ if Index = Cnt then begin
1470+ Result := Items[i];
1471+ Exit;
1472+ end;
1473+ inc(Cnt);
1474+ end;
1475+ end;
1476+ end else begin
1477+ for i := 0 to Count - 1 do begin
1478+ if Items[i].AgeSage = gasArch then
1479+ begin
1480+ if Items[i].ShortTitle = '' then
1481+ Items[i].ShortTitle := CustomStringReplace(ZenToHan(Items[i].Title), ' ', '');
1482+ if AnsiPos(ParentCategory.ParenTBBS.ShortSelectText, Items[i].ShortTitle) <> 0 then begin
1483+ if Index = Cnt then begin
1484+ Result := Items[i];
1485+ Exit;
1486+ end;
1487+ inc(Cnt);
1488+ end;
1489+ end;
1490+ end;
1491+ end;
1492+end;
1493+function TBoard.GetLiveThread(Index: Integer): TThreadItem;
1494+var
1495+ i: Integer;
1496+ Cnt: Integer;
1497+begin
1498+ Result := nil;
1499+ Cnt := 0;
1500+ if Length( ParentCategory.ParenTBBS.ShortSelectText ) = 0 then
1501+ begin
1502+ for i := 0 to Count - 1 do begin
1503+ if Items[i].AgeSage <> gasArch then
1504+ begin
1505+ if Index = Cnt then begin
1506+ Result := Items[i];
1507+ Exit;
1508+ end;
1509+ inc(Cnt);
1510+ end;
1511+ end;
1512+ end else begin
1513+ for i := 0 to Count - 1 do begin
1514+ if Items[i].AgeSage <> gasArch then
1515+ begin
1516+ if Items[i].ShortTitle = '' then
1517+ Items[i].ShortTitle := CustomStringReplace(ZenToHan(Items[i].Title), ' ', '');
1518+ if AnsiPos(ParentCategory.ParenTBBS.ShortSelectText, Items[i].ShortTitle) <> 0 then begin
1519+ if Index = Cnt then begin
1520+ Result := Items[i];
1521+ Exit;
1522+ end;
1523+ inc(Cnt);
1524+ end;
1525+ end;
1526+ end;
1527+ end;
1528+end;
14081529 function TBoard.GetNewThread(Index: Integer): TThreadItem;
14091530 var
14101531 i: Integer;
@@ -1587,7 +1708,7 @@ begin
15871708
15881709 FUpdate := True;
15891710 FURL := '';
1590- //FBoardPlugIn := nil;
1711+ FJumpAddress := 0;
15911712 end;
15921713
15931714 // *************************************************************************
--- a/BrowserRecord.pas
+++ b/BrowserRecord.pas
@@ -21,7 +21,7 @@ type
2121 FThread : TThreadItem;
2222 FLastSize : Integer;
2323 FRepaint : Boolean;
24- FMovement : string; ///< ƒXƒNƒ[ƒ‹æƒAƒ“ƒJ[
24+ //FMovement : string; ///< ƒXƒNƒ[ƒ‹æƒAƒ“ƒJ[
2525 public
2626 destructor Destroy; override;
2727 property Event : THTMLDocumentEventSink read FEvent write FEvent;
@@ -29,7 +29,7 @@ type
2929 property Thread : TThreadItem read FThread write FThread;
3030 property LastSize : Integer read FLastSize write FLastSize;
3131 property Repaint : Boolean read FRepaint write FRepaint;
32- property Movement : string read FMovement write FMovement;
32+ //property Movement : string read FMovement write FMovement;
3333 procedure Move(const AName: string);
3434 procedure IDAnchorPopup(Abody :string);
3535 end;
--- a/Editor.dfm
+++ b/Editor.dfm
@@ -1,6 +1,6 @@
11 object EditorForm: TEditorForm
2- Left = 328
3- Top = 257
2+ Left = 432
3+ Top = 258
44 Width = 640
55 Height = 449
66 HorzScrollBar.Visible = False
@@ -58,24 +58,14 @@ object EditorForm: TEditorForm
5858 Top = 30
5959 Width = 632
6060 Height = 354
61- ActivePage = RocalRuleTab
61+ ActivePage = EditorTab
6262 Align = alClient
6363 MultiLine = True
64- TabIndex = 4
64+ TabIndex = 0
6565 TabOrder = 0
6666 OnChange = EditorPageChange
6767 object EditorTab: TTabSheet
6868 Caption = #32232#38598
69- object BodyEdit: TMemo
70- Left = 0
71- Top = 60
72- Width = 624
73- Height = 267
74- Align = alClient
75- ScrollBars = ssBoth
76- TabOrder = 0
77- WordWrap = False
78- end
7969 object NameBasePanel: TPanel
8070 Left = 0
8171 Top = 29
@@ -83,7 +73,7 @@ object EditorForm: TEditorForm
8373 Height = 31
8474 Align = alTop
8575 BevelOuter = bvNone
86- TabOrder = 2
76+ TabOrder = 1
8777 object NameLabel: TLabel
8878 Left = 4
8979 Top = 8
@@ -144,7 +134,7 @@ object EditorForm: TEditorForm
144134 Height = 29
145135 Align = alTop
146136 BevelOuter = bvNone
147- TabOrder = 1
137+ TabOrder = 0
148138 object Label1: TLabel
149139 Left = 4
150140 Top = 8
@@ -161,6 +151,16 @@ object EditorForm: TEditorForm
161151 TabOrder = 0
162152 end
163153 end
154+ object BodyEdit: TMemo
155+ Left = 0
156+ Top = 60
157+ Width = 624
158+ Height = 267
159+ Align = alClient
160+ ScrollBars = ssBoth
161+ TabOrder = 2
162+ WordWrap = False
163+ end
164164 end
165165 object PreviewTab: TTabSheet
166166 Caption = #12503#12524#12499#12517#12540
@@ -343,6 +343,19 @@ object EditorForm: TEditorForm
343343 Action = BeLogInOutEAction
344344 Style = tbsCheck
345345 end
346+ object ToolButton8: TToolButton
347+ Left = 285
348+ Top = 0
349+ Width = 8
350+ Caption = 'ToolButton8'
351+ ImageIndex = 11
352+ Style = tbsSeparator
353+ end
354+ object ToolButton9: TToolButton
355+ Left = 293
356+ Top = 0
357+ Action = ShowInputAssistForm
358+ end
346359 end
347360 object MainMenu: TMainMenu
348361 Left = 8
@@ -469,7 +482,7 @@ object EditorForm: TEditorForm
469482 Left = 72
470483 Top = 124
471484 Bitmap = {
472- 494C01010B000E00040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
485+ 494C01010C000E00040010001000FFFFFFFFFF00FFFFFFFFFFFFFFFF424D3600
473486 0000000000003600000028000000400000004000000001002000000000000040
474487 0000000000000000000000000000000000000000000000000000000000000000
475488 0000000000000000000000000000000000000000000000000000000000000000
@@ -989,11 +1002,11 @@ object EditorForm: TEditorForm
9891002 0000000000000000000000000000000000000000000000000000000000000000
9901003 0000000000000000000000000000000000000000000000000000000000000000
9911004 0000000000000000000000000000000000000000000000000000000000000000
992- 00000000000000000000000000000000F81FFFFFFFFF0000E007FDFFF81F0000
993- C003F17FF00F00008001E05FE00700008001C017C00300000000800580010000
994- 0000000180010000000000018001000000008001800100000000E00180010000
995- 0000F803800100008001FE07C00300008001FF8FE0070000C003FFFFF00F0000
996- E007FFFFF81F0000F81FFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFE00FFFFFFFF
1005+ 00000000000000000000000000000000F81FFFFFFFFFFFFFE007FDFFF81FF3F9
1006+ C003F17FF00FF9F38001E05FE007F9F38001C017C003F80300008005800184E7
1007+ 000000018001CCE7000000018001CE4F000080018001CE4F0000E0018001CE4F
1008+ 0000F8038001CF1F8001FE07C0038F1F8001FF8FE007FFFFC003FFFFF00F8FFF
1009+ E007FFFFF81F8FFFF81FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE00FFFFFFFF
9971010 FE00C000F000F000FE008000F000F000FE008000F000F0008000800000000000
9981011 8000800070000000800080017000000080008001700000008001800170000000
9991012 8003800170000000800780017FDF001F807F8001001F001F80FFC003001F001F
@@ -1001,14 +1014,13 @@ object EditorForm: TEditorForm
10011014 FFF3000FFFFFF0CFFF010007FFFFF08700000003FFFFF08700010003FFF7F887
10021015 0003003FC1F7FE8F0003003FC3FBFE3F00038FFFC7FBFF7F0003FC00CBFBFE3F
10031016 0003C400DCF7FEBF0003CC00FF0FFC9F0003D400FFFFFDDF0003F800FFFFFDDF
1004- FFFFFC00FFFFFDDFFFFFFC00FFFFFFFF00000000000000000000000000000000
1005- 000000000000}
1017+ FFFFFC00FFFFFDDFFFFFFC00FFFFFFFF}
10061018 end
10071019 object HotToobarImageList: TImageList
10081020 Left = 104
10091021 Top = 124
10101022 Bitmap = {
1011- 494C01010B000E00040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
1023+ 494C01010C000E00040010001000FFFFFFFFFF00FFFFFFFFFFFFFFFF424D3600
10121024 0000000000003600000028000000400000004000000001002000000000000040
10131025 0000000000000000000000000000000000000000000000000000000000000000
10141026 0000000000000000000000000000000000000000000000000000000000000000
@@ -1528,11 +1540,11 @@ object EditorForm: TEditorForm
15281540 0000000000000000000000000000000000000000000000000000000000000000
15291541 0000000000000000000000000000000000000000000000000000000000000000
15301542 0000000000000000000000000000000000000000000000000000000000000000
1531- 00000000000000000000000000000000F81FFFFFFFFF0000E007FDFFF81F0000
1532- C003F17FF00F00008001E05FE00700008001C017C00300000000000580010000
1533- 0000000180010000000000018001000000008001800100000000E00180010000
1534- 0000F803800100008001FE07C00300008001FF8FE0070000C003FFFFF00F0000
1535- E007FFFFF81F0000F81FFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFE00FFFFFFFF
1543+ 00000000000000000000000000000000F81FFFFFFFFFFFFFE007FDFFF81FF3F9
1544+ C003F17FF00FF9F38001E05FE007F9F38001C017C003F80300000005800184E7
1545+ 000000018001CCE7000000018001CE4F000080018001CE4F0000E0018001CE4F
1546+ 0000F8038001CF1F8001FE07C0038F1F8001FF8FE007FFFFC003FFFFF00F8FFF
1547+ E007FFFFF81F8FFFF81FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE00FFFFFFFF
15361548 FE00C000F000F000FE008000F000F000FE008000F000F0008000800000000000
15371549 8000800070000000800080017000000080008001700000008001800170000000
15381550 8003800170000000800780017FDF001F807F8001001F001F80FFC003001F001F
@@ -1540,8 +1552,7 @@ object EditorForm: TEditorForm
15401552 FFF3000FFFFFF0CFFF010007FFFFF08700000003FFFFF08700010003FFE7F887
15411553 0003003FC1F3FE8F0003003FC3FBFE3F00038FFFC7FBFF7F0003FC00CBFBFE3F
15421554 0003C400DCF3FEBF0003CC00FF07FC9F0003D400FFFFFDDF0003F800FFFFFDDF
1543- FFFFFC00FFFFFDDFFFFFFC00FFFFFFFF00000000000000000000000000000000
1544- 000000000000}
1555+ FFFFFC00FFFFFDDFFFFFFC00FFFFFFFF}
15451556 end
15461557 object Indy: TIdHTTP
15471558 Intercept = IdLogDebug
@@ -1733,6 +1744,19 @@ object EditorForm: TEditorForm
17331744 OnExecute = UpdateSambaActionExecute
17341745 OnUpdate = UpdateSambaActionUpdate
17351746 end
1747+ object InputAssistAction: TAction
1748+ Tag = -1
1749+ Category = #32232#38598
1750+ Caption = #20837#21147#12450#12471#12473#12488
1751+ OnExecute = InputAssistActionExecute
1752+ end
1753+ object ShowInputAssistForm: TAction
1754+ Category = #32232#38598
1755+ Caption = #20837#21147#12450#12471#12473#12488#12501#12457#12540#12512#21628#12403#20986#12375
1756+ Hint = #20837#21147#12450#12471#12473#12488#12501#12457#12540#12512#12434#21628#12403#20986#12377
1757+ ImageIndex = 11
1758+ OnExecute = ShowInputAssistFormExecute
1759+ end
17361760 end
17371761 object IdLogDebug: TIdLogDebug
17381762 OnReceive = IdLogDebugReceive
@@ -1748,4 +1772,16 @@ object EditorForm: TEditorForm
17481772 Left = 233
17491773 Top = 123
17501774 end
1775+ object InputAssistPopupMenu: TPopupMenu
1776+ AutoHotkeys = maManual
1777+ AutoPopup = False
1778+ OwnerDraw = True
1779+ Left = 272
1780+ Top = 128
1781+ end
1782+ object ApplicationEvents1: TApplicationEvents
1783+ OnMessage = ApplicationEvents1Message
1784+ Left = 304
1785+ Top = 128
1786+ end
17511787 end
--- a/Editor.pas
+++ b/Editor.pas
@@ -17,7 +17,7 @@ uses
1717 IdAntiFreezeBase, IdAntiFreeze, IdBaseComponent, IdComponent,
1818 IdTCPConnection, IdTCPClient, IdHTTP, ActnList, StdActns, IdIntercept,
1919 IdLogBase, IdLogDebug, IdException, DateUtils, bmRegExp,
20- Gesture;
20+ Gesture, AppEvnts;
2121
2222 type
2323 // TSetLayeredWindowAttributes = function(wnd: HWND; crKey: DWORD; bAlpha: BYTE; dwFlag: DWORD): Boolean; stdcall;
@@ -44,7 +44,6 @@ type
4444 N02: TMenuItem;
4545 ToolBarImageList: TImageList;
4646 HotToobarImageList: TImageList;
47- BodyEdit: TMemo;
4847 NameBasePanel: TPanel;
4948 NameLabel: TLabel;
5049 MailLabel: TLabel;
@@ -127,6 +126,13 @@ type
127126 UpdateSambaAction: TAction;
128127 Samba241: TMenuItem;
129128 N7: TMenuItem;
129+ InputAssistAction: TAction;
130+ InputAssistPopupMenu: TPopupMenu;
131+ BodyEdit: TMemo;
132+ ApplicationEvents1: TApplicationEvents;
133+ ToolButton8: TToolButton;
134+ ToolButton9: TToolButton;
135+ ShowInputAssistForm: TAction;
130136
131137 procedure EditorPageChange(Sender: TObject);
132138 procedure FormCreate(Sender: TObject);
@@ -181,6 +187,10 @@ type
181187 procedure BeLogInOutEActionUpdate(Sender: TObject);
182188 procedure UpdateSambaActionUpdate(Sender: TObject);
183189 procedure UpdateSambaActionExecute(Sender: TObject);
190+ procedure InputAssistActionExecute(Sender: TObject);
191+ procedure ApplicationEvents1Message(var Msg: tagMSG;
192+ var Handled: Boolean);
193+ procedure ShowInputAssistFormExecute(Sender: TObject);
184194 private
185195 FThreadItem: TThreadItem;
186196 FBoard: TBoard;
@@ -195,6 +205,8 @@ type
195205 FHost: string;
196206 FNow: TDateTime;
197207 FGestures : TMouseGesture;
208+ FInputAssistKey: String; ///< “ü—̓AƒVƒXƒg‚̃L[
209+ FResistWords: TStringList; ///< “ü—̓AƒVƒXƒg‚ÌŽ«‘‚©‚ç‚ÌŒŸõŒ‹‰Ê
198210 procedure Preview;
199211 function RepHtml(s: string): string;
200212 function Check: Boolean;
@@ -244,21 +256,25 @@ type
244256 function LFusianaGet(s: String): Boolean;
245257 // Cookie‚̎擾
246258 procedure GetCookie(Rawtext: String; ABoard: TBoard);
259+ //! “ü—̓AƒVƒXƒg‚̃|ƒbƒvƒAƒbƒvƒƒjƒ…[‚̃NƒŠƒbƒNƒCƒxƒ“ƒg
260+ procedure InputAssistMenuClick(Sender: TObject);
261+ //! TMemo‚̃J[ƒ\ƒ‹ˆÊ’u‚É•¶Žš—ñ‘}“ü
262+ procedure InsertText(Memo: TMemo; Text: String);
247263 protected
248264 procedure CreateParams(var Params: TCreateParams); override;
249265 public
250- FBBSID: String;
266+ FBBSID: String;
251267 procedure SetFont;
252268 procedure SetThreadItem(Item: TThreadItem);
253269 procedure SetBoard(Item: TBoard);
254- property BBSID: string read FBBSID write FBBSID;
255-
270+ property BBSID: string read FBBSID write FBBSID;
256271 end;
257272
258273 implementation
259274
260275 uses
261- Giko, ItemDownload, MojuUtils, IdGlobal, GikoMessage;
276+ Giko, ItemDownload, MojuUtils, IdGlobal, GikoMessage, Imm,
277+ InputAssistDataModule, InputAssist;
262278 const
263279 CAPTION_NAME_NEW: string = 'ƒMƒRƒiƒr ƒXƒŒ—§‚ăGƒfƒBƒ^';
264280 CAPTION_NAME_RES: string = 'ƒMƒRƒiƒr ƒŒƒXƒGƒfƒBƒ^';
@@ -427,7 +443,8 @@ begin
427443 finally
428444 ini.Free;
429445 end;
430-
446+ // ƒL[Ý’è‚̓ǂݍž‚Ý
447+ GikoSys.LoadKeySetting(ActionList, GikoSys.GetEditorKeyFileName);
431448 // ƒ}ƒEƒXƒWƒFƒXƒ`ƒƒ[‚̃Cƒ“ƒXƒg[ƒ‹
432449 if GikoSys.Setting.GestureEnabled then begin
433450 MouseGesture.UnHook;
@@ -930,33 +947,35 @@ begin
930947
931948 if ABoard = nil then Exit;
932949
933- if FileExists(ABoard.GetSETTINGTXTFileName) then begin
934- body := TStringList.Create;
935- try
936- body.LoadFromFile(ABoard.GetSETTINGTXTFileName);
937- Remote := GetFusianaName(body, ABoard);
938- finally
939- body.Free;
940- end;
941- end;
942-
943- //Setting.txt‚ª‚È‚©‚Á‚½‚çŽæ“¾
944- //ŽI‚É•‰‰×‚ª‚©‚©‚è‚»‚¤‚Å•|‚¢EEE
945- if not FileExists(ABoard.GetSETTINGTXTFileName) then begin
946- //GetSETTINGTXTAction‚ðŒÄ‚яo‚·‚ÆIndy‚ª‰Šú‰»‚³‚ê‚é‚̂ŁA
950+ if FileExists(ABoard.GetSETTINGTXTFileName) then begin
951+ body := TStringList.Create;
952+ try
953+ body.LoadFromFile(ABoard.GetSETTINGTXTFileName);
954+ Remote := GetFusianaName(body, ABoard);
955+ finally
956+ body.Free;
957+ end;
958+ end;
959+
960+ //Setting.txt‚ª‚È‚©‚Á‚½‚çŽæ“¾
961+ //ŽI‚É•‰‰×‚ª‚©‚©‚è‚»‚¤‚Å•|‚¢EEE
962+ if not FileExists(ABoard.GetSETTINGTXTFileName) then begin
963+ //GetSETTINGTXTAction‚ðŒÄ‚яo‚·‚ÆIndy‚ª‰Šú‰»‚³‚ê‚é‚̂ŁA
947964 //‚±‚±‚ÅCookie‚ð•Û‘¶‚µ‚È‚­‚Ä‚Í‚¢‚¯‚È‚¢
948965 tmpRawheader := Indy.Response.RawHeaders.Text;
949966 GetSETTINGTXTAction.Execute;
950967 body := TStringList.Create;
951968 try
952- body.LoadFromFile(ABoard.GetSETTINGTXTFileName);
953- Remote := GetFusianaName(body, ABoard);
954- finally
955- body.Free;
956- end;
969+ if FileExists(ABoard.GetSETTINGTXTFileName) then begin
970+ body.LoadFromFile(ABoard.GetSETTINGTXTFileName);
971+ Remote := GetFusianaName(body, ABoard);
972+ end;
973+ finally
974+ body.Free;
975+ end;
957976 end;
958977
959- if Remote = 'fusianasan' then begin
978+ if Remote = 'fusianasan' then begin
960979 MsgResult := MsgBox(
961980 Handle,
962981 'ƒŠƒ‚[ƒgƒzƒXƒg‚ð•\Ž¦‚·‚é‹@”\‚ªŽg‚í‚ê‚Ä‚¢‚Ü‚·' + #13#10 +
@@ -971,8 +990,8 @@ begin
971990 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
972991 DrawMenuBar(Handle);
973992 Exit;
974- end;
975- end;
993+ end;
994+ end;
976995 end;
977996
978997 if ResultType = grtOK then begin
@@ -1214,7 +1233,7 @@ begin
12141233 ini.WriteInteger(sDate, 'Status', FStatusCode);
12151234 ini.WriteDateTime(sDate, 'Date', Now);
12161235 if FThreadItem = nil then begin
1217- ini.WriteString(sDate, 'Title', TitleEdit.Text);
1236+ ini.WriteString(sDate, 'Title', MojuUtils.Sanitize(TitleEdit.Text));
12181237 ini.WriteString(sDate, 'BBS', FBoard.BBSID);
12191238 ini.WriteInteger(sDate, 'NewThread', 1);
12201239 end else begin
@@ -1731,9 +1750,6 @@ var
17311750 settingBody: TStringList;
17321751 tmpBoard: TBoard;
17331752 begin
1734- if FWork then
1735- Exit;
1736- FWork := True;
17371753
17381754 InitIdHTTP(Indy);
17391755 if FThreadItem = nil then
@@ -1784,7 +1800,6 @@ begin
17841800 end;
17851801 ShowBoardInformation(tmpBoard, BoardInformationMemo);
17861802
1787- FWork := False;
17881803 end;
17891804
17901805 procedure TEditorForm.ShowBoardInformation(ABoard: TBoard; AMemo: TMemo);
@@ -2211,4 +2226,183 @@ begin
22112226 end;
22122227 end;
22132228
2229+procedure TEditorForm.InputAssistActionExecute(Sender: TObject);
2230+var
2231+ count, i : Integer;
2232+ item : TMenuItem;
2233+ point: TPoint;
2234+ Bitmap : TBitmap;
2235+ TextWidth, ItemWidth, tmpWidth: Integer;
2236+begin
2237+ if FInputAssistKey = '' then Exit;
2238+
2239+ InputAssistPopupMenu.Items.Clear;
2240+
2241+ if (FResistWords = nil) then begin
2242+ FResistWords := TStringList.Create;
2243+ end else begin
2244+ FResistWords.Clear;
2245+ end;
2246+
2247+ if (GetKeyState( VK_SHIFT ) < 0) then begin
2248+ // ƒVƒtƒg‚ª‰Ÿ‚³‚ê‚Ä‚¢‚ê‚΁AƒL[‚ÅŽn‚Ü‚éƒJƒeƒSƒŠ
2249+ count :=
2250+ InputAssistDM.GetStartWithCategoryResistWords(
2251+ FInputAssistKey, FResistWords);
2252+ end else begin
2253+ // ƒVƒtƒg‚ª–³‚¢‚̂ŁAƒL[‚ÅŽn‚Ü‚éƒL[
2254+ count :=
2255+ InputAssistDM.GetStartWithKeyResistWords(
2256+ FInputAssistKey, FResistWords);
2257+ end;
2258+ Bitmap := TBitmap.Create;
2259+ try
2260+ Bitmap.Canvas.Font.Assign(BodyEdit.Font);
2261+ // ƒ}[ƒWƒ“5px
2262+ TextWidth := Bitmap.Canvas.TextWidth(FInputAssistKey) + 5;
2263+ ItemWidth := 0;
2264+ for i := 0 to count - 1 do begin
2265+ item := TMenuItem.Create(nil);
2266+ item.Break := mbNone;
2267+ item.Caption := FResistWords[i];
2268+ item.Tag := i;
2269+ item.OnClick := InputAssistMenuClick;
2270+ InputAssistPopupMenu.Items.Add(item);
2271+
2272+ tmpWidth := Bitmap.Canvas.TextWidth(Item.Caption);
2273+ if (tmpWidth > ItemWidth) then begin
2274+ ItemWidth := tmpWidth;
2275+ end;
2276+ end;
2277+ finally
2278+ Bitmap.Free;
2279+ end;
2280+
2281+ if (count > 0) then begin
2282+ GetCaretpos(point);
2283+ point.X := point.X + Self.Left + (Self.Width - BodyEdit.Width) div 2;
2284+ point.Y := point.Y + Self.Top + (Self.Height - Self.ClientHeight);
2285+
2286+ if Screen.DesktopWidth >
2287+ (point.X + TextWidth + ItemWidth) then begin
2288+ InputAssistPopupMenu.Popup(
2289+ point.X + TextWidth,
2290+ point.Y + EditorPage.Top + EditorPage.TabHeight + BodyEdit.Top);
2291+ end else begin
2292+ InputAssistPopupMenu.Popup(
2293+ point.X - TextWidth - ItemWidth,
2294+ point.Y + EditorPage.Top + EditorPage.TabHeight + BodyEdit.Top);
2295+ end;
2296+ end;
2297+end;
2298+
2299+procedure TEditorForm.InputAssistMenuClick(Sender: TObject);
2300+var
2301+ text : String;
2302+ IMC: HIMC;
2303+begin
2304+ if not (Sender is TMenuItem) then Exit;
2305+
2306+ if (FResistWords <> nil) then begin
2307+ try
2308+ text :=
2309+ TResistWord(FResistWords.Objects[TMenuItem(Sender).Tag]).GetText;
2310+ except
2311+ text := '';
2312+ end;
2313+ IMC := ImmGetContext(BodyEdit.Handle); //ƒRƒ“ƒeƒLƒXƒgŽæ“¾
2314+ try
2315+ ImmNotifyIME(IMC, NI_COMPOSITIONSTR, CPS_CANCEL, 0);
2316+ finally
2317+ ImmReleaseContext(BodyEdit.Handle, IMC); //ƒRƒ“ƒeƒLƒXƒg‰ð•ú
2318+ end;
2319+
2320+ FResistWords.Clear;
2321+ FInputAssistKey := '';
2322+ end;
2323+ InsertText(BodyEdit, text);
2324+end;
2325+
2326+//! TMemo‚̃J[ƒ\ƒ‹ˆÊ’u‚É•¶Žš—ñ‘}“ü
2327+procedure TEditorForm.InsertText(Memo: TMemo; Text: String);
2328+var
2329+ line, sel, pos: Integer;
2330+ left, right : String;
2331+begin
2332+ Memo.Lines.BeginUpdate;
2333+ line := SendMessage(Memo.Handle,EM_LINEFROMCHAR,-1,0); //s
2334+ sel := Memo.SelStart;
2335+ pos := sel - SendMessage(Memo.Handle, EM_LINEINDEX, -1, 0); //Œ…
2336+ if (pos > 0) then begin
2337+ left := Copy(Memo.Lines[line], 0, pos);
2338+ end else begin
2339+ left := '';
2340+ end;
2341+ right := Copy(Memo.Lines[line], pos + 1, Length(Memo.Lines[line]));
2342+ Memo.Lines.Strings[line] := left + Text + right;
2343+ Memo.Lines.EndUpdate;
2344+ //@ƒLƒƒƒŒƒbƒg‚̈ʒu‚ðXV‚·‚é
2345+ Memo.SelStart := sel + Length(text);
2346+ // ƒLƒƒƒŒƒbƒg‚̈ʒu‚܂ŃXƒNƒ[ƒ‹
2347+ Memo.Perform(EM_SCROLLCARET, 0, 0);
2348+
2349+end;
2350+
2351+procedure TEditorForm.ApplicationEvents1Message(var Msg: tagMSG;
2352+ var Handled: Boolean);
2353+var
2354+ wmMsg: TWMKey;
2355+ IMC: HIMC;
2356+ Len: integer;
2357+ Str: string;
2358+begin
2359+ if (Self.Active) then begin
2360+ case Msg.message of
2361+ //ƒL[‰Ÿ‰º‚̂ݎ󂯎æ‚é
2362+ WM_KEYDOWN:
2363+ begin
2364+ // ƒ^ƒu‚ªh•ÒWh‚ÅCtrlƒL[‚ª‰Ÿ‚³‚ê‚Ä‚¢‚é‚Ì‚ðŠm”F‚·‚é
2365+ if (EditorPage.ActivePageIndex = 0)
2366+ and (GetKeyState( VK_CONTROL ) < 0) then begin
2367+ wmMsg.Msg := Msg.message;
2368+ wmMsg.CharCode := Word(Msg.wParam);
2369+ wmMsg.KeyData := Msg.lParam;
2370+ if (wmMsg.CharCode = 229) and (wmMsg.KeyData = 3735553) then begin
2371+ IMC := ImmGetContext(BodyEdit.Handle); //ƒRƒ“ƒeƒLƒXƒgŽæ“¾
2372+ Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //‚Ü‚¸’·‚³‚ðŽæ“¾
2373+ if (Len > 0) then begin
2374+ SetLength(Str, Len + 1); //Buffer‚̃ƒ‚ƒŠ‚ðÝ’è
2375+ ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //‚Ü‚¸’·‚³‚ðŽæ“¾
2376+ SetLength(Str, Len);
2377+ FInputAssistKey := Str;
2378+ InputAssistActionExecute(nil);
2379+ Handled := True;
2380+ end;
2381+ ImmReleaseContext(BodyEdit.Handle, IMC); //ƒRƒ“ƒeƒLƒXƒg‰ð•ú
2382+ end;
2383+ end;
2384+ end;
2385+ end;
2386+
2387+ end;
2388+end;
2389+
2390+procedure TEditorForm.ShowInputAssistFormExecute(Sender: TObject);
2391+var
2392+ form : TInputAssistForm;
2393+begin
2394+ form := TInputAssistForm.Create(nil);
2395+ try
2396+ if TopAction.Checked then begin // ƒXƒeƒCó‘Ԃɐݒè
2397+ SetWindowPos(form.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2398+ end;
2399+ form.SetUpFromEditor;
2400+ if (form.ShowModal = mrOk) then begin
2401+ InsertText(BodyEdit, form.GetInsertText);
2402+ end;
2403+ finally
2404+ form.Release;
2405+ end;
2406+end;
2407+
22142408 end.
--- a/ExternalThreadItem.pas
+++ b/ExternalThreadItem.pas
@@ -31,7 +31,8 @@ type
3131 tipDownloadHost, // : string // ¡‚̃zƒXƒg‚ƈႤê‡‚̃zƒXƒg
3232 tipAgeSage, // : TThreadAgeSage // ƒAƒCƒeƒ€‚̏グ‰º‚°
3333 tipURL, // : string // ƒXƒŒƒbƒh‚ðƒuƒ‰ƒEƒU‚Å•\Ž¦‚·‚éÛ‚Ì URL
34- tipFilePath // : string // ‚±‚̃XƒŒ‚ª•Û‘¶‚³‚ê‚Ä‚¢‚éƒpƒX
34+ tipFilePath, // : string // ‚±‚̃XƒŒ‚ª•Û‘¶‚³‚ê‚Ä‚¢‚éƒpƒX
35+ tipJumpAddress // : Integer // JUMPæƒŒƒX”ԍ†
3536 );
3637
3738 // *************************************************************************
@@ -168,6 +169,8 @@ begin
168169 Result := DWORD( CreateResultString( threadItem.URL ) );
169170 tipFilePath: // ‚±‚̃XƒŒ‚ª•Û‘¶‚³‚ê‚Ä‚¢‚éƒpƒX
170171 Result := DWORD( CreateResultString( threadItem.FilePath ) );
172+ tipJumpAddress:
173+ Result := threadItem.JumpAddress;
171174 else
172175 Result := 0;
173176 end;
@@ -228,6 +231,8 @@ begin
228231 threadItem.URL := string( PChar( param ) );
229232 //tipFilePath: // : string // ‚±‚̃XƒŒ‚ª•Û‘¶‚³‚ê‚Ä‚¢‚éƒpƒX
230233 // threadItem.FilePath := string( PChar( param ) );
234+ tipJumpAddress:
235+ threadItem.JumpAddress := param;
231236 end;
232237
233238 end;
--- a/Favorite.pas
+++ b/Favorite.pas
@@ -410,12 +410,12 @@ begin
410410 board := BBSsFindBoardFromBBSID( Node.Attributes[ 'bbs' ] );
411411 if board <> nil then
412412 FavBoard := TFavoriteBoardItem.Create(
413- board.URL, Node.Attributes[ 'title' ], board );
413+ board.URL, MojuUtils.UnSanitize(Node.Attributes[ 'title' ]), board );
414414 end else begin
415415 FavBoard := TFavoriteBoardItem.Create(
416- Node.Attributes[ 'url' ], Node.Attributes[ 'title' ], nil );
416+ Node.Attributes[ 'url' ], MojuUtils.UnSanitize(Node.Attributes[ 'title' ]), nil );
417417 end;
418- CurrentNode := FTreeView.Items.AddChildObjectFirst(ParentNode, Node.Attributes['title'], FavBoard);
418+ CurrentNode := FTreeView.Items.AddChildObjectFirst(ParentNode, UnSanitize(Node.Attributes['title']), FavBoard);
419419 CurrentNode.ImageIndex := 15;
420420 CurrentNode.SelectedIndex := 15;
421421 end else if Node.Attributes['favtype'] = 'thread' then begin
@@ -433,17 +433,17 @@ begin
433433 board.BoardPlugIn,
434434 board,
435435 GikoSys.Get2chBoard2ThreadURL( board, ChangeFileExt( Node.Attributes[ 'thread' ], '' ) ) );
436- threadItem.Title := Node.Attributes[ 'title' ];
436+ threadItem.Title := UnSanitize(Node.Attributes[ 'title' ]);
437437 board.Add( threadItem );
438438 end;
439439 FavThread := TFavoriteThreadItem.Create(
440- threadItem.URL, Node.Attributes[ 'title' ], threadItem );
440+ threadItem.URL, UnSanitize(Node.Attributes[ 'title' ]), threadItem );
441441 threadItem.Free;
442442 end else begin
443443 FavThread := TFavoriteThreadItem.Create(
444- Node.Attributes[ 'url' ], Node.Attributes[ 'title' ], nil );
444+ Node.Attributes[ 'url' ], UnSanitize(Node.Attributes[ 'title' ]), nil );
445445 end;
446- CurrentNode := FTreeView.Items.AddChildObjectFirst(ParentNode, Node.Attributes['title'], FavThread);
446+ CurrentNode := FTreeView.Items.AddChildObjectFirst(ParentNode, UnSanitize(Node.Attributes['title']), FavThread);
447447 CurrentNode.ImageIndex := 16;
448448 CurrentNode.SelectedIndex := 16;
449449 end;
@@ -558,12 +558,12 @@ begin
558558 end else if TObject(data) is TFavoriteBoardItem then begin
559559 FavBoard := TFavoriteBoardItem(data);
560560 s := Format('<favitem type="2ch" favtype="board" url="%s" title="%s"/>',
561- [HtmlEncode( FavBoard.URL ), HtmlEncode(Node.Text)]);
561+ [HtmlEncode( FavBoard.URL ), HtmlEncode(MojuUtils.Sanitize(Node.Text))]);
562562 SaveList.Add(s);
563563 end else if TObject(data) is TFavoriteThreadItem then begin
564564 FavThread := TFavoriteThreadItem(data);
565565 s := Format('<favitem type="2ch" favtype="thread" url="%s" title="%s"/>',
566- [HtmlEncode( FavThread.URL ), HtmlEncode(Node.Text)]);
566+ [HtmlEncode( FavThread.URL ), HtmlEncode(MojuUtils.Sanitize(Node.Text))]);
567567 SaveList.Add(s);
568568 end;
569569 Node := Node.getNextSibling;
--- a/Gesture.pas
+++ b/Gesture.pas
@@ -146,7 +146,7 @@ begin
146146 WM_RBUTTONUP: begin
147147 if FCancelMode then
148148 FCancelMode := False
149- else begin
149+ else if (FBeginGesture) then begin
150150 FBeginGesture := False;
151151 ReleaseCapture;
152152 if FGestureItemList.Count <> 0 then begin
--- a/Giko.dfm
+++ b/Giko.dfm
@@ -1,6 +1,6 @@
11 object GikoForm: TGikoForm
2- Left = 363
3- Top = 92
2+ Left = 422
3+ Top = 68
44 HorzScrollBar.Visible = False
55 VertScrollBar.Visible = False
66 AutoScroll = False
@@ -527,7 +527,7 @@ object GikoForm: TGikoForm
527527 ControlData = {
528528 4C00000098400000281100000000000000000000000000000000000000000000
529529 000000004C000000000000000000000001000000E0D057007335CF11AE690800
530- 2B2E12620A000000000000004C0000000114020000000000C000000000000046
530+ 2B2E126202000000000000004C0000000114020000000000C000000000000046
531531 8000000000000000000000000000000000000000000000000000000000000000
532532 00000000000000000100000000000000000000000000000000000000}
533533 end
@@ -4469,7 +4469,7 @@ object GikoForm: TGikoForm
44694469 Left = 4
44704470 Top = 244
44714471 Bitmap = {
4472- 494C010136003B00040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
4472+ 494C010138003B00040010001000FFFFFFFFFF00FFFFFFFFFFFFFFFF424D3600
44734473 000000000000360000002800000040000000F0000000010020000000000000F0
44744474 0000000000000000000000000000000000000000000000000000000000000000
44754475 0000000000000000000000000000000000000000000000000000000000000000
@@ -4605,126 +4605,126 @@ object GikoForm: TGikoForm
46054605 0000000000000000000000000000000000000000000000000000000000000000
46064606 0000000000000000000000000000000000000000000000000000000000000000
46074607 0000000000000000000000000000000000000000000000000000000000000000
4608- 0000000000000000000000000000000000000000000000000000000000000000
4609- 0000000000000000000000000000000000000000000000000000000000000000
4608+ 0000000000000000FF000000000000000000000000000000000080808000FFFF
4609+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C0000000
46104610 0000000000000000000000000000000000000000000000000000000000000000
46114611 000000000000000000000000FF000000FF000000FF000000FF000000FF000000
46124612 0000000000000000000000000000000000000000000000000000000000000000
46134613 0000000000000042840000428400004284000042840000428400004284000000
4614- 0000000000000000000000000000000000000000000000000000000000000000
4615- 0000000000000000000000000000000000000000000000000000000000000000
4616- 0000000000000000000000000000000000000000000000000000000000000000
4617- 0000000000000000000000000000000000000000000000000000000000000000
4614+ 0000000000000000000000000000000000000000000000000000C0C0C000C0C0
4615+ C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000000000000000
4616+ 00000000FF000000FF000000FF0000000000000000000000000080808000FFFF
4617+ FF00FF000000FF000000FF000000FF000000FF000000FFFFFF00C0C0C0000000
46184618 0000000000000000000000000000000000000000000000000000000000000000
46194619 00000000FF000000FF000084840000000000C6C6C600C6C6C600848484000000
46204620 FF000000FF000000000084848400000000000000000000000000000000000000
46214621 0000004284004284E7004284E7004284E7004284E7004284E7004284E7000042
4622- 8400000000000000000000000000000000000000000000000000000000000000
4623- 0000000000000000000000000000000000000000000000000000000000000000
4624- 0000000000000000000000000000000000000000000000000000000000000000
4625- 0000000000000000000000000000000000000000000000000000000000000000
4622+ 8400000000000000000000000000000000000000000000000000C0C0C000FFFF
4623+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C000000000000000
4624+ 0000000000000000FF000000000000000000000000000000000080808000FFFF
4625+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C0000000
46264626 0000000000000000000000000000000000000000000000000000000000000000
46274627 FF00000000000000FF008484840084848400FFFFFF00FFFFFF00848484000000
46284628 0000000000000000FF0000000000000000000000000000000000000000000042
46294629 84004284E7000000000000000000000000000000000000000000000000000000
4630- 0000004284000000000000000000000000000000000000000000000000000000
4631- 0000000000000000000000000000000000000000000000000000000000000000
4632- 0000000000000000000000000000000000000000000000000000000000000000
4633- 0000000000000000000000000000000000000000000000000000000000000000
4630+ 0000004284000000000000000000000000000000000000000000C0C0C000FFFF
4631+ FF00C0C0C000C0C0C000C0C0C000C0C0C000FFFFFF00C0C0C000000000000000
4632+ 0000000000000000FF000000000000000000000000000000000080808000FFFF
4633+ FF00FF000000FF000000FF000000FF000000FF000000FFFFFF00C0C0C0000000
46344634 00000000000000000000000000000000000000000000000000000000FF000000
46354635 0000008484000000FF000000FF00C6C6C600FFFFFF00FFFFFF00848484000000
46364636 000084848400000000000000FF00000000000000000000000000004284004284
46374637 E7004284E7000000000000000000FFFFFF00FFFFFF00FFFFFF004284E7000000
46384638 0000000000000042840000000000000000000000000000000000000000000000
46394639 0000000000000000000000000000000000000000000000000000000000000000
4640- 0000000000000000000000000000000000000000000000000000000000000000
4641- 0000000000000000000000000000000000000000000000000000000000000000
4640+ 000000000000000000000000000000000000000000000000000080808000FFFF
4641+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
46424642 00000000000000000000000000000000000000000000000000000000FF000084
46434643 840000FFFF00FFFFFF000000FF000000FF00FFFFFF00FFFFFF00848484000000
46444644 000000000000000000000000FF000000000000000000004284004284E7004284
46454645 E7004284E7000000000000000000FFFFFF004284E7004284E7004284E7000000
4646- 0000000000004284E70000428400000000000000000000000000000000000000
4647- 0000000000000000000000000000000000000000000000000000000000000000
4648- 0000000000000000000000000000000000000000000000000000000000000000
4649- 0000000000000000000000000000000000000000000000000000000000000000
4646+ 0000000000004284E7000042840000000000000000000000000080808000C0C0
4647+ C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000000000000000
4648+ 000000000000000000000000000000000000000000000000000080808000FFFF
4649+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C000FFFFFF00808080000000
46504650 000000000000000000000000000000000000000000000000FF008484840000FF
46514651 FF00FFFFFF0000FFFF00000000000000FF000000FF00FFFFFF00848484000000
46524652 00000000000000000000000000000000FF0000000000004284004284E7004284
46534653 E7004284E7000000000000000000FFFFFF004284E7004284E7004284E7000000
4654- 0000000000004284E70000428400000000000000000000000000000000000000
4655- 0000000000000000000000000000000000000000000000000000000000000000
4656- 0000000000000000000000000000000000000000000000000000000000000000
4657- 0000000000000000000000000000000000000000000000000000000000000000
4654+ 0000000000004284E7000042840000000000000000000000000080808000FFFF
4655+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C000000000000000
4656+ 00000000000000E000000000000000000000000000000000000080808000FFFF
4657+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C00080808000000000000000
46584658 000000000000000000000000000000000000008484000000FF00C6C6C600FFFF
46594659 FF0000FFFF00FFFFFF0000000000848484000000FF000000FF00848484000000
46604660 00008484840084848400848484000000FF0000000000004284004284E7004284
46614661 E7004284E7000000000000000000000000000000000000000000000000000000
4662- 00004284E7004284E70000428400000000000000000000000000000000000000
4663- 0000000000000000000000000000000000000000000000000000000000000000
4664- 0000000000000000000000000000000000000000000000000000000000000000
4665- 0000000000000000000000000000000000000000000000000000000000000000
4662+ 00004284E7004284E7000042840000000000000000000000000080808000FFFF
4663+ FF00FF000000FF000000FF000000FF000000FFFFFF00C0C0C000000000000000
4664+ 000000E0000000E0000000E00000000000000000000000000000808080008080
4665+ 8000808080008080800080808000808080008080800000000000000000000000
46664666 000000000000000000000000000000000000008484000000FF00C6C6C60000FF
46674667 FF00FFFFFF0000FFFF0000000000C6C6C600000000000000FF000000FF000000
46684668 00000000000000000000000000000000FF0000000000004284004284E7004284
46694669 E7004284E7000000000000000000FFFFFF00FFFFFF00FFFFFF00000000004284
4670- E7004284E7004284E70000428400000000000000000000000000000000000000
4671- 0000000000000000000000000000000000000000000000000000000000000000
4672- 0000000000000000000000000000000000000000000000000000000000000000
4673- 0000000000000000000000000000000000000000000000000000000000000000
4670+ E7004284E7004284E7000042840000000000000000000000000080808000FFFF
4671+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C000000000000000
4672+ 00000000000000E0000000000000000000000000000000000000000000000000
4673+ 00000000000000FFFF0000000000000000000000000000000000000000000000
46744674 000000000000000000000000000000000000008484000000FF00C6C6C600FFFF
46754675 FF0000FFFF00FFFFFF000000000000000000FFFFFF00FFFFFF000000FF000000
46764676 FF000000000000000000000000000000FF0000000000004284004284E7004284
46774677 E7004284E7000000000000000000FFFFFF004284E7004284E700000000000000
4678- 00004284E7004284E70000428400000000000000000000000000000000000000
4679- 0000000000000000000000000000000000000000000000000000000000000000
4680- 0000000000000000000000000000000000000000000000000000000000000000
4678+ 00004284E7004284E7000042840000000000000000000000000080808000FFFF
4679+ FF00FF000000FF000000FF000000FF000000FFFFFF00C0C0C000000000000000
46814680 0000000000000000000000000000000000000000000000000000000000000000
4681+ 00000000000000FFFF0000000000000000000000000000000000000000000000
46824682 00000000000000000000000000000000000000000000008484000000FF0000FF
46834683 FF00FFFFFF0000FFFF0000000000C6C6C600FFFFFF00FFFFFF00848484000000
46844684 FF000000FF00000000000000FF000000000000000000004284004284E7004284
46854685 E7004284E7000000000000000000FFFFFF004284E7004284E700000000000000
4686- 00004284E7004284E70000428400000000000000000000000000000000000000
4687- 0000000000000000000000000000000000000000000000000000000000000000
4688- 0000000000000000000000000000000000000000000000000000000000000000
4686+ 00004284E7004284E7000042840000000000000000000000000080808000FFFF
4687+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C000000000000000
46894688 0000000000000000000000000000000000000000000000000000000000000000
4689+ 00000000000000FFFF0000000000000000000000000000000000000000000000
46904690 00000000000000000000000000000000000000000000000000000000FF000084
46914691 840000FFFF00FFFFFF0000000000C6C6C600FFFFFF00FFFFFF00848484000000
46924692 00000000FF000000FF000000FF00000000000000000000000000004284004284
46934693 E7004284E7000000000000000000FFFFFF00FFFFFF00FFFFFF00000000000000
4694- 00004284E7000042840000000000000000000000000000000000000000000000
4695- 0000000000000000000000000000000000000000000000000000000000000000
4696- 0000000000000000000000000000000000000000000000000000000000000000
4697- 0000000000000000000000000000000000000000000000000000000000000000
4694+ 00004284E700004284000000000000000000000000000000000080808000FFFF
4695+ FF00FF000000FF000000FF000000FF000000FFFFFF00C0C0C000000000000000
4696+ 0000000000000000FF0000000000000000000000000000000000000000000000
4697+ 00000000000000FFFF0000000000000000000000000000000000000000000000
46984698 0000000000000000000000000000000000000000000000000000000000000000
46994699 FF000084840000FFFF008484840084848400C6C6C600FFFFFF00848484000000
47004700 0000000000000000FF0084848400000000000000000000000000000000000042
47014701 84004284E7000000000000000000000000000000000000000000000000004284
4702- E700004284000000000000000000000000000000000000000000000000000000
4703- 0000000000000000000000000000000000000000000000000000000000000000
4704- 0000000000000000000000000000000000000000000000000000000000000000
4705- 0000000000000000000000000000000000000000000000000000000000000000
4702+ E70000428400000000000000000000000000000000000000000080808000FFFF
4703+ FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000
4704+ 0000000000000000FF00000000000000000000000000000000000000000000FF
4705+ FF0000FFFF0000FFFF0000FFFF0000FFFF000000000000000000000000000000
47064706 0000000000000000000000000000000000000000000000000000000000000000
47074707 00000000FF000000FF0000FFFF0000000000C6C6C600C6C6C600000000000000
47084708 FF000000FF000000000000000000000000000000000000000000000000000000
47094709 0000004284004284E7004284E7004284E7004284E7004284E7004284E7000042
4710- 8400000000000000000000000000000000000000000000000000000000000000
4711- 0000000000000000000000000000000000000000000000000000000000000000
4712- 0000000000000000000000000000000000000000000000000000000000000000
4713- 0000000000000000000000000000000000000000000000000000000000000000
4710+ 840000000000000000000000000000000000000000000000000080808000FFFF
4711+ FF00FFFFFF00FFFFFF00FFFFFF00C0C0C000FFFFFF0080808000000000000000
4712+ 00000000FF000000FF000000FF00000000000000000000000000000000000000
4713+ 00000000000000FFFF0000000000000000000000000000000000000000000000
47144714 0000000000000000000000000000000000000000000000000000000000000000
47154715 000000000000000000000000FF000000FF000000FF000000FF000000FF000000
47164716 0000000000000000000000000000000000000000000000000000000000000000
47174717 0000000000000042840000428400004284000042840000428400004284000000
4718+ 000000000000000000000000000000000000000000000000000080808000FFFF
4719+ FF00FFFFFF00FFFFFF00FFFFFF00C0C0C0008080800000000000000000000000
4720+ 0000000000000000FF0000000000000000000000000000000000000000000000
4721+ 00000000000000FFFF0000000000000000000000000000000000000000000000
47184722 0000000000000000000000000000000000000000000000000000000000000000
47194723 0000000000000000000000000000000000000000000000000000000000000000
47204724 0000000000000000000000000000000000000000000000000000000000000000
47214725 0000000000000000000000000000000000000000000000000000000000000000
4722- 0000000000000000000000000000000000000000000000000000000000000000
4723- 0000000000000000000000000000000000000000000000000000000000000000
4724- 0000000000000000000000000000000000000000000000000000000000000000
4725- 0000000000000000000000000000000000000000000000000000000000000000
4726- 0000000000000000000000000000000000000000000000000000000000000000
4727- 0000000000000000000000000000000000000000000000000000000000000000
4726+ 0000000000000000000000000000000000000000000000000000808080008080
4727+ 8000808080008080800080808000808080000000000000000000000000000000
47284728 0000000000000000000000000000000000000000000000000000000000000000
47294729 0000000000000000000000000000000000000000000000000000000000000000
47304730 0000000000000000000000000000000000000000000000000000000000000000
@@ -6397,11 +6397,11 @@ object GikoForm: TGikoForm
63976397 0000000000000000000000000000000000000000000000000000000000000000
63986398 0000000000000000000000000000000000000000000000000000000000000000
63996399 0000000000000000000000000000000000000000000000000000000000000000
6400- 00000000000000000000000000000000FE7FFFFF00000000FC1FF81F00000000
6401- F005F00F00000000E01BE00700000000C015C00300000000801D800100000000
6402- 001E8001000000000010800100000000001E800100000000000E800100000000
6403- 8005800100000000C011C00300000000E019E00700000000F027F00F00000000
6404- FC1FF81F00000000FE7FFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFC003
6400+ 00000000000000000000000000000000FE7FFFFFC01BC00FFC1FF81FC011C00F
6401+ F005F00FC01BC00FE01BE007C01BC00FC015C003C01FC00F801D8001C01FC01F
6402+ 001E8001C01BC03F00108001C011C07F001E8001C01BFBFF000E8001C01FFBFF
6403+ 80058001C01FFBFFC011C003C01BFBFFE019E007C01BE0FFF027F00FC031FBFF
6404+ FC1FF81FC07BFBFFFE7FFFFFC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC003
64056405 FFFFFFFFFFFFC003FC01803FFC01C003FC01803C3C01C003FC01803C3C01C003
64066406 FC01803C3C01C003FC01803C3C01C003FC01803C3C01C003C00180000001C003
64076407 C00180000001C003C00180000001C003C00180000001C003FFFFFFFC3FFFC003
@@ -6453,8 +6453,7 @@ object GikoForm: TGikoForm
64536453 00000000C003FFFF0000000080017FFF0000000080013F7F0000000000000E3F
64546454 000000000000861F800000000000C20FC00100000000E007F81F00000000F043
64556455 F00F00000000F861E00700008001FC70C003803F8001FEFCF81FC07FC003FFFE
6456- F81FE0FFE007FFFFF83FFFFFF81FFFFF00000000000000000000000000000000
6457- 000000000000}
6456+ F81FE0FFE007FFFFF83FFFFFF81FFFFF}
64586457 end
64596458 object ItemImageList: TImageList
64606459 Left = 4
@@ -7211,8 +7210,8 @@ object GikoForm: TGikoForm
72117210 Left = 4
72127211 Top = 308
72137212 Bitmap = {
7214- 494C01010300040004000B001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
7215- 00000000000036000000280000002C000000100000000100200000000000000B
7213+ 494C01010400090004000B001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
7214+ 00000000000036000000280000002C0000003000000001002000000000000021
72167215 0000000000000000000000000000000000000000000000000000000000000000
72177216 0000000000000000000000000000000000000000000000000000000000000000
72187217 0000000000000000000000000000000000000000000000000000000000000000
@@ -7235,39 +7234,215 @@ object GikoForm: TGikoForm
72357234 0000000000000000000000000000000000000000000000000000000000000000
72367235 0000000000000000000000000000000000000000000000000000000000000000
72377236 0000000000000000000000000000000000000000000000000000000000000000
7238- 000000000000000000000000000000000000000000000000000000000000FFFF
7237+ 0000000000000000000000000000000000000000000000000000000000000000
7238+ 0000000000000000000000000000000000000000000000000000000000000000
7239+ 0000000000000000000000000000000000000000000000000000000000000000
7240+ 0000000000000000000000000000000000000000000000000000000000000000
7241+ 0000000000000000000000000000000000000000000000000000000000000000
7242+ 0000000000000000000000000000000000000000000000000000000000000000
7243+ 0000000000000000000000000000000000000000000000000000000000000000
7244+ 0000000000000000000000000000000000000000000000000000000000000000
7245+ 0000000000000000000000000000000000000000000000000000000000000000
7246+ 0000000000000000000000000000000000000000000000000000000000000000
7247+ 0000000000000000000000000000000000000000000000000000000000000000
7248+ 0000000000000000000000000000000000000000000000000000000000000000
7249+ 0000000000000000000000000000000000000000000000000000000000000000
7250+ 0000000000000000000000000000000000000000000000000000000000000000
7251+ 0000000000000000000000000000000000000000000000000000000000000000
7252+ 0000000000000000000000000000000000000000000000000000000000000000
7253+ 0000000000000000000000000000000000000000000000000000000000000000
7254+ 0000000000000000000000000000000000000000000000000000000000000000
7255+ 0000000000000000000000000000000000000000000000000000000000000000
7256+ 0000000000000000000000000000000000000000000000000000000000000000
7257+ 0000000000000000000000000000000000000000000000000000000000000000
7258+ 0000000000000000000000000000000000000000000000000000000000000000
7259+ 0000000000000000000000000000000000000000000000000000000000000000
7260+ 0000000000000000000000000000000000000000000000000000000000000000
7261+ 0000000000000000000000000000000000000000000000000000000000000000
7262+ 0000000000000000000000000000000000000000000000000000000000000000
7263+ 0000000000000000000000000000000000000000000000000000000000000000
7264+ 0000000000000000000000000000000000000000000000000000000000000000
7265+ 0000000000000000000000000000000000000000000000000000000000000000
7266+ 0000000000000000000000000000000000000000000000000000000000000000
7267+ 0000000000000000000000000000000000000000000000000000000000000000
7268+ 0000000000000000000000000000000000000000000000000000000000000000
7269+ 0000000000000000000000000000000000000000000000000000000000000000
7270+ 0000000000000000000000000000000000000000000000000000000000000000
7271+ 0000000000000000000000000000000000000000000000000000000000000000
7272+ 0000000000000000000000000000000000000000000000000000000000000000
7273+ 0000000000000000000000000000000000000000000000000000000000000000
7274+ 0000000000000000000000000000000000000000000000000000000000000000
7275+ 0000000000000000000000000000000000000000000000000000000000000000
7276+ 0000000000000000000000000000000000000000000000000000000000000000
7277+ 0000000000000000000000000000000000000000000000000000000000000000
7278+ 0000000000000000000000000000000000000000000000000000000000000000
7279+ 0000000000000000000000000000000000000000000000000000000000000000
7280+ 0000000000000000000000000000000000000000000000000000000000000000
7281+ 0000000000000000000000000000000000000000000000000000000000000000
7282+ 0000000000000000000000000000000000000000000000000000000000000000
7283+ 0000000000000000000000000000000000000000000000000000000000000000
7284+ 0000000000000000000000000000000000000000000000000000000000000000
7285+ 0000000000000000000000000000000000000000000000000000000000000000
7286+ 0000000000000000000000000000000000000000000000000000000000000000
7287+ 0000000000000000000000000000000000000000000000000000000000000000
7288+ 0000000000000000000000000000000000000000000000000000000000000000
7289+ 0000000000000000000000000000000000000000000000000000000000000000
7290+ 0000000000000000000000000000000000000000000000000000000000000000
7291+ 0000000000000000000000000000000000000000000000000000000000000000
7292+ 0000000000000000000000000000000000000000000000000000000000000000
7293+ 0000000000000000000000000000000000000000000000000000000000000000
7294+ 0000000000000000000000000000000000000000000000000000000000000000
7295+ 0000000000000000000000000000000000000000000000000000000000000000
7296+ 0000000000000000000000000000000000000000000000000000000000000000
7297+ 0000000000000000000000000000000000000000000000000000000000000000
7298+ 0000000000000000000000000000000000000000000000000000000000000000
7299+ 0000000000000000000000000000000000000000000000000000000000000000
7300+ 0000000000000000000000000000000000000000000000000000000000000000
7301+ 0000000000000000000000000000000000000000000000000000000000000000
7302+ 0000000000000000000000000000000000000000000000000000000000000000
7303+ 0000000000000000000000000000000000000000000000000000000000000000
7304+ 0000000000000000000000000000000000000000000000000000000000000000
7305+ 0000000000000000000000000000000000000000000000000000000000000000
7306+ 0000000000000000000000000000000000000000000000000000000000000000
7307+ 0000000000000000000000000000000000000000000000000000000000000000
7308+ 0000000000000000000000000000000000000000000000000000000000000000
7309+ 0000000000000000000000000000000000000000000000000000000000000000
7310+ 0000000000000000000000000000000000000000000000000000000000000000
7311+ 0000000000000000000000000000000000000000000000000000000000000000
7312+ 0000000000000000000000000000000000000000000000000000000000000000
7313+ 0000000000000000000000000000000000000000000000000000000000000000
7314+ 0000000000000000000000000000000000000000000000000000000000000000
7315+ 0000000000000000000000000000000000000000000000000000000000000000
7316+ 0000000000000000000000000000000000000000000000000000000000000000
7317+ 0000000000000000000000000000000000000000000000000000000000000000
7318+ 0000000000000000000000000000000000000000000000000000000000000000
7319+ 0000000000000000000000000000000000000000000000000000000000000000
7320+ 0000000000000000000000000000000000000000000000000000000000000000
7321+ 0000000000000000000000000000000000000000000000000000000000000000
7322+ 0000000000000000000000000000000000000000000000000000000000000000
7323+ 0000000000000000000000000000000000000000000000000000000000000000
7324+ 0000000000000000000000000000000000000000000000000000000000000000
7325+ 0000000000000000000000000000000000000000000000000000000000000000
7326+ 0000000000000000000000000000000000000000000000000000000000000000
7327+ 0000000000000000000000000000000000000000000000000000000000000000
7328+ 0000000000000000000000000000000000000000000000000000000000000000
7329+ 0000000000000000000000000000000000000000000000000000000000000000
7330+ 0000000000000000000000000000000000000000000000000000000000000000
7331+ 0000000000000000000000000000000000000000000000000000000000000000
7332+ 0000000000000000000000000000000000000000000000000000000000000000
7333+ 0000000000000000000000000000000000000000000000000000000000000000
7334+ 0000000000000000000000000000000000000000000000000000000000000000
7335+ 0000000000000000000000000000000000000000000000000000000000000000
7336+ 0000000000000000000000000000000000000000000000000000000000000000
7337+ 0000000000000000000000000000000000000000000000000000000000000000
7338+ 0000000000000000000000000000000000000000000000000000000000000000
7339+ 0000000000000000000000000000000000000000000000000000000000000000
7340+ 0000000000000000000000000000000000000000000000000000000000000000
7341+ 0000000000000000000000000000000000000000000000000000000000000000
7342+ 0000000000000000000000000000000000000000000000000000000000000000
7343+ 0000000000000000000000000000000000000000000000000000000000000000
7344+ 0000000000000000000000000000000000000000000000000000000000000000
7345+ 0000000000000000000000000000000000000000000000000000000000000000
7346+ 0000000000000000000000000000000000000000000000000000000000000000
7347+ 0000000000000000000000000000000000000000000000000000000000000000
7348+ 0000000000000000000000000000000000000000000000000000000000000000
7349+ 0000000000000000000000000000000000000000000000000000000000000000
7350+ 0000000000000000000000000000000000000000000000000000000000000000
7351+ 0000000000000000000000000000000000000000000000000000000000000000
7352+ 0000000000000000000000000000000000000000000000000000000000000000
7353+ 0000000000000000000000000000000000000000000000000000000000000000
7354+ 0000000000000000000000000000000000000000000000000000000000000000
7355+ 0000000000000000000000000000000000000000000000000000000000000000
7356+ 0000000000000000000000000000000000000000000000000000000000000000
7357+ 0000000000000000000000000000000000000000000000000000000000000000
7358+ 0000000000000000000000000000000000000000000000000000000000000000
7359+ 0000000000000000000000000000000000000000000000000000000000000000
7360+ 0000000000000000000000000000000000000000000000000000000000000000
7361+ 0000000000000000000000000000000000000000000000000000000000000000
7362+ 0000000000000000000000000000000000000000000000000000000000000000
7363+ 0000000000000000000000000000000000000000000000000000000000000000
7364+ 0000000000000000000000000000000000000000000000000000000000000000
7365+ 0000000000000000000000000000000000000000000000000000000000000000
7366+ 0000000000000000000000000000000000000000000000000000000000000000
7367+ 0000000000000000000000000000000000000000000000000000000000000000
7368+ 0000000000000000000000000000000000000000000000000000000000000000
7369+ 0000000000000000000000000000000000000000000000000000000000000000
7370+ 0000000000000000000000000000000000000000000000000000000000000000
7371+ 0000000000000000000000000000000000000000000000000000000000000000
7372+ 0000000000000000000000000000000000000000000000000000000000000000
7373+ 0000000000000000000000000000000000000000000000000000000000000000
7374+ 0000000000000000000000000000000000000000000000000000000000000000
7375+ 0000000000000000000000000000000000000000000000000000000000000000
7376+ 0000000000000000000000000000000000000000000000000000000000000000
7377+ 0000000000000000000000000000000000000000000000000000000000000000
7378+ 0000000000000000000000000000000000000000000000000000000000000000
7379+ 0000000000000000000000000000000000000000000000000000000000000000
7380+ 0000000000000000000000000000000000000000000000000000000000000000
7381+ 0000000000000000000000000000000000000000000000000000000000000000
7382+ 0000000000000000000000000000000000000000000000000000000000000000
7383+ 0000000000000000000000000000000000000000000000000000000000000000
7384+ 0000000000000000000000000000000000000000000000000000000000000000
7385+ 0000000000000000000000000000000000000000000000000000000000000000
7386+ 0000000000000000000000000000000000000000000000000000000000000000
7387+ 0000000000000000000000000000000000000000000000000000000000000000
7388+ 0000000000000000000000000000000000000000000000000000000000000000
7389+ 0000000000000000000000000000000000000000000000000000000000000000
7390+ 0000000000000000000000000000000000000000000000000000000000000000
7391+ 0000000000000000000000000000000000000000000000000000000000000000
7392+ 0000000000000000000000000000000000000000000000000000000000000000
7393+ 0000000000000000000000000000000000000000000000000000000000000000
7394+ 0000000000000000000000000000000000000000000000000000000000000000
7395+ 0000000000000000000000000000000000000000000000000000000000000000
7396+ 0000000000000000000000000000000000000000000000000000000000000000
7397+ 0000000000000000000000000000000000000000000000000000000000000000
7398+ 0000000000000000000000000000000000000000000000000000000000000000
7399+ 0000000000000000000000000000000000000000000000000000000000000000
7400+ 0000000000000000000000000000000000000000000000000000000000000000
7401+ 0000000000000000000000000000000000000000000000000000808080000000
7402+ 0000000000000000000000000000000000000000000000000000000000000000
7403+ 0000000000000000000000000000000000000000000000000000000000000000
7404+ 0000000000000000000000000000000000000000000000000000000000000000
7405+ 0000000000000000000000000000000000000000000000000000000000000000
7406+ 0000000000000000000000000000000000000000000000000000000000000000
7407+ 00008080800080808000C0DCC000808080008080800000000000000000000000
7408+ 0000000000000000000000000000000000000000000000000000000000000000
7409+ 0000000000000000000000000000000000000000000000000000000000000000
7410+ 0000000000000000000000000000000000000000000000000000000000000000
7411+ 0000000000000000000000000000000000000000000000000000000000000000
7412+ 00000000000000000000000000000000000080808000C0DCC000C0DCC000C0DC
7413+ C00080808000000000000000000000000000000000000000000000000000FFFF
72397414 FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
72407415 0000000000000000000000000000000000000000000000000000000000000000
72417416 000000000000000000000000000000000000000000000000000000000000FFFF
7242- FF00000000000000000000000000000000000000000000000000000000000000
7243- 0000000000000000000000000000000000000000000000000000000000000000
7417+ FF00000000000000000000000000000000000000000000000000000000008080
7418+ 8000C0DCC000C0DCC000C0DCC000C0DCC000C0DCC00080808000000000000000
72447419 0000000000000000000000000000FFFFFF00008400000084000000840000FFFF
72457420 FF00000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
72467421 FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000
72477422 00000000000000000000FFFFFF0084848400FFFFFF0000000000000000000000
7248- 0000000000000000000000000000000000000000000000000000000000000000
7249- 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
7423+ 000000000000000000000000000080808000C0DCC000C0DCC000C0DCC000C0DC
7424+ C000C0DCC00080808000000000000000000000000000FFFFFF00FFFFFF00FFFF
72507425 FF000084000000FF000000840000FFFFFF00FFFFFF00FFFFFF0000000000FFFF
72517426 FF00840000008400000084000000840000008400000084000000840000008400
72527427 000084000000FFFFFF00000000000000000000000000FFFFFF00848484008484
7253- 840084848400FFFFFF0000000000000000000000000000000000000000000000
7254- 0000000000000000000000000000000000000000000000000000000000000000
7428+ 840084848400FFFFFF0000000000000000000000000000000000000000008080
7429+ 8000C0DCC000C0DCC000C0DCC000C0DCC000C0DCC00080808000000000000000
72557430 000000000000FFFFFF0000840000008400000084000000FF0000008400000084
72567431 000000840000FFFFFF000000000000000000FFFFFF0084000000840000008400
72577432 000084000000840000008400000084000000FFFFFF0000000000000000000000
72587433 0000FFFFFF008484840084848400848484008484840084848400FFFFFF000000
7259- 0000000000000000000000000000000000000000000000000000000000000000
7260- 00000000000000000000000000000000000000000000FFFFFF000084000000FF
7434+ 00000000000000000000000000000000000080808000C0DCC000C0DCC000C0DC
7435+ C0008080800000000000000000000000000000000000FFFFFF000084000000FF
72617436 000000FF000000FF000000FF000000FF000000840000FFFFFF00000000000000
72627437 000000000000FFFFFF008400000084000000840000008400000084000000FFFF
72637438 FF00000000000000000000000000FFFFFF008484840084848400848484008484
72647439 8400848484008484840084848400FFFFFF000000000000000000000000000000
7265- 0000000000000000000000000000000000000000000000000000000000000000
7440+ 00008080800080808000C0DCC000808080008080800000000000000000000000
72667441 000000000000FFFFFF0000840000008400000084000000FF0000008400000084
72677442 000000840000FFFFFF0000000000000000000000000000000000FFFFFF008400
72687443 00008400000084000000FFFFFF00000000000000000000000000FFFFFF008484
72697444 8400848484008484840084848400848484008484840084848400848484008484
7270- 8400FFFFFF000000000000000000000000000000000000000000000000000000
7445+ 8400FFFFFF000000000000000000000000000000000000000000808080000000
72717446 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
72727447 FF000084000000FF000000840000FFFFFF00FFFFFF00FFFFFF00000000000000
72737448 0000000000000000000000000000FFFFFF0084000000FFFFFF00000000000000
@@ -7302,12 +7477,20 @@ object GikoForm: TGikoForm
73027477 0000000000000000000000000000000000000000000000000000000000000000
73037478 0000000000000000000000000000000000000000000000000000000000000000
73047479 000000000000000000000000000000000000424D3E000000000000003E000000
7305- 280000002C000000100000000100010000000000800000000000000000000000
7306- 000000000000000000000000FFFFFF00FFFFFFFF80000000FFFFFFFF80000000
7307- FFFFFFFF80000000FFFFFFFF80000000E0FFFFEF80000000E0E003C780000000
7308- 8020038380000000803007018000000080380E0080000000803C1C0000000000
7309- 803E3C0000000000E0FF7FFF80000000E0FFFFFF80000000FFFFFFFF80000000
7310- FFFFFFFF80000000FFFFFFFF8000000000000000000000000000000000000000
7480+ 280000002C000000300000000100010000000000800100000000000000000000
7481+ 000000000000000000000000FFFFFF0000000000000000000000000000000000
7482+ 0000000000000000000000000000000000000000000000000000000000000000
7483+ 0000000000000000000000000000000000000000000000000000000000000000
7484+ 0000000000000000000000000000000000000000000000000000000000000000
7485+ 0000000000000000000000000000000000000000000000000000000000000000
7486+ 0000000000000000000000000000000000000000000000000000000000000000
7487+ 0000000000000000000000000000000000000000000000000000000000000000
7488+ 0000000000000000000000000000000000000000000000000000000000000000
7489+ 00000000000000000000000000000000FFFFFFFFFFF00000FFFFFFFFFDF00000
7490+ FFFFFFFFF0700000FFFFFFFFF0700000E0FFFFEFE0300000E0E003C7E0300000
7491+ 80200383E030000080300701F070000080380E00F0700000803C1C007DF00000
7492+ 803E3C007FF00000E0FF7FFFFFF00000E0FFFFFFFFF00000FFFFFFFFFFF00000
7493+ FFFFFFFFFFF00000FFFFFFFFFFF0000000000000000000000000000000000000
73117494 000000000000}
73127495 end
73137496 object AddressImageList: TImageList
@@ -7700,6 +7883,14 @@ object GikoForm: TGikoForm
77007883 GroupIndex = 1
77017884 RadioItem = True
77027885 end
7886+ object N76: TMenuItem
7887+ Action = GikoDM.LiveItemAction
7888+ GroupIndex = 1
7889+ end
7890+ object DAT3: TMenuItem
7891+ Action = GikoDM.ArchiveItemAction
7892+ GroupIndex = 1
7893+ end
77037894 object S2: TMenuItem
77047895 Action = GikoDM.SelectItemAction
77057896 AutoCheck = True
@@ -7959,6 +8150,12 @@ object GikoForm: TGikoForm
79598150 object N43: TMenuItem
79608151 Caption = '-'
79618152 end
8153+ object N22: TMenuItem
8154+ Action = GikoDM.SetInputAssistAction
8155+ end
8156+ object N42: TMenuItem
8157+ Caption = '-'
8158+ end
79628159 object PlugInMenu: TMenuItem
79638160 Caption = #12503#12521#12464#12452#12531'(&P)'
79648161 end
@@ -8523,6 +8720,12 @@ object GikoForm: TGikoForm
85238720 Action = GikoDM.NewItemAction
85248721 AutoCheck = True
85258722 end
8723+ object N75: TMenuItem
8724+ Action = GikoDM.LiveItemAction
8725+ end
8726+ object DAT2: TMenuItem
8727+ Action = GikoDM.ArchiveItemAction
8728+ end
85268729 object N68: TMenuItem
85278730 Caption = '-'
85288731 end
--- a/Giko.pas
+++ b/Giko.pas
@@ -402,6 +402,12 @@ type
402402 N74: TMenuItem;
403403 WikiFAQ: TMenuItem;
404404 GikoApplicationEvents: TApplicationEvents;
405+ N22: TMenuItem;
406+ N42: TMenuItem;
407+ DAT2: TMenuItem;
408+ N75: TMenuItem;
409+ DAT3: TMenuItem;
410+ N76: TMenuItem;
405411 procedure FormCreate(Sender: TObject);
406412 procedure FormDestroy(Sender: TObject);
407413 procedure BrowserStatusTextChange(Sender: TObject;
@@ -541,6 +547,7 @@ type
541547 procedure GikoApplicationEventsException(Sender: TObject; E: Exception);
542548 procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
543549 Shift: TShiftState; X, Y: Integer);
550+ procedure GetResURLMenuClick(Sender: TObject);
544551 private
545552 { Private éŒ¾ }
546553 FEnabledCloseButton: Boolean;
@@ -588,7 +595,8 @@ type
588595 FIsHandledWheel : Boolean; ///< Šù‚Ɏ󂯎æ‚Á‚½ WM_MOUSEWHEEL ‚©‚Ç‚¤‚©
589596 DiffComp: Boolean; //Add by Genyakun ƒXƒŒ‚ªXV‚³‚ꂽ‚Æ‚«‚ÉTrue‚É‚È‚é
590597 FOrigenCaption: String; //‚¨‹C‚É“ü‚èƒcƒŠ[‚̃AƒCƒeƒ€•ÒWŽž‚̕ҏW‘O‚Ì•¶Žš—ñ
591- FPreviewBrowserRect: TRect; ///< ƒvƒŒƒrƒ…[‚Ì•\Ž¦ˆÊ’u‚ð‹L‰¯‚·‚é
598+ FPreviewBrowserRect: TRect; ///< ƒvƒŒƒrƒ…[‚Ì•\Ž¦ˆÊ’u‚ð‹L‰¯‚·‚é
599+ FActionListGroupIndexes: array of Integer; ///<GikoDMã‚̃AƒNƒVƒ‡ƒ“ƒŠƒXƒg‚ÌŠeƒAƒNƒVƒ‡ƒ“‚ɐݒ肳‚ꂽGroupIndex‚ð•Û‘¶‚·‚é”z—ñ
592600 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
593601 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
594602 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
@@ -648,12 +656,18 @@ type
648656 function GetScreenCursor(): TCursor;
649657 //ƒJ[ƒ\ƒ‹‚ðÝ’è‚·‚é
650658 procedure SetScreenCursor(Cursor : TCursor);
651- //! ƒAƒNƒVƒ‡ƒ“‚̃`ƒFƒbƒNó‘Ԃ̏‰Šú‰»
652- procedure InitActionChecked();
653659 //! ƒ_ƒEƒ“ƒ[ƒhƒRƒ“ƒgƒ[ƒ‹ƒXƒŒƒbƒh‚̐¶¬
654660 procedure CreateControlThread();
655661 //! ƒuƒ‰ƒEƒU‚̐¶¬
656662 procedure CreateBrowsers(count: Integer);
663+ //! ActionList‚ÌGroupIndex‚Ì•Û‘¶
664+ procedure GetGroupIndex(ActionList: TActionList);
665+ //! ActionList‚ÌGroupIndex‚̐ݒè
666+ procedure SetGroupIndex(ActionList: TActionList);
667+ //! Žw’肳‚ꂽƒXƒŒƒbƒh‚ðŠJ‚­(ƒƒO‚ª–³‚¢‚Æ‚« or Žw’èJUMP‚Ü‚Å‘«‚è‚È‚¢‚Æ‚«‚ÍDL‚·‚é)
668+ procedure OpenThreadItem(Thread: TThreadItem; URL: String);
669+ //! ListViewiƒXƒŒƒbƒhˆê——j‚ðXV‚·‚é
670+ procedure RefreshListView(Thread: TThreadItem);
657671 protected
658672 procedure CreateParams(var Params: TCreateParams); override;
659673 procedure WndProc(var Message: TMessage); override;
@@ -783,6 +797,7 @@ type
783797 function WebBrowserClick(Sender: TObject): WordBool;
784798 //! ƒc[ƒ‹ƒo[‚ɃXƒŒiž‚݃Rƒ“ƒ{ƒ{ƒbƒNƒX‚ðÝ’è‚·‚é
785799 procedure SetSelectComboBox();
800+
786801 published
787802 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
788803 end;
@@ -820,7 +835,8 @@ uses
820835 FavoriteArrange, AddressHistory, Preview, Gesture,
821836 About, Option, Round, Splash, Sort, ListSelect, Imm,
822837 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
823- HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage;
838+ HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
839+ InputAssistDataModule;
824840
825841 const
826842 BLANK_HTML: string = 'about:blank';
@@ -869,12 +885,18 @@ begin
869885 Writeln(' I—¹Žž‚́AƒMƒRƒiƒrƒEƒBƒ“ƒhƒE‚ð•Â‚¶‚Ä‚­‚¾‚³‚¢');
870886 Writeln('============================================================');
871887 {$ENDIF}
888+//try
889+ Sort.SetSortDate(Now());
890+
872891 FTreeType := gttNone;
873892 // ‹N“®Žž‚É•Û‘¶‚³‚ê‚Ä‚µ‚Ü‚¤‘΍ô
874893 FStartUp := true;
875894 Application.HookMainWindow(Hook);
876895 FIsIgnoreResize := rtResizing;
877-
896+ //ActionList‚ÌGuoupIndex‚ð•Û‘¶‚µ‚āA0‚ɃNƒŠƒA‚·‚éB
897+ //(‹N“®Žž‚Ƀc[ƒ‹ƒ{ƒ^ƒ“‚ÌDownƒvƒƒpƒeƒB‚𔽉f‚³‚¹‚é“s‡ãGroupIndex‚͐ݒè‚Å‚«‚È‚¢)
898+ //‚±‚êˆÈŒãSet`‚ōĐݒ肷‚é‚܂ŁAAction‚ÌChecked‚ð‚¢‚¶‚é‚Æ‚«‚Í’ˆÓI
899+ GetGroupIndex(GikoDM.GikoFormActionList);
878900 FSearchDialog := nil;
879901 CreateBrowsers(BROWSER_COUNT);
880902
@@ -944,6 +966,59 @@ begin
944966 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
945967 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
946968
969+ //ƒ~ƒ…[ƒg‚̏ó‘Ô‚ðÝ’è
970+ GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
971+
972+ // ƒŒƒX•\Ž¦”͈Í
973+ FResRangeMenuSelect := GikoSys.ResRange;
974+ case GikoSys.ResRange of
975+ Ord( grrAll ):
976+ begin
977+ GikoDM.AllResAction.Execute;
978+ end;
979+ Ord( grrSelect ):
980+ begin
981+ SelectComboBox.Text := SelectComboBox.Items[ 1 ];
982+ GikoDM.SelectResAction.Checked := True;
983+ end;
984+ else
985+ case FResRangeMenuSelect of
986+ Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
987+ Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
988+ 100: GikoDM.OnlyAHundredResAction.Checked := True;
989+ end;
990+ end;
991+
992+ // ƒXƒŒƒbƒhˆê——•\Ž¦”͈Í
993+ case GikoSys.Setting.ThreadRange of
994+ gtrAll:
995+ begin
996+ GikoDM.AllItemAction.Checked := True;
997+ ViewType := gvtAll;
998+ end;
999+ gtrLog:
1000+ begin
1001+ GikoDM.LogItemAction.Checked := True;
1002+ ViewType := gvtLog;
1003+ end;
1004+ gtrNew:
1005+ begin
1006+ GikoDM.NewItemAction.Checked := True;
1007+ ViewType := gvtNew;
1008+ end;
1009+ gtrLive:
1010+ begin
1011+ GikoDM.LiveItemAction.Checked := True;
1012+ ViewType := gvtLive;
1013+ end;
1014+ gtrArch:
1015+ begin
1016+ GikoDM.ArchiveItemAction.Checked := True;
1017+ ViewType := gvtArch;
1018+ end;
1019+ end;
1020+
1021+
9471022 //ƒuƒ‰ƒEƒUƒ^ƒuƒtƒHƒ“ƒg
9481023 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
9491024 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
@@ -952,9 +1027,27 @@ begin
9521027 BrowserTab.Font.Style := [fsBold];
9531028 if GikoSys.Setting.BrowserTabFontItalic then
9541029 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1030+ BrowserTab.DoubleBuffered := True;
9551031 FDragWFirst := false;
9561032 SetContent(BrowserNullTab); //ƒuƒ‰ƒEƒU‚ð‹ó”’•\Ž¦
9571033
1034+ //ƒuƒ‰ƒEƒUƒ^ƒu
1035+ GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1036+
1037+ if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1038+ GikoDM.BrowserTabTopAction.Checked := True;
1039+ end else begin
1040+ GikoDM.BrowserTabBottomAction.Checked := True;
1041+ end;
1042+
1043+ if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1044+ GikoDM.BrowserTabTabStyleAction.Checked := True;
1045+ end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1046+ GikoDM.BrowserTabButtonStyleAction.Checked := True;
1047+ end else begin
1048+ GikoDM.BrowserTabFlatStyleAction.Checked := True;
1049+ end;
1050+
9581051 //ƒvƒƒOƒŒƒXƒo[‚̏‰Šú‰»
9591052 ProgressBar.Parent := StatusBar;
9601053 ProgressBar.Top := 2;
@@ -968,10 +1061,14 @@ begin
9681061
9691062 // ƒ{[ƒhƒtƒ@ƒCƒ‹—ñ‹“(ReadFavorite ‚æ‚èæ‚ɍs‚¤‚±‚Æ)
9701063 GikoSys.ListBoardFile;
971-
1064+ //@˜A‘±‹N“®Žž‚ɃXƒvƒ‰ƒbƒVƒ…ƒEƒBƒ“ƒhƒE‚̃ƒ‚ƒŠ‚ª•s’è‚É
1065+ try
9721066 // ƒXƒvƒ‰ƒbƒVƒ…ƒEƒBƒ“ƒhƒE‚̃vƒƒOƒŒƒXƒo[‚̐ݒè
973- SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
974-
1067+ if (SplashWindow <> nil) then begin
1068+ SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1069+ end;
1070+ except
1071+ end;
9751072 // ‚·‚ׂĂÌBBS‚ð“ǂݍž‚ñ‚Å‚¨‚­
9761073 for i := Length(BBSs) - 1 downto 0 do begin
9771074 if not BBSs[i].IsBoardFileRead then
@@ -982,6 +1079,7 @@ begin
9821079 SplashWindow.Update;
9831080 end;
9841081 end;
1082+
9851083 //„‰ñƒf[ƒ^“ǂݍž‚Ý
9861084 RoundList := TRoundList.Create;
9871085 RoundList.LoadRoundBoardFile;
@@ -1200,7 +1298,8 @@ begin
12001298 FavoriteAddToolButton.Caption := '’ljÁ...';
12011299 AntiIndivAbonMenuItem.Caption := 'ŒÂ•Ê‚ ‚ځ`‚ñ‰ðœ';
12021300
1203-
1301+ //“ü—̓AƒVƒXƒg‹@\‚̏‰Šú‰»
1302+ InputAssistDM.Init(GikoSys.GetInputAssistFileName);
12041303 end;
12051304
12061305 // CoolBar ‚̐ݒè‚ð•Ï”‚É•Û‘¶
@@ -1341,51 +1440,20 @@ begin
13411440 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
13421441 GikoDM.BrowserNameBarVisibleActionExecute( nil );
13431442
1344- //ƒuƒ‰ƒEƒUƒ^ƒu
1345- GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1346- GikoDM.BrowserTabVisibleActionExecute(nil);
1347-
1348- if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1349- GikoDM.BrowserTabTopAction.Checked := True;
1350- GikoDM.BrowserTabTopActionExecute(nil);
1351- end else begin
1352- GikoDM.BrowserTabBottomAction.Checked := True;
1353- GikoDM.BrowserTabBottomActionExecute(nil);
1354- end;
1355-
1356- if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1357- GikoDM.BrowserTabTabStyleAction.Checked := True;
1358- GikoDM.BrowserTabTabStyleActionExecute(nil);
1359- end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1360- GikoDM.BrowserTabButtonStyleAction.Checked := True;
1361- GikoDM.BrowserTabButtonStyleActionExecute(nil);
1362- end else begin
1363- GikoDM.BrowserTabFlatStyleAction.Checked := True;
1364- GikoDM.BrowserTabFlatStyleActionExecute(nil);
1365- end;
1366-
1367- // ListView ‚̃wƒbƒ_ƒhƒ‰ƒbƒO
1368-// ListView.FullDrag := True;
1369-
13701443 // CoolBar •œŒ³
13711444 LoadCoolBarSettings;
13721445
13731446 //d—v@‚±‚ꂪ‚È‚¢‚ƃc[ƒ‹ƒ{ƒ^ƒ“‚̍XV‚ª‚¨‚©‚µ‚­‚È‚é
13741447 // ResetBandInfo( ListCoolBar, ListToolBar );
13751448 FIsIgnoreResize := rtNone;
1376- //ƒc[ƒ‹ƒo[‚̍XV‚ðI‚¦‚½Œã‚É‚â‚ç‚È‚¢‚Æ‚¢‚¯‚È‚¢‚Ì‚©‚à
1377- //ƒAƒNƒVƒ‡ƒ“‚̃`ƒFƒbƒNó‘Ô‚ð‰Šú‰»
1378- InitActionChecked();
13791449
13801450 //FormCrete‚©‚çˆÚ“®B
13811451 if GikoSys.Setting.TabAutoLoadSave then begin
13821452 GikoDM.TabAutoLoadAction.Execute;
13831453 end;
1384- //‚É‚¿‚á‚ñŒêˆÄ“àƒTƒ|[ƒg‹@”\
1385- if GikoSys.Setting.GengoSupport then begin
1386- //—\’è’n
1387- //TestŒü‚¯
1388- end;
1454+
1455+ //ActionList‚ÌGroupIndex‚ðŒ³‚É–ß‚·
1456+ SetGroupIndex(GikoDM.GikoFormActionList);
13891457
13901458 FStartUp := false;
13911459 end;
@@ -1474,6 +1542,8 @@ begin
14741542 // CoolBar •Û‘¶
14751543 //if (GikoForm.WindowState <> wsMinimized) and (GikoForm.WindowState <> wsMaximized) then
14761544
1545+ //“ü—̓AƒVƒXƒg‹@\‚̐ݒè‚Ì•Û‘¶
1546+ InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
14771547
14781548 //‚¨‹C‚É“ü‚è•Û‘¶
14791549 try
@@ -2225,7 +2295,6 @@ var
22252295 s: string;
22262296 boardPlugIn : TBoardPlugIn;
22272297 i: Integer;
2228- browserRec : TBrowserRecord;
22292298 Res : TResRec;
22302299 begin
22312300 try
@@ -2249,11 +2318,13 @@ begin
22492318 GikoSys.Setting.BoardSortIndex := 0;
22502319 GikoSys.Setting.BoardSortOrder := True;
22512320 end;
2321+ Sort.SetSortDate(Now());
22522322 SetActiveList(Item.Board);
22532323 end;
22542324 Item.Board.Modified := True;
22552325 Item.Board.IsThreadDatRead := True;
22562326 PlaySound('New');
2327+ ListView.Refresh;
22572328 end else if Item.DownType = gdtThread then begin
22582329 //ƒXƒŒ
22592330 Item.SaveItemFile;
@@ -2277,15 +2348,12 @@ begin
22772348 end;
22782349 if GikoSys.Setting.BrowserTabVisible then begin
22792350 if GetActiveContent = Item.ThreadItem then
2280- browserRec := InsertBrowserTab(Item.ThreadItem)
2351+ InsertBrowserTab(Item.ThreadItem)
22812352 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2282- browserRec := InsertBrowserTab(Item.ThreadItem, True)
2353+ InsertBrowserTab(Item.ThreadItem, True)
22832354 else
2284- browserRec := InsertBrowserTab(Item.ThreadItem, False);
2285- if browserRec.Thread = BrowserNullTab.Thread then begin
2286- browserRec.Movement := BrowserNullTab.Movement;
2287- BrowserNullTab.Movement := '';
2288- end;
2355+ InsertBrowserTab(Item.ThreadItem, False);
2356+
22892357 end else begin
22902358 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
22912359 InsertBrowserTab(Item.ThreadItem);
@@ -2322,11 +2390,14 @@ begin
23222390 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
23232391 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
23242392 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
2393+ gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
2394+ gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
23252395 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
23262396 end;
23272397 end;
2398+ RefreshListView(Item.ThreadItem);
23282399 end;
2329- ListView.Refresh;
2400+
23302401 end else if Item.State = gdsNotModify then begin
23312402 //•ÏXƒiƒV
23322403 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
@@ -2524,9 +2595,9 @@ begin
25242595 BrowserNullTab := TBrowserRecord.Create;
25252596 BrowserNullTab.Browser := Browser;
25262597 end;
2527- if BrowserNullTab.thread <> ThreadItem then begin
2528- BrowserNullTab.Movement := '';
2529- end;
2598+// if BrowserNullTab.thread <> ThreadItem then begin
2599+// BrowserNullTab.Movement := '';
2600+// end;
25302601 BrowserNullTab.thread := ThreadItem;
25312602 Result := BrowserNullTab;
25322603 BrowserTab.TabIndex := -1;
@@ -2543,7 +2614,7 @@ var
25432614 BBSID: string;
25442615 FileName: string;
25452616 sTitle: string;
2546- doc: Variant;
2617+ doc: Variant;
25472618 s: string;
25482619 i: Integer;
25492620 idx: Integer;
@@ -2560,7 +2631,6 @@ begin
25602631 (Assigned(FActiveContent.Browser.Document)) then begin
25612632 try
25622633 try
2563- Sleep(1);
25642634 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document).Body).ScrollTop;
25652635 except
25662636 on E: Exception do
@@ -2618,7 +2688,6 @@ begin
26182688 if (not Assigned(Thread.Browser.Document)) then begin
26192689 Thread.Browser.Navigate('about:blank');
26202690 end;
2621-
26222691 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
26232692 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
26242693 Application.ProcessMessages;
@@ -2627,14 +2696,32 @@ begin
26272696 end;
26282697 end;
26292698
2699+ if (Thread <> nil) and (ThreadItem <>nil) then begin
2700+ BrowserBoardNameLabel.Caption := ThreadPTitle;
2701+ ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
2702+ BrowserNameLabel.Caption := ThreadTitle;
2703+ ItemImage.Picture := nil;
2704+ if ThreadIsLog then
2705+ if ThreadNewArraical then
2706+ ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
2707+ else
2708+ ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
2709+ else
2710+ ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
2711+
2712+ ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
2713+ BrowserNameLabel.Left := ItemImage.Left + 20;
2714+
2715+ end;
26302716 //ActiveContent@‚̍XV
26312717 FActiveContent := Thread;
26322718
26332719 if not ThreadIsLog then begin
26342720 Self.Caption := GikoDataModule.CAPTION_NAME ;
2635- //ƒXƒe[ƒ^ƒXƒo[‚É•\Ž¦‚µ‚Ä‚¢‚éƒXƒŒ‚Ì—e—Ê‚ðÁ‹Ž
2721+ //ƒXƒe[ƒ^ƒXƒo[‚É•\Ž¦‚µ‚Ä‚¢‚éƒXƒŒ‚Ì—e—Ê‚ðÁ‹Ž
26362722 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
26372723 try
2724+ Thread.Browser.BringToFront;
26382725 s := '<HTML><BODY><CENTER>‚±‚̃XƒŒƒbƒh‚͎擾‚µ‚Ä‚¢‚Ü‚¹‚ñ</CENTER></BODY></HTML>';
26392726 doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
26402727 doc.open;
@@ -2642,10 +2729,11 @@ begin
26422729 doc.Write(s);
26432730 doc.Close;
26442731 finally
2732+
26452733 end;
26462734 end else begin
26472735 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
2648- //ƒXƒe[ƒ^ƒXƒo[‚É•\Ž¦‚µ‚Ä‚¢‚éƒXƒŒ‚Ì—e—Ê‚ð•\Ž¦
2736+ //ƒXƒe[ƒ^ƒXƒo[‚É•\Ž¦‚µ‚Ä‚¢‚éƒXƒŒ‚Ì—e—Ê‚ð•\Ž¦
26492737 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
26502738 StatusBar.Panels[THREADSIZE_PANEL].Width :=
26512739 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
@@ -2655,42 +2743,14 @@ begin
26552743 Thread.Repaint := false;
26562744
26572745 Thread.Browser.OnStatusTextChange := nil;
2658- doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
2659-
2660- //GikoSys.CreateHTML2(doc, ThreadItem, sTitle);
2661- HTMLCreater.CreateHTML2(doc, ThreadItem, sTitle);
2746+ LockWindowUpdate(Thread.Browser.ParentWindow);
2747+ HTMLCreater.CreateHTML2(Thread.Browser, ThreadItem, sTitle);
26622748 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
2663-
2664- if ThreadItem = nil then begin
2665- FActiveContent := nil;
2666- BrowserTab.Repaint;
2667- Exit;
2668- end;
26692749 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
26702750 end;
26712751 end;
2672- if (Thread <> nil) and (ThreadItem <>nil) then begin
2673- BrowserBoardNameLabel.Caption := ThreadPTitle;
2674- ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
2675- BrowserNameLabel.Caption := ThreadTitle;
2676- ItemImage.Picture := nil;
2677- if ThreadIsLog then
2678- if ThreadNewArraical then
2679- ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
2680- else
2681- ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
2682- else
2683- ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
26842752
2685- ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
2686- BrowserNameLabel.Left := ItemImage.Left + 20;
2687-
2688- //Thread‚̔‚ƕ\Ž¦‚µ‚Ä‚¢‚锂ª“¯‚¶‚È‚ç•`‰æ‚ðXV‚·‚é
2689- if (FActiveList is TBoard) and (TBoard(ActiveList) = ThreadItem.ParentBoard) then
2690- ListView.Refresh;
2691- end else begin
2692- FActiveContent := nil;
2693- end;
2753+ RefreshListView(ThreadItem);
26942754 finally
26952755 Screen.Cursor := crDefault;
26962756 end;
@@ -2797,7 +2857,10 @@ begin
27972857 //gvtAll: ListView.Items.Count := Board.Count;
27982858 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
27992859 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
2860+ gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
2861+ gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
28002862 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
2863+
28012864 end;
28022865
28032866 SetActiveList(Board);
@@ -2829,6 +2892,14 @@ begin
28292892 ListView.Canvas.Font.Color := clGreen;
28302893 s := '‚±‚̃rƒ…[‚ɂ͐V’…ƒAƒCƒeƒ€‚ª‚ ‚è‚Ü‚¹‚ñB';
28312894 end;
2895+ gvtArch: begin
2896+ ListView.Canvas.Font.Color := clFuchsia;
2897+ s := '‚±‚̃rƒ…[‚É‚ÍDAT—Ž‚¿ƒAƒCƒeƒ€‚ª‚ ‚è‚Ü‚¹‚ñB';
2898+ end;
2899+ gvtLive: begin
2900+ ListView.Canvas.Font.Color := clMaroon;
2901+ s := '‚±‚̃rƒ…[‚ɂ͐¶‘¶ƒAƒCƒeƒ€‚ª‚ ‚è‚Ü‚¹‚ñB';
2902+ end;
28322903 gvtUser: begin
28332904 ListView.Canvas.Font.Color := clNavy;
28342905 s := '‚±‚̃rƒ…[‚ɂ̓^ƒCƒgƒ‹‚ªu%sv‚ðŠÜ‚ÞƒAƒCƒeƒ€‚ª‚ ‚è‚Ü‚¹‚ñB';
@@ -3037,7 +3108,7 @@ begin
30373108 // title ‚͍¡‚Ì‚Æ‚±‚ëŽg‚Á‚Ä‚¢‚È‚¢
30383109 saveList.Add(
30393110 '<history url="' + HtmlEncode( TFavoriteThreadItem( FHistoryList[ i ] ).URL ) + '"' +
3040- ' title="' + HtmlEncode( TFavoriteThreadItem( FHistoryList[ i ] ).Title ) + '"/>');
3111+ ' title="' + HtmlEncode( MojuUtils.Sanitize(TFavoriteThreadItem( FHistoryList[ i ] ).Title )) + '"/>');
30413112 end;
30423113 saveList.Add('</address>');
30433114 saveList.SaveToFile( GikoSys.GetConfigDir + 'History.xml' );
@@ -3056,15 +3127,21 @@ var
30563127 HistoryNode : IXMLNode;
30573128 s : string;
30583129 favItem : TFavoriteThreadItem;
3130+{$IFDEF DEBUG}
3131+ st, rt : Cardinal;
3132+{$ENDIF}
30593133 begin
3134+{$IFDEF DEBUG}
3135+ st := GetTickCount;
3136+{$ENDIF}
30603137
30613138 fileName := GikoSys.GetConfigDir + 'History.xml';
30623139
30633140 if FileExists( fileName ) then begin
30643141 try
3065- XMLDoc := IXMLDocument.Create;
3142+ XMLDoc := IXMLDocument.Create;
30663143 //XMLDoc := LoadXMLDocument(FileName);
3067- LoadXMLDocument(FileName, XMLDoc);
3144+ LoadXMLDocument(FileName, XMLDoc);
30683145 try
30693146 XMLNode := XMLDoc.DocumentElement;
30703147
@@ -3077,9 +3154,9 @@ begin
30773154 s := Trim(HistoryNode.Attributes['url']);
30783155 if s <> '' then begin
30793156 favItem := TFavoriteThreadItem.Create(
3080- s, HistoryNode.Attributes[ 'title' ] );
3157+ s, MojuUtils.UnSanitize(HistoryNode.Attributes[ 'title' ]) );
30813158 if not AddHistory( favItem ) then
3082- favItem.Free;
3159+ favItem.Free;
30833160 end;
30843161 //end;
30853162 end;
@@ -3091,6 +3168,10 @@ begin
30913168 except
30923169 end;
30933170 end;
3171+{$IFDEF DEBUG}
3172+ rt := GetTickCount - st;
3173+ Writeln('Runtime(Load Histroy) : ' + IntToStr(rt) + ' ms');
3174+{$ENDIF}
30943175
30953176 end;
30963177
@@ -3338,7 +3419,6 @@ begin
33383419 end else begin
33393420 if Item <> FActiveList then begin
33403421 ActiveListColumnSave;
3341-
33423422 if (Item is TBBS) or (Item is TCategory) then begin
33433423 ListView.Columns.Clear;
33443424 SetActiveList( Item );
@@ -3352,6 +3432,7 @@ begin
33523432 Screen.Cursor := crDefault;
33533433 end;
33543434 end;
3435+ Sort.SetSortDate(Now());
33553436 SetActiveList( Item );
33563437 end;
33573438 end;
@@ -3560,7 +3641,6 @@ begin
35603641 FTabHintIndex := -1;
35613642 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
35623643 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3563- BrowserTab.Tabs.BeginUpdate;
35643644 try
35653645 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
35663646 doc := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser.Document;
@@ -3576,15 +3656,25 @@ begin
35763656 if j <> -1 then
35773657 FBrowsers.Move(j, BROWSER_COUNT - 1);
35783658 end;
3579- TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
3580- BrowserTab.Tabs.Delete(i);
3581- if idx > i then begin
3582- BrowserTab.TabIndex := idx - 1;
3583- end else begin
3584- if BrowserTab.Tabs.Count -1 >= idx then
3585- BrowserTab.TabIndex := idx
3586- else
3587- BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3659+ BrowserTab.Tabs.BeginUpdate;
3660+ try
3661+ TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
3662+ if ( BrowserTab.Tabs.Count - 1 = i ) and
3663+ ( BrowserTab.TabRect(i).Left
3664+ <= BrowserTab.DisplayRect.Left ) then begin
3665+ BrowserTab.ScrollTabs(-1);
3666+ end;
3667+ BrowserTab.Tabs.Delete(i);
3668+ if idx > i then begin
3669+ BrowserTab.TabIndex := idx - 1;
3670+ end else begin
3671+ if BrowserTab.Tabs.Count -1 >= idx then
3672+ BrowserTab.TabIndex := idx
3673+ else
3674+ BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3675+ end;
3676+ finally
3677+ BrowserTab.Tabs.EndUpdate;
35883678 end;
35893679 if BrowserTab.Tabs.Count = 0 then begin
35903680 BrowserNullTab.Thread := nil;
@@ -3604,7 +3694,6 @@ begin
36043694 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
36053695 FBrowsers.Move(BROWSER_COUNT - 1, 0);
36063696 end;
3607- BrowserTab.Tabs.EndUpdate;
36083697 if( FActiveContent = nil) then
36093698 BrowserTab.OnChange(nil);
36103699 Exit;
@@ -3620,7 +3709,6 @@ begin
36203709 FTabHintIndex := -1;
36213710 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
36223711 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3623- BrowserTab.Tabs.BeginUpdate;
36243712 try
36253713 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
36263714 doc := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser.Document;
@@ -3637,15 +3725,25 @@ begin
36373725 if j <> -1 then
36383726 FBrowsers.Move(j, BROWSER_COUNT - 1);
36393727 end;
3640- TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
3641- BrowserTab.Tabs.Delete(i);
3642- if idx > i then begin
3643- BrowserTab.TabIndex := idx - 1;
3644- end else begin
3645- if BrowserTab.Tabs.Count -1 >= idx then
3646- BrowserTab.TabIndex := idx
3647- else
3648- BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3728+ BrowserTab.Tabs.BeginUpdate;
3729+ try
3730+ TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
3731+ if ( BrowserTab.Tabs.Count - 1 = i ) and
3732+ ( BrowserTab.TabRect(i).Left
3733+ <= BrowserTab.DisplayRect.Left ) then begin
3734+ BrowserTab.ScrollTabs(-1);
3735+ end;
3736+ BrowserTab.Tabs.Delete(i);
3737+ if idx > i then begin
3738+ BrowserTab.TabIndex := idx - 1;
3739+ end else begin
3740+ if BrowserTab.Tabs.Count -1 >= idx then
3741+ BrowserTab.TabIndex := idx
3742+ else
3743+ BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3744+ end;
3745+ finally
3746+ BrowserTab.Tabs.EndUpdate;
36493747 end;
36503748 if(BrowserTab.TabIndex <> -1) and
36513749 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
@@ -3663,7 +3761,6 @@ begin
36633761 FBrowsers.Move(BROWSER_COUNT - 1, 0);
36643762 end;
36653763
3666- BrowserTab.Tabs.EndUpdate;
36673764 if( FActiveContent = nil) then
36683765 BrowserTab.OnChange(nil);
36693766 Exit;
@@ -3927,52 +4024,53 @@ var
39274024 i, j: Integer;
39284025 idx: Integer;
39294026 begin
4027+ BrowserTab.Tabs.BeginUpdate;
4028+ try
4029+ if not BrowserTab.Dragging then begin
4030+ FTabHintIndex := -1;
4031+ BrowserTab.Hint := '';
4032+ idx := BrowserTab.TabIndex;
4033+ if idx = -1 then begin
4034+ SetContent(BrowserNullTab);
4035+
4036+ end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
4037+ if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
4038+ j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
4039+ if j <> -1 then
4040+ FBrowsers.Move(j ,0);
4041+ end else begin
4042+ if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
4043+ (FActiveContent.Browser <> BrowserNullTab.Browser) and
4044+ (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
4045+ FBrowsers.Move(BROWSER_COUNT - 1, 0);
39304046
3931- if not BrowserTab.Dragging then begin
3932- FTabHintIndex := -1;
3933- BrowserTab.Hint := '';
3934- idx := BrowserTab.TabIndex;
3935- if idx = -1 then begin
3936- SetContent(BrowserNullTab);
3937-
3938- end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
3939- if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
3940- j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
3941- if j <> -1 then
3942- FBrowsers.Move(j ,0);
3943- end else begin
3944- if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
3945- (FActiveContent.Browser <> BrowserNullTab.Browser) and
3946- (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
3947- FBrowsers.Move(BROWSER_COUNT - 1, 0);
3948-
3949- for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3950- if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
3951- ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
3952- break;
4047+ for i := 0 to BrowserTab.Tabs.Count - 1 do begin
4048+ if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
4049+ ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
4050+ break;
4051+ end;
39534052 end;
4053+ TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
4054+ TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
4055+ FBrowsers.Move(BROWSER_COUNT - 1, 0);
39544056 end;
3955- TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3956- TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
3957- FBrowsers.Move(BROWSER_COUNT - 1, 0);
3958- end;
3959- MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
3960- TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
3961- SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
3962-
3963- if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
3964- AddressComboBox.Text := GetActiveContent.URL;
4057+ MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
4058+ TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
4059+ SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
39654060
3966- if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
3967- (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
3968- then
3969- else
3970- GikoDM.SetFocusForBrowserAction.Execute;
4061+ if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
4062+ AddressComboBox.Text := GetActiveContent.URL;
39714063
4064+ if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
4065+ (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
4066+ then
4067+ else
4068+ GikoDM.SetFocusForBrowserAction.Execute;
4069+ end;
39724070 end;
3973-
4071+ finally
4072+ BrowserTab.Tabs.EndUpdate;
39744073 end;
3975-
39764074 end;
39774075
39784076
@@ -4001,54 +4099,51 @@ end;
40014099
40024100 procedure TGikoForm.SetBrowserTabState;
40034101 var
4004-// i: Integer;
40054102 CoolBand: TCoolBand;
40064103 begin
40074104 BrowserBottomPanel.AutoSize := False;
40084105 if GikoSys.Setting.BrowserTabVisible then begin
4009- if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
4010- BrowserTab.Style := tsTabs;
4011- if GikoSys.Setting.BrowserTabPosition = gtpTop then
4012- BrowserTab.TabPosition := tpTop
4013- else
4014- BrowserTab.TabPosition := tpBottom;
4015- end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
4016- BrowserTab.TabPosition := tpTop;
4017- BrowserTab.Style := tsButtons;
4018- end else begin
4019- BrowserTab.TabPosition := tpTop;
4020- BrowserTab.Style := tsFlatButtons
4021- end;
4022-
4023- if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
4024- BrowserTab.Parent := BrowserTabToolBar;
4025- BrowserBottomPanel.Hide;
4026- CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4027- if CoolBand <> nil then
4028- CoolBand.Visible := True;
4029-// BrowserTab.Parent := BrowserTopPanel;
4030-// BrowserTab.Parent := BrowserCoolBar;
4031-// BrowserTab.Top := 26;
4032-// BrowserTopPanel.Height := 44;
4106+ BrowserTab.Hide;
4107+ BrowserTab.Tabs.BeginUpdate;
4108+ try
4109+ if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
4110+ BrowserTab.Style := tsTabs;
4111+ if GikoSys.Setting.BrowserTabPosition = gtpTop then
4112+ BrowserTab.TabPosition := tpTop
4113+ else
4114+ BrowserTab.TabPosition := tpBottom;
4115+ end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
4116+ BrowserTab.TabPosition := tpTop;
4117+ BrowserTab.Style := tsButtons;
4118+ end else begin
4119+ BrowserTab.TabPosition := tpTop;
4120+ BrowserTab.Style := tsFlatButtons
4121+ end;
40334122
4034- end else begin
4035- BrowserTab.Parent := BrowserBottomPanel;
4036- BrowserTab.Top := 0;
4037- BrowserTab.Left := 0;
4038- BrowserBottomPanel.Show;
4039- CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4040- if CoolBand <> nil then
4041- CoolBand.Visible := False;
4042-// BrowserTopPanel.Height := 26;
4043- end;
4044- BrowserTab.Show;
4123+ if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
4124+ BrowserTab.Parent := BrowserTabToolBar;
4125+ BrowserBottomPanel.Hide;
4126+ CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4127+ if CoolBand <> nil then
4128+ CoolBand.Visible := True;
4129+ end else begin
4130+ BrowserTab.Parent := BrowserBottomPanel;
4131+ BrowserTab.Top := 0;
4132+ BrowserTab.Left := 0;
4133+ BrowserBottomPanel.Show;
4134+ CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4135+ if CoolBand <> nil then
4136+ CoolBand.Visible := False;
4137+ end;
4138+ finally
4139+ BrowserTab.Tabs.EndUpdate;
4140+ BrowserTab.Show;
4141+ end;
40454142 end else begin
40464143 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
40474144 if CoolBand <> nil then
40484145 CoolBand.Visible := False;
40494146 BrowserBottomPanel.Visible := False;
4050-// BrowserTab.Visible := False;
4051-// BrowserTopPanel.Height := 26;
40524147 GikoDM.AllTabCloseAction.Execute;
40534148 end;
40544149 end;
@@ -4118,7 +4213,6 @@ var
41184213 doc : Variant;
41194214 threadItem : TThreadItem;
41204215 begin
4121-// AddMessageList('DocumentComplete', nil, gmiWhat);
41224216 if TObject(Sender) is TWebBrowser then begin
41234217 BrowserRecord := nil;
41244218 if TWebBrowser(Sender) <> Browser then begin
@@ -4150,23 +4244,24 @@ begin
41504244 FEvent := nil;
41514245 end;
41524246 end;
4153-
4247+
41544248 end;
41554249
41564250 if (BrowserRecord <> nil) and
41574251 Assigned( BrowserRecord.Thread ) then begin
41584252 threadItem := BrowserRecord.Thread;
41594253
4160- if (BrowserRecord <> nil) and (Length( BrowserRecord.Movement ) > 0) then begin
4254+ if (threadItem.JumpAddress > 0) then begin
41614255 if threadItem.UnRead then begin
41624256 threadItem.UnRead := False;
41634257 TreeView.Refresh;
4164- ListView.Refresh;
4258+ RefreshListView(threadItem);
41654259 end;
41664260 // ƒXƒNƒ[ƒ‹æ‚ªŽæ“¾ŠO‚̃ŒƒX‚ÌŽž‚͏I’[‚Ɉړ®
4167- if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4168- BrowserRecord.Move(BrowserRecord.Movement);
4169- BrowserRecord.Movement := '';
4261+ //if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4262+ if (threadItem.JumpAddress <= BrowserRecord.Thread.Count) then begin
4263+ BrowserRecord.Move(IntToStr(threadItem.JumpAddress));
4264+ threadItem.JumpAddress := 0;
41704265 end else begin
41714266 BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
41724267 end;
@@ -4175,7 +4270,7 @@ begin
41754270 threadItem.UnRead := False;
41764271 TreeView.Refresh;
41774272 BrowserRecord.Move('new');
4178- ListView.Refresh;
4273+ RefreshListView(threadItem);
41794274 end else if threadItem.ScrollTop <> 0 then begin
41804275 try
41814276 doc := Idispatch( OleVariant( BrowserRecord.Browser.ControlInterface ).Document ) as IHTMLDocument2;
@@ -4187,6 +4282,7 @@ begin
41874282 end;
41884283 end;
41894284 end;
4285+ LockWindowUpdate(0);
41904286 end;
41914287
41924288 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
@@ -4495,6 +4591,42 @@ begin
44954591 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
44964592
44974593 end;
4594+//! Žw’肳‚ꂽƒXƒŒƒbƒh‚ðŠJ‚­(ƒƒO‚ª–³‚¢‚Æ‚« or Žw’èJUMP‚Ü‚Å‘«‚è‚È‚¢‚Æ‚«‚ÍDL‚·‚é)
4595+procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String);
4596+var
4597+ stRes, edRes : Int64;
4598+ browserRec : TBrowserRecord;
4599+ threadNumber : String;
4600+ doc : Variant;
4601+begin
4602+ stRes := 0;
4603+ edRes := 0;
4604+ Thread.JumpAddress := 0;
4605+ // ƒ^ƒu‚𐶐¬
4606+ browserRec := InsertBrowserTab(Thread);
4607+ if (browserRec <> nil) then begin
4608+ // JUMP‚·‚ׂ«ƒŒƒX”ԍ†‚ª‚ ‚é‚©ƒ`ƒFƒbƒN‚·‚é
4609+ threadNumber := ChangeFileExt(Thread.FileName, '');
4610+ GikoSys.GetPopupResNumber( URL, stRes, edRes );
4611+ // ƒXƒŒ‚̔ԍ†‚ðƒŒƒX”Ô‚ÆŒë‚Á‚Ä”FŽ¯‚µ‚Ä‚¢‚é‚Ì‚ðƒNƒŠƒA
4612+ if (StrToInt(threadNumber) = stRes) then begin
4613+ if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL))
4614+ and (Pos('&st=' + threadNumber , URL) = 0) then begin
4615+ stRes := 0;
4616+ end;
4617+ end;
4618+ if ( stRes > 0 ) then begin
4619+ Thread.JumpAddress := stRes;
4620+ end;
4621+ // ƒƒO‚ðŽ‚Á‚Ä‚¢‚È‚¢‚© JUMP‚·‚ׂ«ƒŒƒX”ԍ†‚܂Ŏ擾‚µ‚Ä‚¢‚È‚¢‚Æ‚«‚ÍDL‚·‚é
4622+ if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin
4623+ DownloadContent(Thread);
4624+ end else if (not browserRec.Repaint) and (stRes > 0) then begin
4625+ browserRec.Move(IntToStr(stRes));
4626+ Thread.JumpAddress := 0;
4627+ end;
4628+ end;
4629+end;
44984630
44994631 procedure TGikoForm.MoveToURL(const inURL: string);
45004632 var
@@ -4507,13 +4639,8 @@ var
45074639 i, bi : Integer;
45084640 boardURL : string;
45094641 tmpThread : TThreadItem;
4510-// category : TCategory;
4511-// categoryNode : TTreeNode;
4512-// boardNode : TTreeNode;
45134642 shiftDown : Boolean;
45144643 ctrlDown : Boolean;
4515- stRes, edRes : Int64;
4516- browserRec : TBrowserRecord;
45174644 begin
45184645
45194646 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
@@ -4569,30 +4696,11 @@ begin
45694696 if TBoard(ActiveList) = Board then
45704697 ListView.Items.Count := ListView.Items.Count + 1;
45714698 end;
4572- GikoSys.GetPopupResNumber( inURL, stRes, edRes );
4573- browserRec := InsertBrowserTab( ThreadItem );
4574- if (browserRec <> nil) and (stRes > 0) then
4575- browserRec.Movement := IntToStr( stRes );
4576- DownloadContent( ThreadItem );
4577- Exit;
45784699 end else begin
45794700 tmpThread.Free;
4580- GikoSys.GetPopupResNumber( inURL, stRes, edRes );
4581- browserRec := InsertBrowserTab( ThreadItem );
4582- if ThreadItem.IsLogFile then begin
4583- if (browserRec <> nil) and (stRes > 0) then begin
4584- browserRec.Movement := IntToStr( stRes );
4585- if (stRes > ThreadItem.Count) then begin
4586- DownloadContent( ThreadItem );
4587- end;
4588- end;
4589- end else begin
4590- if (browserRec <> nil) and (stRes > 0) then
4591- browserRec.Movement := IntToStr( stRes );
4592- DownloadContent( ThreadItem );
4593- end;
4594- Exit;
45954701 end;
4702+ OpenThreadItem(ThreadItem, inURL);
4703+ Exit;
45964704 end;
45974705 end;
45984706
@@ -4619,15 +4727,6 @@ begin
46194727 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
46204728 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
46214729 Board := BBSsFindBoardFromURL( boardURL );
4622- //if Board = nil then
4623- // Board := BBSsFindBoardFromBBSID( BBSID );
4624- { ‚±‚Ì•”•ª‚àBBS‚“FindBoardFromURL‚ÉŽ‚½‚¹‚½@20050523
4625- if Board = nil then begin
4626- // ¦ì‚Á‚Ä‚à’ljÁ‚·‚é‚Æ‚±‚낪–³‚¢‚Ì‚ÅŒƒ‚µ‚­•Û—¯
4627- //@‰ß‹ŽƒƒO‘qŒÉ‚©‚çAƒ_ƒEƒ\‚µ‚½ƒXƒŒ‚ª”­Œ©‚Å‚«‚È‚¢‚Ì‚Å‚±‚±‚Å’T‚·‚悤‚É‚·‚é (2004/01/22)
4628- Board := BBSs[ 0 ].FindBBSID( BBSID );
4629- end;
4630- }
46314730 if Board = nil then begin
46324731 // “ü‚é‚ׂ«”‚ªŒ©‚‚©‚ç‚È‚©‚Á‚½‚̂ŁA•’ʂ̃uƒ‰ƒEƒU‚ÅŠJ‚­
46334732 GikoSys.OpenBrowser(inURL, gbtUserApp);
@@ -4652,55 +4751,26 @@ begin
46524751 if ThreadItem = nil then begin
46534752 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
46544753 end;
4655- if ThreadItem = nil then begin
4656- //shift -> Ý’èƒuƒ‰ƒEƒUi–³‚¯‚ê‚ÎIEj
4657- //ctrl -> IE
4658- {shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4659- ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4660- if shiftDown then
4661- GikoSys.OpenBrowser(URL1, gbtUserApp)
4662- else if ctrlDown then
4663- GikoSys.OpenBrowser(URL1, gbtIE)
4664- else begin
4665- }
4666- ThreadItem := TThreadItem.Create( nil, Board, URL );
4667- ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4668- if AnsiPos(Host, Board.URL) = 0 then
4669- ThreadItem.DownloadHost := Host
4670- else
4671- ThreadItem.DownloadHost := '';
4672- Board.Insert(0, ThreadItem);
4673- if ActiveList is TBoard then begin
4674- if TBoard(ActiveList) = Board then
4675- ListView.Items.Count := ListView.Items.Count + 1;
4676- end;
4677- GikoSys.GetPopupResNumber( inURL, stRes, edRes );
4678- browserRec := InsertBrowserTab(ThreadItem);
4679- if (browserRec <> nil) and (stRes > 0) then
4680- browserRec.Movement := IntToStr( stRes );
4681- DownloadContent(ThreadItem);
4682- {end;}
4683- end else begin
4684- if ThreadItem.IsLogFile then begin
4685- GikoSys.GetPopupResNumber( inURL, stRes, edRes );
4686- browserRec := InsertBrowserTab(ThreadItem);
4687- if (browserRec <> nil) and (stRes > 0) then begin
4688- browserRec.Movement := IntToStr( stRes );
4689- if (stRes > ThreadItem.Count) then begin
4690- DownloadContent(ThreadItem);
4691- end;
4754+ try
4755+ // ƒXƒŒƒbƒhƒAƒCƒeƒ€‚ª‚È‚¢‚Ȃ琶¬‚·‚éB
4756+ if ThreadItem = nil then begin
4757+ ThreadItem := TThreadItem.Create( nil, Board, URL );
4758+ ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4759+ Board.Insert(0, ThreadItem);
4760+ if ActiveList is TBoard then begin
4761+ if TBoard(ActiveList) = Board then
4762+ ListView.Items.Count := ListView.Items.Count + 1;
46924763 end;
4693- end else begin
4764+ end;
4765+ // ƒƒO‚È‚µƒXƒŒƒbƒh‚Ì‚Æ‚«‚́AƒzƒXƒg–¼‚̃`ƒFƒbƒN‚ð‚·‚é
4766+ if not ThreadItem.IsLogFile then begin
46944767 if AnsiPos(Host, Board.URL) = 0 then
46954768 ThreadItem.DownloadHost := Host
46964769 else
46974770 ThreadItem.DownloadHost := '';
4698- GikoSys.GetPopupResNumber( inURL, stRes, edRes );
4699- browserRec := InsertBrowserTab(ThreadItem);
4700- if (browserRec <> nil) and (stRes > 0) then
4701- browserRec.Movement := IntToStr( stRes );
4702- DownloadContent(ThreadItem);
47034771 end;
4772+ OpenThreadItem(ThreadItem, inURL);
4773+ except
47044774 end;
47054775 end else begin
47064776 Board := BBSsFindBoardFromURL( inURL );
@@ -4710,7 +4780,7 @@ begin
47104780 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
47114781 ShowBBSTree( Board.ParentCategory.ParenTBBS );
47124782 SelectTreeNode( Board, True );
4713- end;
4783+ end;
47144784 end;
47154785 end;
47164786
@@ -6613,6 +6683,7 @@ begin
66136683 Screen.Cursor := crDefault;
66146684 end;
66156685 end;
6686+ Sort.SetSortDate(Now());
66166687 SetActiveList(Node.data);
66176688 end;
66186689
@@ -6687,7 +6758,8 @@ begin
66876758 (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
66886759 //ƒ}ƒEƒX‚ªnode‚̏ã‚É‚¢‚é‚©
66896760 rect := FavoriteTreeView.Selected.DisplayRect(true);
6690- if ((rect.Left <= X) and (rect.Right >= X)) and
6761+ // ƒAƒCƒRƒ“•ª¶‚É‚¸‚ç‚·
6762+ if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and
66916763 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
66926764 if ssDouble in Shift then begin
66936765 FClickNode := FavoriteTreeView.Selected;
@@ -7580,61 +7652,6 @@ begin
75807652 MsgBox(Handle, s, 'ˆ—‚³‚ê‚È‚©‚Á‚½—áŠO', MB_OK or MB_ICONSTOP);
75817653 end;
75827654 // *************************************************************************
7583-//! ƒAƒNƒVƒ‡ƒ“‚̃`ƒFƒbƒNó‘Ԃ̏‰Šú‰» Form‚ÌCreate‚ŌĂяo‚µ‚Ä‚à”½‰f‚µ‚È‚¢
7584-// *************************************************************************
7585-procedure TGikoForm.InitActionChecked();
7586-begin
7587- //ƒƒOƒCƒ“ó‘Ô‚ðÄÝ’è
7588- GikoDM.LoginAction.Checked := GikoDM.LoginAction.Checked;
7589- //ƒ~ƒ…[ƒg‚̏ó‘Ô‚ðÝ’è
7590- GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
7591- //‰æ–Ê‚Ì•ªŠ„‚̏ó‘Ô‚ðÄÝ’è
7592- GikoDM.ArrangeAction.Checked := GikoDM.ArrangeAction.Checked;
7593-
7594- //ƒXƒŒ‘S•”•\Ž¦ƒ{ƒ^ƒ“‚ð‰Ÿ‚³‚ꂽó‘Ô‚É‚·‚é
7595- GikoDM.AllItemAction.Checked := True;
7596- GikoDM.AllResAction.Checked := True;
7597-
7598- // ƒŒƒX•\Ž¦”͈Í
7599- FResRangeMenuSelect := GikoSys.ResRange;
7600- case GikoSys.ResRange of
7601- Ord( grrAll ):
7602- begin
7603- GikoDM.AllResAction.Execute;
7604- end;
7605- Ord( grrSelect ):
7606- begin
7607- SelectComboBox.Text := SelectComboBox.Items[ 1 ];
7608- GikoDM.SelectResAction.Checked := True;
7609- end;
7610- else
7611- case FResRangeMenuSelect of
7612- Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
7613- Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
7614- 100: GikoDM.OnlyAHundredResAction.Checked := True;
7615- end;
7616- end;
7617-
7618- // ƒXƒŒƒbƒhˆê——•\Ž¦”͈Í
7619- case GikoSys.Setting.ThreadRange of
7620- gtrAll:
7621- begin
7622- GikoDM.AllItemAction.Checked := True;
7623- ViewType := gvtAll;
7624- end;
7625- gtrLog:
7626- begin
7627- GikoDM.LogItemAction.Checked := True;
7628- ViewType := gvtLog;
7629- end;
7630- gtrNew:
7631- begin
7632- GikoDM.NewItemAction.Checked := True;
7633- ViewType := gvtNew;
7634- end;
7635- end;
7636-end;
7637-// *************************************************************************
76387655 //! ƒ_ƒEƒ“ƒ[ƒhƒRƒ“ƒgƒ[ƒ‹ƒXƒŒƒbƒh‚̐¶¬
76397656 // *************************************************************************
76407657 procedure TGikoForm.CreateControlThread();
@@ -7668,6 +7685,7 @@ begin
76687685 TOleControl(newBrowser).Align := alNone;
76697686 TOleControl(newBrowser).Left := 0;
76707687 TOleControl(newBrowser).Top := 0;
7688+ newBrowser.RegisterAsDropTarget := False;
76717689 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
76727690 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
76737691 newBrowser.OnEnter := BrowserEnter;
@@ -7755,9 +7773,10 @@ begin
77557773 (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
77567774 //ƒ}ƒEƒX‚ªnode‚̏ã‚É‚¢‚é‚©
77577775 rect := TreeView.Selected.DisplayRect(true);
7758- if ((rect.Left <= X) and (rect.Right >= X)) and
7776+ // ƒAƒCƒRƒ“•ª‚¾‚¯¶‚É‚¸‚ç‚·
7777+ if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and
77597778 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7760- // ƒNƒŠƒbƒN‚ƃ_ƒuƒ‹ƒNƒŠƒbƒN‚ðƒRƒR‚Å”»’è
7779+ // ƒNƒŠƒbƒN‚ƃ_ƒuƒ‹ƒNƒŠƒbƒN‚ðƒRƒR‚Å”»’è
77617780 if ssDouble in Shift then begin
77627781 TreeDoubleClick( TreeView.Selected );
77637782 end else begin
@@ -7768,6 +7787,58 @@ begin
77687787 end;
77697788 end;
77707789 end;
7790+//! ActionList‚ÌGroupIndex‚Ì•Û‘¶
7791+procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
7792+var
7793+ i: Integer;
7794+begin
7795+ if ActionList <> nil then begin
7796+ SetLength(FActionListGroupIndexes, ActionList.ActionCount);
7797+
7798+ for i := 0 to ActionList.ActionCount - 1 do begin
7799+ try
7800+ FActionListGroupIndexes[i] :=
7801+ TCustomAction(ActionList.Actions[i]).GroupIndex;
7802+ TCustomAction(ActionList.Actions[i]).GroupIndex
7803+ := 0;
7804+ except
7805+ ;//Cast‚Å‚«‚È‚¢‚Æ‚«‘΍ô
7806+ end;
7807+ end;
7808+
7809+ end;
7810+end;
7811+//! ActionList‚ÌGroupIndex‚̐ݒè
7812+procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
7813+var
7814+ i: Integer;
7815+begin
7816+ if ActionList <> nil then begin
7817+ if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
7818+ for i := 0 to ActionList.ActionCount - 1 do begin
7819+ try
7820+ TCustomAction(ActionList.Actions[i]).GroupIndex
7821+ := FActionListGroupIndexes[i];
7822+ except
7823+ ;//Cast‚Å‚«‚È‚¢‚Æ‚«‘΍ô
7824+ end;
7825+ end;
7826+ end;
7827+ end;
7828+end;
7829+//! ‚±‚̃ŒƒX‚ÌURLŽæ“¾
7830+procedure TGikoForm.GetResURLMenuClick(Sender: TObject);
7831+begin
7832+;
7833+end;
7834+//! ListViewiƒXƒŒƒbƒhˆê——j‚ðXV‚·‚é
7835+procedure TGikoForm.RefreshListView(Thread: TThreadItem);
7836+begin
7837+ //Thread‚̔‚ƕ\Ž¦‚µ‚Ä‚¢‚锂ª“¯‚¶‚È‚ç•`‰æ‚ðXV‚·‚é
7838+ if (FActiveList is TBoard) and (TBoard(ActiveList) = Thread.ParentBoard) then begin
7839+ ListView.Refresh;
7840+ end;
7841+end;
77717842
77727843 initialization
77737844 OleInitialize(nil);
--- a/GikoDataModule.dfm
+++ b/GikoDataModule.dfm
@@ -37,7 +37,7 @@ object GikoDM: TGikoDM
3737 end
3838 object NewBoardAction: TAction
3939 Category = #12501#12449#12452#12523
40- Caption = #26495#26356#26032'(&B)...'
40+ Caption = #26495#19968#35239#26356#26032'(&B)...'
4141 Hint = #12508#12540#12489#26356#26032#12480#12452#12450#12525#12464#12434#34920#31034#12377#12427
4242 OnExecute = NewBoardActionExecute
4343 end
@@ -339,6 +339,26 @@ object GikoDM: TGikoDM
339339 OnExecute = NewItemActionExecute
340340 OnUpdate = DependActiveListTBoardActionUpdate
341341 end
342+ object ArchiveItemAction: TAction
343+ Category = #26495
344+ AutoCheck = True
345+ Caption = 'DAT'#33853#12385#12473#12524#12483#12489#34920#31034'(&D)'
346+ GroupIndex = 1
347+ Hint = 'DAT'#33853#12385#12473#12524#12483#12489#12398#12415#34920#31034#12377#12427
348+ ImageIndex = 55
349+ OnExecute = ArchiveItemActionExecute
350+ OnUpdate = DependActiveListTBoardActionUpdate
351+ end
352+ object LiveItemAction: TAction
353+ Category = #26495
354+ AutoCheck = True
355+ Caption = #29983#23384#12473#12524#12483#12489#34920#31034'(&S)'
356+ GroupIndex = 1
357+ Hint = #29983#23384#12375#12390#12356#12427#12473#12524#12483#12489#12398#12415#12434#34920#31034#12377#12427
358+ ImageIndex = 54
359+ OnExecute = LiveItemActionExecute
360+ OnUpdate = DependActiveListTBoardActionUpdate
361+ end
342362 object ThreadRangeAction: TAction
343363 Category = #26495
344364 AutoCheck = True
@@ -1201,12 +1221,25 @@ object GikoDM: TGikoDM
12011221 Hint = #12473#12524#12483#12489#12398#23481#37327#12434#12501#12449#12452#12523#12363#12425#20877#35336#31639#12377#12427
12021222 OnExecute = ThreadSizeCalcForFileActionExecute
12031223 end
1224+ object SetInputAssistAction: TAction
1225+ Category = #12484#12540#12523
1226+ Caption = #20837#21147#12450#12471#12473#12488#12398#35373#23450
1227+ Hint = #20837#21147#12450#12471#12473#12488#12398#35373#23450#12501#12457#12540#12512#12434#38283#12367
1228+ OnExecute = SetInputAssistActionExecute
1229+ end
1230+ object OpenFindDialogAction: TAction
1231+ Category = #12473#12524#12483#12489
1232+ Caption = #29694#22312#34920#31034#12375#12390#12356#12427#12473#12524#12483#12489#12398#26908#32034#12480#12452#12450#12525#12464#12434#34920#31034#12377#12427
1233+ Hint = #29694#22312#34920#31034#12375#12390#12356#12427#12473#12524#12483#12489#12398#26908#32034#12480#12452#12450#12525#12464#12434#34920#31034#12377#12427
1234+ ShortCut = 16454
1235+ OnExecute = OpenFindDialogActionExecute
1236+ end
12041237 end
12051238 object ToobarImageList: TImageList
12061239 Left = 44
12071240 Top = 60
12081241 Bitmap = {
1209- 494C010136003B00040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
1242+ 494C010138003B00040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
12101243 000000000000360000002800000040000000F0000000010020000000000000F0
12111244 0000000000000000000000000000000000000000000000000000000000000000
12121245 0000000000000000000000000000000000000000000000000000000000000000
@@ -1342,126 +1375,126 @@ object GikoDM: TGikoDM
13421375 0000000000000000000000000000000000000000000000000000000000000000
13431376 0000000000000000000000000000000000000000000000000000000000000000
13441377 0000000000000000000000000000000000000000000000000000000000000000
1345- 0000000000000000000000000000000000000000000000000000000000000000
1346- 0000000000000000000000000000000000000000000000000000000000000000
1378+ 0000000000004C4C4C000000000000000000000000000000000080808000FFFF
1379+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C0000000
13471380 0000000000000000000000000000000000000000000000000000000000000000
13481381 0000000000000000000000000000008484000000000084848400000000000000
13491382 0000000000000000000000000000000000000000000000000000000000000000
13501383 0000000000008484840084848400848484008484840084848400848484000000
1351- 0000000000000000000000000000000000000000000000000000000000000000
1352- 0000000000000000000000000000000000000000000000000000000000000000
1353- 0000000000000000000000000000000000000000000000000000000000000000
1354- 0000000000000000000000000000000000000000000000000000000000000000
1384+ 0000000000000000000000000000000000000000000000000000C0C0C000C0C0
1385+ C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000000000000000
1386+ 00004C4C4C004C4C4C004C4C4C0000000000000000000000000080808000FFFF
1387+ FF001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C00FFFFFF00C0C0C0000000
13551388 0000000000000000000000000000000000000000000000000000000000000000
13561389 000000000000000000000084840000000000C6C6C600C6C6C600848484000000
13571390 0000000000000000000084848400000000000000000000000000000000000000
13581391 000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484
1359- 8400000000000000000000000000000000000000000000000000000000000000
1360- 0000000000000000000000000000000000000000000000000000000000000000
1361- 0000000000000000000000000000000000000000000000000000000000000000
1362- 0000000000000000000000000000000000000000000000000000000000000000
1392+ 8400000000000000000000000000000000000000000000000000C0C0C000FFFF
1393+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C000000000000000
1394+ 0000000000004C4C4C000000000000000000000000000000000080808000FFFF
1395+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C0000000
13631396 0000000000000000000000000000000000000000000000000000000000000000
13641397 000000000000008484008484840084848400FFFFFF00FFFFFF00848484000000
13651398 0000000000008484840000000000000000000000000000000000000000008484
13661399 8400C6C6C6000000000000000000000000000000000000000000000000000000
1367- 0000848484000000000000000000000000000000000000000000000000000000
1368- 0000000000000000000000000000000000000000000000000000000000000000
1369- 0000000000000000000000000000000000000000000000000000000000000000
1370- 0000000000000000000000000000000000000000000000000000000000000000
1400+ 0000848484000000000000000000000000000000000000000000C0C0C000FFFF
1401+ FF00C0C0C000C0C0C000C0C0C000C0C0C000FFFFFF00C0C0C000000000000000
1402+ 0000000000004C4C4C000000000000000000000000000000000080808000FFFF
1403+ FF001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C00FFFFFF00C0C0C0000000
13711404 0000000000000000000000000000000000000000000000000000000000000000
13721405 00000084840000FFFF0000000000C6C6C600FFFFFF00FFFFFF00848484000000
13731406 000084848400000000000000000000000000000000000000000084848400C6C6
13741407 C600C6C6C6000000000000000000FFFFFF00FFFFFF00FFFFFF00C6C6C6000000
13751408 0000000000008484840000000000000000000000000000000000000000000000
13761409 0000000000000000000000000000000000000000000000000000000000000000
1377- 0000000000000000000000000000000000000000000000000000000000000000
1378- 0000000000000000000000000000000000000000000000000000000000000000
1410+ 000000000000000000000000000000000000000000000000000080808000FFFF
1411+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
13791412 0000000000000000000000000000000000000000000000000000000000000084
13801413 840000FFFF00FFFFFF0000000000C6C6C600FFFFFF00FFFFFF00848484000000
13811414 0000000000000000000000000000000000000000000084848400C6C6C600C6C6
13821415 C600C6C6C6000000000000000000FFFFFF00C6C6C600C6C6C600C6C6C6000000
1383- 000000000000C6C6C60084848400000000000000000000000000000000000000
1384- 0000000000000000000000000000000000000000000000000000000000000000
1385- 0000000000000000000000000000000000000000000000000000000000000000
1386- 0000000000000000000000000000000000000000000000000000000000000000
1416+ 000000000000C6C6C6008484840000000000000000000000000080808000C0C0
1417+ C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000000000000000
1418+ 000000000000000000000000000000000000000000000000000080808000FFFF
1419+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C000FFFFFF00808080000000
13871420 00000000000000000000000000000000000000000000008484008484840000FF
13881421 FF00FFFFFF0000FFFF000000000000000000FFFFFF00FFFFFF00848484000000
13891422 0000000000000000000000000000000000000000000084848400C6C6C600C6C6
13901423 C600C6C6C6000000000000000000FFFFFF00C6C6C600C6C6C600C6C6C6000000
1391- 000000000000C6C6C60084848400000000000000000000000000000000000000
1392- 0000000000000000000000000000000000000000000000000000000000000000
1393- 0000000000000000000000000000000000000000000000000000000000000000
1394- 0000000000000000000000000000000000000000000000000000000000000000
1424+ 000000000000C6C6C6008484840000000000000000000000000080808000FFFF
1425+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C000000000000000
1426+ 000000000000848484000000000000000000000000000000000080808000FFFF
1427+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C00080808000000000000000
13951428 0000000000000000000000000000000000000084840000FFFF00C6C6C600FFFF
13961429 FF0000FFFF00FFFFFF00000000008484840000000000FFFFFF00848484000000
13971430 0000848484008484840084848400848484000000000084848400C6C6C600C6C6
13981431 C600C6C6C6000000000000000000000000000000000000000000000000000000
1399- 0000C6C6C600C6C6C60084848400000000000000000000000000000000000000
1400- 0000000000000000000000000000000000000000000000000000000000000000
1401- 0000000000000000000000000000000000000000000000000000000000000000
1402- 0000000000000000000000000000000000000000000000000000000000000000
1432+ 0000C6C6C600C6C6C6008484840000000000000000000000000080808000FFFF
1433+ FF001C1C1C001C1C1C001C1C1C001C1C1C00FFFFFF00C0C0C000000000000000
1434+ 0000848484008484840084848400000000000000000000000000808080008080
1435+ 8000808080008080800080808000808080008080800000000000000000000000
14031436 0000000000000000000000000000000000000084840000FFFF00C6C6C60000FF
14041437 FF00FFFFFF0000FFFF0000000000C6C6C60000000000FFFFFF00848484000000
14051438 0000000000000000000000000000000000000000000084848400C6C6C600C6C6
14061439 C600C6C6C6000000000000000000FFFFFF00FFFFFF00FFFFFF0000000000C6C6
1407- C600C6C6C600C6C6C60084848400000000000000000000000000000000000000
1408- 0000000000000000000000000000000000000000000000000000000000000000
1409- 0000000000000000000000000000000000000000000000000000000000000000
1410- 0000000000000000000000000000000000000000000000000000000000000000
1440+ C600C6C6C600C6C6C6008484840000000000000000000000000080808000FFFF
1441+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C000000000000000
1442+ 0000000000008484840000000000000000000000000000000000000000000000
1443+ 000000000000E2E2E20000000000000000000000000000000000000000000000
14111444 00000000000000000000000000000000000000848400FFFFFF00C6C6C600FFFF
14121445 FF0000FFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00848484000000
14131446 0000000000000000000000000000000000000000000084848400C6C6C600C6C6
14141447 C600C6C6C6000000000000000000FFFFFF00C6C6C600C6C6C600000000000000
1415- 0000C6C6C600C6C6C60084848400000000000000000000000000000000000000
1416- 0000000000000000000000000000000000000000000000000000000000000000
1417- 0000000000000000000000000000000000000000000000000000000000000000
1448+ 0000C6C6C600C6C6C6008484840000000000000000000000000080808000FFFF
1449+ FF001C1C1C001C1C1C001C1C1C001C1C1C00FFFFFF00C0C0C000000000000000
14181450 0000000000000000000000000000000000000000000000000000000000000000
1451+ 000000000000E2E2E20000000000000000000000000000000000000000000000
14191452 00000000000000000000000000000000000000000000008484000084840000FF
14201453 FF00FFFFFF0000FFFF0000000000C6C6C600FFFFFF00FFFFFF00848484000000
14211454 0000848484000000000000000000000000000000000084848400C6C6C600C6C6
14221455 C600C6C6C6000000000000000000FFFFFF00C6C6C600C6C6C600000000000000
1423- 0000C6C6C600C6C6C60084848400000000000000000000000000000000000000
1424- 0000000000000000000000000000000000000000000000000000000000000000
1425- 0000000000000000000000000000000000000000000000000000000000000000
1456+ 0000C6C6C600C6C6C6008484840000000000000000000000000080808000FFFF
1457+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C000000000000000
14261458 0000000000000000000000000000000000000000000000000000000000000000
1459+ 000000000000E2E2E20000000000000000000000000000000000000000000000
14271460 0000000000000000000000000000000000000000000000000000000000000084
14281461 840000FFFF00FFFFFF0000000000C6C6C600FFFFFF00FFFFFF00848484000000
14291462 000000000000848484000000000000000000000000000000000084848400C6C6
14301463 C600C6C6C6000000000000000000FFFFFF00FFFFFF00FFFFFF00000000000000
1431- 0000C6C6C6008484840000000000000000000000000000000000000000000000
1432- 0000000000000000000000000000000000000000000000000000000000000000
1433- 0000000000000000000000000000000000000000000000000000000000000000
1434- 0000000000000000000000000000000000000000000000000000000000000000
1464+ 0000C6C6C600848484000000000000000000000000000000000080808000FFFF
1465+ FF001C1C1C001C1C1C001C1C1C001C1C1C00FFFFFF00C0C0C000000000000000
1466+ 0000000000004C4C4C0000000000000000000000000000000000000000000000
1467+ 000000000000E2E2E20000000000000000000000000000000000000000000000
14351468 0000000000000000000000000000000000000000000000000000000000000000
14361469 00000084840000FFFF008484840084848400C6C6C600FFFFFF00848484000000
14371470 0000000000000000000084848400000000000000000000000000000000008484
14381471 8400C6C6C600000000000000000000000000000000000000000000000000C6C6
1439- C600848484000000000000000000000000000000000000000000000000000000
1440- 0000000000000000000000000000000000000000000000000000000000000000
1441- 0000000000000000000000000000000000000000000000000000000000000000
1442- 0000000000000000000000000000000000000000000000000000000000000000
1472+ C60084848400000000000000000000000000000000000000000080808000FFFF
1473+ FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000
1474+ 0000000000004C4C4C000000000000000000000000000000000000000000E2E2
1475+ E200E2E2E200E2E2E200E2E2E200E2E2E2000000000000000000000000000000
14431476 0000000000000000000000000000000000000000000000000000000000000000
14441477 0000000000000084840000FFFF0000000000C6C6C600C6C6C600000000000000
14451478 0000000000000000000000000000000000000000000000000000000000000000
14461479 000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484
1447- 8400000000000000000000000000000000000000000000000000000000000000
1448- 0000000000000000000000000000000000000000000000000000000000000000
1449- 0000000000000000000000000000000000000000000000000000000000000000
1450- 0000000000000000000000000000000000000000000000000000000000000000
1480+ 840000000000000000000000000000000000000000000000000080808000FFFF
1481+ FF00FFFFFF00FFFFFF00FFFFFF00C0C0C000FFFFFF0080808000000000000000
1482+ 00004C4C4C004C4C4C004C4C4C00000000000000000000000000000000000000
1483+ 000000000000E2E2E20000000000000000000000000000000000000000000000
14511484 0000000000000000000000000000000000000000000000000000000000000000
14521485 0000000000000000000000848400848484000000000084848400000000000000
14531486 0000000000000000000000000000000000000000000000000000000000000000
14541487 0000000000008484840084848400848484008484840084848400848484000000
1488+ 000000000000000000000000000000000000000000000000000080808000FFFF
1489+ FF00FFFFFF00FFFFFF00FFFFFF00C0C0C0008080800000000000000000000000
1490+ 0000000000004C4C4C0000000000000000000000000000000000000000000000
1491+ 000000000000E2E2E20000000000000000000000000000000000000000000000
14551492 0000000000000000000000000000000000000000000000000000000000000000
14561493 0000000000000000000000000000000000000000000000000000000000000000
14571494 0000000000000000000000000000000000000000000000000000000000000000
14581495 0000000000000000000000000000000000000000000000000000000000000000
1459- 0000000000000000000000000000000000000000000000000000000000000000
1460- 0000000000000000000000000000000000000000000000000000000000000000
1461- 0000000000000000000000000000000000000000000000000000000000000000
1462- 0000000000000000000000000000000000000000000000000000000000000000
1463- 0000000000000000000000000000000000000000000000000000000000000000
1464- 0000000000000000000000000000000000000000000000000000000000000000
1496+ 0000000000000000000000000000000000000000000000000000808080008080
1497+ 8000808080008080800080808000808080000000000000000000000000000000
14651498 0000000000000000000000000000000000000000000000000000000000000000
14661499 0000000000000000000000000000000000000000000000000000000000000000
14671500 0000000000000000000000000000000000000000000000000000000000000000
@@ -3134,11 +3167,11 @@ object GikoDM: TGikoDM
31343167 0000000000000000000000000000000000000000000000000000000000000000
31353168 0000000000000000000000000000000000000000000000000000000000000000
31363169 0000000000000000000000000000000000000000000000000000000000000000
3137- 00000000000000000000000000000000FE7FFFFF00000000FC3FF81F00000000
3138- F81DF00F00000000F01BE00700000000E017C00300000000801F800100000000
3139- 001F8001000000000010800100000000001F800100000000001F800100000000
3140- 8017800100000000E01BC00300000000F01DE00700000000F83FF00F00000000
3141- FC3FF81F00000000FE7FFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFC003
3170+ 00000000000000000000000000000000FE7FFFFFC01BC00FFC3FF81FC011C00F
3171+ F81DF00FC01BC00FF01BE007C01BC00FE017C003C01FC00F801F8001C01FC01F
3172+ 001F8001C01BC03F00108001C011C07F001F8001C01BFBFF001F8001C01FFBFF
3173+ 80178001C01FFBFFE01BC003C01BFBFFF01DE007C01BE0FFF83FF00FC031FBFF
3174+ FC3FF81FC07BFBFFFE7FFFFFC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC003
31423175 FFFFFFFFFFFFC003FC01803FFC01C003FC01803C3C01C003FC01803C3C01C003
31433176 FC01803C3C01C003FC01803C3C01C003FC01803C3C01C003C00180000001C003
31443177 C00180000001C003C00180000001C003C00180000001C003FFFFFFFC3FFFC003
--- a/GikoDataModule.pas
+++ b/GikoDataModule.pas
@@ -11,7 +11,8 @@ uses
1111 SHDocVw_TLB,
1212 MSHTML_TLB,
1313 {$IFEND}
14- ComCtrls, BrowserRecord, Graphics, Messages, Setting, Dialogs;
14+ ComCtrls, BrowserRecord, Graphics, Messages, Setting, Dialogs,
15+ ActiveX;
1516
1617 const
1718 CAPTION_NAME: string = 'ƒMƒRƒiƒr';
@@ -212,6 +213,10 @@ type
212213 ToobarImageList: TImageList;
213214 SaveDialog: TSaveDialog;
214215 ThreadSizeCalcForFileAction: TAction;
216+ SetInputAssistAction: TAction;
217+ OpenFindDialogAction: TAction;
218+ ArchiveItemAction: TAction;
219+ LiveItemAction: TAction;
215220 procedure EditNGActionExecute(Sender: TObject);
216221 procedure ReloadActionExecute(Sender: TObject);
217222 procedure GoFowardActionExecute(Sender: TObject);
@@ -394,6 +399,10 @@ type
394399 procedure AllSelectActionExecute(Sender: TObject);
395400 procedure AllSelectActionUpdate(Sender: TObject);
396401 procedure ThreadSizeCalcForFileActionExecute(Sender: TObject);
402+ procedure SetInputAssistActionExecute(Sender: TObject);
403+ procedure OpenFindDialogActionExecute(Sender: TObject);
404+ procedure ArchiveItemActionExecute(Sender: TObject);
405+ procedure LiveItemActionExecute(Sender: TObject);
397406 private
398407 { Private éŒ¾ }
399408 procedure ClearResFilter;
@@ -406,6 +415,7 @@ type
406415 procedure SelectThreadSaveToFile(dat: Boolean);
407416 function GetSortProperties(List: TObject;var vSortOrder: Boolean): Boolean;
408417 procedure RecalcThreadSize(limit : Integer);
418+ procedure ClearSelectComboBox;
409419 public
410420 { Public éŒ¾ }
411421 procedure RepaintStatusBar;
@@ -434,7 +444,7 @@ uses
434444 ToolBarUtil, NewBoard, HTMLCreate, IndividualAbon,
435445 GikoBayesian, About, ShellAPI,
436446 RoundName, RoundData, Menus, ListViewUtils,
437- ThreadControl, GikoMessage;
447+ ThreadControl, GikoMessage, InputAssist;
438448
439449
440450 {$R *.dfm}
@@ -884,22 +894,16 @@ end;
884894 procedure TGikoDM.SetThreadAreaHorNormal;
885895 begin
886896 //’ʏí•\Ž¦‚É‚·‚é
887- if GikoForm.ActiveContent <> nil then
888- SendMessage(GikoForm.ActiveContent.Browser.Handle, WM_SETREDRAW, 0, 0); //•`‰æ’âŽ~
889897 GikoForm.ViewPanel.Width := GikoForm.BrowserSizeWidth;
890898 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
891899 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
892900 GikoSys.Setting.ListWidthState := glsNormal;
893- if GikoForm.ActiveContent <> nil then
894- SendMessage(GikoForm.ActiveContent.Browser.Handle, WM_SETREDRAW, 1, 0); //•`‰æ
895901 end;
896902 // *************************************************************************
897903 //! ƒXƒŒƒbƒh•\Ž¦ƒGƒŠƒAÅ‘å/Å¬•\Ž¦‚É‚·‚é ’)ListOrientation = gloHorizontal@
898904 // *************************************************************************
899905 procedure TGikoDM.SetThreadAreaHorizontal(gls : TGikoListState);
900906 begin
901- if GikoForm.ActiveContent <> nil then
902- SendMessage(GikoForm.ActiveContent.Browser.Handle, WM_SETREDRAW, 0, 0); //•`‰æ’âŽ~
903907 if GikoSys.Setting.ListWidthState = glsNormal then
904908 GikoForm.BrowserSizeWidth := GikoForm.ViewPanel.Width;
905909 //Å‘å•\Ž¦
@@ -914,8 +918,6 @@ begin
914918 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;
915919 GikoSys.Setting.ListWidthState := glsMin;
916920 end;
917- if GikoForm.ActiveContent <> nil then
918- SendMessage(GikoForm.ActiveContent.Browser.Handle, WM_SETREDRAW, 1, 0); //•`‰æ
919921 end;
920922 // *************************************************************************
921923 //! ƒXƒŒƒbƒh•\Ž¦ƒGƒŠƒA’ʏí•\Ž¦‚É‚·‚é ’)ListOrientation = gloVertical
@@ -923,22 +925,16 @@ end;
923925 procedure TGikoDM.SetThreadAreaVerNormal;
924926 begin
925927 //’ʏí•\Ž¦‚É‚·‚é
926- if GikoForm.ActiveContent <> nil then
927- SendMessage(GikoForm.ActiveContent.Browser.Handle, WM_SETREDRAW, 0, 0); //•`‰æ’âŽ~
928928 GikoForm.ViewPanel.Height := GikoForm.BrowserSizeHeight;
929929 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
930930 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
931931 GikoSys.Setting.ListHeightState := glsNormal;
932- if GikoForm.ActiveContent <> nil then
933- SendMessage(GikoForm.ActiveContent.Browser.Handle, WM_SETREDRAW, 1, 0); //•`‰æ
934932 end;
935933 // *************************************************************************
936934 //! ƒXƒŒƒbƒh•\Ž¦ƒGƒŠƒAÅ‘å/Å¬•\Ž¦‚É‚·‚é ’)ListOrientation = gloVertical
937935 // *************************************************************************
938936 procedure TGikoDM.SetThreadAreaVertical(gls : TGikoListState);
939937 begin
940- if GikoForm.ActiveContent <> nil then
941- SendMessage(GikoForm.ActiveContent.Browser.Handle, WM_SETREDRAW, 0, 0); //•`‰æ’âŽ~
942938 if GikoSys.Setting.ListHeightState = glsNormal then
943939 GikoForm.BrowserSizeHeight := GikoForm.ViewPanel.Height;
944940 if (gls = glsMin) then begin
@@ -952,8 +948,6 @@ begin
952948 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
953949 GikoSys.Setting.ListHeightState := glsMax;
954950 end;
955- if GikoForm.ActiveContent <> nil then
956- SendMessage(GikoForm.ActiveContent.Browser.Handle, WM_SETREDRAW, 1, 0); //•`‰æ
957951 end;
958952 // *************************************************************************
959953 //! ƒXƒŒƒbƒh•\Ž¦ƒGƒŠƒA‚ð‘å‚«‚­•\Ž¦‚·‚é
@@ -1062,7 +1056,6 @@ begin
10621056 if Item = nil then Exit;
10631057 Editor := TEditorForm.Create(GikoForm.GetMainForm);
10641058 Editor.SetThreadItem(Item);
1065- GikoSys.LoadKeySetting(Editor.ActionList, GikoSys.GetEditorKeyFileName);
10661059 Editor.Show;
10671060 Editor.BodyEdit.SetFocus;
10681061 end;
@@ -1563,7 +1556,7 @@ begin
15631556 try
15641557 if Dlg.ShowModal = mrOk then begin
15651558 GikoSys.SaveKeySetting(GikoFormActionList, Setting.KEY_SETTING_FILE_NAME);
1566- GikoSys.SaveKeySetting(Dlg.EditorForm.ActionList, Setting.KEY_SETTING_FILE_NAME);
1559+ GikoSys.SaveKeySetting(Dlg.EditorForm.ActionList, Setting.EKEY_SETTING_FILE_NAME);
15671560 GikoSys.Setting.Gestures.SaveGesture( GikoSys.Setting.GetGestureFileName );
15681561 end;
15691562
@@ -2227,7 +2220,6 @@ begin
22272220
22282221 Editor := TEditorForm.Create(GikoForm);
22292222 Editor.SetThreadItem(Item);
2230- GikoSys.LoadKeySetting(Editor.ActionList, GikoSys.GetEditorKeyFileName);
22312223 Editor.BodyEdit.Text := '>>' + IntToStr(Number) + #13#10;
22322224 Editor.Show;
22332225 Editor.BodyEdit.SetFocus;
@@ -2501,6 +2493,17 @@ begin
25012493 end;
25022494 end;
25032495 // *************************************************************************
2496+//! SelectComboBox‚Ì’l‚ðƒNƒŠƒA‚·‚é
2497+// *************************************************************************
2498+procedure TGikoDM.ClearSelectComboBox;
2499+begin
2500+ if GikoForm.SelectComboBoxPanel.Visible then begin
2501+ GikoForm.SelectComboBox.Text := SELECTCOMBOBOX_NAME;
2502+ GikoForm.SelectComboBox.Color := SELECTCOMBOBOX_COLOR;
2503+ GikoForm.ListView.SetFocus;
2504+ end;
2505+end;
2506+// *************************************************************************
25042507 //! ƒXƒŒƒbƒh‚ð‚·‚×‚Ä•\Ž¦‚·‚é
25052508 // *************************************************************************
25062509 procedure TGikoDM.AllItemActionExecute(Sender: TObject);
@@ -2513,11 +2516,7 @@ begin
25132516 // SelectComboBox ‚Ì—š—ð‚ðXV‚µ‚Ä‚¨‚­
25142517 GikoForm.ModifySelectList;
25152518 // SelectComboBox ‚Ì’l‚ðƒNƒŠƒA
2516- if GikoForm.SelectComboBoxPanel.Visible then begin
2517- GikoForm.SelectComboBox.Text := SELECTCOMBOBOX_NAME;
2518- GikoForm.SelectComboBox.Color := SELECTCOMBOBOX_COLOR;
2519- GikoForm.ListView.SetFocus;
2520- end;
2519+ ClearSelectComboBox;
25212520 except
25222521 end;
25232522 end;
@@ -2534,11 +2533,7 @@ begin
25342533 // SelectComboBox ‚Ì—š—ð‚ðXV‚µ‚Ä‚¨‚­
25352534 GikoForm.ModifySelectList;
25362535 // SelectComboBox ‚Ì’l‚ðƒNƒŠƒA
2537- if GikoForm.SelectComboBoxPanel.Visible then begin
2538- GikoForm.SelectComboBox.Text := SELECTCOMBOBOX_NAME;
2539- GikoForm.SelectComboBox.Color := SELECTCOMBOBOX_COLOR;
2540- GikoForm.ListView.SetFocus;
2541- end;
2536+ ClearSelectComboBox;
25422537 except
25432538 end;
25442539 end;
@@ -2556,15 +2551,46 @@ begin
25562551 // SelectComboBox ‚Ì—š—ð‚ðXV‚µ‚Ä‚¨‚­
25572552 GikoForm.ModifySelectList;
25582553 // SelectComboBox ‚Ì’l‚ðƒNƒŠƒA
2559- if GikoForm.SelectComboBoxPanel.Visible then begin
2560- GikoForm.SelectComboBox.Text := SELECTCOMBOBOX_NAME;
2561- GikoForm.SelectComboBox.Color := SELECTCOMBOBOX_COLOR;
2562- GikoForm.ListView.SetFocus;
2563- end;
2554+ ClearSelectComboBox;
25642555 except
25652556 end;
25662557 end;
25672558 // *************************************************************************
2559+//! DAT—Ž‚¿ƒXƒŒƒbƒh‚Ì‚Ý•\Ž¦‚·‚é
2560+// *************************************************************************
2561+procedure TGikoDM.ArchiveItemActionExecute(Sender: TObject);
2562+begin
2563+ try
2564+ if GikoForm.ViewType <> gvtArch then
2565+ GikoForm.SetListViewType(gvtArch);
2566+ GikoSys.Setting.ThreadRange := gtrArch;
2567+ ArchiveItemAction.Checked := True;
2568+ // SelectComboBox ‚Ì—š—ð‚ðXV‚µ‚Ä‚¨‚­
2569+ GikoForm.ModifySelectList;
2570+ // SelectComboBox ‚Ì’l‚ðƒNƒŠƒA
2571+ ClearSelectComboBox;
2572+ except
2573+ end;
2574+end;
2575+// *************************************************************************
2576+//! ¶‘¶ƒXƒŒƒbƒh‚Ì‚Ý•\Ž¦‚·‚é
2577+// *************************************************************************
2578+procedure TGikoDM.LiveItemActionExecute(Sender: TObject);
2579+begin
2580+ try
2581+ if GikoForm.ViewType <> gvtLive then
2582+ GikoForm.SetListViewType(gvtLive);
2583+ GikoSys.Setting.ThreadRange := gtrLive;
2584+ LiveItemAction.Checked := True;
2585+ // SelectComboBox ‚Ì—š—ð‚ðXV‚µ‚Ä‚¨‚­
2586+ GikoForm.ModifySelectList;
2587+ // SelectComboBox ‚Ì’l‚ðƒNƒŠƒA
2588+ ClearSelectComboBox;
2589+ except
2590+ end;
2591+end;
2592+
2593+// *************************************************************************
25682594 //! ƒXƒŒƒbƒh‚Ì•\Ž¦”͈͂ðÝ’è
25692595 // *************************************************************************
25702596 procedure TGikoDM.ThreadRangeActionExecute(Sender: TObject);
@@ -2573,6 +2599,8 @@ begin
25732599 gtrAll: AllItemAction.Execute;
25742600 gtrLog: LogItemAction.Execute;
25752601 gtrNew: NewItemAction.Execute;
2602+ gtrArch: ArchiveItemAction.Execute;
2603+ gtrLive: LiveItemAction.Execute;
25762604 end;
25772605 end;
25782606 // *************************************************************************
@@ -2781,6 +2809,7 @@ var
27812809 shiftDown: Boolean;
27822810 begin
27832811 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
2812+ GikoForm.ActiveListColumnSave;
27842813 if GikoForm.GetActiveList is TCategory then begin
27852814 List := TList.Create;
27862815 try
@@ -3782,6 +3811,54 @@ begin
37823811 GikoForm.ProgressBar.Position := 0;
37833812 ShowMessage('ŒvŽZI—¹‚µ‚Ü‚µ‚½B');
37843813 end;
3814+//! “ü—̓AƒVƒXƒg‚̐ݒèƒtƒH[ƒ€‚ðŒÄ‚яo‚·
3815+procedure TGikoDM.SetInputAssistActionExecute(Sender: TObject);
3816+var
3817+ form : TInputAssistForm;
3818+begin
3819+ form := TInputAssistForm.Create(GikoForm);
3820+ try
3821+ form.SetUpFromMain;
3822+ form.ShowModal;
3823+ finally
3824+ form.Release;
3825+ end;
3826+end;
3827+// WebBrowser‚ÌŒŸõƒ_ƒCƒAƒƒO‚ðŒÄ‚яo‚·
3828+procedure OpenFindDialog(Browser: TWebbrowser);
3829+const
3830+ CGID_WebBrowser: TGUID = '{ED016940-BD5B-11cf-BA4E-00C04FD70816}';
3831+ HTMLID_FIND = 1;
3832+var
3833+ CmdTarget : IOleCommandTarget;
3834+ vaIn, vaOut: OleVariant;
3835+ PtrGUID: PGUID;
3836+begin
3837+ if Browser.Document <> nil then begin
3838+ New(PtrGUID);
3839+ PtrGUID^ := CGID_WebBrowser;
3840+ try
3841+ Browser.Document.QueryInterface(IOleCommandTarget, CmdTarget);
3842+ if CmdTarget <> nil then begin
3843+ try
3844+ CmdTarget.Exec(PtrGUID, HTMLID_FIND, 0, vaIn, vaOut);
3845+ finally
3846+ CmdTarget._Release;
3847+ end;
3848+ end;
3849+ except
3850+ end;
3851+ Dispose(PtrGUID);
3852+ end;
3853+end;
3854+//! Œ»Ý•\Ž¦‚µ‚Ä‚¢‚éƒXƒŒƒbƒh‚ÌŒŸõƒ_ƒCƒAƒƒO‚ð•\Ž¦‚·‚é
3855+procedure TGikoDM.OpenFindDialogActionExecute(Sender: TObject);
3856+begin
3857+ if( GikoForm.ActiveContent <> nil) and (GikoForm.ActiveContent.Browser <> nil) then begin
3858+ OpenFindDialog(GikoForm.ActiveContent.Browser);
3859+ end;
3860+end;
3861+
37853862
37863863 end.
37873864
--- a/GikoSystem.pas
+++ b/GikoSystem.pas
@@ -152,6 +152,7 @@ type
152152
153153 function GetMainKeyFileName : String;
154154 function GetEditorKeyFileName: String;
155+ function GetInputAssistFileName: String;
155156 procedure ReadSubjectFile(Board: TBoard);
156157 procedure CreateThreadDat(Board: TBoard);
157158 procedure WriteThreadDat(Board: TBoard);
@@ -254,7 +255,7 @@ const
254255 ZERO_DATE: Integer = 25569;
255256 BETA_VERSION_NAME_E = 'beta';
256257 BETA_VERSION_NAME_J = 'ÊÞÀ';
257- BETA_VERSION = 51;
258+ BETA_VERSION = 52;
258259 BETA_VERSION_BUILD = ''; //!< debug”Å‚È‚Ç
259260 APP_NAME = 'gikoNavi';
260261 BE_PHP_URL = 'http://be.2ch.net/test/p.php?i=';
@@ -889,9 +890,9 @@ begin
889890 sl.Add(FOLDER_INDEX_VERSION);
890891
891892 // ƒXƒŒ”ԍ†•Û‘¶‚Ì‚½‚߃\[ƒg
892- Sort.SortNoFlag := true;
893- Sort.SortOrder := true;
894- Sort.SortIndex := 0;
893+ Sort.SetSortNoFlag(true);
894+ Sort.SetSortOrder(true);
895+ Sort.SetSortIndex(0);
895896 //Sort.SortNonAcquiredCountFlag := GikoSys.Setting.NonAcquiredCount;
896897 Board.CustomSort(ThreadItemSortProc);
897898
@@ -3248,7 +3249,11 @@ function TGikoSys.GetEditorKeyFileName: String;
32483249 begin
32493250 Result := Setting.GetEditorKeyFileName;
32503251 end;
3251-
3252+//! “ü—̓AƒVƒXƒg‚̐ݒèƒtƒ@ƒCƒ‹–¼
3253+function TGikoSys.GetInputAssistFileName: String;
3254+begin
3255+ Result := Setting.GetInputAssistFileName;
3256+end;
32523257 //! ƒMƒRƒiƒr‚̃ƒbƒZ[ƒW‚ðÝ’è‚·‚é
32533258 procedure TGikoSys.SetGikoMessage;
32543259 begin
--- a/HTMLCreate.pas
+++ b/HTMLCreate.pas
@@ -15,7 +15,7 @@ uses
1515 {HttpApp,} YofUtils, {URLMon,} BoardGroup, {gzip,} {Dolib,}
1616 {bmRegExp,} AbonUnit, MojuUtils, Setting,
1717 ExternalBoardManager, ExternalBoardPlugInMain{,}
18- {Sort,} ,GikoBayesian, HintWindow;
18+ {Sort,} ,GikoBayesian, HintWindow, ActiveX;
1919
2020 type
2121
@@ -25,6 +25,21 @@ type
2525 FKey : string;
2626 end;
2727
28+ TBufferedWebBrowser = class(TStringList)
29+ private
30+ //! ‘‚«ž‚Þƒuƒ‰ƒEƒU
31+ FBrowser: TWebBrowser;
32+ //! ‰½s‚Ü‚Å‚½‚ß‚é‚©‚̃TƒCƒY
33+ FBuffSize: Integer;
34+ //! ƒuƒ‰ƒEƒU‚ÌIHTMLDocument2ƒCƒ“ƒ^ƒtƒF[ƒX‚ð•ÛŽ‚·‚é open‚©‚çclose‚ÌŠÔ‚Å
35+ FBrowserDoc: Variant;
36+ public
37+ constructor Create(Browser: TWebBrowser; BuffSize: Integer);
38+ destructor Destory;
39+ procedure Open;
40+ procedure Close;
41+ function Add(const S: string): Integer; override;
42+ end;
2843 THTMLCreate = class(TObject)
2944 private
3045 { Private éŒ¾ }
@@ -38,10 +53,10 @@ type
3853 constructor Create;
3954
4055 function AddBeProfileLink(AID : string; ANum: Integer):string ;
41- procedure CreateUsePluginHTML(doc: Variant; ThreadItem: TThreadItem; var sTitle: string);
42- procedure CreateUseSKINHTML(doc: Variant; ThreadItem: TThreadItem; ReadList: TStringList);
43- procedure CreateUseCSSHTML(doc: Variant; ThreadItem: TThreadItem; ReadList: TStringList; sTitle: string );
44- procedure CreateDefaultHTML (doc: Variant; ThreadItem: TThreadItem; ReadList: TStringList; sTitle: string );
56+ procedure CreateUsePluginHTML(html:TStringList; ThreadItem: TThreadItem; var sTitle: string);
57+ procedure CreateUseSKINHTML(html:TStringList; ThreadItem: TThreadItem; ReadList: TStringList);
58+ procedure CreateUseCSSHTML(html:TStringList; ThreadItem: TThreadItem; ReadList: TStringList; sTitle: string );
59+ procedure CreateDefaultHTML (html:TStringList; ThreadItem: TThreadItem; ReadList: TStringList; sTitle: string );
4560 procedure ConvertResAnchor(PRes: PResRec);
4661 procedure separateNumber(var st: String; var et: String; const Text, Separator: String);
4762 function checkComma(const s : String; var j : Integer; var No : String) : boolean;
@@ -54,7 +69,7 @@ type
5469 function SkinedRes(const skin: string; PRes: PResRec; const No: string): string;
5570 procedure ConvRes( PRes : PResRec; PResLink : PResLinkRec; DatToHTML: boolean = false); overload;
5671 function ConvRes(const Body, Bbs, Key, ParamBBS, ParamKey, ParamStart, ParamTo, ParamNoFirst, ParamTrue : string; DatToHTML: boolean = false): string; overload;
57- procedure CreateHTML2(doc: Variant; ThreadItem: TThreadItem; var sTitle: string);
72+ procedure CreateHTML2(Browser: TWebBrowser; ThreadItem: TThreadItem; var sTitle: string);
5873 procedure CreateHTML3(var html: TStringList; ThreadItem: TThreadItem; var sTitle: string);
5974 //ƒŒƒXƒ|ƒbƒvƒAƒbƒv‚̍쐬
6075 procedure SetResPopupText(Hint :TResPopup; threadItem: TThreadItem; StNum, ToNum: Integer; Title, First: Boolean);
@@ -778,7 +793,7 @@ begin
778793 end;
779794
780795 //Plugin‚ð—˜—p‚·‚éBoard‚̃XƒŒƒbƒh‚ÌHTML‚ðì¬‚µ‚Ädoc‚ɏ‘‚«ž‚Þ
781-procedure THTMLCreate.CreateUsePluginHTML(doc: Variant; ThreadItem: TThreadItem; var sTitle: string);
796+procedure THTMLCreate.CreateUsePluginHTML(html:TStringList; ThreadItem: TThreadItem; var sTitle: string);
782797 var
783798 i: integer;
784799 NewReceiveNo: Integer;
@@ -791,11 +806,11 @@ begin
791806 // ƒtƒHƒ“ƒg‚âƒTƒCƒY‚̐ݒè
792807 UserOptionalStyle := GikoSys.SetUserOptionalStyle;
793808 try
794- doc.open;
809+// doc.open;
795810 // ƒwƒbƒ_
796- doc.Write( boardPlugIn.GetHeader( DWORD( threadItem ),
811+ html.add(boardPlugIn.GetHeader( DWORD( threadItem ),
797812 '<style type="text/css">body {' + UserOptionalStyle + '}</style>' ));
798- doc.Write('<p id="idSearch"></p>');
813+ html.Add('<p id="idSearch"></p>');
799814
800815 for i := 0 to threadItem.Count - 1 do begin
801816 // 1 ‚Í•K‚¸•\Ž¦
@@ -819,56 +834,56 @@ begin
819834 try
820835 if GikoSys.Setting.UseSkin then begin
821836 if FileExists( GikoSys.GetSkinNewmarkFileName ) then
822- doc.Write( LoadFromSkin( GikoSys.GetSkinNewmarkFileName, ThreadItem, ThreadItem.Size ))
837+ html.Add( LoadFromSkin( GikoSys.GetSkinNewmarkFileName, ThreadItem, ThreadItem.Size ))
823838 else
824- doc.Write( '<a name="new"></a>');
839+ html.Add( '<a name="new"></a>');
825840 end else if GikoSys.Setting.UseCSS then begin
826- doc.Write('<a name="new"></a><div class="new">V’…ƒŒƒX <span class="newdate">' + FormatDateTime('yyyy/mm/dd(ddd) hh:mm', ThreadItem.RoundDate) + '</span></div>');
841+ html.Add('<a name="new"></a><div class="new">V’…ƒŒƒX <span class="newdate">' + FormatDateTime('yyyy/mm/dd(ddd) hh:mm', ThreadItem.RoundDate) + '</span></div>');
827842 end else begin
828- doc.Write('</dl>');
829- doc.Write('<a name="new"></a>');
830- doc.Write('<table width="100%" bgcolor="#3333CC" cellpadding="0" cellspacing="1"><tr><td align="center" bgcolor="#6666FF" valign="middle"><font size="-1" color="#ffffff"><b>V’…ƒŒƒX ' + FormatDateTime('yyyy/mm/dd(ddd) hh:mm', ThreadItem.RoundDate) + '</b></font></td></tr></table>');
831- doc.Write('<dl>');
843+ html.Add('</dl>');
844+ html.Add('<a name="new"></a>');
845+ html.Add('<table width="100%" bgcolor="#3333CC" cellpadding="0" cellspacing="1"><tr><td align="center" bgcolor="#6666FF" valign="middle"><font size="-1" color="#ffffff"><b>V’…ƒŒƒX ' + FormatDateTime('yyyy/mm/dd(ddd) hh:mm', ThreadItem.RoundDate) + '</b></font></td></tr></table>');
846+ html.Add('<dl>');
832847 end;
833848 except
834- doc.Write( '<a name="new"></a>');
849+ html.Add( '<a name="new"></a>');
835850 end;
836851 end;
837852
838853 // ƒŒƒX
839- doc.Write( boardPlugIn.GetRes( DWORD( threadItem ), i + 1 ));
854+ html.Add( boardPlugIn.GetRes( DWORD( threadItem ), i + 1 ));
840855
841856 if ThreadItem.Kokomade = (i + 1) then begin
842857 // ‚±‚±‚Ü‚Å“Ç‚ñ‚¾
843858 try
844859 if GikoSys.Setting.UseSkin then begin
845860 if FileExists( GikoSys.GetSkinBookmarkFileName ) then
846- doc.Write( LoadFromSkin( GikoSys.GetSkinBookmarkFileName, ThreadItem, ThreadItem.Size ) + #13#10 )
861+ html.Add( LoadFromSkin( GikoSys.GetSkinBookmarkFileName, ThreadItem, ThreadItem.Size ))
847862 else
848- doc.Write( '<a name="koko"></a>');
863+ html.Add( '<a name="koko"></a>');
849864 end else if GikoSys.Setting.UseCSS then begin
850- doc.Write('<a name="koko"></a><div class="koko">ƒRƒR‚Ü‚Å“Ç‚ñ‚¾</div>');
865+ html.Add('<a name="koko"></a><div class="koko">ƒRƒR‚Ü‚Å“Ç‚ñ‚¾</div>');
851866 end else begin
852- doc.Write('</dl>');
853- doc.Write('<a name="koko"></a><table width="100%" bgcolor="#55AA55" cellpadding="0" cellspacing="1"><tr><td align="center" bgcolor="#77CC77" valign="middle"><font size="-1" color="#ffffff"><b>ƒRƒR‚Ü‚Å“Ç‚ñ‚¾</b></font></td></tr></table>');
854- doc.Write('<dl>');
867+ html.Add('</dl>');
868+ html.Add('<a name="koko"></a><table width="100%" bgcolor="#55AA55" cellpadding="0" cellspacing="1"><tr><td align="center" bgcolor="#77CC77" valign="middle"><font size="-1" color="#ffffff"><b>ƒRƒR‚Ü‚Å“Ç‚ñ‚¾</b></font></td></tr></table>');
869+ html.Add('<dl>');
855870 end;
856871 except
857- doc.Write( '<a name="koko"></a>');
872+ html.Add('<a name="koko"></a>');
858873 end;
859874 end;
860875 end;
861876
862877
863878 // ƒXƒLƒ“(ƒtƒbƒ^)
864- doc.Write( boardPlugIn.GetFooter( DWORD( threadItem ), '<a name="bottom"></a>' ));
879+ html.Add( boardPlugIn.GetFooter( DWORD( threadItem ), '<a name="bottom"></a>' ));
865880 finally
866- doc.Close;
881+ //doc.Close;
867882 end;
868883 end;
869884
870885
871-procedure THTMLCreate.CreateUseSKINHTML(doc: Variant; ThreadItem: TThreadItem; ReadList: TStringList);
886+procedure THTMLCreate.CreateUseSKINHTML(html:TStringList; ThreadItem: TThreadItem; ReadList: TStringList);
872887 const
873888 KOKO_TAG = '<a name="koko"></a>';
874889 NEW_TAG = '<a name="new"></a>';
@@ -890,9 +905,9 @@ begin
890905 ResLink.FBbs := ThreadItem.ParentBoard.BBSID;
891906 ResLink.FKey := ThreadName;
892907 //,
893- doc.open;
908+ //doc.open;
894909 try
895- doc.charset := 'Shift_JIS';
910+ //doc.charset := 'Shift_JIS';
896911
897912 // ƒXƒLƒ“‚̐ݒè
898913 try
@@ -900,14 +915,14 @@ begin
900915 if Length( UserOptionalStyle ) > 0 then
901916 SkinHeader := CustomStringReplace( SkinHeader, '</head>',
902917 '<style type="text/css">body {' + UserOptionalStyle + '}</style></head>');
903- doc.Write( SkinHeader );
918+ html.Add( SkinHeader );
904919 except
905920 end;
906921
907922 SkinNewRes := LoadFromSkin( GikoSys.GetSkinNewResFileName, ThreadItem, ThreadItem.Size);
908923 SkinRes := LoadFromSkin( GikoSys.GetSkinResFileName, ThreadItem, ThreadItem.Size );
909924
910- doc.Write('<p id="idSearch"></p>'#13#10'<a name="top"></a>');
925+ html.Add('<p id="idSearch"></p>'#13#10'<a name="top"></a>');
911926
912927 for i := 0 to ReadList.Count - 1 do begin
913928 // 1 ‚Í•K‚¸•\Ž¦
@@ -929,9 +944,9 @@ begin
929944 // V’…ƒ}[ƒN
930945 if (NewReceiveNo = i + 1) or ((NewReceiveNo = 0) and (i = 0)) then begin
931946 if FileExists( GikoSys.GetSkinNewmarkFileName ) then
932- doc.Write( LoadFromSkin( GikoSys.GetSkinNewmarkFileName, ThreadItem, ThreadItem.Size ))
947+ html.Add( LoadFromSkin( GikoSys.GetSkinNewmarkFileName, ThreadItem, ThreadItem.Size ))
933948 else
934- doc.Write( NEW_TAG );
949+ html.Add( NEW_TAG );
935950 end;
936951
937952 if (Trim(ReadList[i]) <> '') then begin
@@ -942,46 +957,45 @@ begin
942957
943958 if NewReceiveNo <= (i + 1) then
944959 // V’…ƒŒƒX
945- doc.Write(SkinedRes(SkinNewRes, @Res, IntToStr(i + 1)))
960+ html.Add(SkinedRes(SkinNewRes, @Res, IntToStr(i + 1)))
946961 else
947962 // ’ʏí‚̃ŒƒX
948- doc.Write(SkinedRes(SkinRes, @Res, IntToStr(i + 1)));
963+ html.Add(SkinedRes(SkinRes, @Res, IntToStr(i + 1)));
949964 end;
950965
951966 if ThreadItem.Kokomade = (i + 1) then begin
952967 // ‚±‚±‚Ü‚Å“Ç‚ñ‚¾
953968 if FileExists( GikoSys.GetSkinBookmarkFileName ) then
954- doc.Write( LoadFromSkin( GikoSys.GetSkinBookmarkFileName, ThreadItem, ThreadItem.Size ) + #13#10 )
969+ html.Add( LoadFromSkin( GikoSys.GetSkinBookmarkFileName, ThreadItem, ThreadItem.Size ))
955970 else
956- doc.Write( KOKO_TAG );
971+ html.Add( KOKO_TAG );
957972 end;
958973 end;
959974
960- doc.Write('<a name="bottom"></a>');
975+ html.Add('<a name="bottom"></a>');
961976 // ƒXƒLƒ“(ƒtƒbƒ^)
962- doc.Write( LoadFromSkin( GikoSys.GetSkinFooterFileName, ThreadItem, ThreadItem.Size ) );
977+ html.Add( LoadFromSkin( GikoSys.GetSkinFooterFileName, ThreadItem, ThreadItem.Size ) );
963978 finally
964- doc.close;
979+ //doc.close;
965980 end;
966981 end;
967982
968-procedure THTMLCreate.CreateUseCSSHTML(doc: Variant; ThreadItem: TThreadItem; ReadList: TStringList; sTitle: string );
983+procedure THTMLCreate.CreateUseCSSHTML(html:TStringList; ThreadItem: TThreadItem; ReadList: TStringList; sTitle: string );
969984 const
970985 FORMAT_NOMAIL = '<a name="%s"></a><div class="header"><span class="no"><a href="menu:%s">%s</a></span>'
971- + '<span class="name_label">–¼‘OF</span> <span class="name"><b>%s</b></span>'
972- + '<span class="date_label">“Še“úF</span> <span class="date">%s</span></div>'
986+ + '<span class="name_label"> –¼‘OF </span> <span class="name"><b>%s</b></span>'
987+ + '<span class="date_label"> “Še“úF</span> <span class="date">%s</span></div>'
973988 + '<div class="mes">%s</div>';
974989
975990 FORMAT_SHOWMAIL = '<a name="%s"></a><div class="header"><span class="no"><a href="menu:%s">%s</a></span>'
976991 + '<span class="name_label"> –¼‘OF </span><a class="name_mail" href="mailto:%s">'
977992 + '<b>%s</b></a><span class="mail"> [%s]</span><span class="date_label"> “Še“úF</span>'
978- + '<span class="date"> %s</span></div><div class="mes">%s </div>';
993+ + '<span class="date"> %s</span></div><div class="mes">%s</div>';
979994
980995 FORMAT_NOSHOW = '<a name="%s"></a><div class="header"><span class="no"><a href="menu:%s">%s</a></span>'
981996 + '<span class="name_label"> –¼‘OF </span><a class="name_mail" href="mailto:%s">'
982997 + '<b>%s</b></a><span class="date_label"> “Še“úF</span><span class="date"> %s</span></div>'
983- + '<div class="mes">%s </div>';
984-
998+ + '<div class="mes">%s</div>';
985999 var
9861000 i: integer;
9871001 No: string;
@@ -992,9 +1006,9 @@ var
9921006 ThreadName :String;
9931007 ResLink :TResLinkRec;
9941008 begin
995- doc.open;
1009+ //doc.open;
9961010 try
997- doc.charset := 'Shift_JIS';
1011+ //doc.charset := 'Shift_JIS';
9981012 NewReceiveNo := ThreadItem.NewReceive;
9991013 ThreadName := ChangeFileExt(ThreadItem.FileName, '');
10001014 ResLink.FBbs := ThreadItem.ParentBoard.BBSID;
@@ -1004,15 +1018,15 @@ begin
10041018 CSSFileName := GikoSys.GetStyleSheetDir + GikoSys.Setting.CSSFileName;
10051019 if GikoSys.Setting.UseCSS and FileExists(CSSFileName) then begin
10061020 //CSSŽg—p
1007- doc.Write('<html><head>');
1008- doc.Write('<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">');
1009- doc.Write('<title>' + sTitle + '</title>');
1010- doc.Write('<link rel="stylesheet" href="'+CSSFileName+'" type="text/css">');
1021+ html.Add('<html><head>');
1022+ html.Add('<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">');
1023+ html.Add('<title>' + sTitle + '</title>');
1024+ html.Add('<link rel="stylesheet" href="'+CSSFileName+'" type="text/css">');
10111025 if Length( UserOptionalStyle ) > 0 then
1012- doc.Write('<style type="text/css">body {' + UserOptionalStyle + '}</style>');
1013- doc.Write('</head>'#13#10'<body>');
1014- doc.Write('<a name="top"></a>'#13#10'<p id="idSearch"></p>');
1015- doc.Write('<div class="title">' + sTitle + '</div>');
1026+ html.Add('<style type="text/css">body {' + UserOptionalStyle + '}</style>');
1027+ html.Add('</head>'#13#10'<body>');
1028+ html.Add('<a name="top"></a>'#13#10'<p id="idSearch"></p>');
1029+ html.Add('<div class="title">' + sTitle + '</div>');
10161030 for i := 0 to ReadList.Count - 1 do begin
10171031 // 1 ‚Í•K‚¸•\Ž¦
10181032 if i <> 0 then begin
@@ -1031,7 +1045,7 @@ begin
10311045 end;
10321046
10331047 if (NewReceiveNo = (i + 1)) or ((NewReceiveNo = 0) and (i = 0)) then begin
1034- doc.Write('<a name="new"></a><div class="new">V’…ƒŒƒX <span class="newdate">' + FormatDateTime('yyyy/mm/dd(ddd) hh:mm', ThreadItem.RoundDate) + '</span></div>');
1048+ html.Add('<a name="new"></a><div class="new">V’…ƒŒƒX <span class="newdate">' + FormatDateTime('yyyy/mm/dd(ddd) hh:mm', ThreadItem.RoundDate) + '</span></div>');
10351049 end;
10361050
10371051 if (Trim(ReadList[i]) <> '') then begin
@@ -1041,29 +1055,29 @@ begin
10411055 ConvRes(@Res, @ResLink);
10421056 Res.FDateTime := AddBeProfileLink(Res.FDateTime, i + 1);
10431057 if Res.FMailTo = '' then
1044- doc.Write(Format(FORMAT_NOMAIL, [No, No, No, Res.FName, Res.FDateTime, Res.FBody]))
1058+ html.Add(Format(FORMAT_NOMAIL, [No, No, No, Res.FName, Res.FDateTime, Res.FBody]))
10451059 else if GikoSys.Setting.ShowMail then
1046- doc.Write(Format(FORMAT_SHOWMAIL, [No, No, No, Res.FMailTo, Res.FName, Res.FMailTo, Res.FDateTime, Res.FBody]))
1060+ html.Add(Format(FORMAT_SHOWMAIL, [No, No, No, Res.FMailTo, Res.FName, Res.FMailTo, Res.FDateTime, Res.FBody]))
10471061 else
1048- doc.Write(Format(FORMAT_NOSHOW, [No, No, No, Res.FName, Res.FDateTime, Res.FBody]));
1062+ html.Add(Format(FORMAT_NOSHOW, [No, No, No, Res.FMailTo, Res.FName, Res.FDateTime, Res.FBody]));
10491063 end;
10501064
10511065 if ThreadItem.Kokomade = (i + 1) then begin
1052- doc.Write('<a name="koko"></a><div class="koko">ƒRƒR‚Ü‚Å“Ç‚ñ‚¾</div>');
1066+ html.Add('<a name="koko"></a><div class="koko">ƒRƒR‚Ü‚Å“Ç‚ñ‚¾</div>');
10531067 end;
10541068
10551069 end;
10561070
1057- doc.Write('<a name="bottom"></a>');
1058- doc.Write('<a name="last"></a>');
1059- doc.Write('</body></html>');
1071+ html.Add('<a name="bottom"></a>');
1072+ html.Add('<a name="last"></a>');
1073+ html.Add('</body></html>');
10601074 end;
10611075 finally
1062- doc.Close;
1076+ //doc.Close;
10631077 end;
10641078 end;
10651079
1066-procedure THTMLCreate.CreateDefaultHTML (doc: Variant; ThreadItem: TThreadItem; ReadList: TStringList; sTitle: string );
1080+procedure THTMLCreate.CreateDefaultHTML (html:TStringList; ThreadItem: TThreadItem; ReadList: TStringList; sTitle: string );
10671081 var
10681082 i: integer;
10691083 No: string;
@@ -1072,21 +1086,21 @@ var
10721086 ThreadName: String;
10731087 ResLink : TResLinkRec;
10741088 begin
1075- doc.open;
1089+// doc.open;
10761090 try
1077- doc.charset := 'Shift_JIS';
1091+// doc.charset := 'Shift_JIS';
10781092 NewReceiveNo := ThreadItem.NewReceive;
10791093 ThreadName := ChangeFileExt(ThreadItem.FileName, '');
10801094 ResLink.FBbs := ThreadItem.ParentBoard.BBSID;
10811095 ResLink.FKey := ThreadName;
1082- doc.Write('<html><head>'#13#10);
1083- doc.Write('<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">'#13#10);
1084- doc.Write('<title>' + sTitle + '</title></head>'#13#10);
1085- doc.Write('<body TEXT="#000000" BGCOLOR="#EFEFEF" link="#0000FF" alink="#FF0000" vlink="#660099">'#13#10);
1086- doc.Write('<a name="top"></a>'#13#10);
1087- doc.Write('<font size=+1 color="#FF0000">' + sTitle + '</font>'#13#10);
1088- doc.Write('<dl>'#13#10);
1089- doc.Write('<p id="idSearch"></p>'#13#10);
1096+ html.Add('<html><head>');
1097+ html.Add('<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">');
1098+ html.Add('<title>' + sTitle + '</title></head>');
1099+ html.Add('<body TEXT="#000000" BGCOLOR="#EFEFEF" link="#0000FF" alink="#FF0000" vlink="#660099">');
1100+ html.Add('<a name="top"></a>');
1101+ html.Add('<font size=+1 color="#FF0000">' + sTitle + '</font>');
1102+ html.Add('<dl>');
1103+ html.Add('<p id="idSearch"></p>');
10901104 for i := 0 to ReadList.Count - 1 do begin
10911105 // 1 ‚Í•K‚¸•\Ž¦
10921106 if i <> 0 then begin
@@ -1105,10 +1119,10 @@ begin
11051119 end;
11061120
11071121 if (NewReceiveNo = (i + 1)) or ((NewReceiveNo = 0) and (i = 0)) then begin
1108- doc.Write('</dl>');
1109- doc.Write('<a name="new"></a>');
1110- doc.Write('<table width="100%" bgcolor="#3333CC" cellpadding="0" cellspacing="1"><tr><td align="center" bgcolor="#6666FF" valign="middle"><font size="-1" color="#ffffff"><b>V’…ƒŒƒX ' + FormatDateTime('yyyy/mm/dd(ddd) hh:mm', ThreadItem.RoundDate) + '</b></font></td></tr></table>');
1111- doc.Write('<dl>');
1122+ html.Add('</dl>');
1123+ html.Add('<a name="new"></a>');
1124+ html.Add('<table width="100%" bgcolor="#3333CC" cellpadding="0" cellspacing="1"><tr><td align="center" bgcolor="#6666FF" valign="middle"><font size="-1" color="#ffffff"><b>V’…ƒŒƒX ' + FormatDateTime('yyyy/mm/dd(ddd) hh:mm', ThreadItem.RoundDate) + '</b></font></td></tr></table>');
1125+ html.Add('<dl>');
11121126 end;
11131127
11141128 if (Trim(ReadList[i]) <> '') then begin
@@ -1118,30 +1132,31 @@ begin
11181132 ConvRes(@Res, @ResLink);
11191133 Res.FDateTime := AddBeProfileLink(Res.FDateTime, i + 1);
11201134 if Res.FMailTo = '' then
1121- doc.Write('<a name="' + No + '"></a><dt><a href="menu:' + No + '">' + No + '</a> –¼‘OF<font color="forestgreen"><b> ' + Res.FName + ' </b></font> “Še“úF <span class="date">' + Res.FDateTime+ '</span><br><dd>' + Res.Fbody + ' <br><br><br>'#13#10)
1135+ html.Add('<a name="' + No + '"></a><dt><a href="menu:' + No + '">' + No + '</a> –¼‘OF<font color="forestgreen"><b> ' + Res.FName + ' </b></font> “Še“úF <span class="date">' + Res.FDateTime+ '</span><br><dd>' + Res.Fbody + ' <br><br><br>'#13#10)
11221136 else if GikoSys.Setting.ShowMail then
1123- doc.Write('<a name="' + No + '"></a><dt><a href="menu:' + No + '">' + No + '</a> –¼‘OF<a href="mailto:' + Res.FMailTo + '"><b> ' + Res.FName + ' </B></a> [' + Res.FMailTo + '] “Še“úF <span class="date">' + Res.FDateTime+ '</span><br><dd>' + Res.Fbody + ' <br><br><br>'#13#10)
1137+ html.Add('<a name="' + No + '"></a><dt><a href="menu:' + No + '">' + No + '</a> –¼‘OF<a href="mailto:' + Res.FMailTo + '"><b> ' + Res.FName + ' </B></a> [' + Res.FMailTo + '] “Še“úF <span class="date">' + Res.FDateTime+ '</span><br><dd>' + Res.Fbody + ' <br><br><br>'#13#10)
11241138 else
1125- doc.Write('<a name="' + No + '"></a><dt><a href="menu:' + No + '">' + No + '</a> –¼‘OF<a href="mailto:' + Res.FMailTo + '"><b> ' + Res.FName + ' </B></a> “Še“úF <span class="date">' + Res.FDateTime+ '</span><br><dd>' + Res.Fbody + ' <br><br><br>'#13#10);
1139+ html.Add('<a name="' + No + '"></a><dt><a href="menu:' + No + '">' + No + '</a> –¼‘OF<a href="mailto:' + Res.FMailTo + '"><b> ' + Res.FName + ' </B></a> “Še“úF <span class="date">' + Res.FDateTime+ '</span><br><dd>' + Res.Fbody + ' <br><br><br>'#13#10);
11261140 end;
11271141 if ThreadItem.Kokomade = (i + 1) then begin
1128- doc.Write('</dl>');
1129- doc.Write('<a name="koko"></a><table width="100%" bgcolor="#55AA55" cellpadding="0" cellspacing="1"><tr><td align="center" bgcolor="#77CC77" valign="middle"><font size="-1" color="#ffffff"><b>ƒRƒR‚Ü‚Å“Ç‚ñ‚¾</b></font></td></tr></table>');
1130- doc.Write('<dl>');
1142+ html.Add('</dl>');
1143+ html.Add('<a name="koko"></a><table width="100%" bgcolor="#55AA55" cellpadding="0" cellspacing="1"><tr><td align="center" bgcolor="#77CC77" valign="middle"><font size="-1" color="#ffffff"><b>ƒRƒR‚Ü‚Å“Ç‚ñ‚¾</b></font></td></tr></table>');
1144+ html.Add('<dl>');
11311145 end;
11321146 end;
1133- doc.Write('</dl>'#13#10'<a name="bottom"></a>'#13#10'</body></html>');
1147+ html.Add('</dl>'#13#10'<a name="bottom"></a>'#13#10'</body></html>');
11341148 finally
1135- doc.Close;
1149+ //doc.Close;
11361150 end;
11371151 end;
11381152
1139-procedure THTMLCreate.CreateHTML2(doc: Variant; ThreadItem: TThreadItem; var sTitle: string);
1153+procedure THTMLCreate.CreateHTML2(Browser: TWebBrowser; ThreadItem: TThreadItem; var sTitle: string);
11401154 var
11411155 ReadList: TStringList;
11421156 CSSFileName: string;
11431157 FileName: string;
11441158 Res: TResRec;
1159+ body : TBufferedWebBrowser;
11451160 {$IFDEF DEBUG}
11461161 st, rt: Cardinal;
11471162 {$ENDIF}
@@ -1151,45 +1166,51 @@ begin
11511166 st := GetTickCount;
11521167 {$ENDIF}
11531168 if ThreadItem <> nil then begin
1154- if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
1155- CreateUsePluginHTML(doc, ThreadItem, sTitle);
1156- end else begin
1157- ShortDayNames[1] := '“ú'; ShortDayNames[2] := 'ŒŽ';
1158- ShortDayNames[3] := '‰Î'; ShortDayNames[4] := '…';
1159- ShortDayNames[5] := '–Ø'; ShortDayNames[6] := '‹à';
1160- ShortDayNames[7] := '“y';
1169+ body := TBufferedWebBrowser.Create(Browser, 100);
1170+ try
1171+ body.Open;
1172+ if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
1173+ CreateUsePluginHTML(body, ThreadItem, sTitle);
1174+ end else begin
1175+ ShortDayNames[1] := '“ú'; ShortDayNames[2] := 'ŒŽ';
1176+ ShortDayNames[3] := '‰Î'; ShortDayNames[4] := '…';
1177+ ShortDayNames[5] := '–Ø'; ShortDayNames[6] := '‹à';
1178+ ShortDayNames[7] := '“y';
11611179
1162- ReadList := TStringList.Create;
1163- try
1164- if ThreadItem.IsLogFile then begin
1165- ReadList.BeginUpdate;
1166- FileName := ThreadItem.GetThreadFileName;
1167- ReadList.LoadFromFile(FileName);
1168- ReadList.EndUpdate;
1169- GikoSys.FAbon.IndividualAbon(ReadList, ChangeFileExt(FileName,'.NG'));
1170- GikoSys.FAbon.Execute(ReadList); // ‚ ‚ځ`‚ñ‚µ‚Ä
1171- GikoSys.FSelectResFilter.Execute(ReadList); //ƒŒƒX‚̃tƒBƒ‹ƒ^ƒŠƒ“ƒO‚ð‚·‚é
1172- if ThreadItem.Title = '' then begin
1173- DivideStrLine(ReadList[0], @Res);
1174- sTitle := Res.FTitle;
1175- end else
1176- sTitle := ThreadItem.Title
1177- end else begin
1178- sTitle := CustomStringReplace(ThreadItem.Title, '—M', ',');
1179- end;
1180- // ƒtƒHƒ“ƒg‚âƒTƒCƒY‚̐ݒè
1181- CSSFileName := GikoSys.GetStyleSheetDir + GikoSys.Setting.CSSFileName;
1182- if GikoSys.Setting.UseSkin then begin
1183- CreateUseSKINHTML(doc, ThreadItem, ReadList);
1184- end else if GikoSys.Setting.UseCSS and FileExists(CSSFileName) then begin
1185- CreateUseCSSHTML(doc, ThreadItem, ReadList, sTitle);
1186- end else begin
1187- CreateDefaultHTML(doc, ThreadItem, ReadList, sTitle);
1180+ ReadList := TStringList.Create;
1181+ try
1182+ if ThreadItem.IsLogFile then begin
1183+ ReadList.BeginUpdate;
1184+ FileName := ThreadItem.GetThreadFileName;
1185+ ReadList.LoadFromFile(FileName);
1186+ ReadList.EndUpdate;
1187+ GikoSys.FAbon.IndividualAbon(ReadList, ChangeFileExt(FileName,'.NG'));
1188+ GikoSys.FAbon.Execute(ReadList); // ‚ ‚ځ`‚ñ‚µ‚Ä
1189+ GikoSys.FSelectResFilter.Execute(ReadList); //ƒŒƒX‚̃tƒBƒ‹ƒ^ƒŠƒ“ƒO‚ð‚·‚é
1190+ if ThreadItem.Title = '' then begin
1191+ DivideStrLine(ReadList[0], @Res);
1192+ sTitle := Res.FTitle;
1193+ end else
1194+ sTitle := ThreadItem.Title
1195+ end else begin
1196+ sTitle := CustomStringReplace(ThreadItem.Title, '—M', ',');
1197+ end;
1198+ // ƒtƒHƒ“ƒg‚âƒTƒCƒY‚̐ݒè
1199+ CSSFileName := GikoSys.GetStyleSheetDir + GikoSys.Setting.CSSFileName;
1200+ if GikoSys.Setting.UseSkin then begin
1201+ CreateUseSKINHTML(body, ThreadItem, ReadList);
1202+ end else if GikoSys.Setting.UseCSS and FileExists(CSSFileName) then begin
1203+ CreateUseCSSHTML(body, ThreadItem, ReadList, sTitle);
1204+ end else begin
1205+ CreateDefaultHTML(body, ThreadItem, ReadList, sTitle);
1206+ end;
1207+ finally
1208+ ReadList.Free;
11881209 end;
1189-
1190- finally
1191- ReadList.Free;
11921210 end;
1211+ finally
1212+ body.Close;
1213+ body.Free;
11931214 end;
11941215 end;
11951216 {$IFDEF DEBUG}
@@ -1707,7 +1728,58 @@ begin
17071728 end;
17081729 end;
17091730
1710-
1731+constructor TBufferedWebBrowser.Create(Browser: TWebBrowser; BuffSize: Integer);
1732+begin
1733+ inherited Create;
1734+ Self.Sorted := False;
1735+ if (Browser = nil) then
1736+ Raise Exception.Create('Browser is NULL');
1737+ FBrowser := Browser;
1738+
1739+ // ƒoƒbƒtƒ@‚·‚és”‚ð
1740+ if (BuffSize < 0) then begin
1741+ FBuffSize := 100;
1742+ end else begin
1743+ FBuffSize := BuffSize;
1744+ end;
1745+ Self.Capacity := FBuffSize + 1;
1746+end;
1747+procedure TBufferedWebBrowser.Open;
1748+begin
1749+ FBrowserDoc := Idispatch( olevariant(FBrowser.ControlInterface).Document);
1750+ FBrowserDoc.open;
1751+ FBrowserDoc.charset := 'Shift_JIS';
1752+end;
1753+procedure TBufferedWebBrowser.Close;
1754+begin
1755+ if (Self.Count > 0) then begin
1756+ FBrowserDoc.Write(Self.Text);
1757+ Self.Clear;
1758+ end;
1759+ try
1760+ FBrowserDoc.Close;
1761+ except
1762+ end;
1763+end;
1764+function TBufferedWebBrowser.Add(const S: string): Integer;
1765+begin
1766+ Result := inherited Add(S);
1767+ if (Self.Count > FBuffSize) then begin
1768+ FBrowserDoc.Write(Self.Text);
1769+ Self.Clear;
1770+ end;
1771+end;
1772+destructor TBufferedWebBrowser.Destory;
1773+begin
1774+ try
1775+ if (FBrowserDoc <> 0) then begin
1776+ FBrowserDoc.close;
1777+ FBrowserDoc := 0;
1778+ end;
1779+ except
1780+ end;
1781+ inherited;
1782+end;
17111783
17121784 initialization
17131785 HTMLCreater := THTMLCreate.Create;
--- /dev/null
+++ b/InputAssist.dfm
@@ -0,0 +1,405 @@
1+object InputAssistForm: TInputAssistForm
2+ Left = 589
3+ Top = 279
4+ Width = 397
5+ Height = 460
6+ Caption = #20837#21147#12450#12471#12473#12488#35373#23450
7+ Color = clBtnFace
8+ Font.Charset = SHIFTJIS_CHARSET
9+ Font.Color = clWindowText
10+ Font.Height = -12
11+ Font.Name = #65325#65331' '#65328#12468#12471#12483#12463
12+ Font.Style = []
13+ OldCreateOrder = False
14+ OnClose = FormClose
15+ OnCreate = FormCreate
16+ PixelsPerInch = 96
17+ TextHeight = 12
18+ object Panel1: TPanel
19+ Left = 0
20+ Top = 0
21+ Width = 389
22+ Height = 200
23+ Align = alTop
24+ BevelOuter = bvLowered
25+ Caption = 'Panel1'
26+ TabOrder = 0
27+ object Panel5: TPanel
28+ Left = 295
29+ Top = 33
30+ Width = 93
31+ Height = 166
32+ Align = alRight
33+ TabOrder = 0
34+ object CloseButton: TButton
35+ Left = 10
36+ Top = 136
37+ Width = 75
38+ Height = 25
39+ Caption = #32066#20102
40+ TabOrder = 0
41+ OnClick = CloseButtonClick
42+ end
43+ object ApplyButton: TButton
44+ Left = 10
45+ Top = 72
46+ Width = 75
47+ Height = 25
48+ Caption = #36969#29992
49+ TabOrder = 1
50+ OnClick = ApplyButtonClick
51+ end
52+ object DeleteButton: TButton
53+ Left = 10
54+ Top = 40
55+ Width = 75
56+ Height = 25
57+ Caption = #21066#38500
58+ TabOrder = 2
59+ OnClick = DeleteButtonClick
60+ end
61+ object AddButton: TButton
62+ Left = 10
63+ Top = 8
64+ Width = 75
65+ Height = 25
66+ Caption = #36861#21152
67+ TabOrder = 3
68+ OnClick = AddButtonClick
69+ end
70+ end
71+ object Panel6: TPanel
72+ Left = 1
73+ Top = 33
74+ Width = 294
75+ Height = 166
76+ Align = alClient
77+ BevelOuter = bvNone
78+ Caption = 'Panel6'
79+ TabOrder = 1
80+ object GikoListView1: TGikoListView
81+ Left = 0
82+ Top = 0
83+ Width = 294
84+ Height = 166
85+ Align = alClient
86+ Columns = <>
87+ ReadOnly = True
88+ RowSelect = True
89+ SmallImages = ColumnImageList
90+ TabOrder = 0
91+ ViewStyle = vsReport
92+ OnColumnClick = GikoListView1ColumnClick
93+ OnCompare = GikoListView1Compare
94+ OnSelectItem = GikoListView1SelectItem
95+ end
96+ end
97+ object Panel7: TPanel
98+ Left = 1
99+ Top = 1
100+ Width = 387
101+ Height = 32
102+ Align = alTop
103+ Caption = 'Panel7'
104+ TabOrder = 2
105+ object CategoryComboLabel: TLabel
106+ Left = 12
107+ Top = 10
108+ Width = 77
109+ Height = 12
110+ Caption = #12459#12486#12468#12522#21517#36984#25246
111+ end
112+ object CategoryComboBox: TComboBox
113+ Left = 105
114+ Top = 6
115+ Width = 176
116+ Height = 20
117+ ItemHeight = 12
118+ TabOrder = 0
119+ Text = 'CategoryComboBox'
120+ OnChange = CategoryComboBoxChange
121+ OnKeyPress = CategoryComboBoxKeyPress
122+ end
123+ object InsertButton: TButton
124+ Left = 297
125+ Top = 4
126+ Width = 75
127+ Height = 25
128+ Action = InsertButtonAction
129+ TabOrder = 1
130+ end
131+ end
132+ end
133+ object Panel2: TPanel
134+ Left = 0
135+ Top = 200
136+ Width = 389
137+ Height = 233
138+ Align = alClient
139+ BevelOuter = bvNone
140+ Caption = 'Panel2'
141+ TabOrder = 1
142+ object Panel3: TPanel
143+ Left = 0
144+ Top = 0
145+ Width = 389
146+ Height = 48
147+ Align = alTop
148+ BevelOuter = bvNone
149+ TabOrder = 0
150+ object KeyNameEdit: TLabeledEdit
151+ Left = 8
152+ Top = 21
153+ Width = 161
154+ Height = 20
155+ Hint = #20837#21147#12395#20351#12358#12461#12540#21517
156+ EditLabel.Width = 36
157+ EditLabel.Height = 12
158+ EditLabel.Caption = #12461#12540#21517
159+ LabelPosition = lpAbove
160+ LabelSpacing = 3
161+ TabOrder = 0
162+ end
163+ object CategoryNameEdit: TLabeledEdit
164+ Left = 176
165+ Top = 21
166+ Width = 121
167+ Height = 20
168+ Hint = #20837#21147#12395#20351#12358#12459#12486#12468#12522#21517
169+ EditLabel.Width = 53
170+ EditLabel.Height = 12
171+ EditLabel.Caption = #12459#12486#12468#12522#21517
172+ LabelPosition = lpAbove
173+ LabelSpacing = 3
174+ TabOrder = 1
175+ end
176+ end
177+ object Panel4: TPanel
178+ Left = 0
179+ Top = 48
180+ Width = 389
181+ Height = 185
182+ Align = alClient
183+ BevelOuter = bvNone
184+ TabOrder = 1
185+ object GroupBox1: TGroupBox
186+ Left = 0
187+ Top = 0
188+ Width = 389
189+ Height = 185
190+ Align = alClient
191+ Caption = #25407#20837#25991#23383#21015
192+ TabOrder = 0
193+ object TextMemo: TMemo
194+ Left = 2
195+ Top = 14
196+ Width = 385
197+ Height = 169
198+ Hint = #25407#20837#12377#12427#25991#23383#21015
199+ Align = alClient
200+ ScrollBars = ssBoth
201+ TabOrder = 0
202+ end
203+ end
204+ end
205+ end
206+ object ColumnImageList: TImageList
207+ Left = 312
208+ Top = 192
209+ Bitmap = {
210+ 494C010102000400040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
211+ 0000000000003600000028000000400000001000000001002000000000000010
212+ 0000000000000000000000000000000000000000000000000000000000000000
213+ 0000000000000000000000000000000000000000000000000000000000000000
214+ 0000000000000000000000000000000000000000000000000000000000000000
215+ 0000000000000000000000000000000000000000000000000000000000000000
216+ 0000000000000000000000000000000000000000000000000000000000000000
217+ 0000000000000000000000000000000000000000000000000000000000000000
218+ 0000000000000000000000000000000000000000000000000000000000000000
219+ 0000000000000000000000000000000000000000000000000000000000000000
220+ 0000000000000000000000000000000000000000000000000000000000000000
221+ 0000000000000000000000000000000000000000000000000000000000000000
222+ 0000000000000000000000000000000000000000000000000000000000000000
223+ 0000000000000000000000000000000000000000000000000000000000000000
224+ 0000000000000000000000000000000000000000000000000000000000000000
225+ 0000000000000000000000000000000000000000000000000000000000000000
226+ 0000000000000000000000000000000000000000000000000000000000000000
227+ 0000000000000000000000000000000000000000000000000000000000000000
228+ 0000000000000000000000000000000000000000000000000000000000000000
229+ 0000000000000000000000000000000000000000000000000000000000000000
230+ 0000000000000000000000000000000000000000000000000000000000000000
231+ 0000000000000000000000000000000000000000000000000000000000000000
232+ 0000000000000000000000000000000000000000000000000000000000000000
233+ 0000000000000000000000000000000000000000000000000000000000000000
234+ 0000000000000000000000000000000000000000000000000000000000000000
235+ 0000000000000000000000000000000000000000000000000000000000000000
236+ 0000000000000000000000000000000000000000000000000000000000000000
237+ 0000000000000000000000000000000000000000000000000000000000000000
238+ 0000000000000000000000000000000000000000000000000000000000000000
239+ 0000000000000000000000000000000000000000000000000000000000000000
240+ 0000000000000000000000000000000000000000000000000000000000000000
241+ 0000000000000000000000000000000000000000000000000000000000000000
242+ 0000000000000000000000000000000000000000000000000000000000000000
243+ 0000000000000000000000000000000000000000000000000000000000000000
244+ 000000000000000000000000000000000000000000000000000000000000FFFF
245+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
246+ 0000000000000000000000000000000000000000000000000000000000000000
247+ 0000000000000000000080808000FFFFFF000000000000000000000000000000
248+ 0000000000000000000000000000000000000000000000000000000000000000
249+ 0000000000000000000000000000000000000000000000000000000000000000
250+ 0000000000000000000000000000000000000000000000000000000000000000
251+ 0000000000000000000000000000000000000000000000000000000000000000
252+ 0000000000000000000000000000000000000000000000000000000000008080
253+ 80008080800000000000000000000000000000000000FFFFFF00FFFFFF000000
254+ 0000000000000000000000000000000000000000000000000000000000000000
255+ 0000000000008080800080808000FFFFFF00FFFFFF0000000000000000000000
256+ 0000000000000000000000000000000000000000000000000000000000000000
257+ 0000000000000000000000000000000000000000000000000000000000000000
258+ 0000000000000000000000000000000000000000000000000000000000000000
259+ 0000000000000000000000000000000000000000000000000000000000000000
260+ 0000000000000000000000000000000000000000000000000000000000000000
261+ 00008080800000000000000000000000000000000000FFFFFF00000000000000
262+ 0000000000000000000000000000000000000000000000000000000000000000
263+ 000000000000808080000000000000000000FFFFFF0000000000000000000000
264+ 0000000000000000000000000000000000000000000000000000000000000000
265+ 0000000000000000000000000000000000000000000000000000000000000000
266+ 0000000000000000000000000000000000000000000000000000000000000000
267+ 0000000000000000000000000000000000000000000000000000000000000000
268+ 0000000000000000000000000000000000000000000000000000000000000000
269+ 000080808000808080000000000000000000FFFFFF00FFFFFF00000000000000
270+ 0000000000000000000000000000000000000000000000000000000000000000
271+ 000080808000808080000000000000000000FFFFFF00FFFFFF00000000000000
272+ 0000000000000000000000000000000000000000000000000000000000000000
273+ 0000000000000000000000000000000000000000000000000000000000000000
274+ 0000000000000000000000000000000000000000000000000000000000000000
275+ 0000000000000000000000000000000000000000000000000000000000000000
276+ 0000000000000000000000000000000000000000000000000000000000000000
277+ 000000000000808080000000000000000000FFFFFF0000000000000000000000
278+ 0000000000000000000000000000000000000000000000000000000000000000
279+ 00008080800000000000000000000000000000000000FFFFFF00000000000000
280+ 0000000000000000000000000000000000000000000000000000000000000000
281+ 0000000000000000000000000000000000000000000000000000000000000000
282+ 0000000000000000000000000000000000000000000000000000000000000000
283+ 0000000000000000000000000000000000000000000000000000000000000000
284+ 0000000000000000000000000000000000000000000000000000000000000000
285+ 0000000000008080800080808000FFFFFF00FFFFFF0000000000000000000000
286+ 0000000000000000000000000000000000000000000000000000000000008080
287+ 80008080800000000000000000000000000000000000FFFFFF00FFFFFF000000
288+ 0000000000000000000000000000000000000000000000000000000000000000
289+ 0000000000000000000000000000000000000000000000000000000000000000
290+ 0000000000000000000000000000000000000000000000000000000000000000
291+ 0000000000000000000000000000000000000000000000000000000000000000
292+ 0000000000000000000000000000000000000000000000000000000000000000
293+ 0000000000000000000080808000FFFFFF000000000000000000000000000000
294+ 0000000000000000000000000000000000000000000000000000000000008080
295+ 8000808080008080800080808000808080008080800080808000808080000000
296+ 0000000000000000000000000000000000000000000000000000000000000000
297+ 0000000000000000000000000000000000000000000000000000000000000000
298+ 0000000000000000000000000000000000000000000000000000000000000000
299+ 0000000000000000000000000000000000000000000000000000000000000000
300+ 0000000000000000000000000000000000000000000000000000000000000000
301+ 0000000000000000000000000000000000000000000000000000000000000000
302+ 0000000000000000000000000000000000000000000000000000000000000000
303+ 0000000000000000000000000000000000000000000000000000000000000000
304+ 0000000000000000000000000000000000000000000000000000000000000000
305+ 0000000000000000000000000000000000000000000000000000000000000000
306+ 0000000000000000000000000000000000000000000000000000000000000000
307+ 0000000000000000000000000000000000000000000000000000000000000000
308+ 0000000000000000000000000000000000000000000000000000000000000000
309+ 0000000000000000000000000000000000000000000000000000000000000000
310+ 0000000000000000000000000000000000000000000000000000000000000000
311+ 0000000000000000000000000000000000000000000000000000000000000000
312+ 0000000000000000000000000000000000000000000000000000000000000000
313+ 0000000000000000000000000000000000000000000000000000000000000000
314+ 0000000000000000000000000000000000000000000000000000000000000000
315+ 0000000000000000000000000000000000000000000000000000000000000000
316+ 0000000000000000000000000000000000000000000000000000000000000000
317+ 0000000000000000000000000000000000000000000000000000000000000000
318+ 0000000000000000000000000000000000000000000000000000000000000000
319+ 0000000000000000000000000000000000000000000000000000000000000000
320+ 0000000000000000000000000000000000000000000000000000000000000000
321+ 0000000000000000000000000000000000000000000000000000000000000000
322+ 0000000000000000000000000000000000000000000000000000000000000000
323+ 0000000000000000000000000000000000000000000000000000000000000000
324+ 0000000000000000000000000000000000000000000000000000000000000000
325+ 0000000000000000000000000000000000000000000000000000000000000000
326+ 0000000000000000000000000000000000000000000000000000000000000000
327+ 0000000000000000000000000000000000000000000000000000000000000000
328+ 0000000000000000000000000000000000000000000000000000000000000000
329+ 0000000000000000000000000000000000000000000000000000000000000000
330+ 0000000000000000000000000000000000000000000000000000000000000000
331+ 0000000000000000000000000000000000000000000000000000000000000000
332+ 0000000000000000000000000000000000000000000000000000000000000000
333+ 0000000000000000000000000000000000000000000000000000000000000000
334+ 0000000000000000000000000000000000000000000000000000000000000000
335+ 0000000000000000000000000000000000000000000000000000000000000000
336+ 0000000000000000000000000000000000000000000000000000000000000000
337+ 0000000000000000000000000000000000000000000000000000000000000000
338+ 0000000000000000000000000000000000000000000000000000000000000000
339+ 0000000000000000000000000000000000000000000000000000000000000000
340+ 000000000000000000000000000000000000424D3E000000000000003E000000
341+ 2800000040000000100000000100010000000000800000000000000000000000
342+ 000000000000000000000000FFFFFF00FFFFFFFF00000000FFFFFFFF00000000
343+ FFFFFFFF00000000FFFFFFFF00000000E01FFCFF00000000E79FF87F00000000
344+ F7BFFB7F00000000F33FF33F00000000FB7FF7BF00000000F87FE79F00000000
345+ FCFFE01F00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000
346+ FFFFFFFF00000000FFFFFFFF0000000000000000000000000000000000000000
347+ 000000000000}
348+ end
349+ object InputAssistFormActionList: TActionList
350+ Left = 360
351+ Top = 192
352+ object EditCut1: TEditCut
353+ Category = #32232#38598
354+ Caption = #20999#12426#21462#12426'(&T)'
355+ Hint = #20999#12426#21462#12426'|'#36984#25246#37096#20998#12434#20999#12426#21462#12426#12289#12463#12522#12483#12503#12508#12540#12489#12395#36865#12427
356+ ImageIndex = 0
357+ ShortCut = 16472
358+ end
359+ object EditCopy1: TEditCopy
360+ Category = #32232#38598
361+ Caption = #12467#12500#12540'(&C)'
362+ Hint = #12467#12500#12540'|'#36984#25246#37096#20998#12434#12467#12500#12540#12375#12289#12463#12522#12483#12503#12508#12540#12489#12395#36865#12427
363+ ImageIndex = 1
364+ ShortCut = 16451
365+ end
366+ object EditPaste1: TEditPaste
367+ Category = #32232#38598
368+ Caption = #36028#12426#20184#12369'(&P)'
369+ Hint = #36028#12426#20184#12369'|'#12463#12522#12483#12503#12508#12540#12489#12398#20869#23481#12434#36028#12426#20184#12369#12427
370+ ImageIndex = 2
371+ ShortCut = 16470
372+ end
373+ object EditSelectAll1: TEditSelectAll
374+ Category = #32232#38598
375+ Caption = #12377#12409#12390#12434#36984#25246'(&A)'
376+ Hint = #12377#12409#12390#12434#36984#25246'|'#12489#12461#12517#12513#12531#12488#20840#20307#12434#36984#25246#12377#12427
377+ ShortCut = 16449
378+ end
379+ object EditUndo1: TEditUndo
380+ Category = #32232#38598
381+ Caption = #20803#12395#25147#12377'(&U)'
382+ Hint = #20803#12395#25147#12377'|'#30452#21069#12398#22793#26356#12434#20803#12395#25147#12377
383+ ImageIndex = 3
384+ ShortCut = 16474
385+ end
386+ object EditDelete1: TEditDelete
387+ Category = #32232#38598
388+ Caption = #21066#38500'(&D)'
389+ Hint = #21066#38500'|'#36984#25246#37096#20998#12434#21066#38500#12377#12427
390+ ImageIndex = 5
391+ ShortCut = 46
392+ end
393+ object InsertButtonAction: TAction
394+ Category = #32232#38598
395+ Caption = #25407#20837
396+ OnExecute = InsertButtonActionExecute
397+ OnUpdate = InsertButtonActionUpdate
398+ end
399+ object CloseAction: TAction
400+ Category = #32232#38598
401+ Caption = 'CloseAction'
402+ OnExecute = CloseActionExecute
403+ end
404+ end
405+end
--- /dev/null
+++ b/InputAssist.pas
@@ -0,0 +1,319 @@
1+unit InputAssist;
2+
3+interface
4+
5+uses
6+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7+ Dialogs, StdCtrls, ComCtrls, GikoListView, Menus, ExtCtrls, ImgList,
8+ InputAssistDataModule, StdActns, ActnList;
9+
10+type
11+ TInputAssistForm = class(TForm)
12+ Panel1: TPanel;
13+ Panel2: TPanel;
14+ GikoListView1: TGikoListView;
15+ Panel3: TPanel;
16+ KeyNameEdit: TLabeledEdit;
17+ CategoryNameEdit: TLabeledEdit;
18+ Panel4: TPanel;
19+ TextMemo: TMemo;
20+ ColumnImageList: TImageList;
21+ InputAssistFormActionList: TActionList;
22+ EditCut1: TEditCut;
23+ EditCopy1: TEditCopy;
24+ EditPaste1: TEditPaste;
25+ EditSelectAll1: TEditSelectAll;
26+ EditUndo1: TEditUndo;
27+ EditDelete1: TEditDelete;
28+ GroupBox1: TGroupBox;
29+ Panel5: TPanel;
30+ CloseButton: TButton;
31+ ApplyButton: TButton;
32+ DeleteButton: TButton;
33+ AddButton: TButton;
34+ Panel6: TPanel;
35+ Panel7: TPanel;
36+ CategoryComboBox: TComboBox;
37+ CategoryComboLabel: TLabel;
38+ InsertButton: TButton;
39+ InsertButtonAction: TAction;
40+ CloseAction: TAction;
41+ procedure FormCreate(Sender: TObject);
42+ procedure GikoListView1SelectItem(Sender: TObject; Item: TListItem;
43+ Selected: Boolean);
44+ procedure AddButtonClick(Sender: TObject);
45+ procedure DeleteButtonClick(Sender: TObject);
46+ procedure ApplyButtonClick(Sender: TObject);
47+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
48+ procedure GikoListView1Compare(Sender: TObject; Item1,
49+ Item2: TListItem; Data: Integer; var Compare: Integer);
50+ procedure GikoListView1ColumnClick(Sender: TObject;
51+ Column: TListColumn);
52+ procedure CloseButtonClick(Sender: TObject);
53+ procedure CategoryComboBoxKeyPress(Sender: TObject; var Key: Char);
54+ procedure CategoryComboBoxChange(Sender: TObject);
55+ procedure InsertButtonActionUpdate(Sender: TObject);
56+ procedure InsertButtonActionExecute(Sender: TObject);
57+ procedure CloseActionExecute(Sender: TObject);
58+ private
59+ { Private éŒ¾ }
60+ FSortColumn : Integer;
61+ FInsertText : String;
62+ procedure AddListViewItem(ResWord : TResistWord);
63+ public
64+ { Public éŒ¾ }
65+ procedure SetUpFromEditor();
66+ procedure SetUpFromMain();
67+ function GetInsertText(): String;
68+ end;
69+
70+var
71+ InputAssistForm: TInputAssistForm;
72+
73+implementation
74+
75+
76+{$R *.dfm}
77+//! ƒtƒH[ƒ€¶¬‚̃Cƒxƒ“ƒg
78+procedure TInputAssistForm.FormCreate(Sender: TObject);
79+var
80+ i : Integer;
81+ column: TListColumn;
82+begin
83+ FSortColumn := 0;
84+ GikoListView1.Columns.Clear;
85+ column := GikoListView1.Columns.Add;
86+ column.ImageIndex := 0;
87+ column.Caption := 'ƒL[';
88+ column.Width := 150;
89+ column := GikoListView1.Columns.Add;
90+ column.Caption := 'ƒJƒeƒSƒŠ';
91+ column.Width := 80;
92+ for i := 0 to InputAssistDM.ResistWordCount - 1 do begin
93+ AddListViewItem(InputAssistDM.GetResistWord(i));
94+ end;
95+ //ƒ\[ƒgó‘Ô‚ð‰ðœ (‰ðœ‚µ‚È‚¢‚ƃAƒCƒeƒ€‚̃L[–¼‚ð•ÏX‚Å‚«‚È‚¢)
96+ InputAssistDM.Sorted := False;
97+end;
98+//! ˆê——‚ɃAƒCƒeƒ€‚ð’ljÁ‚·‚鏈—
99+procedure TInputAssistForm.AddListViewItem(ResWord : TResistWord);
100+var
101+ item: TListItem;
102+begin
103+ item := GikoListView1.Items.Add;
104+ item.ImageIndex := -1;
105+ item.Caption := resWord.GetKey;
106+ item.SubItems.Add(resWord.GetCategory);
107+ item.Data := resWord;
108+end;
109+//! “o˜^’PŒêˆê——‚©‚çƒAƒCƒeƒ€‚ð‘I‘ð‚µ‚½‚Æ‚«‚̃Cƒxƒ“ƒg
110+procedure TInputAssistForm.GikoListView1SelectItem(Sender: TObject;
111+ Item: TListItem; Selected: Boolean);
112+begin
113+ if (Item <> nil) and (Item.Data <> nil) then begin
114+ KeyNameEdit.Text := TResistWord(Item.Data).GetKey;
115+ CategoryNameEdit.Text := TResistWord(Item.Data).GetCategory;
116+ TextMemo.Lines.Text := TResistWord(Item.Data).GetText;
117+ end else begin
118+ TextMemo.Lines.Text := '';
119+ end;
120+end;
121+//! ’ljÁƒ{ƒ^ƒ“‰Ÿ‰ºŽž‚̃Cƒxƒ“ƒg
122+procedure TInputAssistForm.AddButtonClick(Sender: TObject);
123+var
124+ resWord : TResistWord;
125+begin
126+ if (Length(KeyNameEdit.Text) = 0) then begin
127+ ShowMessage('ƒL[–¼‚ðÝ’肵‚Ä‚­‚¾‚³‚¢B');
128+ end else begin
129+ resWord := InputAssistDM.Add(KeyNameEdit.Text);
130+ resWord.SetCategory(CategoryNameEdit.Text);
131+ resWord.SetText(TextMemo.Text);
132+ AddListViewItem(resWord);
133+ GikoListView1.AlphaSort;
134+ end;
135+end;
136+//! íœƒ{ƒ^ƒ“‰Ÿ‰ºŽž‚̃Cƒxƒ“ƒg
137+procedure TInputAssistForm.DeleteButtonClick(Sender: TObject);
138+begin
139+ if GikoListView1.Selected <> nil then begin
140+ InputAssistDM.DeleteResistWord(GikoListView1.Selected.Data);
141+ GikoListView1.Selected.Data := nil;
142+ GikoListView1.DeleteSelected;
143+ end;
144+end;
145+//! “K—pƒ{ƒ^ƒ“‰Ÿ‰ºŽž‚̃Cƒxƒ“ƒg
146+procedure TInputAssistForm.ApplyButtonClick(Sender: TObject);
147+var
148+ resWord : TResistWord;
149+begin
150+ if GikoListView1.Selected <> nil then begin
151+ if (Length(KeyNameEdit.Text) = 0) then begin
152+ ShowMessage('ƒL[–¼‚𖳂µ‚É‚Í‚Å‚«‚Ü‚¹‚ñB');
153+ end else begin
154+ resWord := TResistWord(GikoListView1.Selected.Data);
155+ resWord.SetKey(KeyNameEdit.Text);
156+ resWord.SetCategory(CategoryNameEdit.Text);
157+ resWord.SetText(TextMemo.Text);
158+ // ˆê——‚̍XV
159+ GikoListView1.Selected.Caption := resWord.GetKey;
160+ GikoListView1.Selected.SubItems[0] := resWord.GetCategory;
161+ GikoListView1.AlphaSort;
162+ end;
163+ end;
164+end;
165+//! ƒtƒH[ƒ€‚ð•Â‚¶‚é‚Æ‚«‚̃Cƒxƒ“ƒg
166+procedure TInputAssistForm.FormClose(Sender: TObject;
167+ var Action: TCloseAction);
168+begin
169+ //ƒ\[ƒgó‘Ԃ̐ݒè
170+ InputAssistDM.Sorted := True;
171+end;
172+//! “o˜^’PŒêˆê——‚̃\[ƒg—p‚Ì”äŠrˆ—
173+procedure TInputAssistForm.GikoListView1Compare(Sender: TObject; Item1,
174+ Item2: TListItem; Data: Integer; var Compare: Integer);
175+begin
176+ if ((FSortColumn and 2) > 0) then begin
177+ // ƒJƒeƒSƒŠ‚Ń\[ƒg
178+ Compare := AnsiCompareStr(Item1.SubItems[0], Item2.SubItems[0]);
179+ if (Compare = 0) then begin
180+ Compare := AnsiCompareStr(Item1.Caption, Item2.Caption);
181+ end;
182+ end else begin
183+ // ƒL[‚Ń\[ƒg
184+ Compare := AnsiCompareStr(Item1.Caption, Item2.Caption);
185+ if (Compare = 0) then begin
186+ Compare := AnsiCompareStr(Item1.SubItems[0], Item2.SubItems[0]);
187+ end;
188+ end;
189+ // ¸‡~‡‚Ì”½“]
190+ if ((FSortColumn and 1) > 0) then begin
191+ Compare := Compare * -1;
192+ end;
193+ ;
194+end;
195+//! “o˜^’PŒêˆê——‚̃ŠƒXƒg‚̃Jƒ‰ƒ€ƒNƒŠƒbƒNƒCƒxƒ“ƒg
196+procedure TInputAssistForm.GikoListView1ColumnClick(Sender: TObject;
197+ Column: TListColumn);
198+var
199+ i : Integer;
200+begin
201+ if Column <> nil then begin
202+ // ƒCƒ[ƒW‚̍폜
203+ for i := 0 to GikoListView1.Columns.Count - 1 do begin
204+ GikoListView1.Column[i].ImageIndex := -1;
205+ end;
206+
207+ // FSortColumn ‹ô”:¸‡ Šï”F~‡
208+ if Column.Caption = 'ƒL[' then begin
209+ if FSortColumn = 0 then begin
210+ FSortColumn := 1;
211+ end else begin
212+ FSortColumn := 0;
213+ end;
214+ end else begin
215+ if FSortColumn = 2 then begin
216+ FSortColumn := 3;
217+ end else begin
218+ FSortColumn := 2;
219+ end;
220+ end;
221+ Column.ImageIndex := (FSortColumn and 1);
222+ GikoListView1.AlphaSort;
223+ end;
224+
225+end;
226+//! I—¹ƒ{ƒ^ƒ“‚ð‰Ÿ‰ºŽž‚̃Cƒxƒ“ƒg
227+procedure TInputAssistForm.CloseButtonClick(Sender: TObject);
228+begin
229+ Close();
230+end;
231+//! ƒJƒeƒSƒŠiž‚݃Rƒ“ƒ{ƒ{ƒbƒNƒX‚ð“ÇŽæê—p‚É‚·‚邽‚߂̃Cƒxƒ“ƒgˆ—
232+procedure TInputAssistForm.CategoryComboBoxKeyPress(Sender: TObject;
233+ var Key: Char);
234+begin
235+ Key := #0;
236+end;
237+//! ƒJƒeƒSƒŠiž‚݃Rƒ“ƒ{ƒ{ƒbƒNƒX‚ł̃JƒeƒSƒŠ•ÏXˆ—
238+procedure TInputAssistForm.CategoryComboBoxChange(Sender: TObject);
239+var
240+ i : Integer;
241+ key : String;
242+begin
243+ LockWindowUpdate(GikoListView1.Handle);
244+ GikoListView1.Clear;
245+ if (CategoryComboBox.ItemIndex <= 0) then begin
246+ for i := 0 to InputAssistDM.ResistWordCount - 1 do begin
247+ AddListViewItem(InputAssistDM.GetResistWord(i));
248+ end;
249+ end else begin
250+ key := CategoryComboBox.Items[CategoryComboBox.ItemIndex];
251+ for i := 0 to InputAssistDM.ResistWordCount - 1 do begin
252+ if (key = InputAssistDM.GetResistWord(i).GetCategory) then begin
253+ AddListViewItem(InputAssistDM.GetResistWord(i));
254+ end;
255+ end;
256+ end;
257+ LockWindowUpdate(0);
258+end;
259+
260+procedure TInputAssistForm.SetUpFromMain();
261+begin
262+ Self.Caption := '“ü—̓AƒVƒXƒgÝ’è';
263+ Panel3.Visible := True;
264+ Panel5.Visible := True;
265+ Panel7.Visible := False;
266+ TextMemo.ReadOnly := False;
267+ FInsertText := '';
268+ CloseAction.ShortCut := TShortCut(0);
269+end;
270+procedure TInputAssistForm.SetUpFromEditor();
271+var
272+ cat : TStringList;
273+begin
274+ Self.Caption := '“ü—̓AƒVƒXƒg';
275+ Panel3.Visible := False;
276+ Panel5.Visible := False;
277+ Panel7.Visible := True;
278+ TextMemo.ReadOnly := True;
279+ FInsertText := '';
280+ CloseAction.ShortCut := ShortCut(VK_ESCAPE, []);
281+ // ŒŸõ—p
282+ cat := TStringList.Create;
283+ try
284+ InputAssistDM.GetCategoryList(cat);
285+ CategoryComboBox.Items.Clear;
286+ CategoryComboBox.Items.Add('');
287+ CategoryComboBox.Items.AddStrings(cat);
288+ CategoryComboBox.ItemIndex := 0;
289+ finally
290+ cat.Free;
291+ end;
292+end;
293+function TInputAssistForm.GetInsertText(): String;
294+begin
295+ Result := FInsertText;
296+end;
297+
298+procedure TInputAssistForm.InsertButtonActionUpdate(Sender: TObject);
299+begin
300+ InsertButtonAction.Enabled := (GikoListView1.Selected <> nil);
301+end;
302+
303+procedure TInputAssistForm.InsertButtonActionExecute(Sender: TObject);
304+begin
305+ if (GikoListView1.Selected = nil) then begin
306+ FInsertText := '';
307+ Self.ModalResult := mrNone;
308+ end else begin
309+ FInsertText := TResistWord(GikoListView1.Selected.Data).GetText;
310+ Self.ModalResult := mrOk;
311+ end;
312+end;
313+
314+procedure TInputAssistForm.CloseActionExecute(Sender: TObject);
315+begin
316+ Self.ModalResult := mrCancel;
317+end;
318+
319+end.
--- /dev/null
+++ b/InputAssistDataModule.dfm
@@ -0,0 +1,9 @@
1+object InputAssistDM: TInputAssistDM
2+ OldCreateOrder = False
3+ OnCreate = DataModuleCreate
4+ OnDestroy = DataModuleDestroy
5+ Left = 582
6+ Top = 174
7+ Height = 150
8+ Width = 215
9+end
--- /dev/null
+++ b/InputAssistDataModule.pas
@@ -0,0 +1,371 @@
1+unit InputAssistDataModule;
2+
3+interface
4+
5+uses
6+ SysUtils, Classes;
7+
8+type
9+ TResistWord = class;
10+
11+ TInputAssistDM = class(TDataModule)
12+ procedure DataModuleDestroy(Sender: TObject);
13+ procedure DataModuleCreate(Sender: TObject);
14+ private
15+ { Private éŒ¾ }
16+ FInit : Boolean;
17+ FDictionary : TStringList; ///< “o˜^’PŒê‚Æ’èŒ^•¶‚ÌŽ«‘
18+ function GetSorted: Boolean; ///< ƒ\[ƒg‚̏ó‘Ԃ̎擾
19+ procedure SetSorted(Value: Boolean); ///< ƒ\[ƒgó‘Ԃ̐ݒè
20+
21+ public
22+ { Public éŒ¾ }
23+ property Sorted : Boolean read GetSorted write SetSorted;
24+ procedure Init(FilePath: String);
25+ procedure SaveToFile(FilePath: String);
26+ function ResistWordCount : Integer; ///<“o˜^’PŒê”Žæ“¾
27+ function GetResistWord(Index: Integer): TResistWord; ///< “o˜^’PŒêŽæ“¾
28+ procedure DeleteResistWord(ResistWord: TResistWord); ///< “o˜^’PŒê‚̍폜
29+ function Add(Key: String): TResistWord; ///< “o˜^’PŒê’ljÁ
30+ procedure ChangeKey(ResistWord: TResistWord); ///< “o˜^’PŒê‚̃L[•ÏX
31+ //! Key‚ðƒL[‚ÉŽ‚“o˜^‚³‚ê‚Ä‚¢‚é’PŒê‚ðŽæ“¾
32+ function GetStartWithKeyResistWords(Key: String; var list: TStringList): Integer;
33+ //! Key‚ðƒJƒeƒSƒŠ‚ÉŽ‚“o˜^‚³‚ê‚Ä‚¢‚é’PŒê‚ðŽæ“¾
34+ function GetStartWithCategoryResistWords(Key: String; var list: TStringList): Integer;
35+ //! Key‚̃JƒeƒSƒŠ‚É“o˜^‚³‚ê‚Ä‚¢‚é’PŒê‚ðŽæ“¾
36+ function GetCategoryResistWords(Key: String; var list: TStringList): Integer;
37+ //! “o˜^Ï‚݃L[‚Ì‘S‚ẴJƒeƒSƒŠƒŠƒXƒgŽæ“¾
38+ procedure GetCategoryList(var list: TStringList);
39+
40+ end;
41+
42+ TResistWord = class(TObject)
43+ private
44+ FKey : String; ///< •ÏŠ·Žž‚̃L[‚É‚È‚é
45+ FCategory : String; ///< •ª—Þ
46+ FText : String; ///< ’èŒ^•¶
47+ public
48+ function GetKey: String;
49+ procedure SetKey(Value: String);
50+ function GetCategory: String;
51+ procedure SetCategory(Value: String);
52+ function GetText: String;
53+ procedure SetText(Value: String);
54+ property Key: String read FKey write FKey;
55+ property Category: String read FCategory write FCategory;
56+ property Text: String read GetText write SetText;
57+ end;
58+
59+ function CategorySort(List: TStringList; Index1, Index2: Integer): Integer;
60+var
61+ InputAssistDM: TInputAssistDM;
62+
63+implementation
64+
65+uses
66+ MojuUtils, IniFiles;
67+
68+{$R *.dfm}
69+//! FKey‚ɐݒ肳‚ê‚Ä‚¢‚é’l‚ðŽæ“¾‚·‚é
70+function TResistWord.GetKey: String;
71+begin
72+ //ƒGƒXƒP[ƒv‚µ‚Ä‚¢‚é=‚𕜌³‚·‚é
73+ Result := MojuUtils.CustomStringReplace(FKey, '&#61;', '=');
74+end;
75+//! FKey‚É’l‚ðÝ’è‚·‚é
76+procedure TResistWord.SetKey(Value: String);
77+begin
78+ //=‚Í•Û‘¶Žž‚ÉŽg‚¤‚̂ŃGƒXƒP[ƒv‚·‚é
79+ FKey := MojuUtils.CustomStringReplace(Value, '=', '&#61;');
80+end;
81+//! FCategory‚ɐݒ肳‚ê‚Ä‚¢‚é’l‚ðŽæ“¾‚·‚é
82+function TResistWord.GetCategory: String;
83+begin
84+ //ƒGƒXƒP[ƒv‚µ‚Ä‚¢‚é=‚𕜌³‚·‚é
85+ Result := MojuUtils.CustomStringReplace(FCategory, '&#61;', '=');
86+end;
87+//! FCategory‚É’l‚ðÝ’è‚·‚é
88+procedure TResistWord.SetCategory(Value: String);
89+begin
90+ //=‚Í•Û‘¶Žž‚ÉŽg‚¤‚̂ŃGƒXƒP[ƒv‚·‚é
91+ FCategory := MojuUtils.CustomStringReplace(Value, '=', '&#61;');
92+end;
93+//! FText‚ɐݒ肳‚ê‚Ä‚¢‚é’l‚ðŽæ“¾‚·‚é
94+function TResistWord.GetText: String;
95+begin
96+ //ƒGƒXƒP[ƒv‚µ‚Ä‚¢‚é=‚𕜌³‚·‚é
97+ Result := MojuUtils.CustomStringReplace(FText, '&#61;', '=');
98+ // #1‚É‚µ‚½‰üsƒR[ƒh‚ð#13#10‚É•œŒ³‚·‚é
99+ Result := MojuUtils.CustomStringReplace(Result, #1, #13#10);
100+end;
101+procedure TResistWord.SetText(Value: String);
102+begin
103+ //=‚Í•Û‘¶Žž‚ÉŽg‚¤‚̂ŃGƒXƒP[ƒv‚·‚é
104+ FText := MojuUtils.CustomStringReplace(Value, '=', '&#61;');
105+ //‰üsƒR[ƒh‚ð#1‚É‚·‚éi1s‚É‚·‚邽‚ß)
106+ FText := MojuUtils.CustomStringReplace(FText, #13#10, #1);
107+end;
108+//! ƒtƒ@ƒCƒ‹‚ð“ǂݍž‚ñ‚ŏ‰Šú‰»‚·‚é
109+procedure TInputAssistDM.Init(FilePath: String);
110+var
111+ ini : TMemIniFile;
112+ sections: TStringList;
113+ keys: TStringList;
114+ i, j : Integer;
115+ resWord : TResistWord;
116+begin
117+ FInit := True;
118+ try
119+ // ƒtƒ@ƒCƒ‹‚Ì‘¶Ý‚ðŠm”F
120+ if FileExists(FilePath) then begin
121+ ini := TMemIniFile.Create(FilePath);
122+ sections := TStringList.Create;
123+ keys := TStringList.Create;
124+ try
125+ ini.ReadSections(sections);
126+
127+ for i :=0 to sections.Count - 1 do begin
128+ keys.Clear;
129+ ini.ReadSection(sections[i], keys);
130+ for j := 0 to keys.Count - 1 do begin
131+ resWord := TResistWord.Create;
132+ resWord.SetCategory(sections[i]);
133+ resWord.SetKey(keys[j]);
134+ resWord.SetText(ini.ReadString(sections[i], keys[j], ''));
135+ FDictionary.AddObject(resWord.GetKey, resWord);
136+ end;
137+ end;
138+ finally
139+ keys.Free;
140+ sections.Free;
141+ ini.Free;
142+ end;
143+ end;
144+
145+ except
146+ FInit := False;
147+ end;
148+end;
149+//! Žw’肳‚ꂽƒpƒX‚̃tƒ@ƒCƒ‹‚É•Û‘¶‚·‚é
150+procedure TInputAssistDM.SaveToFile(FilePath: String);
151+var
152+ ini : TMemIniFile;
153+ i : Integer;
154+ resWord : TResistWord;
155+begin
156+ if FileExists(FilePath) then begin
157+ try
158+ DeleteFile(FilePath);
159+ except
160+ end;
161+ end;
162+ ini := TMemIniFile.Create(FilePath);
163+ try
164+ for i :=0 to FDictionary.Count - 1 do begin
165+ resWord := TResistWord(FDictionary.Objects[i]);
166+ ini.WriteString(resWord.FCategory, resWord.FKey, resWord.FText);
167+ end;
168+ ini.UpdateFile;
169+ finally
170+ ini.Free;
171+ end;
172+end;
173+//! ƒfƒXƒgƒ‰ƒNƒ^
174+procedure TInputAssistDM.DataModuleDestroy(Sender: TObject);
175+var
176+ i : Integer;
177+begin
178+ if (FDictionary <> nil) then begin
179+ for i := FDictionary.Count - 1 downto 0 do begin
180+ TResistWord(FDictionary.Objects[i]).Free;
181+ end;
182+ FDictionary.Clear;
183+ FDictionary.Capacity := 0;
184+ FDictionary.Free;
185+ end;
186+end;
187+//! ƒRƒ“ƒXƒgƒ‰ƒNƒ^
188+procedure TInputAssistDM.DataModuleCreate(Sender: TObject);
189+begin
190+ FDictionary := TStringList.Create;
191+ FDictionary.Duplicates := dupAccept;
192+ FDictionary.Sorted := True;
193+end;
194+//! “o˜^’PŒê”Žæ“¾
195+function TInputAssistDM.ResistWordCount : Integer;
196+begin
197+ Result := 0;
198+ if (FDictionary <> nil) then begin
199+ Result := FDictionary.Count;
200+ end;
201+end;
202+//! “o˜^’PŒêŽæ“¾
203+function TInputAssistDM.GetResistWord(Index: Integer): TResistWord;
204+begin
205+ Result := nil;
206+ if (FDictionary <> nil) then begin
207+ if (Index >= 0) and (Index < FDictionary.Count) then begin
208+ Result := TResistWord(FDictionary.Objects[index]);
209+ end;
210+ end;
211+end;
212+//! “o˜^’PŒê‚̍폜
213+procedure TInputAssistDM.DeleteResistWord(ResistWord: TResistWord);
214+var
215+ i : Integer;
216+begin
217+ if (FDictionary <> nil) then begin
218+ for i := 0 to FDictionary.Count - 1 do begin
219+ if (ResistWord = FDictionary.Objects[i]) then begin
220+ TResistWord(FDictionary.Objects[i]).Free;
221+ FDictionary.Delete(i);
222+ break;
223+ end;
224+ end;
225+ end;
226+end;
227+//! “o˜^’PŒê’ljÁ
228+function TInputAssistDM.Add(Key: String): TResistWord;
229+var
230+ resWord : TResistWord;
231+begin
232+ Result := nil;
233+ if (FDictionary <> nil) then begin
234+ resWord := TResistWord.Create;
235+ resWord.SetKey(Key);
236+ resWord.SetCategory('ƒJƒeƒSƒŠ');
237+ resWord.SetText('’èŒ^•¶');
238+ FDictionary.AddObject(Key, resWord);
239+ Result := resWord;
240+ end;
241+end;
242+//! “o˜^’PŒê‚̃L[•ÏX
243+procedure TInputAssistDM.ChangeKey(ResistWord: TResistWord);
244+var
245+ i : Integer;
246+begin
247+ if (FDictionary <> nil) then begin
248+ for i := 0 to FDictionary.Count - 1 do begin
249+ if (ResistWord = FDictionary.Objects[i]) then begin
250+ FDictionary.Strings[i] := ResistWord.GetKey;
251+ break;
252+ end;
253+ end;
254+ end;
255+end;
256+//! Key‚ðŽ‚Â“o˜^‚³‚ê‚Ä‚¢‚é’PŒê‚ðŽæ“¾
257+function TInputAssistDM.GetStartWithKeyResistWords(Key: String; var list: TStringList): Integer;
258+var
259+ i : Integer;
260+ resWord : TResistWord;
261+
262+begin
263+ Result := 0;
264+ if (FDictionary <> nil) and (list <> nil) then begin
265+ Key := ZenToHan(Key);
266+ for i := 0 to FDictionary.Count - 1 do begin
267+ if (AnsiPos(Key, ZenToHan(FDictionary.Strings[i])) = 1) then begin
268+ Inc(Result);
269+ resWord := TResistWord(FDictionary.Objects[i]);
270+ list.AddObject(resWord.GetKey + '(' +
271+ resWord.GetCategory + ')', resWord);
272+ end else if (Result > 0) then begin
273+ //ƒ\[ƒg‚³‚ê‚Ä‚¢‚é‚©‚çAƒqƒbƒg‚·‚ê‚ΘA‘±‚·‚é‚Í‚¸
274+ break;
275+ end;
276+ end;
277+ end;
278+end;
279+//! Key‚ðƒJƒeƒSƒŠ‚ÉŽ‚“o˜^‚³‚ê‚Ä‚¢‚é’PŒê‚ðŽæ“¾
280+function TInputAssistDM.GetStartWithCategoryResistWords(Key: String; var list: TStringList): Integer;
281+var
282+ i : Integer;
283+ resWord : TResistWord;
284+begin
285+ Result := 0;
286+ if (FDictionary <> nil) and (list <> nil) then begin
287+ Key := ZenToHan(Key);
288+ for i := 0 to FDictionary.Count - 1 do begin
289+ resWord := TResistWord(FDictionary.Objects[i]);
290+ if (AnsiPos(Key, ZenToHan(resWord.GetCategory)) = 1) then begin
291+ Inc(Result);
292+ list.AddObject(resWord.GetKey + '(' +
293+ resWord.GetCategory + ')', resWord);
294+ end;
295+ end;
296+ list.CustomSort(CategorySort);
297+ end;
298+end;
299+
300+//! ƒ\[ƒg‚̏ó‘Ԃ̎擾
301+function TInputAssistDM.GetSorted: Boolean;
302+begin
303+ Result := False;
304+ if (FDictionary <> nil) then begin
305+ Result := FDictionary.Sorted;
306+ end;
307+end;
308+//! ƒ\[ƒgó‘Ԃ̐ݒè
309+procedure TInputAssistDM.SetSorted(Value: Boolean);
310+begin
311+ if (FDictionary <> nil) then begin
312+ FDictionary.Sorted := Value;
313+ end;
314+end;
315+//! Key‚̃JƒeƒSƒŠ‚É“o˜^‚³‚ê‚Ä‚¢‚é’PŒê‚ðŽæ“¾
316+function TInputAssistDM.GetCategoryResistWords(Key: String; var list: TStringList): Integer;
317+var
318+ i : Integer;
319+ resWord : TResistWord;
320+begin
321+ Result := 0;
322+ if (FDictionary <> nil) and (list <> nil) then begin
323+ for i := 0 to FDictionary.Count - 1 do begin
324+ resWord := TResistWord(FDictionary.Objects[i]);
325+ if (Key = resWord.GetCategory) then begin
326+ Inc(Result);
327+ list.AddObject(resWord.GetKey + '(' +
328+ resWord.GetCategory + ')', resWord);
329+ end;
330+ end;
331+ list.CustomSort(CategorySort);
332+ end;
333+end;
334+
335+//! “o˜^Ï‚݃L[‚Ì‘S‚ẴJƒeƒSƒŠƒŠƒXƒgŽæ“¾
336+procedure TInputAssistDM.GetCategoryList(var list: TStringList);
337+var
338+ i : Integer;
339+begin
340+ if (FDictionary <> nil) and (list <> nil) then begin
341+ // d•¡ƒ`ƒFƒbƒN‚ðTStringList‚Ì‹@”\‚ōs‚¤
342+ list.Clear;
343+ list.Duplicates := dupIgnore;
344+ list.Sorted := true;
345+ list.BeginUpdate;
346+ for i := 0 to FDictionary.Count - 1 do begin
347+ list.Add(TResistWord(FDictionary.Objects[i]).GetCategory);
348+ end;
349+ list.EndUpdate;
350+ end;
351+end;
352+
353+//! Key‚ðƒJƒeƒSƒŠ‚ÉŽ‚“o˜^’PŒê‚ð•Ô‚·Žž‚̃\[ƒg—p”äŠrƒƒ\ƒbƒh
354+function CategorySort(List: TStringList; Index1, Index2: Integer): Integer;
355+var
356+ resWord1 : TResistWord;
357+ resWord2 : TResistWord;
358+begin
359+ Result := 0;
360+ try
361+ resWord1 := TResistWord(List.Objects[Index1]);
362+ resWord2 := TResistWord(List.Objects[Index2]);
363+ Result := AnsiCompareStr(resWord1.GetCategory, resWord2.GetCategory);
364+ if (Result = 0) then begin
365+ Result := AnsiCompareStr(resWord1.GetKey, resWord2.GetKey);
366+ end;
367+ except
368+ end;
369+end;
370+
371+end.
--- a/ItemDownload.pas
+++ b/ItemDownload.pas
@@ -981,9 +981,9 @@ begin
981981
982982 //dat—Ž‚¿ƒXƒŒ‚̃\[ƒg‡‚ðŒˆ’è‚·‚邽‚߂Ƀ\[ƒg‚·‚é
983983 if GikoSys.Setting.DatOchiSortIndex >= 0 then begin
984- Sort.SortNoFlag := true;
985- Sort.SortOrder := GikoSys.Setting.DatOchiSortOrder;
986- Sort.SortIndex := GikoSys.Setting.DatOchiSortIndex;
984+ Sort.SetSortNoFlag(true);
985+ Sort.SetSortOrder(GikoSys.Setting.DatOchiSortOrder);
986+ Sort.SetSortIndex(GikoSys.Setting.DatOchiSortIndex);
987987 //Sort.SortNonAcquiredCountFlag := GikoSys.Setting.NonAcquiredCount;
988988 Board.CustomSort(ThreadItemSortProc);
989989 end;
@@ -1029,7 +1029,7 @@ begin
10291029 Board.Items[i].No := Board.IntData;
10301030 Board.Items[i].AllResCount := Board.Items[i].Count;
10311031 Board.Items[i].NewResCount := 0;
1032- Board.Items[i].AgeSage := gasNone;
1032+ Board.Items[i].AgeSage := gasArch;
10331033 end;
10341034 end;
10351035
@@ -1084,7 +1084,7 @@ begin
10841084 Board.Items[i].No := NumCount;
10851085 Board.Items[i].AllResCount := Board.Items[i].Count;
10861086 Board.Items[i].NewResCount := 0;
1087- Board.Items[i].AgeSage := gasNone;
1087+ Board.Items[i].AgeSage := gasArch;
10881088 end;
10891089 end;
10901090 //ƒŠƒXƒg(subject.txt)‚ð•Û‘¶
--- a/KeySetting.pas
+++ b/KeySetting.pas
@@ -111,7 +111,6 @@ begin
111111 if ListView.Items.Count > 0 then
112112 ListView.Selected := ListView.Items[0];
113113 EditorForm := TEditorForm.Create(Self);
114- GikoSys.LoadKeySetting(EditorForm.ActionList, GikoSys.GetEditorKeyFileName);
115114 try
116115 for i := 0 to EditorForm.ActionList.ActionCount - 1 do begin
117116 if EditorForm.ActionList.Actions[i] is TAction then begin
--- a/ListViewUtils.pas
+++ b/ListViewUtils.pas
@@ -10,6 +10,7 @@ type
1010 TListViewUtils = class(TObject)
1111 private
1212 {Private éŒ¾}
13+
1314 class procedure DrawCategoryItem(BBS: TBBS; Item: TListItem; ListView: TListView);
1415 class procedure DrawBoardItem(Category: TCategory; Item: TListItem; ListView: TListView);
1516 class procedure DrawThreadItem(Board: TBoard; Item: TListItem; ListView: TListView);
@@ -30,11 +31,10 @@ type
3031 class procedure ListViewData(Sender: TObject; Item: TListItem);
3132 end;
3233
33-
3434 implementation
3535
3636 uses
37- GikoSystem, Sort, Setting, Giko, MojuUtils, GikoDataModule;
37+ GikoSystem, Sort, Setting, Giko, MojuUtils, GikoDataModule, DateUtils, Math;
3838
3939 const
4040 //ƒcƒŠ[EƒŠƒXƒgƒAƒCƒRƒ“
@@ -80,9 +80,9 @@ begin
8080
8181 // ƒLƒƒƒrƒlƒbƒg•\Ž¦‘O‚ɍă\[ƒg
8282 if ( GikoSys.Setting.BBSSortIndex <> 0 ) or ( GikoSys.Setting.BBSSortOrder <> true ) then begin
83- Sort.SortOrder := true;
84- Sort.SortIndex := 0;
85- Sort.SortNoFlag := true;
83+ Sort.SetSortOrder(true);
84+ Sort.SetSortIndex(0);
85+ Sort.SetSortNoFlag(true);
8686 inBBS.Sort(CategorySortProc);
8787 end;
8888
@@ -99,9 +99,9 @@ begin
9999
100100 // ƒLƒƒƒrƒlƒbƒg•\Ž¦‘O‚ɍă\[ƒg
101101 if ( GikoSys.Setting.CategorySortIndex <> 0 ) or ( GikoSys.Setting.CategorySortOrder <> true ) then begin
102- Sort.SortOrder := true;
103- Sort.SortIndex := 0;
104- Sort.SortNoFlag := true;
102+ Sort.SetSortOrder(true);
103+ Sort.SetSortIndex(0);
104+ Sort.SetSortNoFlag(true);
105105 Category.CustomSort(BoardSortProc);
106106 end;
107107
@@ -221,31 +221,31 @@ begin
221221 ListView.Column[ idx ].ImageIndex := ITEM_ICON_SORT2;
222222
223223
224- Sort.SortNoFlag := NumberVisible;
224+ Sort.SetSortNoFlag(NumberVisible);
225225
226226 if TObject( GikoForm.ActiveList ) is TBBS then begin
227227 wkBBS := TBBS( GikoForm.ActiveList );
228228 orderList := GikoSys.Setting.BBSColumnOrder;
229- Sort.SortOrder := vSortOrder;
230- Sort.SortIndex := Integer( orderList[ idx ] );
231- GikoSys.Setting.BBSSortIndex := Sort.SortIndex;
232- GikoSys.Setting.BBSSortOrder := Sort.SortOrder;
229+ Sort.SetSortOrder(vSortOrder);
230+ Sort.SetSortIndex(Integer( orderList[ idx ] ));
231+ GikoSys.Setting.BBSSortIndex := Sort.GetSortIndex;
232+ GikoSys.Setting.BBSSortOrder := Sort.GetSortOrder;
233233 wkBBS.Sort(Sort.CategorySortProc);
234234 end else if TObject( GikoForm.ActiveList ) is TCategory then begin
235235 wkCategory := TCategory( GikoForm.ActiveList );
236236 orderList := GikoSys.Setting.CategoryColumnOrder;
237- Sort.SortOrder := vSortOrder;
238- Sort.SortIndex := Integer( orderList[ idx ] );
239- GikoSys.Setting.CategorySortIndex := Sort.SortIndex;
240- GikoSys.Setting.CategorySortOrder := Sort.SortOrder;
237+ Sort.SetSortOrder(vSortOrder);
238+ Sort.SetSortIndex(Integer( orderList[ idx ] ));
239+ GikoSys.Setting.CategorySortIndex := Sort.GetSortIndex;
240+ GikoSys.Setting.CategorySortOrder := Sort.GetSortOrder;
241241 wkCategory.CustomSort(BoardSortProc);
242242 end else if TObject( GikoForm.ActiveList ) is TBoard then begin
243243 wkBoard := TBoard( GikoForm.ActiveList );
244244 orderList := GikoSys.Setting.BoardColumnOrder;
245- Sort.SortOrder := vSortOrder;
246- Sort.SortIndex := Integer( orderList[ idx ] );
247- GikoSys.Setting.BoardSortIndex := Sort.SortIndex;
248- GikoSys.Setting.BoardSortOrder := Sort.SortOrder;
245+ Sort.SetSortOrder(vSortOrder);
246+ Sort.SetSortIndex(Integer( orderList[ idx ] ));
247+ GikoSys.Setting.BoardSortIndex := Sort.GetSortIndex;
248+ GikoSys.Setting.BoardSortOrder := Sort.GetSortOrder;
249249 wkBoard.CustomSort(ThreadItemSortProc);
250250 end;
251251
@@ -405,6 +405,16 @@ begin
405405 Board.NewThreadCount := Board.GetNewThreadCount;
406406 ListView.Items.Count := Board.NewThreadCount;
407407 end;
408+ gvtArch:
409+ begin
410+ Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
411+ ListView.Items.Count := Board.ArchiveThreadCount;
412+ end;
413+ gvtLive:
414+ begin
415+ Board.LiveThreadCount := Board.GetLiveThreadCount;
416+ ListView.Items.Count := Board.LiveThreadCount;
417+ end;
408418 gvtUser:
409419 begin
410420 Board.UserThreadCount:= Board.GetUserThreadCount;
@@ -555,6 +565,8 @@ begin
555565 gvtAll: BoardCnt := Board.Count;
556566 gvtLog: BoardCnt := Board.LogThreadCount;
557567 gvtNew: BoardCnt := Board.NewThreadCount;
568+ gvtArch: BoardCnt := Board.ArchiveThreadCount;
569+ gvtLive: BoardCnt := Board.LiveThreadCount;
558570 gvtUser: BoardCnt := Board.UserThreadCount;
559571 else
560572 BoardCnt := 0;
@@ -570,6 +582,8 @@ begin
570582 ThreadItem := TThreadItem(Board.Items[Item.Index]);
571583 gvtLog: ThreadItem := Board.GetLogThread(Item.Index);
572584 gvtNew: ThreadItem := Board.GetNewThread(Item.Index);
585+ gvtArch: ThreadItem := Board.GetArchiveThread(Item.Index);
586+ gvtLive: ThreadItem := Board.GetLiveThread(Item.Index);
573587 gvtUser: ThreadItem := Board.GetUserThread(Item.Index);
574588 end;
575589 //////////////////////////////////////////////////////////////////////////
@@ -598,6 +612,7 @@ begin
598612 gasNew: Item.StateIndex := 0;
599613 gasAge: Item.StateIndex := 1;
600614 gasSage: Item.StateIndex := 2;
615+ gasArch: Item.StateIndex := 3;
601616 end;
602617
603618 if ThreadItem.IsLogFile then begin
@@ -612,6 +627,7 @@ end;
612627 class procedure TListViewUtils.DrawItemLogThread(Thread: TThreadItem; Item: TListItem; ColumnCount: Integer);
613628 var
614629 i, idx : Integer;
630+ spanday: Double;
615631 begin
616632 idx := 0;
617633 for i := 0 to ColumnCount - 1 do begin
@@ -655,6 +671,20 @@ begin
655671 Item.SubItems[ idx ] := '';
656672 end else
657673 Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', Thread.LastModified);
674+ gbcVigor:
675+ begin
676+ if (Thread.AgeSage <> gasArch) then begin
677+ spanday := DaySpan(Sort.GetSortDate, Thread.CreateDate);
678+ end else begin
679+ spanday := DaySpan(Thread.LastModified, Thread.CreateDate);
680+ end;
681+ if (spanday > 0) then begin
682+ Item.SubItems[ idx ] := Format('%f', [Thread.AllResCount / spanday]);
683+ end else begin
684+ Item.SubItems[ idx ] := '';
685+ end;
686+
687+ end;
658688 end;
659689 Inc( idx );
660690 end;
@@ -668,6 +698,7 @@ end;
668698 class procedure TListViewUtils.DrawItemNoLogThread(Thread: TThreadItem; Item: TListItem; ColumnCount: Integer);
669699 var
670700 i, idx: Integer;
701+ spanday: Double;
671702 begin
672703 idx := 0;
673704 for i := 0 to ColumnCount - 1do begin
@@ -686,9 +717,25 @@ begin
686717 Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', Thread.CreateDate);
687718 gbcLastModified:
688719 Item.SubItems[ idx ] := '';
720+ gbcVigor:
721+ begin
722+ if (Thread.AgeSage <> gasArch) then begin
723+ spanday := DaySpan(Sort.GetSortDate, Thread.CreateDate);
724+ end else begin
725+ spanday := DaySpan(Thread.LastModified, Thread.CreateDate);
726+ end;
727+
728+ if (spanday > 0) then begin
729+ Item.SubItems[ idx ] := Format('%f', [Thread.AllResCount / spanday]);
730+ end else begin
731+ Item.SubItems[ idx ] := '';
732+ end;
733+
734+ end;
689735 else
690736 Item.SubItems[ idx ] := '';
691737 end;
738+
692739 Inc( idx );
693740 end;
694741 if Thread.NewArrival then
--- a/MojuUtils.pas
+++ b/MojuUtils.pas
@@ -32,6 +32,10 @@ uses
3232 //<font>ƒ^ƒO‚ð‘S‚č폜‚·‚é
3333 function DeleteFontTag( inSource : string) : string;
3434 function RemoveToken(var s: string;const delimiter: string): string;
35+ // –³ŠQ‰»(& -> &amp; " -> &auot; ‚É•ÏŠ·‚·‚é)
36+ function Sanitize(const s: String): String;
37+ // –³ŠQ‰»‰ðœ(&amp; -> & &auot; -> " ‚É•ÏŠ·‚·‚é)
38+ function UnSanitize(const s: String): String;
3539
3640 implementation
3741 // ƒ|ƒCƒ“ƒ^[•ƒAƒZƒ“ƒuƒ‰‚É‚æ‚鍂‘¬ƒ|ƒX
@@ -99,10 +103,10 @@ begin
99103 Result := StrPosEx(StrStart, StrEnd, SubstrStart, SubstrEnd);
100104
101105 while (Result <> nil) and (StrEnd - Result >= L2) do begin
102- ByteType := StrByteType(StrStart, Integer(Result-StrStart));
103- if (ByteType <> mbTrailByte) and
104- (CompareString(LOCALE_USER_DEFAULT, SORT_STRINGSORT, Result, L2, SubstrStart, L2) = 2)
105- then Exit;
106+ ByteType := StrByteType(StrStart, Integer(Result-StrStart));
107+ if (ByteType <> mbTrailByte) and
108+ (CompareString(LOCALE_USER_DEFAULT, SORT_STRINGSORT, Result, L2, SubstrStart, L2) = 2)
109+ then Exit;
106110 if (ByteType = mbLeadByte) then Inc(Result);
107111 Inc(Result);
108112 Result := StrPosEx(Result, StrEnd, SubStrStart, SubStrEnd);
@@ -348,16 +352,32 @@ begin
348352 pds := PChar(delimiter);
349353 pde := pds + Length(delimiter);
350354
351- pos := AnsiStrPosEx(pss, pse, pds, pde);
355+ pos := StrPosEx(pss, pse, pds, pde);
352356 if pos <> nil then begin
353357 p := pos - pss;
354358 SetString(Result, pss, p);
355359 Delete(s, 1, p + Length(delimiter));
360+
361+ if (StrByteType(PChar(Result), Length(Result)-1) = mbLeadByte) then begin
362+ SetLength(Result, Length(Result) - 1);
363+ end;
356364 end else begin
357365 Result := s;
358366 s := '';
359367 end;
360368 end;
361369
370+//! –³ŠQ‰»(& -> &amp; " -> &auot; ‚É•ÏŠ·‚·‚é)
371+function Sanitize(const s: String): String;
372+begin
373+ Result := CustomStringReplace(s, '&', '&amp;');
374+ Result := CustomStringReplace(Result, '"', '&quot;');
375+end;
376+//! –³ŠQ‰»‰ðœ(&amp; -> & &auot; -> " ‚É•ÏŠ·‚·‚é)
377+function UnSanitize(const s: String): String;
378+begin
379+ Result := CustomStringReplace(s, '&quot;', '"');
380+ Result := CustomStringReplace(Result, '&amp;', '&');
381+end;
362382
363383 end.
--- a/Setting.pas
+++ b/Setting.pas
@@ -32,7 +32,7 @@ type
3232 TGikoResRange = (grrAll, grrSelect, grrKoko, grrNew);
3333
3434 /// ƒXƒŒƒbƒhˆê——•\Ž¦”͈Í
35- TGikoThreadRange = (gtrAll, gtrSelect, gtrLog, gtrNew);
35+ TGikoThreadRange = (gtrAll, gtrSelect, gtrLog, gtrNew, gtrLive, gtrArch);
3636
3737 //! ƒXƒpƒ€ƒtƒBƒ‹ƒ^[ƒAƒ‹ƒSƒŠƒYƒ€
3838 TGikoSpamFilterAlgorithm = (
@@ -73,15 +73,15 @@ type
7373 end;
7474 /// ƒXƒŒƒŠƒXƒg‚̃Jƒ‰ƒ€ ID
7575 type TGikoBoardColumnID = (gbcTitle, gbcAllCount, gbcLocalCount, gbcNonAcqCount,
76- gbcNewCount, gbcUnReadCount, gbcRoundName, gbcRoundDate, gbcCreated, gbcLastModified );{gbcLastModified,}
76+ gbcNewCount, gbcUnReadCount, gbcRoundName, gbcRoundDate, gbcCreated, gbcLastModified, gbcVigor );{gbcLastModified,}
7777 /// ƒXƒŒƒŠƒXƒg‚̃Jƒ‰ƒ€–¼
78- const GikoBoardColumnCaption : array[0..9] of string =
78+ const GikoBoardColumnCaption : array[0..10] of string =
7979 ( 'ƒXƒŒƒbƒh–¼', 'ƒJƒEƒ“ƒg', 'Žæ“¾', '–¢Žæ“¾', 'V’…',
80- '–¢“Ç', '„‰ñ—\–ñ', 'Žæ“¾“úŽž', 'ƒXƒŒì¬“úŽž', 'ÅIXV“úŽž' );
81- const GikoBoardColumnAlignment : array[0..9] of TAlignment = (
80+ '–¢“Ç', '„‰ñ—\–ñ', 'Žæ“¾“úŽž', 'ƒXƒŒì¬“úŽž', 'ÅIXV“úŽž', '¨‚¢' );
81+ const GikoBoardColumnAlignment : array[0..10] of TAlignment = (
8282 taLeftJustify, taRightJustify, taRightJustify, taRightJustify,
8383 taRightJustify, taRightJustify, taLeftJustify, taLeftJustify,
84- taLeftJustify, taLeftJustify);
84+ taLeftJustify, taLeftJustify, taRightJustify);
8585 /// ƒXƒŒƒŠƒXƒgƒJƒ‰ƒ€”z—ñ
8686 type TGikoBoardColumnList = class( TList )
8787 private
@@ -259,7 +259,7 @@ type
259259 //ƒŠƒXƒgƒJƒ‰ƒ€ƒwƒbƒ_[ƒTƒCƒY
260260 FBBSColumnWidth: array[0..0] of Integer;
261261 FCategoryColumnWidth: array[0..2] of Integer;
262- FBoardColumnWidth: array[0..9] of Integer;
262+ FBoardColumnWidth: array[0..10] of Integer;
263263
264264 /// ƒJƒeƒSƒŠƒŠƒXƒgƒJƒ‰ƒ€‡˜
265265 FBBSColumnOrder : TGikoBBSColumnList;
@@ -491,7 +491,7 @@ type
491491 function GetMainKeyFileName: String;
492492 function GetEditorKeyFileName: String;
493493 procedure WriteLogFolder(AVal : String);
494-
494+ function GetInputAssistFileName : String;
495495 //ŽóMƒoƒbƒtƒ@ƒTƒCƒY
496496 property RecvBufferSize: Integer read FRecvBufferSize write FRecvBufferSize;
497497 //HTTP1.1Žg—p
@@ -772,7 +772,8 @@ const
772772 MAX_POPUP_RES : Integer = 10;
773773 GESTURE_FILE_NAME = 'Gestures.ini';
774774 SPAMFILTER_FILE_NAME = 'SpamFilter.ini';
775- LANGUAGE_FILE_NAME = 'language.ini';
775+ LANGUAGE_FILE_NAME = 'language.ini';
776+ INPUTASSIST_FILE_NAME = 'InputAssist.ini';
776777
777778
778779
@@ -935,7 +936,7 @@ procedure TSetting.ReadSettingFile();
935936 const
936937 DEFAULT_BBS_WIDTH: array[0..0] of Integer = (140);
937938 DEFAULT_CATEGORY_WIDTH: array[0..2] of Integer = (150, 80, 130);
938- DEFAULT_BOARD_WIDTH: array[0..9] of Integer = (350, 60, 60, 60, 60, 60, 80, 130, 130, 130);
939+ DEFAULT_BOARD_WIDTH: array[0..10] of Integer = (350, 60, 60, 60, 60, 60, 80, 130, 130, 130, 60);
939940 MAX_WIDTH: Integer = 2000;
940941 var
941942 ini: TMemIniFile;
@@ -1164,8 +1165,12 @@ begin
11641165 end;
11651166 if FBoardColumnOrder.Count = 0 then begin
11661167 // Ý’肪–³‚¢‚̂ō쐬
1167- for i := 0 to Integer( High( TGikoBoardColumnID ) ) do
1168- FBoardColumnOrder.Add( TGikoBoardColumnID( i ) );
1168+ for i := 0 to Integer( High( TGikoBoardColumnID ) ) do begin
1169+ // ¨‚¢‚̃Jƒ‰ƒ€‚̓fƒtƒHƒ‹ƒg‚Å”ñ•\Ž¦‚É‚·‚é
1170+ if ( i <> Ord(gbcVigor) ) then begin
1171+ FBoardColumnOrder.Add( TGikoBoardColumnID( i ) );
1172+ end;
1173+ end;
11691174 end;
11701175 finally
11711176 wkList.Free;
@@ -1257,7 +1262,7 @@ begin
12571262 FBoardSortIndex := ini.ReadInteger('ThreadList', 'BoardSortIndex', 0);
12581263 FBoardSortOrder := ini.ReadBool('ThreadList', 'BoardSortOrder', True);
12591264 // DLŒã‚ÌŽ©“®ƒ\[ƒg
1260- FAutoSortThreadList := ini.ReadBool('ThreadList', 'AutoSort', True);
1265+ FAutoSortThreadList := ini.ReadBool('ThreadList', 'AutoSort', False);
12611266 //Dat—Ž‚¿ƒXƒŒƒ\[ƒg‡
12621267 FDatOchiSortIndex := ini.ReadInteger('ThreadList', 'DatOchiSortIndex', -1);
12631268 FDatOchiSortOrder := ini.ReadBool('ThreadList', 'DatOchiSortOrder', False);
@@ -2175,8 +2180,13 @@ begin
21752180 end;
21762181 function TSetting.GetEditorKeyFileName: String;
21772182 begin
2178- Result := GetConfigDir + EKEY_SETTING_FILE_NAME;
2183+ Result := GetConfigDir + EKEY_SETTING_FILE_NAME;
2184+end;
2185+function TSetting.GetInputAssistFileName : String;
2186+begin
2187+ Result := GetConfigDir + INPUTASSIST_FILE_NAME;
21792188 end;
2189+
21802190 end.
21812191
21822192
--- a/Sort.pas
+++ b/Sort.pas
@@ -4,7 +4,7 @@ interface
44 uses
55 Windows, Messages, SysUtils, Classes, Controls, Forms,
66 BoardGroup,DateUtils,
7- Setting;
7+ Setting, Math;
88
99 function CategorySortProc(Item1, Item2: Pointer): integer;
1010 function BoardSortProc(List: TStringList; Item1, Item2: Integer): integer;
@@ -12,13 +12,62 @@ uses
1212 function CompareBool(Item1, Item2: Boolean): integer;
1313 function CompareInt(Item1, Item2: Integer): Integer;
1414 function CompareDate(Item1, Item2: TDateTime): Integer;
15+ procedure SetSortDate(Date: TDateTime);
16+ function GetSortDate(): TDateTime;
17+ procedure SetSortOrder(Order: Boolean);
18+ function GetSortOrder: Boolean;
19+ procedure SetSortIndex(Index: Integer);
20+ function GetSortIndex: Integer;
21+ procedure SetSortNoFlag(Flag: Boolean);
22+ function GetSortNoFlag: Boolean;
23+
24+implementation
1525
1626 var
17- SortOrder: Boolean;
18- SortIndex: Integer;
19- SortNoFlag: Boolean;
27+ FSortDate: TDateTime;
28+ FSortOrder: Boolean;
29+ FSortIndex: Integer;
30+ FSortNoFlag: Boolean;
2031
21-implementation
32+function CaclVigor(Thread: TThreadItem): Double;
33+var
34+ span : Double;
35+begin
36+ if (Thread.AgeSage <> gasArch) then begin
37+ span := DaySpan(Sort.GetSortDate, Thread.CreateDate);
38+ end else begin
39+ span := DaySpan(Thread.LastModified, Thread.CreateDate);
40+ end;
41+ if (span > 0) then begin
42+ Result := Thread.AllResCount / span;
43+ end else begin
44+ Result := 0;
45+ end;
46+end;
47+procedure SetSortOrder(Order: Boolean);
48+begin
49+ FSortOrder := Order;
50+end;
51+function GetSortOrder: Boolean;
52+begin
53+ Result := FSortOrder;
54+end;
55+procedure SetSortIndex(Index: Integer);
56+begin
57+ FSortIndex := Index;
58+end;
59+function GetSortIndex: Integer;
60+begin
61+ Result := FSortIndex;
62+end;
63+procedure SetSortNoFlag(Flag: Boolean);
64+begin
65+ FSortNoFlag := Flag;
66+end;
67+function GetSortNoFlag: Boolean;
68+begin
69+ Result := FSortNoFlag;
70+end;
2271
2372 function CategorySortProc(Item1, Item2: Pointer): integer;
2473 var
@@ -28,9 +77,9 @@ begin
2877 CategoryItem1 := TCategory(Item1);
2978 CategoryItem2 := TCategory(Item2);
3079
31- case TGikoBBSColumnID( SortIndex ) of
80+ case TGikoBBSColumnID( FSortIndex ) of
3281 gbbscTitle:
33- if SortNoFlag then
82+ if FSortNoFlag then
3483 Result := CompareInt(CategoryItem1.No, CategoryItem2.No)
3584 else
3685 Result := AnsiCompareText(CategoryItem1.Title, CategoryItem2.Title);
@@ -38,7 +87,7 @@ begin
3887 Result := CompareInt(CategoryItem1.No, CategoryItem2.No)
3988 end;
4089
41- if not SortOrder then
90+ if not FSortOrder then
4291 Result := Result * -1;
4392 end;
4493
@@ -49,9 +98,9 @@ var
4998 begin
5099 BoardItem1 := TBoard(List.Objects[Item1]);
51100 BoardItem2 := TBoard(List.Objects[Item2]);
52- case TGikoCategoryColumnID( SortIndex ) of
101+ case TGikoCategoryColumnID( FSortIndex ) of
53102 gccTitle:
54- if SortNoFlag then
103+ if FSortNoFlag then
55104 Result := CompareInt(BoardItem1.No, BoardItem2.No)
56105 else
57106 Result := AnsiCompareText(BoardItem1.Title, BoardItem2.Title);
@@ -65,7 +114,7 @@ begin
65114 Result := CompareInt(BoardItem1.No, BoardItem2.No)
66115 end;
67116
68- if not SortOrder then
117+ if not FSortOrder then
69118 Result := Result * -1;
70119 end;
71120
@@ -76,10 +125,10 @@ var
76125 begin
77126 ThreadItem1 := TThreadItem(List.Objects[ Item1 ]);
78127 ThreadItem2 := TThreadItem(List.Objects[ Item2 ]);
79- case TGikoBoardColumnID( SortIndex ) of
128+ case TGikoBoardColumnID( FSortIndex ) of
80129 gbcTitle:
81130 begin
82- if SortNoFlag then
131+ if FSortNoFlag then
83132 Result := CompareInt(ThreadItem1.No, ThreadItem2.No)
84133 else
85134 Result := AnsiCompareText(ThreadItem1.Title, ThreadItem2.Title)
@@ -105,6 +154,7 @@ begin
105154 gbcRoundDate: Result := CompareDateTime(ThreadItem1.RoundDate, ThreadItem2.RoundDate); {gbcLastModified:}
106155 gbcCreated: Result := CompareDateTime(ThreadItem1.CreateDate, ThreadItem2.CreateDate);
107156 gbcLastModified: Result := CompareDateTime(ThreadItem1.LastModified, ThreadItem2.LastModified); {gbcLastModified:}
157+ gbcVigor: Result := CompareValue(CaclVigor(ThreadItem1), CaclVigor(ThreadItem2));
108158 else
109159 Result := 0;
110160 end;
@@ -122,12 +172,12 @@ begin
122172 else
123173 Result := CompareDate(ThreadItem1.LastModified, ThreadItem2.LastModified);
124174 }
125- if not SortOrder then
175+ if not FSortOrder then
126176 Result := Result * -1;
127177
128178 // ƒ\[ƒg•]‰¿‚ª“¯‚¶ê‡‚́A‘æ1ƒJƒ‰ƒ€‚̏¸‡‚Ƀ\[ƒg
129179 if Result = 0 then begin
130- if SortNoFlag then
180+ if FSortNoFlag then
131181 Result := CompareInt(ThreadItem1.No, ThreadItem2.No)
132182 else
133183 Result := AnsiCompareText(ThreadItem1.Title, ThreadItem2.Title)
@@ -163,5 +213,12 @@ begin
163213 else
164214 Result := 0;
165215 end;
166-
216+procedure SetSortDate(Date: TDateTime);
217+begin
218+ FSortDate := Date;
219+end;
220+function GetSortDate(): TDateTime;
221+begin
222+ Result := FSortDate;
223+end;
167224 end.
--- a/ToolBarUtil.pas
+++ b/ToolBarUtil.pas
@@ -22,13 +22,15 @@ const
2222 'MuteAction',
2323 'BeLogInOutAction');
2424 //ƒŠƒXƒgƒc[ƒ‹ƒo[ƒfƒtƒHƒ‹ƒg
25- DEF_LIST: array[0..16] of string = ('ListNumberVisibleAction',
25+ DEF_LIST: array[0..18] of string = ('ListNumberVisibleAction',
2626 'IconStyle',
2727 'UpFolderAction',
2828 '',
2929 'AllItemAction',
3030 'LogItemAction',
3131 'NewItemAction',
32+ 'LiveItemAction',
33+ 'ArchiveItemAction',
3234 'SelectItemAction',
3335 '',
3436 'ThreadEditorAction',
@@ -61,12 +63,14 @@ const
6163
6264
6365 /// ƒ{ƒ^ƒ“ƒXƒ^ƒCƒ‹‚ª"tbsCheck"ƒ{ƒ^ƒ“‚̃AƒNƒVƒ‡ƒ“
64- CHECK_STYLE: array[0..35] of string = ('CabinetVisibleAction',
66+ CHECK_STYLE: array[0..37] of string = ('CabinetVisibleAction',
6567 'MuteAction',
6668 'ArrangeAction',
6769 'AllItemAction',
6870 'LogItemAction',
6971 'NewItemAction',
72+ 'LiveItemAction',
73+ 'ArchiveItemAction',
7074 'SelectItemAction',
7175
7276 'StdToolBarVisibleAction',
--- a/gikoNavi.dpr
+++ b/gikoNavi.dpr
@@ -71,7 +71,9 @@ uses
7171 ListViewUtils in 'ListViewUtils.pas',
7272 GikoDataModule in 'GikoDataModule.pas' {GikoDM: TDataModule},
7373 BrowserRecord in 'BrowserRecord.pas',
74- GikoMessage in 'GikoMessage.pas';
74+ GikoMessage in 'GikoMessage.pas',
75+ InputAssist in 'InputAssist.pas' {InputAssistForm},
76+ InputAssistDataModule in 'InputAssistDataModule.pas' {InputAssistDM: TDataModule};
7577
7678 {$R *.RES}
7779 {$R gikoResource.res}
@@ -90,7 +92,11 @@ begin
9092 Wnd := FindWindow('TGikoForm', nil);
9193 if Wnd <> 0 then begin
9294 //Šù‚É‹N“®Ï‚݃MƒRƒiƒr‚̃AƒNƒeƒBƒu‰»•ƒAƒCƒRƒ“‰»‚³‚ê‚Ä‚½‚ç•œŒ³
93- SetForegroundWindow(Wnd);
95+ try
96+ SetForegroundWindow(Wnd);
97+ except
98+ //‰Šú‰»‚ªI‚í‚Á‚Ä‚¢‚È‚¢‚ƃtƒHƒAƒOƒ‰ƒEƒ“ƒh‚Ɉڂ¹‚¸‚É—áŠO”­¶
99+ end;
94100 if IsIconic(Wnd) then
95101 SendMessage(Wnd, WM_SYSCOMMAND, SC_RESTORE, -1);
96102 // AppWnd := GetWindowLong(Wnd, GWL_HWNDPARENT);
@@ -122,6 +128,7 @@ begin
122128 Application.CreateForm(TFavoriteDM, FavoriteDM);
123129 Application.CreateForm(TAddressHistoryDM, AddressHistoryDM);
124130 Application.CreateForm(TGikoDM, GikoDM);
131+ Application.CreateForm(TInputAssistDM, InputAssistDM);
125132 Application.CreateForm(TGikoForm, GikoForm);
126133 Application.Run;
127134 ReleaseMutex(hMutex);
Binary files a/gikoNavi.res and b/gikoNavi.res differ
--- /dev/null
+++ b/readme/InputAssist.ini
@@ -0,0 +1,23 @@
1+[ƒMƒR”L]
2+‚¬‚±=@@@@@@ÈÈ@@`ŒPP(,,߄Dß)@@@UUPU U
3+‚¬‚±Œã‚ë=@@@ ÈÈ@@@(@@,,)@@@/@@|@`iQQj
4+‚¬‚±À‚è=@@ÈÈ@@@(,,߄Dß)@@/ ‚‚`iQQj
5+‚¬‚±—§‚¿=@@ÈÈ@@(,,߄Dß)@ ¼@@‚@ `@@|@@ ‚µM‚i
6+
7+[ƒJƒeƒSƒŠ]
8+‚«‚½[=·À„ª„ª„ª( LÍ`)߁Íß)*߁[ß)¥ƒÖ¥) ߄Dß)L[`)¥Í¥)P°P)L_T`)`„DL)-Q-)L„DM)„ª„ª!!!
9+
10+[‘½”s]
11+‚«‚½[=·À„ª„ª„ª„ª„ª(߁Íß)„ª„ª„ª„ª„ª!!!!·À„ª„ª„ª„ª„ª(߁Íß)„ª„ª„ª„ª„ª!!!!·À„ª„ª„ª„ª„ª(߁Íß)„ª„ª„ª„ª„ª!!!!·À„ª„ª„ª„ª„ª(߁Íß)„ª„ª„ª„ª„ª!!!!·À„ª„ª„ª„ª„ª(߁Íß)„ª„ª„ª„ª„ª!!!!
12+
13+[“®•¨]
14+‚­‚Á‚­‚é=@ @ÉÉÉɁ@@-Q__@@(߁¸ß*)@@„Ÿ_Q___@______P@@˜¦_Ɂ܁_@@____@___@œc^_@/Rƒ~@__@__Q@@@@./É_ƒm_@@Q@@@./^._^RЁ@ß-@@И¦@-__P___________
15+
16+[ƒNƒ}[]
17+‚­‚܁[=@@ ¿QQQ¿ @@ | ƒm@@@@@ R @@/@@œ@@@œ |@ƒNƒ}„Ÿ„ŸII @ |@@@@( _œ_)@ ƒ~ @œc¤@@@|¾|@@¤M_ /@QQ@ Rƒm@/L>@ ) (QQQj@@@/@(_^ @|@@@@@@ / @|@@^_@_ @|@/@@@ )@ ) @¾@@@ i@ _ @@@@@@ _Q)
18+‰£‚é=@@@@@@@@@@@@@@@@@@@@@@Q ^-@ƒC¤_ @@@@@@@@@@ QQ@@@@@ @@^: : : : : : : : : : : ( @@@@@@@@@ qqqq@R@@@@@/: : : : ::;:;: ;: ;:;: ; : : : ::T @@@@@@@@@@q½@@}@@@@@{:: : : :ƒm@--]'@¤__: : ::p @@ ¿QQQ¿@ |@@ |@@@@@ {:: : :ƒm ,_;:;:;ƒm¤ ƒFª S: :::} @@ | ƒm@@@@@ R !@@ !@@@A@@‚Œ: :Ɂ@^“ñ\-¤@|: ::É @@/@@œ@@@œ |@@/@@@C,¥_@@|@/^@ P7/ /::ƒm @ |@@@@( _œ_)@ ƒ~^@, f,ˆ ¥@N@ r(_“ñ„Ÿ-„£{^ @œc¤@@@|¾|@@^@@¤¥æ f@@^¤^/|@PPR /@QQ@ Rƒm@/@@@@@@@@ ^@@ //@|^^_ r (QQQj@@@/@@@@@@@ @/@@@ //@@ /_ ^ @@@@@@@/@@@@@@@ @ / @@@@@@@/@
19+
20+[AA]
21+‚µ‚å‚Ú=(L¥ƒÖ¥`)
22+‚à‚¤‚±‚Ë‚¦‚æ=@@@@@@@@@@@@@@@@@„¡„Ÿ„¢ @@@@@@@@@@@@@@@@@b‚à.b @@@@@@@@@@@@@@@@@b‚¤@| @@@@@@@@@@@@@@@@@„ —ˆ„  @@@@@@@@@@@@@@@@@„ ‚Ë„  @@@@@@@@@@@@@@@@@„ ‚¦ .| @@@@@@@@@@@@@@@@@„ ‚æ .| @@@@@@ÊÞ¶@@@@ºÞÙ§@@„  !!.„  @@@@@@@@@@@@@@@@@„¤„Ÿ„§@@@@ÌßÝÌßÝ @@@@R(`„DL)Ɂ@R(`„DL)Ɂ@@(`„DL)Ɂ@@@ i@`„Dj @@@@|PPP|„Ÿ|PPP|„Ÿ|PPP|„Ÿ i R„¢U ` `@PP@@.PP@@PP@@ |>„£
23+
--- a/readme/Samba.default
+++ b/readme/Samba.default
@@ -9,11 +9,11 @@ comic6=30
99 dso=10
1010 etc3=30
1111 etc4=30
12-ex9=20
13-ex10=20
14-ex11=20
15-ex12=20
16-ex13=20
12+ex9=15
13+ex11=15
14+ex12=15
15+ex13=15
16+ex14=15
1717 food6=30
1818 game9=30
1919 game10=30
@@ -21,12 +21,9 @@ hobby7=30
2121 hobby8=30
2222 human5=30
2323 life7=30
24-live14=15
25-live16=15
26-live18=15
27-live19=15
28-live20=15
29-live21=15
24+live14=10
25+live19=10
26+live22x=10
3027 love3=30
3128 money4=30
3229 music4=30
@@ -43,8 +40,8 @@ school5=30
4340 science4=30
4441 society3=30
4542 sports2=0
46-sports9=30
47-that3=30
43+sports9=60
44+that4=30
4845 tmp5=45
4946 travel2=30
5047 tv7=30
@@ -53,4 +50,4 @@ idol=30
5350 pie=30
5451 sakura01=30
5552 sakura02=30
56-sakura03=30
\ No newline at end of file
53+sakura03=30
--- a/readme/readme.txt
+++ b/readme/readme.txt
@@ -1,4 +1,4 @@
1-¡ƒMƒRƒiƒr Version1.00 ÊÞÀ51 Readme.txt
1+¡ƒMƒRƒiƒr Version1.00 ÊÞÀ52 Readme.txt
22
33
44 ------------------------------
@@ -107,21 +107,28 @@ LICENSE
107107 ------------------------------
108108 —š—ð
109109 ------------------------------
110-200X/XX/XX
110+2006/XX/YY
111+ Version ÊÞÀ52
112+@“ü—̓AƒVƒXƒg‹@\’ljÁ
113+@ƒXƒŒƒbƒhˆê——‚Ɂh¨‚¢hƒJƒ‰ƒ€’ljÁiƒfƒtƒHƒ‹ƒg”ñ•\Ž¦j
114+@‚¨‹C‚É“ü‚èA—š—ðA‘—MƒƒO‚̃XƒŒƒbƒhƒ^ƒCƒgƒ‹–¼‚ðƒTƒjƒ^ƒCƒY‚·‚é‚悤‚ɏC³
115+iƒm[ƒgƒ“‚̌딽‰ž–â‘è‚Ö‚Ì•”•ª“I‘Ήžj
116+
117+2006/01/14
111118 Version ÊÞÀ51
119+@ƒƒCƒ“ƒtƒH[ƒ€ã‚ł̃Vƒ‡[ƒgƒJƒbƒgƒL[‚Ì—Dæ‡ˆÊ‚ªƒMƒRƒiƒrŽ©‘Ì‚ªÅãˆÊ‚ɕύX
112120 @ƒXƒŒƒbƒh•`‰æˆ—‚̍œK‰»
113121 @ƒŒƒX”ÔŽw’èURL‚ðƒNƒŠƒbƒN‚µ‚½‚Æ‚«‚Ì“®ì‚ŁAŽæ“¾Ï‚ÝŠO‚̃ŒƒX”Ԃ̏ꍇŽ©“®‚ÅDL‚·‚é‚悤‚ɕύX
114122 @ƒŒƒXƒGƒfƒBƒ^‚©‚çSamba‚̐ݒè’l‚ð•ÏX‚Å‚«‚é‚悤‚ɕύX
115123 @ƒLƒƒƒrƒlƒbƒgã‚ŃNƒŠƒbƒNEƒ_ƒuƒ‹ƒNƒŠƒbƒNƒCƒxƒ“ƒg‚ª‰ßè‚É”­¶‚·‚é•s‹ï‡‚̏C³
116124 @ƒ}ƒEƒXƒWƒFƒXƒ`ƒƒ[—LŒøŽž‚ɃvƒŒƒrƒ…[ã‚ʼnEƒNƒŠƒbƒN‚Å‚«‚È‚¢•s‹ï‡‚̏C³
117-@ƒƒCƒ“ƒtƒH[ƒ€ã‚ł̃Vƒ‡[ƒgƒJƒbƒgƒL[‚Ì—Dæ‡ˆÊ‚ªƒMƒRƒiƒrŽ©‘Ì‚ªÅãˆÊ‚ɕύX
118125 @ƒƒCƒ“ƒƒjƒ…[‚Ì‚¨‹C‚É“ü‚è‚Ì•`‰æ‚̍‚‘¬‰»
119126 @ƒXƒe[ƒ^ƒXƒo[‚ÉŒ»Ý•\Ž¦‚µ‚Ä‚¢‚éƒXƒŒƒbƒh‚Ì—e—Ê‚ð•\Ž¦‚·‚é‚悤‚É‚µ‚½
120127 @DAT—Ž‚¿‚µ‚½ƒXƒŒ‚Ì—e—Ê‚ðŽæ“¾‚Å‚«‚È‚¢•s‹ï‡‚̏C³
121128 @”XV‚э[ƒJƒ‹ƒtƒ@ƒCƒ‹‚ðŽw’è‚Å‚«‚é‚悤‚ɕύX
122129 @ƒXƒŒƒbƒhˆê——ƒ_ƒEƒ“ƒ[ƒhŒã‚̃\[ƒg‚ðƒIƒvƒVƒ‡ƒ“‰»
123130 @NGƒ[ƒh‚É‘S”¼Šp‚Ђ炪‚ȃJƒ^ƒJƒi‚̈Ⴂ‚𓯈ꎋ‚·‚éƒIƒvƒVƒ‡ƒ“‚̒ljÁ
124-@ƒŒƒX‚̍iž‚Ý‚Å‘S”¼Šp‚Ђ炪‚ȃJƒ^ƒJƒ^‚̈Ⴂ‚𖳎‹‚·‚é‚悤‚ɕύX
131+@ƒŒƒX‚̍iž‚Ý‚Å‘S”¼Šp‚Ђ炪‚ȃJƒ^ƒJƒi‚̈Ⴂ‚𖳎‹‚·‚é‚悤‚ɕύX
125132
126133 2005/10/10
127134 Version ÊÞÀ50 ƒŠƒŠ[ƒX3
--- a/readme/setup.INF
+++ b/readme/setup.INF
@@ -90,6 +90,7 @@ Folder=gikoNavi
9090 87=config\Board\ƒMƒRƒiƒr.txt
9191 88=Samba.default
9292 89=config\language.ini
93+90=config\InputAssist.ini
9394
9495 [Group]
9596 1=ƒMƒRƒiƒr,gikoNavi.exe
--- a/res/ExternalBoardPlugIn/Be2chPlugIn.dpr
+++ b/res/ExternalBoardPlugIn/Be2chPlugIn.dpr
@@ -79,7 +79,7 @@ const
7979 MAJOR_VERSION = 1;
8080 MINOR_VERSION = 0;
8181 RELEASE_VERSION = 'alpha';
82- REVISION_VERSION = 1;
82+ REVISION_VERSION = 3;
8383
8484 // =========================================================================
8585 // ŽG—pŠÖ”
--- a/res/ExternalBoardPlugIn/MachiBBSPlugIn.dpr
+++ b/res/ExternalBoardPlugIn/MachiBBSPlugIn.dpr
@@ -83,7 +83,7 @@ const
8383 MAJOR_VERSION = 1;
8484 MINOR_VERSION = 0;
8585 RELEASE_VERSION = 'beta';
86- REVISION_VERSION = 15;
86+ REVISION_VERSION = 17;
8787
8888 // =========================================================================
8989 // ŽG—pŠÖ”
--- a/res/ExternalBoardPlugIn/ShitarabaJBBSPlugIn.dpr
+++ b/res/ExternalBoardPlugIn/ShitarabaJBBSPlugIn.dpr
@@ -2,7 +2,7 @@ library ShitarabaJBBSPlugIn;
22
33 {
44 ShitarabaJBBSPlugIn
5- $Id: ShitarabaJBBSPlugIn.dpr,v 1.41 2005/07/28 14:14:37 h677 Exp $
5+ $Id: ShitarabaJBBSPlugIn.dpr,v 1.43 2006/02/21 15:58:27 h677 Exp $
66 }
77
88 uses
@@ -83,7 +83,7 @@ const
8383 MAJOR_VERSION = 1;
8484 MINOR_VERSION = 1;
8585 RELEASE_VERSION = 'alpha';
86- REVISION_VERSION = 12;
86+ REVISION_VERSION = 14;
8787
8888 SYNCRONIZE_MENU_CAPTION = '‚µ‚½‚ç‚ÎJBBS”XV';
8989
Binary files a/res/ExternalBoardPlugIn/ShitarabaJBBSPlugIn.res and b/res/ExternalBoardPlugIn/ShitarabaJBBSPlugIn.res differ
--- a/res/ExternalBoardPlugIn/ThreadItem.pas
+++ b/res/ExternalBoardPlugIn/ThreadItem.pas
@@ -13,7 +13,7 @@ uses
1313
1414 type
1515 // ƒXƒŒˆê——‚̏グ‰º‚°ƒtƒ‰ƒO
16- TThreadAgeSage = (tasNone, tasAge, tasSage, tasNew, tasNull);
16+ TThreadAgeSage = (tasNone, tasAge, tasSage, tasNew, tasArch, tasNull);
1717
1818 // TThreadItem ‚̃vƒƒpƒeƒBÝ’è^Žæ“¾ ID
1919 TThreadItemProperty = (
@@ -38,7 +38,8 @@ type
3838 tipDownloadHost, // : string // ¡‚̃zƒXƒg‚ƈႤê‡‚̃zƒXƒg
3939 tipAgeSage, // : TThreadAgeSage // ƒAƒCƒeƒ€‚̏グ‰º‚°
4040 tipURL, // : string // ƒXƒŒƒbƒh‚ðƒuƒ‰ƒEƒU‚Å•\Ž¦‚·‚éÛ‚Ì URL
41- tipFilePath // : string // ‚±‚̃XƒŒ‚ª•Û‘¶‚³‚ê‚Ä‚¢‚éƒpƒX
41+ tipFilePath, // : string // ‚±‚̃XƒŒ‚ª•Û‘¶‚³‚ê‚Ä‚¢‚éƒpƒX
42+ tipJumpAddress // : Integer // JUMPæƒŒƒX”ԍ†
4243 );
4344
4445
@@ -301,7 +302,8 @@ type
301302 procedure SetURL( param : string );
302303 function GetFilePath : string;
303304 {procedure SetFilePath( param : string );}
304-
305+ procedure SetJumpAddress( param : Integer );
306+ function GetJumpAddress : Integer;
305307 protected
306308 property Instance : DWORD read FInstance;
307309
@@ -358,6 +360,8 @@ type
358360 property URL : string read GetURL write SetURL;
359361 // ‚±‚̃XƒŒ‚ª•Û‘¶‚³‚ê‚Ä‚¢‚éƒpƒX
360362 property FilePath : string read GetFilePath {write SetFilePath};
363+ // JUMPæƒŒƒX”ԍ†
364+ property JumpAddress : Integer read GetJumpAddress write SetJumpAddress;
361365 end;
362366
363367 var
@@ -765,6 +769,15 @@ begin
765769 Result := string( tmp );
766770 DisposeResultString( tmp );
767771 end;
772+function TThreadItem.GetJumpAddress : Integer;
773+begin
774+ Result := GetLong( tipJumpAddress );
775+end;
776+
777+procedure TThreadItem.SetJumpAddress( param : Integer );
778+begin
779+ SetLong( tipJumpAddress, param );
780+end;
768781 {
769782 procedure TThreadItem.SetFilePath( param : string );
770783 begin