ギコナビ
修訂 | 156bf263201930bd9de562caddd3c7c767c26343 (tree) |
---|---|
時間 | 2006-02-19 03:52:11 |
作者 | cvs2git <cvs2git> |
Commiter | cvs2git |
This commit was manufactured by cvs2svn to create tag 'v1_52_0_645'.
@@ -1,6 +1,6 @@ | ||
1 | 1 | object EditorForm: TEditorForm |
2 | - Left = 328 | |
3 | - Top = 257 | |
2 | + Left = 432 | |
3 | + Top = 258 | |
4 | 4 | Width = 640 |
5 | 5 | Height = 449 |
6 | 6 | HorzScrollBar.Visible = False |
@@ -58,24 +58,14 @@ object EditorForm: TEditorForm | ||
58 | 58 | Top = 30 |
59 | 59 | Width = 632 |
60 | 60 | Height = 354 |
61 | - ActivePage = RocalRuleTab | |
61 | + ActivePage = EditorTab | |
62 | 62 | Align = alClient |
63 | 63 | MultiLine = True |
64 | - TabIndex = 4 | |
64 | + TabIndex = 0 | |
65 | 65 | TabOrder = 0 |
66 | 66 | OnChange = EditorPageChange |
67 | 67 | object EditorTab: TTabSheet |
68 | 68 | 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 | |
79 | 69 | object NameBasePanel: TPanel |
80 | 70 | Left = 0 |
81 | 71 | Top = 29 |
@@ -83,7 +73,7 @@ object EditorForm: TEditorForm | ||
83 | 73 | Height = 31 |
84 | 74 | Align = alTop |
85 | 75 | BevelOuter = bvNone |
86 | - TabOrder = 2 | |
76 | + TabOrder = 1 | |
87 | 77 | object NameLabel: TLabel |
88 | 78 | Left = 4 |
89 | 79 | Top = 8 |
@@ -144,7 +134,7 @@ object EditorForm: TEditorForm | ||
144 | 134 | Height = 29 |
145 | 135 | Align = alTop |
146 | 136 | BevelOuter = bvNone |
147 | - TabOrder = 1 | |
137 | + TabOrder = 0 | |
148 | 138 | object Label1: TLabel |
149 | 139 | Left = 4 |
150 | 140 | Top = 8 |
@@ -161,6 +151,16 @@ object EditorForm: TEditorForm | ||
161 | 151 | TabOrder = 0 |
162 | 152 | end |
163 | 153 | 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 | |
164 | 164 | end |
165 | 165 | object PreviewTab: TTabSheet |
166 | 166 | Caption = #12503#12524#12499#12517#12540 |
@@ -343,6 +343,19 @@ object EditorForm: TEditorForm | ||
343 | 343 | Action = BeLogInOutEAction |
344 | 344 | Style = tbsCheck |
345 | 345 | 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 | |
346 | 359 | end |
347 | 360 | object MainMenu: TMainMenu |
348 | 361 | Left = 8 |
@@ -469,7 +482,7 @@ object EditorForm: TEditorForm | ||
469 | 482 | Left = 72 |
470 | 483 | Top = 124 |
471 | 484 | Bitmap = { |
472 | - 494C01010B000E00040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 | |
485 | + 494C01010C000E00040010001000FFFFFFFFFF00FFFFFFFFFFFFFFFF424D3600 | |
473 | 486 | 0000000000003600000028000000400000004000000001002000000000000040 |
474 | 487 | 0000000000000000000000000000000000000000000000000000000000000000 |
475 | 488 | 0000000000000000000000000000000000000000000000000000000000000000 |
@@ -989,11 +1002,11 @@ object EditorForm: TEditorForm | ||
989 | 1002 | 0000000000000000000000000000000000000000000000000000000000000000 |
990 | 1003 | 0000000000000000000000000000000000000000000000000000000000000000 |
991 | 1004 | 0000000000000000000000000000000000000000000000000000000000000000 |
992 | - 00000000000000000000000000000000F81FFFFFFFFF0000E007FDFFF81F0000 | |
993 | - C003F17FF00F00008001E05FE00700008001C017C00300000000800580010000 | |
994 | - 0000000180010000000000018001000000008001800100000000E00180010000 | |
995 | - 0000F803800100008001FE07C00300008001FF8FE0070000C003FFFFF00F0000 | |
996 | - E007FFFFF81F0000F81FFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFE00FFFFFFFF | |
1005 | + 00000000000000000000000000000000F81FFFFFFFFFFFFFE007FDFFF81FF3F9 | |
1006 | + C003F17FF00FF9F38001E05FE007F9F38001C017C003F80300008005800184E7 | |
1007 | + 000000018001CCE7000000018001CE4F000080018001CE4F0000E0018001CE4F | |
1008 | + 0000F8038001CF1F8001FE07C0038F1F8001FF8FE007FFFFC003FFFFF00F8FFF | |
1009 | + E007FFFFF81F8FFFF81FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE00FFFFFFFF | |
997 | 1010 | FE00C000F000F000FE008000F000F000FE008000F000F0008000800000000000 |
998 | 1011 | 8000800070000000800080017000000080008001700000008001800170000000 |
999 | 1012 | 8003800170000000800780017FDF001F807F8001001F001F80FFC003001F001F |
@@ -1001,14 +1014,13 @@ object EditorForm: TEditorForm | ||
1001 | 1014 | FFF3000FFFFFF0CFFF010007FFFFF08700000003FFFFF08700010003FFF7F887 |
1002 | 1015 | 0003003FC1F7FE8F0003003FC3FBFE3F00038FFFC7FBFF7F0003FC00CBFBFE3F |
1003 | 1016 | 0003C400DCF7FEBF0003CC00FF0FFC9F0003D400FFFFFDDF0003F800FFFFFDDF |
1004 | - FFFFFC00FFFFFDDFFFFFFC00FFFFFFFF00000000000000000000000000000000 | |
1005 | - 000000000000} | |
1017 | + FFFFFC00FFFFFDDFFFFFFC00FFFFFFFF} | |
1006 | 1018 | end |
1007 | 1019 | object HotToobarImageList: TImageList |
1008 | 1020 | Left = 104 |
1009 | 1021 | Top = 124 |
1010 | 1022 | Bitmap = { |
1011 | - 494C01010B000E00040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 | |
1023 | + 494C01010C000E00040010001000FFFFFFFFFF00FFFFFFFFFFFFFFFF424D3600 | |
1012 | 1024 | 0000000000003600000028000000400000004000000001002000000000000040 |
1013 | 1025 | 0000000000000000000000000000000000000000000000000000000000000000 |
1014 | 1026 | 0000000000000000000000000000000000000000000000000000000000000000 |
@@ -1528,11 +1540,11 @@ object EditorForm: TEditorForm | ||
1528 | 1540 | 0000000000000000000000000000000000000000000000000000000000000000 |
1529 | 1541 | 0000000000000000000000000000000000000000000000000000000000000000 |
1530 | 1542 | 0000000000000000000000000000000000000000000000000000000000000000 |
1531 | - 00000000000000000000000000000000F81FFFFFFFFF0000E007FDFFF81F0000 | |
1532 | - C003F17FF00F00008001E05FE00700008001C017C00300000000000580010000 | |
1533 | - 0000000180010000000000018001000000008001800100000000E00180010000 | |
1534 | - 0000F803800100008001FE07C00300008001FF8FE0070000C003FFFFF00F0000 | |
1535 | - E007FFFFF81F0000F81FFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFE00FFFFFFFF | |
1543 | + 00000000000000000000000000000000F81FFFFFFFFFFFFFE007FDFFF81FF3F9 | |
1544 | + C003F17FF00FF9F38001E05FE007F9F38001C017C003F80300000005800184E7 | |
1545 | + 000000018001CCE7000000018001CE4F000080018001CE4F0000E0018001CE4F | |
1546 | + 0000F8038001CF1F8001FE07C0038F1F8001FF8FE007FFFFC003FFFFF00F8FFF | |
1547 | + E007FFFFF81F8FFFF81FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE00FFFFFFFF | |
1536 | 1548 | FE00C000F000F000FE008000F000F000FE008000F000F0008000800000000000 |
1537 | 1549 | 8000800070000000800080017000000080008001700000008001800170000000 |
1538 | 1550 | 8003800170000000800780017FDF001F807F8001001F001F80FFC003001F001F |
@@ -1540,8 +1552,7 @@ object EditorForm: TEditorForm | ||
1540 | 1552 | FFF3000FFFFFF0CFFF010007FFFFF08700000003FFFFF08700010003FFE7F887 |
1541 | 1553 | 0003003FC1F3FE8F0003003FC3FBFE3F00038FFFC7FBFF7F0003FC00CBFBFE3F |
1542 | 1554 | 0003C400DCF3FEBF0003CC00FF07FC9F0003D400FFFFFDDF0003F800FFFFFDDF |
1543 | - FFFFFC00FFFFFDDFFFFFFC00FFFFFFFF00000000000000000000000000000000 | |
1544 | - 000000000000} | |
1555 | + FFFFFC00FFFFFDDFFFFFFC00FFFFFFFF} | |
1545 | 1556 | end |
1546 | 1557 | object Indy: TIdHTTP |
1547 | 1558 | Intercept = IdLogDebug |
@@ -1733,6 +1744,19 @@ object EditorForm: TEditorForm | ||
1733 | 1744 | OnExecute = UpdateSambaActionExecute |
1734 | 1745 | OnUpdate = UpdateSambaActionUpdate |
1735 | 1746 | 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 | |
1736 | 1760 | end |
1737 | 1761 | object IdLogDebug: TIdLogDebug |
1738 | 1762 | OnReceive = IdLogDebugReceive |
@@ -1748,4 +1772,16 @@ object EditorForm: TEditorForm | ||
1748 | 1772 | Left = 233 |
1749 | 1773 | Top = 123 |
1750 | 1774 | 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 | |
1751 | 1787 | end |
@@ -17,7 +17,7 @@ uses | ||
17 | 17 | IdAntiFreezeBase, IdAntiFreeze, IdBaseComponent, IdComponent, |
18 | 18 | IdTCPConnection, IdTCPClient, IdHTTP, ActnList, StdActns, IdIntercept, |
19 | 19 | IdLogBase, IdLogDebug, IdException, DateUtils, bmRegExp, |
20 | - Gesture; | |
20 | + Gesture, AppEvnts; | |
21 | 21 | |
22 | 22 | type |
23 | 23 | // TSetLayeredWindowAttributes = function(wnd: HWND; crKey: DWORD; bAlpha: BYTE; dwFlag: DWORD): Boolean; stdcall; |
@@ -44,7 +44,6 @@ type | ||
44 | 44 | N02: TMenuItem; |
45 | 45 | ToolBarImageList: TImageList; |
46 | 46 | HotToobarImageList: TImageList; |
47 | - BodyEdit: TMemo; | |
48 | 47 | NameBasePanel: TPanel; |
49 | 48 | NameLabel: TLabel; |
50 | 49 | MailLabel: TLabel; |
@@ -127,6 +126,13 @@ type | ||
127 | 126 | UpdateSambaAction: TAction; |
128 | 127 | Samba241: TMenuItem; |
129 | 128 | N7: TMenuItem; |
129 | + InputAssistAction: TAction; | |
130 | + InputAssistPopupMenu: TPopupMenu; | |
131 | + BodyEdit: TMemo; | |
132 | + ApplicationEvents1: TApplicationEvents; | |
133 | + ToolButton8: TToolButton; | |
134 | + ToolButton9: TToolButton; | |
135 | + ShowInputAssistForm: TAction; | |
130 | 136 | |
131 | 137 | procedure EditorPageChange(Sender: TObject); |
132 | 138 | procedure FormCreate(Sender: TObject); |
@@ -181,6 +187,10 @@ type | ||
181 | 187 | procedure BeLogInOutEActionUpdate(Sender: TObject); |
182 | 188 | procedure UpdateSambaActionUpdate(Sender: TObject); |
183 | 189 | procedure UpdateSambaActionExecute(Sender: TObject); |
190 | + procedure InputAssistActionExecute(Sender: TObject); | |
191 | + procedure ApplicationEvents1Message(var Msg: tagMSG; | |
192 | + var Handled: Boolean); | |
193 | + procedure ShowInputAssistFormExecute(Sender: TObject); | |
184 | 194 | private |
185 | 195 | FThreadItem: TThreadItem; |
186 | 196 | FBoard: TBoard; |
@@ -195,6 +205,8 @@ type | ||
195 | 205 | FHost: string; |
196 | 206 | FNow: TDateTime; |
197 | 207 | FGestures : TMouseGesture; |
208 | + FInputAssistKey: String; ///< üÍAVXgÌL[ | |
209 | + FResistWords: TStringList; ///< üÍAVXgÌ«©çÌõÊ | |
198 | 210 | procedure Preview; |
199 | 211 | function RepHtml(s: string): string; |
200 | 212 | function Check: Boolean; |
@@ -244,21 +256,25 @@ type | ||
244 | 256 | function LFusianaGet(s: String): Boolean; |
245 | 257 | // CookieÌæ¾ |
246 | 258 | procedure GetCookie(Rawtext: String; ABoard: TBoard); |
259 | + //! üÍAVXgÌ|bvAbvj [ÌNbNCxg | |
260 | + procedure InputAssistMenuClick(Sender: TObject); | |
261 | + //! TMemoÌJ[\Êuɶñ}ü | |
262 | + procedure InsertText(Memo: TMemo; Text: String); | |
247 | 263 | protected |
248 | 264 | procedure CreateParams(var Params: TCreateParams); override; |
249 | 265 | public |
250 | - FBBSID: String; | |
266 | + FBBSID: String; | |
251 | 267 | procedure SetFont; |
252 | 268 | procedure SetThreadItem(Item: TThreadItem); |
253 | 269 | procedure SetBoard(Item: TBoard); |
254 | - property BBSID: string read FBBSID write FBBSID; | |
255 | - | |
270 | + property BBSID: string read FBBSID write FBBSID; | |
256 | 271 | end; |
257 | 272 | |
258 | 273 | implementation |
259 | 274 | |
260 | 275 | uses |
261 | - Giko, ItemDownload, MojuUtils, IdGlobal, GikoMessage; | |
276 | + Giko, ItemDownload, MojuUtils, IdGlobal, GikoMessage, Imm, | |
277 | + InputAssistDataModule, InputAssist; | |
262 | 278 | const |
263 | 279 | CAPTION_NAME_NEW: string = 'MRir X§ÄGfB^'; |
264 | 280 | CAPTION_NAME_RES: string = 'MRir XGfB^'; |
@@ -427,7 +443,8 @@ begin | ||
427 | 443 | finally |
428 | 444 | ini.Free; |
429 | 445 | end; |
430 | - | |
446 | + // L[ÝèÌÇÝÝ | |
447 | + GikoSys.LoadKeySetting(ActionList, GikoSys.GetEditorKeyFileName); | |
431 | 448 | // }EXWFX`[ÌCXg[ |
432 | 449 | if GikoSys.Setting.GestureEnabled then begin |
433 | 450 | MouseGesture.UnHook; |
@@ -930,33 +947,35 @@ begin | ||
930 | 947 | |
931 | 948 | if ABoard = nil then Exit; |
932 | 949 | |
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Éת©©è»¤Å|¢EEE | |
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Éת©©è»¤Å|¢EEE | |
962 | + if not FileExists(ABoard.GetSETTINGTXTFileName) then begin | |
963 | + //GetSETTINGTXTActionðÄÑo·ÆIndyªú»³êéÌÅA | |
947 | 964 | //±±ÅCookieðÛ¶µÈÄÍ¢¯È¢ |
948 | 965 | tmpRawheader := Indy.Response.RawHeaders.Text; |
949 | 966 | GetSETTINGTXTAction.Execute; |
950 | 967 | body := TStringList.Create; |
951 | 968 | 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; | |
957 | 976 | end; |
958 | 977 | |
959 | - if Remote = 'fusianasan' then begin | |
978 | + if Remote = 'fusianasan' then begin | |
960 | 979 | MsgResult := MsgBox( |
961 | 980 | Handle, |
962 | 981 | '[gzXgð\¦·é@\ªgíêĢܷ' + #13#10 + |
@@ -971,8 +990,8 @@ begin | ||
971 | 990 | EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED); |
972 | 991 | DrawMenuBar(Handle); |
973 | 992 | Exit; |
974 | - end; | |
975 | - end; | |
993 | + end; | |
994 | + end; | |
976 | 995 | end; |
977 | 996 | |
978 | 997 | if ResultType = grtOK then begin |
@@ -1214,7 +1233,7 @@ begin | ||
1214 | 1233 | ini.WriteInteger(sDate, 'Status', FStatusCode); |
1215 | 1234 | ini.WriteDateTime(sDate, 'Date', Now); |
1216 | 1235 | if FThreadItem = nil then begin |
1217 | - ini.WriteString(sDate, 'Title', TitleEdit.Text); | |
1236 | + ini.WriteString(sDate, 'Title', MojuUtils.Sanitize(TitleEdit.Text)); | |
1218 | 1237 | ini.WriteString(sDate, 'BBS', FBoard.BBSID); |
1219 | 1238 | ini.WriteInteger(sDate, 'NewThread', 1); |
1220 | 1239 | end else begin |
@@ -1731,9 +1750,6 @@ var | ||
1731 | 1750 | settingBody: TStringList; |
1732 | 1751 | tmpBoard: TBoard; |
1733 | 1752 | begin |
1734 | - if FWork then | |
1735 | - Exit; | |
1736 | - FWork := True; | |
1737 | 1753 | |
1738 | 1754 | InitIdHTTP(Indy); |
1739 | 1755 | if FThreadItem = nil then |
@@ -1784,7 +1800,6 @@ begin | ||
1784 | 1800 | end; |
1785 | 1801 | ShowBoardInformation(tmpBoard, BoardInformationMemo); |
1786 | 1802 | |
1787 | - FWork := False; | |
1788 | 1803 | end; |
1789 | 1804 | |
1790 | 1805 | procedure TEditorForm.ShowBoardInformation(ABoard: TBoard; AMemo: TMemo); |
@@ -2211,4 +2226,183 @@ begin | ||
2211 | 2226 | end; |
2212 | 2227 | end; |
2213 | 2228 | |
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 | + // Vtgª³êÄ¢êÎAL[ÅnÜéJeS | |
2249 | + count := | |
2250 | + InputAssistDM.GetStartWithCategoryResistWords( | |
2251 | + FInputAssistKey, FResistWords); | |
2252 | + end else begin | |
2253 | + // Vtgª³¢ÌÅAL[Å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 | + // }[W5px | |
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); //ReLXgæ¾ | |
2314 | + try | |
2315 | + ImmNotifyIME(IMC, NI_COMPOSITIONSTR, CPS_CANCEL, 0); | |
2316 | + finally | |
2317 | + ImmReleaseContext(BodyEdit.Handle, IMC); //ReLXgðú | |
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 | + //@LbgÌÊuðXV·é | |
2345 | + Memo.SelStart := sel + Length(text); | |
2346 | + // LbgÌÊuÜÅXN[ | |
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ÒWhÅCtrlL[ª³êÄ¢éÌðmF·é | |
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); //ReLXgæ¾ | |
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); //ReLXgðú | |
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 // XeCóÔÉÝè | |
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 | + | |
2214 | 2408 | end. |
@@ -410,12 +410,12 @@ begin | ||
410 | 410 | board := BBSsFindBoardFromBBSID( Node.Attributes[ 'bbs' ] ); |
411 | 411 | if board <> nil then |
412 | 412 | FavBoard := TFavoriteBoardItem.Create( |
413 | - board.URL, Node.Attributes[ 'title' ], board ); | |
413 | + board.URL, MojuUtils.UnSanitize(Node.Attributes[ 'title' ]), board ); | |
414 | 414 | end else begin |
415 | 415 | FavBoard := TFavoriteBoardItem.Create( |
416 | - Node.Attributes[ 'url' ], Node.Attributes[ 'title' ], nil ); | |
416 | + Node.Attributes[ 'url' ], MojuUtils.UnSanitize(Node.Attributes[ 'title' ]), nil ); | |
417 | 417 | end; |
418 | - CurrentNode := FTreeView.Items.AddChildObjectFirst(ParentNode, Node.Attributes['title'], FavBoard); | |
418 | + CurrentNode := FTreeView.Items.AddChildObjectFirst(ParentNode, UnSanitize(Node.Attributes['title']), FavBoard); | |
419 | 419 | CurrentNode.ImageIndex := 15; |
420 | 420 | CurrentNode.SelectedIndex := 15; |
421 | 421 | end else if Node.Attributes['favtype'] = 'thread' then begin |
@@ -433,17 +433,17 @@ begin | ||
433 | 433 | board.BoardPlugIn, |
434 | 434 | board, |
435 | 435 | GikoSys.Get2chBoard2ThreadURL( board, ChangeFileExt( Node.Attributes[ 'thread' ], '' ) ) ); |
436 | - threadItem.Title := Node.Attributes[ 'title' ]; | |
436 | + threadItem.Title := UnSanitize(Node.Attributes[ 'title' ]); | |
437 | 437 | board.Add( threadItem ); |
438 | 438 | end; |
439 | 439 | FavThread := TFavoriteThreadItem.Create( |
440 | - threadItem.URL, Node.Attributes[ 'title' ], threadItem ); | |
440 | + threadItem.URL, UnSanitize(Node.Attributes[ 'title' ]), threadItem ); | |
441 | 441 | threadItem.Free; |
442 | 442 | end else begin |
443 | 443 | FavThread := TFavoriteThreadItem.Create( |
444 | - Node.Attributes[ 'url' ], Node.Attributes[ 'title' ], nil ); | |
444 | + Node.Attributes[ 'url' ], UnSanitize(Node.Attributes[ 'title' ]), nil ); | |
445 | 445 | end; |
446 | - CurrentNode := FTreeView.Items.AddChildObjectFirst(ParentNode, Node.Attributes['title'], FavThread); | |
446 | + CurrentNode := FTreeView.Items.AddChildObjectFirst(ParentNode, UnSanitize(Node.Attributes['title']), FavThread); | |
447 | 447 | CurrentNode.ImageIndex := 16; |
448 | 448 | CurrentNode.SelectedIndex := 16; |
449 | 449 | end; |
@@ -558,12 +558,12 @@ begin | ||
558 | 558 | end else if TObject(data) is TFavoriteBoardItem then begin |
559 | 559 | FavBoard := TFavoriteBoardItem(data); |
560 | 560 | 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))]); | |
562 | 562 | SaveList.Add(s); |
563 | 563 | end else if TObject(data) is TFavoriteThreadItem then begin |
564 | 564 | FavThread := TFavoriteThreadItem(data); |
565 | 565 | 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))]); | |
567 | 567 | SaveList.Add(s); |
568 | 568 | end; |
569 | 569 | Node := Node.getNextSibling; |
@@ -1,6 +1,6 @@ | ||
1 | 1 | object GikoForm: TGikoForm |
2 | - Left = 363 | |
3 | - Top = 92 | |
2 | + Left = 422 | |
3 | + Top = 68 | |
4 | 4 | HorzScrollBar.Visible = False |
5 | 5 | VertScrollBar.Visible = False |
6 | 6 | AutoScroll = False |
@@ -7959,6 +7959,12 @@ object GikoForm: TGikoForm | ||
7959 | 7959 | object N43: TMenuItem |
7960 | 7960 | Caption = '-' |
7961 | 7961 | end |
7962 | + object N22: TMenuItem | |
7963 | + Action = GikoDM.SetInputAssistAction | |
7964 | + end | |
7965 | + object N42: TMenuItem | |
7966 | + Caption = '-' | |
7967 | + end | |
7962 | 7968 | object PlugInMenu: TMenuItem |
7963 | 7969 | Caption = #12503#12521#12464#12452#12531'(&P)' |
7964 | 7970 | end |
@@ -402,6 +402,8 @@ type | ||
402 | 402 | N74: TMenuItem; |
403 | 403 | WikiFAQ: TMenuItem; |
404 | 404 | GikoApplicationEvents: TApplicationEvents; |
405 | + N22: TMenuItem; | |
406 | + N42: TMenuItem; | |
405 | 407 | procedure FormCreate(Sender: TObject); |
406 | 408 | procedure FormDestroy(Sender: TObject); |
407 | 409 | procedure BrowserStatusTextChange(Sender: TObject; |
@@ -541,6 +543,7 @@ type | ||
541 | 543 | procedure GikoApplicationEventsException(Sender: TObject; E: Exception); |
542 | 544 | procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton; |
543 | 545 | Shift: TShiftState; X, Y: Integer); |
546 | + procedure GetResURLMenuClick(Sender: TObject); | |
544 | 547 | private |
545 | 548 | { Private é¾ } |
546 | 549 | FEnabledCloseButton: Boolean; |
@@ -588,7 +591,8 @@ type | ||
588 | 591 | FIsHandledWheel : Boolean; ///< ùÉó¯æÁ½ WM_MOUSEWHEEL ©Ç¤© |
589 | 592 | DiffComp: Boolean; //Add by Genyakun XªXV³ê½Æ«ÉTrueÉÈé |
590 | 593 | FOrigenCaption: String; //¨CÉüèc[ÌACeÒWÌÒWO̶ñ |
591 | - FPreviewBrowserRect: TRect; ///< vr [Ì\¦ÊuðL¯·é | |
594 | + FPreviewBrowserRect: TRect; ///< vr [Ì\¦ÊuðL¯·é | |
595 | + FActionListGroupIndexes: array of Integer; ///<GikoDMãÌANVXgÌeANVÉÝè³ê½GroupIndexðÛ¶·ézñ | |
592 | 596 | procedure DownloadEnd(Sender: TObject; Item: TDownloadItem); |
593 | 597 | procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon); |
594 | 598 | procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string); |
@@ -648,12 +652,16 @@ type | ||
648 | 652 | function GetScreenCursor(): TCursor; |
649 | 653 | //J[\ðÝè·é |
650 | 654 | procedure SetScreenCursor(Cursor : TCursor); |
651 | - //! ANVÌ`FbNóÔÌú» | |
652 | - procedure InitActionChecked(); | |
653 | 655 | //! _E[hRg[Xbh̶¬ |
654 | 656 | procedure CreateControlThread(); |
655 | 657 | //! uEU̶¬ |
656 | 658 | procedure CreateBrowsers(count: Integer); |
659 | + //! ActionListÌGroupIndexÌÛ¶ | |
660 | + procedure GetGroupIndex(ActionList: TActionList); | |
661 | + //! ActionListÌGroupIndexÌÝè | |
662 | + procedure SetGroupIndex(ActionList: TActionList); | |
663 | + //! wè³ê½XbhðJ(Oª³¢Æ« or wèJUMPÜÅ«èȢƫÍDL·é) | |
664 | + procedure OpenThreadItem(Thread: TThreadItem; URL: String); | |
657 | 665 | protected |
658 | 666 | procedure CreateParams(var Params: TCreateParams); override; |
659 | 667 | procedure WndProc(var Message: TMessage); override; |
@@ -783,6 +791,7 @@ type | ||
783 | 791 | function WebBrowserClick(Sender: TObject): WordBool; |
784 | 792 | //! c[o[ÉXiÝR{{bNXðÝè·é |
785 | 793 | procedure SetSelectComboBox(); |
794 | + | |
786 | 795 | published |
787 | 796 | property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton; |
788 | 797 | end; |
@@ -820,7 +829,8 @@ uses | ||
820 | 829 | FavoriteArrange, AddressHistory, Preview, Gesture, |
821 | 830 | About, Option, Round, Splash, Sort, ListSelect, Imm, |
822 | 831 | NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter, |
823 | - HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage; | |
832 | + HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage, | |
833 | + InputAssistDataModule; | |
824 | 834 | |
825 | 835 | const |
826 | 836 | BLANK_HTML: string = 'about:blank'; |
@@ -869,12 +879,18 @@ begin | ||
869 | 879 | Writeln(' I¹ÍAMRirEBhEð¶ľ³¢'); |
870 | 880 | Writeln('============================================================'); |
871 | 881 | {$ENDIF} |
882 | +//try | |
883 | + Sort.SetSortDate(Now()); | |
884 | + | |
872 | 885 | FTreeType := gttNone; |
873 | 886 | // N®ÉÛ¶³êĵܤÎô |
874 | 887 | FStartUp := true; |
875 | 888 | Application.HookMainWindow(Hook); |
876 | 889 | FIsIgnoreResize := rtResizing; |
877 | - | |
890 | + //ActionListÌGuoupIndexðÛ¶µÄA0ÉNA·éB | |
891 | + //(N®Éc[{^ÌDownvpeBð½f³¹ésãGroupIndexÍÝèÅ«È¢) | |
892 | + //±êÈãSet`ÅÄÝè·éÜÅAActionÌCheckedð¢¶éÆ«ÍÓI | |
893 | + GetGroupIndex(GikoDM.GikoFormActionList); | |
878 | 894 | FSearchDialog := nil; |
879 | 895 | CreateBrowsers(BROWSER_COUNT); |
880 | 896 |
@@ -944,6 +960,49 @@ begin | ||
944 | 960 | //ViewNoButton.Down := GikoSys.Setting.ListViewNo; |
945 | 961 | GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo; |
946 | 962 | |
963 | + //~ [gÌóÔðÝè | |
964 | + GikoDM.MuteAction.Checked := GikoSys.Setting.Mute; | |
965 | + | |
966 | + // X\¦ÍÍ | |
967 | + FResRangeMenuSelect := GikoSys.ResRange; | |
968 | + case GikoSys.ResRange of | |
969 | + Ord( grrAll ): | |
970 | + begin | |
971 | + GikoDM.AllResAction.Execute; | |
972 | + end; | |
973 | + Ord( grrSelect ): | |
974 | + begin | |
975 | + SelectComboBox.Text := SelectComboBox.Items[ 1 ]; | |
976 | + GikoDM.SelectResAction.Checked := True; | |
977 | + end; | |
978 | + else | |
979 | + case FResRangeMenuSelect of | |
980 | + Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True; | |
981 | + Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True; | |
982 | + 100: GikoDM.OnlyAHundredResAction.Checked := True; | |
983 | + end; | |
984 | + end; | |
985 | + | |
986 | + // Xbhê\¦ÍÍ | |
987 | + case GikoSys.Setting.ThreadRange of | |
988 | + gtrAll: | |
989 | + begin | |
990 | + GikoDM.AllItemAction.Checked := True; | |
991 | + ViewType := gvtAll; | |
992 | + end; | |
993 | + gtrLog: | |
994 | + begin | |
995 | + GikoDM.LogItemAction.Checked := True; | |
996 | + ViewType := gvtLog; | |
997 | + end; | |
998 | + gtrNew: | |
999 | + begin | |
1000 | + GikoDM.NewItemAction.Checked := True; | |
1001 | + ViewType := gvtNew; | |
1002 | + end; | |
1003 | + end; | |
1004 | + | |
1005 | + | |
947 | 1006 | //uEU^utHg |
948 | 1007 | BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName; |
949 | 1008 | BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize; |
@@ -952,9 +1011,27 @@ begin | ||
952 | 1011 | BrowserTab.Font.Style := [fsBold]; |
953 | 1012 | if GikoSys.Setting.BrowserTabFontItalic then |
954 | 1013 | BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic]; |
1014 | + BrowserTab.DoubleBuffered := True; | |
955 | 1015 | FDragWFirst := false; |
956 | 1016 | SetContent(BrowserNullTab); //uEUðó\¦ |
957 | 1017 | |
1018 | + //uEU^u | |
1019 | + GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible; | |
1020 | + | |
1021 | + if GikoSys.Setting.BrowserTabPosition = gtpTop then begin | |
1022 | + GikoDM.BrowserTabTopAction.Checked := True; | |
1023 | + end else begin | |
1024 | + GikoDM.BrowserTabBottomAction.Checked := True; | |
1025 | + end; | |
1026 | + | |
1027 | + if GikoSys.Setting.BrowserTabStyle = gtsTab then begin | |
1028 | + GikoDM.BrowserTabTabStyleAction.Checked := True; | |
1029 | + end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin | |
1030 | + GikoDM.BrowserTabButtonStyleAction.Checked := True; | |
1031 | + end else begin | |
1032 | + GikoDM.BrowserTabFlatStyleAction.Checked := True; | |
1033 | + end; | |
1034 | + | |
958 | 1035 | //vOXo[Ìú» |
959 | 1036 | ProgressBar.Parent := StatusBar; |
960 | 1037 | ProgressBar.Top := 2; |
@@ -968,10 +1045,14 @@ begin | ||
968 | 1045 | |
969 | 1046 | // {[ht@Cñ(ReadFavorite æèæÉs¤±Æ) |
970 | 1047 | GikoSys.ListBoardFile; |
971 | - | |
1048 | + //@A±N®ÉXvbV EBhE̪sèÉ | |
1049 | + try | |
972 | 1050 | // XvbV EBhEÌvOXo[ÌÝè |
973 | - SplashWindow.ProgressBar.Max := Length(BBSs) * 20; | |
974 | - | |
1051 | + if (SplashWindow <> nil) then begin | |
1052 | + SplashWindow.ProgressBar.Max := Length(BBSs) * 20; | |
1053 | + end; | |
1054 | + except | |
1055 | + end; | |
975 | 1056 | // ·×ÄÌBBSðÇÝñŨ |
976 | 1057 | for i := Length(BBSs) - 1 downto 0 do begin |
977 | 1058 | if not BBSs[i].IsBoardFileRead then |
@@ -982,6 +1063,7 @@ begin | ||
982 | 1063 | SplashWindow.Update; |
983 | 1064 | end; |
984 | 1065 | end; |
1066 | + | |
985 | 1067 | //ñf[^ÇÝÝ |
986 | 1068 | RoundList := TRoundList.Create; |
987 | 1069 | RoundList.LoadRoundBoardFile; |
@@ -1200,7 +1282,8 @@ begin | ||
1200 | 1282 | FavoriteAddToolButton.Caption := 'ÇÁ...'; |
1201 | 1283 | AntiIndivAbonMenuItem.Caption := 'ÂÊ Ú`ñð'; |
1202 | 1284 | |
1203 | - | |
1285 | + //üÍAVXg@\Ìú» | |
1286 | + InputAssistDM.Init(GikoSys.GetInputAssistFileName); | |
1204 | 1287 | end; |
1205 | 1288 | |
1206 | 1289 | // CoolBar ÌÝèðÏÉÛ¶ |
@@ -1341,51 +1424,20 @@ begin | ||
1341 | 1424 | GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible; |
1342 | 1425 | GikoDM.BrowserNameBarVisibleActionExecute( nil ); |
1343 | 1426 | |
1344 | - //uEU^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 Ìwb_hbO | |
1368 | -// ListView.FullDrag := True; | |
1369 | - | |
1370 | 1427 | // CoolBar ³ |
1371 | 1428 | LoadCoolBarSettings; |
1372 | 1429 | |
1373 | 1430 | //dv@±êªÈ¢Æc[{^ÌXVª¨©µÈé |
1374 | 1431 | // ResetBandInfo( ListCoolBar, ListToolBar ); |
1375 | 1432 | FIsIgnoreResize := rtNone; |
1376 | - //c[o[ÌXVðI¦½ãÉâçȢƢ¯È¢Ì©à | |
1377 | - //ANVÌ`FbNóÔðú» | |
1378 | - InitActionChecked(); | |
1379 | 1433 | |
1380 | 1434 | //FormCrete©çÚ®B |
1381 | 1435 | if GikoSys.Setting.TabAutoLoadSave then begin |
1382 | 1436 | GikoDM.TabAutoLoadAction.Execute; |
1383 | 1437 | end; |
1384 | - //É¿áñêÄàT|[g@\ | |
1385 | - if GikoSys.Setting.GengoSupport then begin | |
1386 | - //\èn | |
1387 | - //Testü¯ | |
1388 | - end; | |
1438 | + | |
1439 | + //ActionListÌGroupIndexð³Éß· | |
1440 | + SetGroupIndex(GikoDM.GikoFormActionList); | |
1389 | 1441 | |
1390 | 1442 | FStartUp := false; |
1391 | 1443 | end; |
@@ -1474,6 +1526,8 @@ begin | ||
1474 | 1526 | // CoolBar Û¶ |
1475 | 1527 | //if (GikoForm.WindowState <> wsMinimized) and (GikoForm.WindowState <> wsMaximized) then |
1476 | 1528 | |
1529 | + //üÍAVXg@\ÌÝèÌÛ¶ | |
1530 | + InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName); | |
1477 | 1531 | |
1478 | 1532 | //¨CÉüèÛ¶ |
1479 | 1533 | try |
@@ -2249,6 +2303,7 @@ begin | ||
2249 | 2303 | GikoSys.Setting.BoardSortIndex := 0; |
2250 | 2304 | GikoSys.Setting.BoardSortOrder := True; |
2251 | 2305 | end; |
2306 | + Sort.SetSortDate(Now()); | |
2252 | 2307 | SetActiveList(Item.Board); |
2253 | 2308 | end; |
2254 | 2309 | Item.Board.Modified := True; |
@@ -2543,7 +2598,7 @@ var | ||
2543 | 2598 | BBSID: string; |
2544 | 2599 | FileName: string; |
2545 | 2600 | sTitle: string; |
2546 | - doc: Variant; | |
2601 | + doc: Variant; | |
2547 | 2602 | s: string; |
2548 | 2603 | i: Integer; |
2549 | 2604 | idx: Integer; |
@@ -2655,18 +2710,27 @@ begin | ||
2655 | 2710 | Thread.Repaint := false; |
2656 | 2711 | |
2657 | 2712 | 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); | |
2713 | + LockWindowUpdate(Thread.Browser.Handle); | |
2714 | + HTMLCreater.CreateHTML2( | |
2715 | + Idispatch( olevariant(Thread.Browser.ControlInterface).Document), | |
2716 | + ThreadItem, sTitle); | |
2717 | + while ( (Thread.Browser.Document as IHTMLDocument2).readyState <> 'complete' ) do begin | |
2718 | + Application.ProcessMessages; | |
2719 | + Sleep(1); | |
2720 | + end; | |
2662 | 2721 | Thread.Browser.OnStatusTextChange := BrowserStatusTextChange; |
2663 | - | |
2664 | 2722 | if ThreadItem = nil then begin |
2665 | 2723 | FActiveContent := nil; |
2666 | 2724 | BrowserTab.Repaint; |
2667 | 2725 | Exit; |
2668 | 2726 | end; |
2669 | - PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 ); | |
2727 | + //PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 ); | |
2728 | + end else begin | |
2729 | + // JUMPðwè³êÄ¢½çJUMP·é | |
2730 | + if (Thread.Movement <> '') then begin | |
2731 | + Thread.Move(Thread.Movement); | |
2732 | + Thread.Movement := ''; | |
2733 | + end; | |
2670 | 2734 | end; |
2671 | 2735 | end; |
2672 | 2736 | if (Thread <> nil) and (ThreadItem <>nil) then begin |
@@ -3037,7 +3101,7 @@ begin | ||
3037 | 3101 | // title Í¡ÌƱëgÁĢȢ |
3038 | 3102 | saveList.Add( |
3039 | 3103 | '<history url="' + HtmlEncode( TFavoriteThreadItem( FHistoryList[ i ] ).URL ) + '"' + |
3040 | - ' title="' + HtmlEncode( TFavoriteThreadItem( FHistoryList[ i ] ).Title ) + '"/>'); | |
3104 | + ' title="' + HtmlEncode( MojuUtils.Sanitize(TFavoriteThreadItem( FHistoryList[ i ] ).Title )) + '"/>'); | |
3041 | 3105 | end; |
3042 | 3106 | saveList.Add('</address>'); |
3043 | 3107 | saveList.SaveToFile( GikoSys.GetConfigDir + 'History.xml' ); |
@@ -3056,15 +3120,21 @@ var | ||
3056 | 3120 | HistoryNode : IXMLNode; |
3057 | 3121 | s : string; |
3058 | 3122 | favItem : TFavoriteThreadItem; |
3123 | +{$IFDEF DEBUG} | |
3124 | + st, rt : Cardinal; | |
3125 | +{$ENDIF} | |
3059 | 3126 | begin |
3127 | +{$IFDEF DEBUG} | |
3128 | + st := GetTickCount; | |
3129 | +{$ENDIF} | |
3060 | 3130 | |
3061 | 3131 | fileName := GikoSys.GetConfigDir + 'History.xml'; |
3062 | 3132 | |
3063 | 3133 | if FileExists( fileName ) then begin |
3064 | 3134 | try |
3065 | - XMLDoc := IXMLDocument.Create; | |
3135 | + XMLDoc := IXMLDocument.Create; | |
3066 | 3136 | //XMLDoc := LoadXMLDocument(FileName); |
3067 | - LoadXMLDocument(FileName, XMLDoc); | |
3137 | + LoadXMLDocument(FileName, XMLDoc); | |
3068 | 3138 | try |
3069 | 3139 | XMLNode := XMLDoc.DocumentElement; |
3070 | 3140 |
@@ -3077,9 +3147,9 @@ begin | ||
3077 | 3147 | s := Trim(HistoryNode.Attributes['url']); |
3078 | 3148 | if s <> '' then begin |
3079 | 3149 | favItem := TFavoriteThreadItem.Create( |
3080 | - s, HistoryNode.Attributes[ 'title' ] ); | |
3150 | + s, MojuUtils.UnSanitize(HistoryNode.Attributes[ 'title' ]) ); | |
3081 | 3151 | if not AddHistory( favItem ) then |
3082 | - favItem.Free; | |
3152 | + favItem.Free; | |
3083 | 3153 | end; |
3084 | 3154 | //end; |
3085 | 3155 | end; |
@@ -3091,6 +3161,10 @@ begin | ||
3091 | 3161 | except |
3092 | 3162 | end; |
3093 | 3163 | end; |
3164 | +{$IFDEF DEBUG} | |
3165 | + rt := GetTickCount - st; | |
3166 | + Writeln('Runtime(Load Histroy) : ' + IntToStr(rt) + ' ms'); | |
3167 | +{$ENDIF} | |
3094 | 3168 | |
3095 | 3169 | end; |
3096 | 3170 |
@@ -3338,7 +3412,6 @@ begin | ||
3338 | 3412 | end else begin |
3339 | 3413 | if Item <> FActiveList then begin |
3340 | 3414 | ActiveListColumnSave; |
3341 | - | |
3342 | 3415 | if (Item is TBBS) or (Item is TCategory) then begin |
3343 | 3416 | ListView.Columns.Clear; |
3344 | 3417 | SetActiveList( Item ); |
@@ -3352,6 +3425,7 @@ begin | ||
3352 | 3425 | Screen.Cursor := crDefault; |
3353 | 3426 | end; |
3354 | 3427 | end; |
3428 | + Sort.SetSortDate(Now()); | |
3355 | 3429 | SetActiveList( Item ); |
3356 | 3430 | end; |
3357 | 3431 | end; |
@@ -3560,7 +3634,6 @@ begin | ||
3560 | 3634 | FTabHintIndex := -1; |
3561 | 3635 | for i := 0 to BrowserTab.Tabs.Count - 1 do begin |
3562 | 3636 | if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin |
3563 | - BrowserTab.Tabs.BeginUpdate; | |
3564 | 3637 | try |
3565 | 3638 | if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin |
3566 | 3639 | doc := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser.Document; |
@@ -3576,15 +3649,25 @@ begin | ||
3576 | 3649 | if j <> -1 then |
3577 | 3650 | FBrowsers.Move(j, BROWSER_COUNT - 1); |
3578 | 3651 | 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; | |
3652 | + BrowserTab.Tabs.BeginUpdate; | |
3653 | + try | |
3654 | + TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free; | |
3655 | + if ( BrowserTab.Tabs.Count - 1 = i ) and | |
3656 | + ( BrowserTab.TabRect(i).Left | |
3657 | + <= BrowserTab.DisplayRect.Left ) then begin | |
3658 | + BrowserTab.ScrollTabs(-1); | |
3659 | + end; | |
3660 | + BrowserTab.Tabs.Delete(i); | |
3661 | + if idx > i then begin | |
3662 | + BrowserTab.TabIndex := idx - 1; | |
3663 | + end else begin | |
3664 | + if BrowserTab.Tabs.Count -1 >= idx then | |
3665 | + BrowserTab.TabIndex := idx | |
3666 | + else | |
3667 | + BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1; | |
3668 | + end; | |
3669 | + finally | |
3670 | + BrowserTab.Tabs.EndUpdate; | |
3588 | 3671 | end; |
3589 | 3672 | if BrowserTab.Tabs.Count = 0 then begin |
3590 | 3673 | BrowserNullTab.Thread := nil; |
@@ -3604,7 +3687,6 @@ begin | ||
3604 | 3687 | TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true; |
3605 | 3688 | FBrowsers.Move(BROWSER_COUNT - 1, 0); |
3606 | 3689 | end; |
3607 | - BrowserTab.Tabs.EndUpdate; | |
3608 | 3690 | if( FActiveContent = nil) then |
3609 | 3691 | BrowserTab.OnChange(nil); |
3610 | 3692 | Exit; |
@@ -3620,7 +3702,6 @@ begin | ||
3620 | 3702 | FTabHintIndex := -1; |
3621 | 3703 | for i := 0 to BrowserTab.Tabs.Count - 1 do begin |
3622 | 3704 | if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin |
3623 | - BrowserTab.Tabs.BeginUpdate; | |
3624 | 3705 | try |
3625 | 3706 | if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin |
3626 | 3707 | doc := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser.Document; |
@@ -3637,15 +3718,25 @@ begin | ||
3637 | 3718 | if j <> -1 then |
3638 | 3719 | FBrowsers.Move(j, BROWSER_COUNT - 1); |
3639 | 3720 | 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; | |
3721 | + BrowserTab.Tabs.BeginUpdate; | |
3722 | + try | |
3723 | + TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free; | |
3724 | + if ( BrowserTab.Tabs.Count - 1 = i ) and | |
3725 | + ( BrowserTab.TabRect(i).Left | |
3726 | + <= BrowserTab.DisplayRect.Left ) then begin | |
3727 | + BrowserTab.ScrollTabs(-1); | |
3728 | + end; | |
3729 | + BrowserTab.Tabs.Delete(i); | |
3730 | + if idx > i then begin | |
3731 | + BrowserTab.TabIndex := idx - 1; | |
3732 | + end else begin | |
3733 | + if BrowserTab.Tabs.Count -1 >= idx then | |
3734 | + BrowserTab.TabIndex := idx | |
3735 | + else | |
3736 | + BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1; | |
3737 | + end; | |
3738 | + finally | |
3739 | + BrowserTab.Tabs.EndUpdate; | |
3649 | 3740 | end; |
3650 | 3741 | if(BrowserTab.TabIndex <> -1) and |
3651 | 3742 | ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin |
@@ -3663,7 +3754,6 @@ begin | ||
3663 | 3754 | FBrowsers.Move(BROWSER_COUNT - 1, 0); |
3664 | 3755 | end; |
3665 | 3756 | |
3666 | - BrowserTab.Tabs.EndUpdate; | |
3667 | 3757 | if( FActiveContent = nil) then |
3668 | 3758 | BrowserTab.OnChange(nil); |
3669 | 3759 | Exit; |
@@ -3927,52 +4017,53 @@ var | ||
3927 | 4017 | i, j: Integer; |
3928 | 4018 | idx: Integer; |
3929 | 4019 | begin |
4020 | + BrowserTab.Tabs.BeginUpdate; | |
4021 | + try | |
4022 | + if not BrowserTab.Dragging then begin | |
4023 | + FTabHintIndex := -1; | |
4024 | + BrowserTab.Hint := ''; | |
4025 | + idx := BrowserTab.TabIndex; | |
4026 | + if idx = -1 then begin | |
4027 | + SetContent(BrowserNullTab); | |
4028 | + | |
4029 | + end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin | |
4030 | + if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin | |
4031 | + j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser); | |
4032 | + if j <> -1 then | |
4033 | + FBrowsers.Move(j ,0); | |
4034 | + end else begin | |
4035 | + if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and | |
4036 | + (FActiveContent.Browser <> BrowserNullTab.Browser) and | |
4037 | + (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then | |
4038 | + FBrowsers.Move(BROWSER_COUNT - 1, 0); | |
3930 | 4039 | |
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; | |
4040 | + for i := 0 to BrowserTab.Tabs.Count - 1 do begin | |
4041 | + if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin | |
4042 | + ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i])); | |
4043 | + break; | |
4044 | + end; | |
3953 | 4045 | end; |
4046 | + TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]); | |
4047 | + TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true; | |
4048 | + FBrowsers.Move(BROWSER_COUNT - 1, 0); | |
3954 | 4049 | 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; | |
4050 | + MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false); | |
4051 | + TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront; | |
4052 | + SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx])); | |
3965 | 4053 | |
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; | |
4054 | + if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then | |
4055 | + AddressComboBox.Text := GetActiveContent.URL; | |
3971 | 4056 | |
4057 | + if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or | |
4058 | + (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused) | |
4059 | + then | |
4060 | + else | |
4061 | + GikoDM.SetFocusForBrowserAction.Execute; | |
4062 | + end; | |
3972 | 4063 | end; |
3973 | - | |
4064 | + finally | |
4065 | + BrowserTab.Tabs.EndUpdate; | |
3974 | 4066 | end; |
3975 | - | |
3976 | 4067 | end; |
3977 | 4068 | |
3978 | 4069 |
@@ -4001,54 +4092,51 @@ end; | ||
4001 | 4092 | |
4002 | 4093 | procedure TGikoForm.SetBrowserTabState; |
4003 | 4094 | var |
4004 | -// i: Integer; | |
4005 | 4095 | CoolBand: TCoolBand; |
4006 | 4096 | begin |
4007 | 4097 | BrowserBottomPanel.AutoSize := False; |
4008 | 4098 | 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; | |
4099 | + BrowserTab.Hide; | |
4100 | + BrowserTab.Tabs.BeginUpdate; | |
4101 | + try | |
4102 | + if GikoSys.Setting.BrowserTabStyle = gtsTab then begin | |
4103 | + BrowserTab.Style := tsTabs; | |
4104 | + if GikoSys.Setting.BrowserTabPosition = gtpTop then | |
4105 | + BrowserTab.TabPosition := tpTop | |
4106 | + else | |
4107 | + BrowserTab.TabPosition := tpBottom; | |
4108 | + end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin | |
4109 | + BrowserTab.TabPosition := tpTop; | |
4110 | + BrowserTab.Style := tsButtons; | |
4111 | + end else begin | |
4112 | + BrowserTab.TabPosition := tpTop; | |
4113 | + BrowserTab.Style := tsFlatButtons | |
4114 | + end; | |
4033 | 4115 | |
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; | |
4116 | + if GikoSys.Setting.BrowserTabPosition = gtpTop then begin | |
4117 | + BrowserTab.Parent := BrowserTabToolBar; | |
4118 | + BrowserBottomPanel.Hide; | |
4119 | + CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar); | |
4120 | + if CoolBand <> nil then | |
4121 | + CoolBand.Visible := True; | |
4122 | + end else begin | |
4123 | + BrowserTab.Parent := BrowserBottomPanel; | |
4124 | + BrowserTab.Top := 0; | |
4125 | + BrowserTab.Left := 0; | |
4126 | + BrowserBottomPanel.Show; | |
4127 | + CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar); | |
4128 | + if CoolBand <> nil then | |
4129 | + CoolBand.Visible := False; | |
4130 | + end; | |
4131 | + finally | |
4132 | + BrowserTab.Tabs.EndUpdate; | |
4133 | + BrowserTab.Show; | |
4134 | + end; | |
4045 | 4135 | end else begin |
4046 | 4136 | CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar); |
4047 | 4137 | if CoolBand <> nil then |
4048 | 4138 | CoolBand.Visible := False; |
4049 | 4139 | BrowserBottomPanel.Visible := False; |
4050 | -// BrowserTab.Visible := False; | |
4051 | -// BrowserTopPanel.Height := 26; | |
4052 | 4140 | GikoDM.AllTabCloseAction.Execute; |
4053 | 4141 | end; |
4054 | 4142 | end; |
@@ -4118,7 +4206,6 @@ var | ||
4118 | 4206 | doc : Variant; |
4119 | 4207 | threadItem : TThreadItem; |
4120 | 4208 | begin |
4121 | -// AddMessageList('DocumentComplete', nil, gmiWhat); | |
4122 | 4209 | if TObject(Sender) is TWebBrowser then begin |
4123 | 4210 | BrowserRecord := nil; |
4124 | 4211 | if TWebBrowser(Sender) <> Browser then begin |
@@ -4150,7 +4237,7 @@ begin | ||
4150 | 4237 | FEvent := nil; |
4151 | 4238 | end; |
4152 | 4239 | end; |
4153 | - | |
4240 | + | |
4154 | 4241 | end; |
4155 | 4242 | |
4156 | 4243 | if (BrowserRecord <> nil) and |
@@ -4187,6 +4274,7 @@ begin | ||
4187 | 4274 | end; |
4188 | 4275 | end; |
4189 | 4276 | end; |
4277 | + LockWindowUpdate(0); | |
4190 | 4278 | end; |
4191 | 4279 | |
4192 | 4280 | procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject); |
@@ -4495,6 +4583,47 @@ begin | ||
4495 | 4583 | TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height); |
4496 | 4584 | |
4497 | 4585 | end; |
4586 | +//! wè³ê½XbhðJ(Oª³¢Æ« or wèJUMPÜÅ«èȢƫÍDL·é) | |
4587 | +procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String); | |
4588 | +var | |
4589 | + stRes, edRes : Int64; | |
4590 | + browserRec : TBrowserRecord; | |
4591 | + threadNumber : String; | |
4592 | + doc : Variant; | |
4593 | +begin | |
4594 | + stRes := 0; | |
4595 | + edRes := 0; | |
4596 | + // ^u𶬠| |
4597 | + browserRec := InsertBrowserTab(Thread); | |
4598 | + if (browserRec <> nil) then begin | |
4599 | + // JUMP·×«XÔª é©`FbN·é | |
4600 | + threadNumber := ChangeFileExt(Thread.FileName, ''); | |
4601 | + GikoSys.GetPopupResNumber( URL, stRes, edRes ); | |
4602 | + // XÌÔðXÔÆëÁÄF¯µÄ¢éÌðNA | |
4603 | + if (StrToInt(threadNumber) = stRes) then begin | |
4604 | + if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL)) | |
4605 | + and (Pos('&st=' + threadNumber , URL) = 0) then begin | |
4606 | + stRes := 0; | |
4607 | + end; | |
4608 | + end; | |
4609 | + if ( stRes > 0 ) then begin | |
4610 | + browserRec.Movement := IntToStr( stRes ); | |
4611 | + end; | |
4612 | + // OðÁĢȢ© JUMP·×«XÔÜÅ澵ĢȢƫÍDL·é | |
4613 | + if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin | |
4614 | + DownloadContent(Thread); | |
4615 | + end else if (not browserRec.Repaint) and (browserRec.Movement <> '') then begin | |
4616 | + try | |
4617 | + //SetContent(browserRec); | |
4618 | + browserRec.Move(browserRec.Movement); | |
4619 | + browserRec.Movement := ''; | |
4620 | + doc := Idispatch( OleVariant( browserRec.Browser.ControlInterface ).Document ) as IHTMLDocument2; | |
4621 | + Thread.ScrollTop := doc.Body.ScrollTop; | |
4622 | + except | |
4623 | + end; | |
4624 | + end; | |
4625 | + end; | |
4626 | +end; | |
4498 | 4627 | |
4499 | 4628 | procedure TGikoForm.MoveToURL(const inURL: string); |
4500 | 4629 | var |
@@ -4507,13 +4636,8 @@ var | ||
4507 | 4636 | i, bi : Integer; |
4508 | 4637 | boardURL : string; |
4509 | 4638 | tmpThread : TThreadItem; |
4510 | -// category : TCategory; | |
4511 | -// categoryNode : TTreeNode; | |
4512 | -// boardNode : TTreeNode; | |
4513 | 4639 | shiftDown : Boolean; |
4514 | 4640 | ctrlDown : Boolean; |
4515 | - stRes, edRes : Int64; | |
4516 | - browserRec : TBrowserRecord; | |
4517 | 4641 | begin |
4518 | 4642 | |
4519 | 4643 | GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark ); |
@@ -4569,30 +4693,11 @@ begin | ||
4569 | 4693 | if TBoard(ActiveList) = Board then |
4570 | 4694 | ListView.Items.Count := ListView.Items.Count + 1; |
4571 | 4695 | 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; | |
4578 | 4696 | end else begin |
4579 | 4697 | 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; | |
4595 | 4698 | end; |
4699 | + OpenThreadItem(ThreadItem, inURL); | |
4700 | + Exit; | |
4596 | 4701 | end; |
4597 | 4702 | end; |
4598 | 4703 |
@@ -4619,15 +4724,6 @@ begin | ||
4619 | 4724 | if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin |
4620 | 4725 | boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL ); |
4621 | 4726 | Board := BBSsFindBoardFromURL( boardURL ); |
4622 | - //if Board = nil then | |
4623 | - // Board := BBSsFindBoardFromBBSID( BBSID ); | |
4624 | - { ±ÌªàBBSFindBoardFromURLɽ¹½@20050523 | |
4625 | - if Board = nil then begin | |
4626 | - // ¦ìÁÄàÇÁ·éƱ몳¢Ìŵۯ | |
4627 | - //@ßOqÉ©çA_E\µ½Xª©Å«È¢Ìű±ÅT·æ¤É·é (2004/01/22) | |
4628 | - Board := BBSs[ 0 ].FindBBSID( BBSID ); | |
4629 | - end; | |
4630 | - } | |
4631 | 4727 | if Board = nil then begin |
4632 | 4728 | // üé׫ª©Â©çÈ©Á½ÌÅAÊÌuEUÅJ |
4633 | 4729 | GikoSys.OpenBrowser(inURL, gbtUserApp); |
@@ -4652,55 +4748,26 @@ begin | ||
4652 | 4748 | if ThreadItem = nil then begin |
4653 | 4749 | ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' ); |
4654 | 4750 | end; |
4655 | - if ThreadItem = nil then begin | |
4656 | - //shift -> ÝèuEUi³¯êÎIEj | |
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; | |
4751 | + try | |
4752 | + // XbhACeªÈ¢È綬·éB | |
4753 | + if ThreadItem = nil then begin | |
4754 | + ThreadItem := TThreadItem.Create( nil, Board, URL ); | |
4755 | + ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat'); | |
4756 | + Board.Insert(0, ThreadItem); | |
4757 | + if ActiveList is TBoard then begin | |
4758 | + if TBoard(ActiveList) = Board then | |
4759 | + ListView.Items.Count := ListView.Items.Count + 1; | |
4692 | 4760 | end; |
4693 | - end else begin | |
4761 | + end; | |
4762 | + // OȵXbhÌÆ«ÍAzXg¼Ì`FbNð·é | |
4763 | + if not ThreadItem.IsLogFile then begin | |
4694 | 4764 | if AnsiPos(Host, Board.URL) = 0 then |
4695 | 4765 | ThreadItem.DownloadHost := Host |
4696 | 4766 | else |
4697 | 4767 | 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); | |
4703 | 4768 | end; |
4769 | + OpenThreadItem(ThreadItem, inURL); | |
4770 | + except | |
4704 | 4771 | end; |
4705 | 4772 | end else begin |
4706 | 4773 | Board := BBSsFindBoardFromURL( inURL ); |
@@ -4710,7 +4777,7 @@ begin | ||
4710 | 4777 | if FActiveBBS <> Board.ParentCategory.ParenTBBS then |
4711 | 4778 | ShowBBSTree( Board.ParentCategory.ParenTBBS ); |
4712 | 4779 | SelectTreeNode( Board, True ); |
4713 | - end; | |
4780 | + end; | |
4714 | 4781 | end; |
4715 | 4782 | end; |
4716 | 4783 |
@@ -6613,6 +6680,7 @@ begin | ||
6613 | 6680 | Screen.Cursor := crDefault; |
6614 | 6681 | end; |
6615 | 6682 | end; |
6683 | + Sort.SetSortDate(Now()); | |
6616 | 6684 | SetActiveList(Node.data); |
6617 | 6685 | end; |
6618 | 6686 |
@@ -6687,7 +6755,8 @@ begin | ||
6687 | 6755 | (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin |
6688 | 6756 | //}EXªnodeÌãÉ¢é© |
6689 | 6757 | rect := FavoriteTreeView.Selected.DisplayRect(true); |
6690 | - if ((rect.Left <= X) and (rect.Right >= X)) and | |
6758 | + // ACRª¶É¸ç· | |
6759 | + if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and | |
6691 | 6760 | ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin |
6692 | 6761 | if ssDouble in Shift then begin |
6693 | 6762 | FClickNode := FavoriteTreeView.Selected; |
@@ -7580,61 +7649,6 @@ begin | ||
7580 | 7649 | MsgBox(Handle, s, '³êÈ©Á½áO', MB_OK or MB_ICONSTOP); |
7581 | 7650 | end; |
7582 | 7651 | // ************************************************************************* |
7583 | -//! ANVÌ`FbNóÔÌú» FormÌCreateÅÄÑoµÄà½fµÈ¢ | |
7584 | -// ************************************************************************* | |
7585 | -procedure TGikoForm.InitActionChecked(); | |
7586 | -begin | |
7587 | - //OCóÔðÄÝè | |
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 | - //XS\¦{^ð³ê½óÔÉ·é | |
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 | - // Xbhê\¦ÍÍ | |
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 | -// ************************************************************************* | |
7638 | 7652 | //! _E[hRg[Xbh̶¬ |
7639 | 7653 | // ************************************************************************* |
7640 | 7654 | procedure TGikoForm.CreateControlThread(); |
@@ -7755,9 +7769,10 @@ begin | ||
7755 | 7769 | (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin |
7756 | 7770 | //}EXªnodeÌãÉ¢é© |
7757 | 7771 | rect := TreeView.Selected.DisplayRect(true); |
7758 | - if ((rect.Left <= X) and (rect.Right >= X)) and | |
7772 | + // ACRª¾¯¶É¸ç· | |
7773 | + if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and | |
7759 | 7774 | ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin |
7760 | - // NbNÆ_uNbNðRRÅ»è | |
7775 | + // NbNÆ_uNbNðRRÅ»è | |
7761 | 7776 | if ssDouble in Shift then begin |
7762 | 7777 | TreeDoubleClick( TreeView.Selected ); |
7763 | 7778 | end else begin |
@@ -7768,6 +7783,50 @@ begin | ||
7768 | 7783 | end; |
7769 | 7784 | end; |
7770 | 7785 | end; |
7786 | +//! ActionListÌGroupIndexÌÛ¶ | |
7787 | +procedure TGikoForm.GetGroupIndex(ActionList: TActionList); | |
7788 | +var | |
7789 | + i: Integer; | |
7790 | +begin | |
7791 | + if ActionList <> nil then begin | |
7792 | + SetLength(FActionListGroupIndexes, ActionList.ActionCount); | |
7793 | + | |
7794 | + for i := 0 to ActionList.ActionCount - 1 do begin | |
7795 | + try | |
7796 | + FActionListGroupIndexes[i] := | |
7797 | + TCustomAction(ActionList.Actions[i]).GroupIndex; | |
7798 | + TCustomAction(ActionList.Actions[i]).GroupIndex | |
7799 | + := 0; | |
7800 | + except | |
7801 | + ;//CastūȢƫÎô | |
7802 | + end; | |
7803 | + end; | |
7804 | + | |
7805 | + end; | |
7806 | +end; | |
7807 | +//! ActionListÌGroupIndexÌÝè | |
7808 | +procedure TGikoForm.SetGroupIndex(ActionList: TActionList); | |
7809 | +var | |
7810 | + i: Integer; | |
7811 | +begin | |
7812 | + if ActionList <> nil then begin | |
7813 | + if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin | |
7814 | + for i := 0 to ActionList.ActionCount - 1 do begin | |
7815 | + try | |
7816 | + TCustomAction(ActionList.Actions[i]).GroupIndex | |
7817 | + := FActionListGroupIndexes[i]; | |
7818 | + except | |
7819 | + ;//CastūȢƫÎô | |
7820 | + end; | |
7821 | + end; | |
7822 | + end; | |
7823 | + end; | |
7824 | +end; | |
7825 | +//! ±ÌXÌURLæ¾ | |
7826 | +procedure TGikoForm.GetResURLMenuClick(Sender: TObject); | |
7827 | +begin | |
7828 | +; | |
7829 | +end; | |
7771 | 7830 | |
7772 | 7831 | initialization |
7773 | 7832 | OleInitialize(nil); |
@@ -37,7 +37,7 @@ object GikoDM: TGikoDM | ||
37 | 37 | end |
38 | 38 | object NewBoardAction: TAction |
39 | 39 | Category = #12501#12449#12452#12523 |
40 | - Caption = #26495#26356#26032'(&B)...' | |
40 | + Caption = #26495#19968#35239#26356#26032'(&B)...' | |
41 | 41 | Hint = #12508#12540#12489#26356#26032#12480#12452#12450#12525#12464#12434#34920#31034#12377#12427 |
42 | 42 | OnExecute = NewBoardActionExecute |
43 | 43 | end |
@@ -1201,6 +1201,19 @@ object GikoDM: TGikoDM | ||
1201 | 1201 | Hint = #12473#12524#12483#12489#12398#23481#37327#12434#12501#12449#12452#12523#12363#12425#20877#35336#31639#12377#12427 |
1202 | 1202 | OnExecute = ThreadSizeCalcForFileActionExecute |
1203 | 1203 | end |
1204 | + object SetInputAssistAction: TAction | |
1205 | + Category = #12484#12540#12523 | |
1206 | + Caption = #20837#21147#12450#12471#12473#12488#12398#35373#23450 | |
1207 | + Hint = #20837#21147#12450#12471#12473#12488#12398#35373#23450#12501#12457#12540#12512#12434#38283#12367 | |
1208 | + OnExecute = SetInputAssistActionExecute | |
1209 | + end | |
1210 | + object OpenFindDialogAction: TAction | |
1211 | + Category = #12473#12524#12483#12489 | |
1212 | + 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 | |
1213 | + 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 | |
1214 | + ShortCut = 16454 | |
1215 | + OnExecute = OpenFindDialogActionExecute | |
1216 | + end | |
1204 | 1217 | end |
1205 | 1218 | object ToobarImageList: TImageList |
1206 | 1219 | Left = 44 |
@@ -11,7 +11,8 @@ uses | ||
11 | 11 | SHDocVw_TLB, |
12 | 12 | MSHTML_TLB, |
13 | 13 | {$IFEND} |
14 | - ComCtrls, BrowserRecord, Graphics, Messages, Setting, Dialogs; | |
14 | + ComCtrls, BrowserRecord, Graphics, Messages, Setting, Dialogs, | |
15 | + ActiveX; | |
15 | 16 | |
16 | 17 | const |
17 | 18 | CAPTION_NAME: string = 'MRir'; |
@@ -212,6 +213,8 @@ type | ||
212 | 213 | ToobarImageList: TImageList; |
213 | 214 | SaveDialog: TSaveDialog; |
214 | 215 | ThreadSizeCalcForFileAction: TAction; |
216 | + SetInputAssistAction: TAction; | |
217 | + OpenFindDialogAction: TAction; | |
215 | 218 | procedure EditNGActionExecute(Sender: TObject); |
216 | 219 | procedure ReloadActionExecute(Sender: TObject); |
217 | 220 | procedure GoFowardActionExecute(Sender: TObject); |
@@ -394,6 +397,8 @@ type | ||
394 | 397 | procedure AllSelectActionExecute(Sender: TObject); |
395 | 398 | procedure AllSelectActionUpdate(Sender: TObject); |
396 | 399 | procedure ThreadSizeCalcForFileActionExecute(Sender: TObject); |
400 | + procedure SetInputAssistActionExecute(Sender: TObject); | |
401 | + procedure OpenFindDialogActionExecute(Sender: TObject); | |
397 | 402 | private |
398 | 403 | { Private é¾ } |
399 | 404 | procedure ClearResFilter; |
@@ -434,7 +439,7 @@ uses | ||
434 | 439 | ToolBarUtil, NewBoard, HTMLCreate, IndividualAbon, |
435 | 440 | GikoBayesian, About, ShellAPI, |
436 | 441 | RoundName, RoundData, Menus, ListViewUtils, |
437 | - ThreadControl, GikoMessage; | |
442 | + ThreadControl, GikoMessage, InputAssist; | |
438 | 443 | |
439 | 444 | |
440 | 445 | {$R *.dfm} |
@@ -884,22 +889,16 @@ end; | ||
884 | 889 | procedure TGikoDM.SetThreadAreaHorNormal; |
885 | 890 | begin |
886 | 891 | //Êí\¦É·é |
887 | - if GikoForm.ActiveContent <> nil then | |
888 | - SendMessage(GikoForm.ActiveContent.Browser.Handle, WM_SETREDRAW, 0, 0); //`æâ~ | |
889 | 892 | GikoForm.ViewPanel.Width := GikoForm.BrowserSizeWidth; |
890 | 893 | BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX; |
891 | 894 | BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN; |
892 | 895 | GikoSys.Setting.ListWidthState := glsNormal; |
893 | - if GikoForm.ActiveContent <> nil then | |
894 | - SendMessage(GikoForm.ActiveContent.Browser.Handle, WM_SETREDRAW, 1, 0); //`æ | |
895 | 896 | end; |
896 | 897 | // ************************************************************************* |
897 | 898 | //! Xbh\¦GAÅå/Ŭ\¦É·é )ListOrientation = gloHorizontal@ |
898 | 899 | // ************************************************************************* |
899 | 900 | procedure TGikoDM.SetThreadAreaHorizontal(gls : TGikoListState); |
900 | 901 | begin |
901 | - if GikoForm.ActiveContent <> nil then | |
902 | - SendMessage(GikoForm.ActiveContent.Browser.Handle, WM_SETREDRAW, 0, 0); //`æâ~ | |
903 | 902 | if GikoSys.Setting.ListWidthState = glsNormal then |
904 | 903 | GikoForm.BrowserSizeWidth := GikoForm.ViewPanel.Width; |
905 | 904 | //Åå\¦ |
@@ -914,8 +913,6 @@ begin | ||
914 | 913 | BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL; |
915 | 914 | GikoSys.Setting.ListWidthState := glsMin; |
916 | 915 | end; |
917 | - if GikoForm.ActiveContent <> nil then | |
918 | - SendMessage(GikoForm.ActiveContent.Browser.Handle, WM_SETREDRAW, 1, 0); //`æ | |
919 | 916 | end; |
920 | 917 | // ************************************************************************* |
921 | 918 | //! Xbh\¦GAÊí\¦É·é )ListOrientation = gloVertical |
@@ -923,22 +920,16 @@ end; | ||
923 | 920 | procedure TGikoDM.SetThreadAreaVerNormal; |
924 | 921 | begin |
925 | 922 | //Êí\¦É·é |
926 | - if GikoForm.ActiveContent <> nil then | |
927 | - SendMessage(GikoForm.ActiveContent.Browser.Handle, WM_SETREDRAW, 0, 0); //`æâ~ | |
928 | 923 | GikoForm.ViewPanel.Height := GikoForm.BrowserSizeHeight; |
929 | 924 | BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX; |
930 | 925 | BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN; |
931 | 926 | GikoSys.Setting.ListHeightState := glsNormal; |
932 | - if GikoForm.ActiveContent <> nil then | |
933 | - SendMessage(GikoForm.ActiveContent.Browser.Handle, WM_SETREDRAW, 1, 0); //`æ | |
934 | 927 | end; |
935 | 928 | // ************************************************************************* |
936 | 929 | //! Xbh\¦GAÅå/Ŭ\¦É·é )ListOrientation = gloVertical |
937 | 930 | // ************************************************************************* |
938 | 931 | procedure TGikoDM.SetThreadAreaVertical(gls : TGikoListState); |
939 | 932 | begin |
940 | - if GikoForm.ActiveContent <> nil then | |
941 | - SendMessage(GikoForm.ActiveContent.Browser.Handle, WM_SETREDRAW, 0, 0); //`æâ~ | |
942 | 933 | if GikoSys.Setting.ListHeightState = glsNormal then |
943 | 934 | GikoForm.BrowserSizeHeight := GikoForm.ViewPanel.Height; |
944 | 935 | if (gls = glsMin) then begin |
@@ -952,8 +943,6 @@ begin | ||
952 | 943 | BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN; |
953 | 944 | GikoSys.Setting.ListHeightState := glsMax; |
954 | 945 | end; |
955 | - if GikoForm.ActiveContent <> nil then | |
956 | - SendMessage(GikoForm.ActiveContent.Browser.Handle, WM_SETREDRAW, 1, 0); //`æ | |
957 | 946 | end; |
958 | 947 | // ************************************************************************* |
959 | 948 | //! Xbh\¦GAðå«\¦·é |
@@ -1062,7 +1051,6 @@ begin | ||
1062 | 1051 | if Item = nil then Exit; |
1063 | 1052 | Editor := TEditorForm.Create(GikoForm.GetMainForm); |
1064 | 1053 | Editor.SetThreadItem(Item); |
1065 | - GikoSys.LoadKeySetting(Editor.ActionList, GikoSys.GetEditorKeyFileName); | |
1066 | 1054 | Editor.Show; |
1067 | 1055 | Editor.BodyEdit.SetFocus; |
1068 | 1056 | end; |
@@ -1563,7 +1551,7 @@ begin | ||
1563 | 1551 | try |
1564 | 1552 | if Dlg.ShowModal = mrOk then begin |
1565 | 1553 | GikoSys.SaveKeySetting(GikoFormActionList, Setting.KEY_SETTING_FILE_NAME); |
1566 | - GikoSys.SaveKeySetting(Dlg.EditorForm.ActionList, Setting.KEY_SETTING_FILE_NAME); | |
1554 | + GikoSys.SaveKeySetting(Dlg.EditorForm.ActionList, Setting.EKEY_SETTING_FILE_NAME); | |
1567 | 1555 | GikoSys.Setting.Gestures.SaveGesture( GikoSys.Setting.GetGestureFileName ); |
1568 | 1556 | end; |
1569 | 1557 |
@@ -2227,7 +2215,6 @@ begin | ||
2227 | 2215 | |
2228 | 2216 | Editor := TEditorForm.Create(GikoForm); |
2229 | 2217 | Editor.SetThreadItem(Item); |
2230 | - GikoSys.LoadKeySetting(Editor.ActionList, GikoSys.GetEditorKeyFileName); | |
2231 | 2218 | Editor.BodyEdit.Text := '>>' + IntToStr(Number) + #13#10; |
2232 | 2219 | Editor.Show; |
2233 | 2220 | Editor.BodyEdit.SetFocus; |
@@ -2781,6 +2768,7 @@ var | ||
2781 | 2768 | shiftDown: Boolean; |
2782 | 2769 | begin |
2783 | 2770 | shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001); |
2771 | + GikoForm.ActiveListColumnSave; | |
2784 | 2772 | if GikoForm.GetActiveList is TCategory then begin |
2785 | 2773 | List := TList.Create; |
2786 | 2774 | try |
@@ -3782,6 +3770,53 @@ begin | ||
3782 | 3770 | GikoForm.ProgressBar.Position := 0; |
3783 | 3771 | ShowMessage('vZI¹µÜµ½B'); |
3784 | 3772 | end; |
3773 | +//! üÍAVXgÌÝètH[ðÄÑo· | |
3774 | +procedure TGikoDM.SetInputAssistActionExecute(Sender: TObject); | |
3775 | +var | |
3776 | + form : TInputAssistForm; | |
3777 | +begin | |
3778 | + form := TInputAssistForm.Create(GikoForm); | |
3779 | + try | |
3780 | + form.SetUpFromMain; | |
3781 | + form.ShowModal; | |
3782 | + finally | |
3783 | + form.Release; | |
3784 | + end; | |
3785 | +end; | |
3786 | +// WebBrowserÌõ_CAOðÄÑo· | |
3787 | +procedure OpenFindDialog(Browser: TWebbrowser); | |
3788 | +const | |
3789 | + CGID_WebBrowser: TGUID = '{ED016940-BD5B-11cf-BA4E-00C04FD70816}'; | |
3790 | + HTMLID_FIND = 1; | |
3791 | +var | |
3792 | + CmdTarget : IOleCommandTarget; | |
3793 | + vaIn, vaOut: OleVariant; | |
3794 | + PtrGUID: PGUID; | |
3795 | +begin | |
3796 | + if Browser.Document <> nil then begin | |
3797 | + New(PtrGUID); | |
3798 | + PtrGUID^ := CGID_WebBrowser; | |
3799 | + try | |
3800 | + Browser.Document.QueryInterface(IOleCommandTarget, CmdTarget); | |
3801 | + if CmdTarget <> nil then begin | |
3802 | + try | |
3803 | + CmdTarget.Exec(PtrGUID, HTMLID_FIND, 0, vaIn, vaOut); | |
3804 | + finally | |
3805 | + CmdTarget._Release; | |
3806 | + end; | |
3807 | + end; | |
3808 | + except | |
3809 | + end; | |
3810 | + Dispose(PtrGUID); | |
3811 | + end; | |
3812 | +end; | |
3813 | +//! »Ý\¦µÄ¢éXbhÌõ_CAOð\¦·é | |
3814 | +procedure TGikoDM.OpenFindDialogActionExecute(Sender: TObject); | |
3815 | +begin | |
3816 | + if( GikoForm.ActiveContent <> nil) and (GikoForm.ActiveContent.Browser <> nil) then begin | |
3817 | + OpenFindDialog(GikoForm.ActiveContent.Browser); | |
3818 | + end; | |
3819 | +end; | |
3785 | 3820 | |
3786 | 3821 | end. |
3787 | 3822 |
@@ -152,6 +152,7 @@ type | ||
152 | 152 | |
153 | 153 | function GetMainKeyFileName : String; |
154 | 154 | function GetEditorKeyFileName: String; |
155 | + function GetInputAssistFileName: String; | |
155 | 156 | procedure ReadSubjectFile(Board: TBoard); |
156 | 157 | procedure CreateThreadDat(Board: TBoard); |
157 | 158 | procedure WriteThreadDat(Board: TBoard); |
@@ -254,7 +255,7 @@ const | ||
254 | 255 | ZERO_DATE: Integer = 25569; |
255 | 256 | BETA_VERSION_NAME_E = 'beta'; |
256 | 257 | BETA_VERSION_NAME_J = 'ÊÞÀ'; |
257 | - BETA_VERSION = 51; | |
258 | + BETA_VERSION = 52; | |
258 | 259 | BETA_VERSION_BUILD = ''; //!< debugÅÈÇ |
259 | 260 | APP_NAME = 'gikoNavi'; |
260 | 261 | BE_PHP_URL = 'http://be.2ch.net/test/p.php?i='; |
@@ -3248,7 +3249,11 @@ function TGikoSys.GetEditorKeyFileName: String; | ||
3248 | 3249 | begin |
3249 | 3250 | Result := Setting.GetEditorKeyFileName; |
3250 | 3251 | end; |
3251 | - | |
3252 | +//! üÍAVXgÌÝèt@C¼ | |
3253 | +function TGikoSys.GetInputAssistFileName: String; | |
3254 | +begin | |
3255 | + Result := Setting.GetInputAssistFileName; | |
3256 | +end; | |
3252 | 3257 | //! MRirÌbZ[WðÝè·é |
3253 | 3258 | procedure TGikoSys.SetGikoMessage; |
3254 | 3259 | begin |
@@ -15,7 +15,7 @@ uses | ||
15 | 15 | {HttpApp,} YofUtils, {URLMon,} BoardGroup, {gzip,} {Dolib,} |
16 | 16 | {bmRegExp,} AbonUnit, MojuUtils, Setting, |
17 | 17 | ExternalBoardManager, ExternalBoardPlugInMain{,} |
18 | - {Sort,} ,GikoBayesian, HintWindow; | |
18 | + {Sort,} ,GikoBayesian, HintWindow, ActiveX; | |
19 | 19 | |
20 | 20 | type |
21 | 21 |
@@ -38,10 +38,10 @@ type | ||
38 | 38 | constructor Create; |
39 | 39 | |
40 | 40 | 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 ); | |
41 | + procedure CreateUsePluginHTML(html:TStringList; ThreadItem: TThreadItem; var sTitle: string); | |
42 | + procedure CreateUseSKINHTML(html:TStringList; ThreadItem: TThreadItem; ReadList: TStringList); | |
43 | + procedure CreateUseCSSHTML(html:TStringList; ThreadItem: TThreadItem; ReadList: TStringList; sTitle: string ); | |
44 | + procedure CreateDefaultHTML (html:TStringList; ThreadItem: TThreadItem; ReadList: TStringList; sTitle: string ); | |
45 | 45 | procedure ConvertResAnchor(PRes: PResRec); |
46 | 46 | procedure separateNumber(var st: String; var et: String; const Text, Separator: String); |
47 | 47 | function checkComma(const s : String; var j : Integer; var No : String) : boolean; |
@@ -54,7 +54,7 @@ type | ||
54 | 54 | function SkinedRes(const skin: string; PRes: PResRec; const No: string): string; |
55 | 55 | procedure ConvRes( PRes : PResRec; PResLink : PResLinkRec; DatToHTML: boolean = false); overload; |
56 | 56 | 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); | |
57 | + procedure CreateHTML2(doc: IDispatch; ThreadItem: TThreadItem; var sTitle: string); | |
58 | 58 | procedure CreateHTML3(var html: TStringList; ThreadItem: TThreadItem; var sTitle: string); |
59 | 59 | //X|bvAbvÌì¬ |
60 | 60 | procedure SetResPopupText(Hint :TResPopup; threadItem: TThreadItem; StNum, ToNum: Integer; Title, First: Boolean); |
@@ -778,7 +778,7 @@ begin | ||
778 | 778 | end; |
779 | 779 | |
780 | 780 | //Pluginðp·éBoardÌXbhÌHTMLð쬵ÄdocÉ«Þ |
781 | -procedure THTMLCreate.CreateUsePluginHTML(doc: Variant; ThreadItem: TThreadItem; var sTitle: string); | |
781 | +procedure THTMLCreate.CreateUsePluginHTML(html:TStringList; ThreadItem: TThreadItem; var sTitle: string); | |
782 | 782 | var |
783 | 783 | i: integer; |
784 | 784 | NewReceiveNo: Integer; |
@@ -791,11 +791,11 @@ begin | ||
791 | 791 | // tHgâTCYÌÝè |
792 | 792 | UserOptionalStyle := GikoSys.SetUserOptionalStyle; |
793 | 793 | try |
794 | - doc.open; | |
794 | +// doc.open; | |
795 | 795 | // wb_ |
796 | - doc.Write( boardPlugIn.GetHeader( DWORD( threadItem ), | |
796 | + html.add(boardPlugIn.GetHeader( DWORD( threadItem ), | |
797 | 797 | '<style type="text/css">body {' + UserOptionalStyle + '}</style>' )); |
798 | - doc.Write('<p id="idSearch"></p>'); | |
798 | + html.Add('<p id="idSearch"></p>'); | |
799 | 799 | |
800 | 800 | for i := 0 to threadItem.Count - 1 do begin |
801 | 801 | // 1 ÍK¸\¦ |
@@ -819,56 +819,56 @@ begin | ||
819 | 819 | try |
820 | 820 | if GikoSys.Setting.UseSkin then begin |
821 | 821 | if FileExists( GikoSys.GetSkinNewmarkFileName ) then |
822 | - doc.Write( LoadFromSkin( GikoSys.GetSkinNewmarkFileName, ThreadItem, ThreadItem.Size )) | |
822 | + html.Add( LoadFromSkin( GikoSys.GetSkinNewmarkFileName, ThreadItem, ThreadItem.Size )) | |
823 | 823 | else |
824 | - doc.Write( '<a name="new"></a>'); | |
824 | + html.Add( '<a name="new"></a>'); | |
825 | 825 | 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>'); | |
826 | + 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>'); | |
827 | 827 | 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>'); | |
828 | + html.Add('</dl>'); | |
829 | + html.Add('<a name="new"></a>'); | |
830 | + 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>'); | |
831 | + html.Add('<dl>'); | |
832 | 832 | end; |
833 | 833 | except |
834 | - doc.Write( '<a name="new"></a>'); | |
834 | + html.Add( '<a name="new"></a>'); | |
835 | 835 | end; |
836 | 836 | end; |
837 | 837 | |
838 | 838 | // X |
839 | - doc.Write( boardPlugIn.GetRes( DWORD( threadItem ), i + 1 )); | |
839 | + html.Add( boardPlugIn.GetRes( DWORD( threadItem ), i + 1 )); | |
840 | 840 | |
841 | 841 | if ThreadItem.Kokomade = (i + 1) then begin |
842 | 842 | // ±±ÜÅÇñ¾ |
843 | 843 | try |
844 | 844 | if GikoSys.Setting.UseSkin then begin |
845 | 845 | if FileExists( GikoSys.GetSkinBookmarkFileName ) then |
846 | - doc.Write( LoadFromSkin( GikoSys.GetSkinBookmarkFileName, ThreadItem, ThreadItem.Size ) + #13#10 ) | |
846 | + html.Add( LoadFromSkin( GikoSys.GetSkinBookmarkFileName, ThreadItem, ThreadItem.Size )) | |
847 | 847 | else |
848 | - doc.Write( '<a name="koko"></a>'); | |
848 | + html.Add( '<a name="koko"></a>'); | |
849 | 849 | end else if GikoSys.Setting.UseCSS then begin |
850 | - doc.Write('<a name="koko"></a><div class="koko">RRÜÅÇñ¾</div>'); | |
850 | + html.Add('<a name="koko"></a><div class="koko">RRÜÅÇñ¾</div>'); | |
851 | 851 | 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>RRÜÅÇñ¾</b></font></td></tr></table>'); | |
854 | - doc.Write('<dl>'); | |
852 | + html.Add('</dl>'); | |
853 | + 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>RRÜÅÇñ¾</b></font></td></tr></table>'); | |
854 | + html.Add('<dl>'); | |
855 | 855 | end; |
856 | 856 | except |
857 | - doc.Write( '<a name="koko"></a>'); | |
857 | + html.Add('<a name="koko"></a>'); | |
858 | 858 | end; |
859 | 859 | end; |
860 | 860 | end; |
861 | 861 | |
862 | 862 | |
863 | 863 | // XL(tb^) |
864 | - doc.Write( boardPlugIn.GetFooter( DWORD( threadItem ), '<a name="bottom"></a>' )); | |
864 | + html.Add( boardPlugIn.GetFooter( DWORD( threadItem ), '<a name="bottom"></a>' )); | |
865 | 865 | finally |
866 | - doc.Close; | |
866 | + //doc.Close; | |
867 | 867 | end; |
868 | 868 | end; |
869 | 869 | |
870 | 870 | |
871 | -procedure THTMLCreate.CreateUseSKINHTML(doc: Variant; ThreadItem: TThreadItem; ReadList: TStringList); | |
871 | +procedure THTMLCreate.CreateUseSKINHTML(html:TStringList; ThreadItem: TThreadItem; ReadList: TStringList); | |
872 | 872 | const |
873 | 873 | KOKO_TAG = '<a name="koko"></a>'; |
874 | 874 | NEW_TAG = '<a name="new"></a>'; |
@@ -890,9 +890,9 @@ begin | ||
890 | 890 | ResLink.FBbs := ThreadItem.ParentBoard.BBSID; |
891 | 891 | ResLink.FKey := ThreadName; |
892 | 892 | //, |
893 | - doc.open; | |
893 | + //doc.open; | |
894 | 894 | try |
895 | - doc.charset := 'Shift_JIS'; | |
895 | + //doc.charset := 'Shift_JIS'; | |
896 | 896 | |
897 | 897 | // XLÌÝè |
898 | 898 | try |
@@ -900,14 +900,14 @@ begin | ||
900 | 900 | if Length( UserOptionalStyle ) > 0 then |
901 | 901 | SkinHeader := CustomStringReplace( SkinHeader, '</head>', |
902 | 902 | '<style type="text/css">body {' + UserOptionalStyle + '}</style></head>'); |
903 | - doc.Write( SkinHeader ); | |
903 | + html.Add( SkinHeader ); | |
904 | 904 | except |
905 | 905 | end; |
906 | 906 | |
907 | 907 | SkinNewRes := LoadFromSkin( GikoSys.GetSkinNewResFileName, ThreadItem, ThreadItem.Size); |
908 | 908 | SkinRes := LoadFromSkin( GikoSys.GetSkinResFileName, ThreadItem, ThreadItem.Size ); |
909 | 909 | |
910 | - doc.Write('<p id="idSearch"></p>'#13#10'<a name="top"></a>'); | |
910 | + html.Add('<p id="idSearch"></p>'#13#10'<a name="top"></a>'); | |
911 | 911 | |
912 | 912 | for i := 0 to ReadList.Count - 1 do begin |
913 | 913 | // 1 ÍK¸\¦ |
@@ -929,9 +929,9 @@ begin | ||
929 | 929 | // V }[N |
930 | 930 | if (NewReceiveNo = i + 1) or ((NewReceiveNo = 0) and (i = 0)) then begin |
931 | 931 | if FileExists( GikoSys.GetSkinNewmarkFileName ) then |
932 | - doc.Write( LoadFromSkin( GikoSys.GetSkinNewmarkFileName, ThreadItem, ThreadItem.Size )) | |
932 | + html.Add( LoadFromSkin( GikoSys.GetSkinNewmarkFileName, ThreadItem, ThreadItem.Size )) | |
933 | 933 | else |
934 | - doc.Write( NEW_TAG ); | |
934 | + html.Add( NEW_TAG ); | |
935 | 935 | end; |
936 | 936 | |
937 | 937 | if (Trim(ReadList[i]) <> '') then begin |
@@ -942,30 +942,30 @@ begin | ||
942 | 942 | |
943 | 943 | if NewReceiveNo <= (i + 1) then |
944 | 944 | // V X |
945 | - doc.Write(SkinedRes(SkinNewRes, @Res, IntToStr(i + 1))) | |
945 | + html.Add(SkinedRes(SkinNewRes, @Res, IntToStr(i + 1))) | |
946 | 946 | else |
947 | 947 | // ÊíÌX |
948 | - doc.Write(SkinedRes(SkinRes, @Res, IntToStr(i + 1))); | |
948 | + html.Add(SkinedRes(SkinRes, @Res, IntToStr(i + 1))); | |
949 | 949 | end; |
950 | 950 | |
951 | 951 | if ThreadItem.Kokomade = (i + 1) then begin |
952 | 952 | // ±±ÜÅÇñ¾ |
953 | 953 | if FileExists( GikoSys.GetSkinBookmarkFileName ) then |
954 | - doc.Write( LoadFromSkin( GikoSys.GetSkinBookmarkFileName, ThreadItem, ThreadItem.Size ) + #13#10 ) | |
954 | + html.Add( LoadFromSkin( GikoSys.GetSkinBookmarkFileName, ThreadItem, ThreadItem.Size )) | |
955 | 955 | else |
956 | - doc.Write( KOKO_TAG ); | |
956 | + html.Add( KOKO_TAG ); | |
957 | 957 | end; |
958 | 958 | end; |
959 | 959 | |
960 | - doc.Write('<a name="bottom"></a>'); | |
960 | + html.Add('<a name="bottom"></a>'); | |
961 | 961 | // XL(tb^) |
962 | - doc.Write( LoadFromSkin( GikoSys.GetSkinFooterFileName, ThreadItem, ThreadItem.Size ) ); | |
962 | + html.Add( LoadFromSkin( GikoSys.GetSkinFooterFileName, ThreadItem, ThreadItem.Size ) ); | |
963 | 963 | finally |
964 | - doc.close; | |
964 | + //doc.close; | |
965 | 965 | end; |
966 | 966 | end; |
967 | 967 | |
968 | -procedure THTMLCreate.CreateUseCSSHTML(doc: Variant; ThreadItem: TThreadItem; ReadList: TStringList; sTitle: string ); | |
968 | +procedure THTMLCreate.CreateUseCSSHTML(html:TStringList; ThreadItem: TThreadItem; ReadList: TStringList; sTitle: string ); | |
969 | 969 | const |
970 | 970 | FORMAT_NOMAIL = '<a name="%s"></a><div class="header"><span class="no"><a href="menu:%s">%s</a></span>' |
971 | 971 | + '<span class="name_label">¼OF</span> <span class="name"><b>%s</b></span>' |
@@ -975,13 +975,12 @@ const | ||
975 | 975 | FORMAT_SHOWMAIL = '<a name="%s"></a><div class="header"><span class="no"><a href="menu:%s">%s</a></span>' |
976 | 976 | + '<span class="name_label"> ¼OF </span><a class="name_mail" href="mailto:%s">' |
977 | 977 | + '<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>'; | |
978 | + + '<span class="date"> %s</span></div><div class="mes">%s</div>'; | |
979 | 979 | |
980 | 980 | FORMAT_NOSHOW = '<a name="%s"></a><div class="header"><span class="no"><a href="menu:%s">%s</a></span>' |
981 | 981 | + '<span class="name_label"> ¼OF </span><a class="name_mail" href="mailto:%s">' |
982 | 982 | + '<b>%s</b></a><span class="date_label"> eúF</span><span class="date"> %s</span></div>' |
983 | - + '<div class="mes">%s </div>'; | |
984 | - | |
983 | + + '<div class="mes">%s</div>'; | |
985 | 984 | var |
986 | 985 | i: integer; |
987 | 986 | No: string; |
@@ -992,9 +991,9 @@ var | ||
992 | 991 | ThreadName :String; |
993 | 992 | ResLink :TResLinkRec; |
994 | 993 | begin |
995 | - doc.open; | |
994 | + //doc.open; | |
996 | 995 | try |
997 | - doc.charset := 'Shift_JIS'; | |
996 | + //doc.charset := 'Shift_JIS'; | |
998 | 997 | NewReceiveNo := ThreadItem.NewReceive; |
999 | 998 | ThreadName := ChangeFileExt(ThreadItem.FileName, ''); |
1000 | 999 | ResLink.FBbs := ThreadItem.ParentBoard.BBSID; |
@@ -1004,15 +1003,15 @@ begin | ||
1004 | 1003 | CSSFileName := GikoSys.GetStyleSheetDir + GikoSys.Setting.CSSFileName; |
1005 | 1004 | if GikoSys.Setting.UseCSS and FileExists(CSSFileName) then begin |
1006 | 1005 | //CSSgp |
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">'); | |
1006 | + html.Add('<html><head>'); | |
1007 | + html.Add('<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">'); | |
1008 | + html.Add('<title>' + sTitle + '</title>'); | |
1009 | + html.Add('<link rel="stylesheet" href="'+CSSFileName+'" type="text/css">'); | |
1011 | 1010 | 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>'); | |
1011 | + html.Add('<style type="text/css">body {' + UserOptionalStyle + '}</style>'); | |
1012 | + html.Add('</head>'#13#10'<body>'); | |
1013 | + html.Add('<a name="top"></a>'#13#10'<p id="idSearch"></p>'); | |
1014 | + html.Add('<div class="title">' + sTitle + '</div>'); | |
1016 | 1015 | for i := 0 to ReadList.Count - 1 do begin |
1017 | 1016 | // 1 ÍK¸\¦ |
1018 | 1017 | if i <> 0 then begin |
@@ -1031,7 +1030,7 @@ begin | ||
1031 | 1030 | end; |
1032 | 1031 | |
1033 | 1032 | 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>'); | |
1033 | + 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>'); | |
1035 | 1034 | end; |
1036 | 1035 | |
1037 | 1036 | if (Trim(ReadList[i]) <> '') then begin |
@@ -1041,29 +1040,29 @@ begin | ||
1041 | 1040 | ConvRes(@Res, @ResLink); |
1042 | 1041 | Res.FDateTime := AddBeProfileLink(Res.FDateTime, i + 1); |
1043 | 1042 | if Res.FMailTo = '' then |
1044 | - doc.Write(Format(FORMAT_NOMAIL, [No, No, No, Res.FName, Res.FDateTime, Res.FBody])) | |
1043 | + html.Add(Format(FORMAT_NOMAIL, [No, No, No, Res.FName, Res.FDateTime, Res.FBody])) | |
1045 | 1044 | 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])) | |
1045 | + html.Add(Format(FORMAT_SHOWMAIL, [No, No, No, Res.FMailTo, Res.FName, Res.FMailTo, Res.FDateTime, Res.FBody])) | |
1047 | 1046 | else |
1048 | - doc.Write(Format(FORMAT_NOSHOW, [No, No, No, Res.FName, Res.FDateTime, Res.FBody])); | |
1047 | + html.Add(Format(FORMAT_NOSHOW, [No, No, No, Res.FMailTo, Res.FName, Res.FDateTime, Res.FBody])); | |
1049 | 1048 | end; |
1050 | 1049 | |
1051 | 1050 | if ThreadItem.Kokomade = (i + 1) then begin |
1052 | - doc.Write('<a name="koko"></a><div class="koko">RRÜÅÇñ¾</div>'); | |
1051 | + html.Add('<a name="koko"></a><div class="koko">RRÜÅÇñ¾</div>'); | |
1053 | 1052 | end; |
1054 | 1053 | |
1055 | 1054 | end; |
1056 | 1055 | |
1057 | - doc.Write('<a name="bottom"></a>'); | |
1058 | - doc.Write('<a name="last"></a>'); | |
1059 | - doc.Write('</body></html>'); | |
1056 | + html.Add('<a name="bottom"></a>'); | |
1057 | + html.Add('<a name="last"></a>'); | |
1058 | + html.Add('</body></html>'); | |
1060 | 1059 | end; |
1061 | 1060 | finally |
1062 | - doc.Close; | |
1061 | + //doc.Close; | |
1063 | 1062 | end; |
1064 | 1063 | end; |
1065 | 1064 | |
1066 | -procedure THTMLCreate.CreateDefaultHTML (doc: Variant; ThreadItem: TThreadItem; ReadList: TStringList; sTitle: string ); | |
1065 | +procedure THTMLCreate.CreateDefaultHTML (html:TStringList; ThreadItem: TThreadItem; ReadList: TStringList; sTitle: string ); | |
1067 | 1066 | var |
1068 | 1067 | i: integer; |
1069 | 1068 | No: string; |
@@ -1072,21 +1071,21 @@ var | ||
1072 | 1071 | ThreadName: String; |
1073 | 1072 | ResLink : TResLinkRec; |
1074 | 1073 | begin |
1075 | - doc.open; | |
1074 | +// doc.open; | |
1076 | 1075 | try |
1077 | - doc.charset := 'Shift_JIS'; | |
1076 | +// doc.charset := 'Shift_JIS'; | |
1078 | 1077 | NewReceiveNo := ThreadItem.NewReceive; |
1079 | 1078 | ThreadName := ChangeFileExt(ThreadItem.FileName, ''); |
1080 | 1079 | ResLink.FBbs := ThreadItem.ParentBoard.BBSID; |
1081 | 1080 | 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); | |
1081 | + html.Add('<html><head>'); | |
1082 | + html.Add('<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">'); | |
1083 | + html.Add('<title>' + sTitle + '</title></head>'); | |
1084 | + html.Add('<body TEXT="#000000" BGCOLOR="#EFEFEF" link="#0000FF" alink="#FF0000" vlink="#660099">'); | |
1085 | + html.Add('<a name="top"></a>'); | |
1086 | + html.Add('<font size=+1 color="#FF0000">' + sTitle + '</font>'); | |
1087 | + html.Add('<dl>'); | |
1088 | + html.Add('<p id="idSearch"></p>'); | |
1090 | 1089 | for i := 0 to ReadList.Count - 1 do begin |
1091 | 1090 | // 1 ÍK¸\¦ |
1092 | 1091 | if i <> 0 then begin |
@@ -1105,10 +1104,10 @@ begin | ||
1105 | 1104 | end; |
1106 | 1105 | |
1107 | 1106 | 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>'); | |
1107 | + html.Add('</dl>'); | |
1108 | + html.Add('<a name="new"></a>'); | |
1109 | + 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>'); | |
1110 | + html.Add('<dl>'); | |
1112 | 1111 | end; |
1113 | 1112 | |
1114 | 1113 | if (Trim(ReadList[i]) <> '') then begin |
@@ -1118,30 +1117,32 @@ begin | ||
1118 | 1117 | ConvRes(@Res, @ResLink); |
1119 | 1118 | Res.FDateTime := AddBeProfileLink(Res.FDateTime, i + 1); |
1120 | 1119 | if Res.FMailTo = '' then |
1121 | - doc.Write('<a name="' + No + '"></a><dt><a href="menu:' + No + '">' + No + '</a> ¼OF<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) | |
1120 | + html.Add('<a name="' + No + '"></a><dt><a href="menu:' + No + '">' + No + '</a> ¼OF<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) | |
1122 | 1121 | else if GikoSys.Setting.ShowMail then |
1123 | - doc.Write('<a name="' + No + '"></a><dt><a href="menu:' + No + '">' + No + '</a> ¼OF<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) | |
1122 | + html.Add('<a name="' + No + '"></a><dt><a href="menu:' + No + '">' + No + '</a> ¼OF<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) | |
1124 | 1123 | else |
1125 | - doc.Write('<a name="' + No + '"></a><dt><a href="menu:' + No + '">' + No + '</a> ¼OF<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); | |
1124 | + html.Add('<a name="' + No + '"></a><dt><a href="menu:' + No + '">' + No + '</a> ¼OF<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); | |
1126 | 1125 | end; |
1127 | 1126 | 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>RRÜÅÇñ¾</b></font></td></tr></table>'); | |
1130 | - doc.Write('<dl>'); | |
1127 | + html.Add('</dl>'); | |
1128 | + 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>RRÜÅÇñ¾</b></font></td></tr></table>'); | |
1129 | + html.Add('<dl>'); | |
1131 | 1130 | end; |
1132 | 1131 | end; |
1133 | - doc.Write('</dl>'#13#10'<a name="bottom"></a>'#13#10'</body></html>'); | |
1132 | + html.Add('</dl>'#13#10'<a name="bottom"></a>'#13#10'</body></html>'); | |
1134 | 1133 | finally |
1135 | - doc.Close; | |
1134 | + //doc.Close; | |
1136 | 1135 | end; |
1137 | 1136 | end; |
1138 | 1137 | |
1139 | -procedure THTMLCreate.CreateHTML2(doc: Variant; ThreadItem: TThreadItem; var sTitle: string); | |
1138 | +procedure THTMLCreate.CreateHTML2(doc: IDispatch; ThreadItem: TThreadItem; var sTitle: string); | |
1140 | 1139 | var |
1141 | 1140 | ReadList: TStringList; |
1142 | 1141 | CSSFileName: string; |
1143 | 1142 | FileName: string; |
1144 | 1143 | Res: TResRec; |
1144 | + body : TStringList; | |
1145 | + mStream : TMemoryStream; | |
1145 | 1146 | {$IFDEF DEBUG} |
1146 | 1147 | st, rt: Cardinal; |
1147 | 1148 | {$ENDIF} |
@@ -1151,45 +1152,60 @@ begin | ||
1151 | 1152 | st := GetTickCount; |
1152 | 1153 | {$ENDIF} |
1153 | 1154 | 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'; | |
1155 | + body := TStringList.Create; | |
1156 | + try | |
1157 | + body.BeginUpdate; | |
1158 | + if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin | |
1159 | + CreateUsePluginHTML(body, ThreadItem, sTitle); | |
1160 | + end else begin | |
1161 | + ShortDayNames[1] := 'ú'; ShortDayNames[2] := ''; | |
1162 | + ShortDayNames[3] := 'Î'; ShortDayNames[4] := ' '; | |
1163 | + ShortDayNames[5] := 'Ø'; ShortDayNames[6] := 'à'; | |
1164 | + ShortDayNames[7] := 'y'; | |
1161 | 1165 | |
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ÌtB^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 | - // tHgâTCYÌÝè | |
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); | |
1166 | + ReadList := TStringList.Create; | |
1167 | + try | |
1168 | + if ThreadItem.IsLogFile then begin | |
1169 | + ReadList.BeginUpdate; | |
1170 | + FileName := ThreadItem.GetThreadFileName; | |
1171 | + ReadList.LoadFromFile(FileName); | |
1172 | + ReadList.EndUpdate; | |
1173 | + GikoSys.FAbon.IndividualAbon(ReadList, ChangeFileExt(FileName,'.NG')); | |
1174 | + GikoSys.FAbon.Execute(ReadList); // Ú`ñµÄ | |
1175 | + GikoSys.FSelectResFilter.Execute(ReadList); //XÌtB^Oð·é | |
1176 | + if ThreadItem.Title = '' then begin | |
1177 | + DivideStrLine(ReadList[0], @Res); | |
1178 | + sTitle := Res.FTitle; | |
1179 | + end else | |
1180 | + sTitle := ThreadItem.Title | |
1181 | + end else begin | |
1182 | + sTitle := CustomStringReplace(ThreadItem.Title, 'M', ','); | |
1183 | + end; | |
1184 | + // tHgâTCYÌÝè | |
1185 | + CSSFileName := GikoSys.GetStyleSheetDir + GikoSys.Setting.CSSFileName; | |
1186 | + if GikoSys.Setting.UseSkin then begin | |
1187 | + CreateUseSKINHTML(body, ThreadItem, ReadList); | |
1188 | + end else if GikoSys.Setting.UseCSS and FileExists(CSSFileName) then begin | |
1189 | + CreateUseCSSHTML(body, ThreadItem, ReadList, sTitle); | |
1190 | + end else begin | |
1191 | + CreateDefaultHTML(body, ThreadItem, ReadList, sTitle); | |
1192 | + end; | |
1193 | + body.EndUpdate; | |
1194 | + //WebBrowserÉ«Ý | |
1195 | + mStream := TMemoryStream.Create; | |
1196 | + try | |
1197 | + body.SaveToStream(mStream); | |
1198 | + mStream.Seek(soFromBeginning, 0); | |
1199 | + (doc as IPersistStreamInit).Load(TStreamAdapter.Create(mStream)); | |
1200 | + finally | |
1201 | + mStream.Free; | |
1202 | + end; | |
1203 | + finally | |
1204 | + ReadList.Free; | |
1188 | 1205 | end; |
1189 | - | |
1190 | - finally | |
1191 | - ReadList.Free; | |
1192 | 1206 | end; |
1207 | + finally | |
1208 | + body.Free; | |
1193 | 1209 | end; |
1194 | 1210 | end; |
1195 | 1211 | {$IFDEF DEBUG} |
@@ -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 |
@@ -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 | +//! tH[¶¬ÌCxg | |
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 := 'JeS'; | |
91 | + column.Width := 80; | |
92 | + for i := 0 to InputAssistDM.ResistWordCount - 1 do begin | |
93 | + AddListViewItem(InputAssistDM.GetResistWord(i)); | |
94 | + end; | |
95 | + //\[góÔðð (ðµÈ¢ÆACeÌL[¼ðÏXÅ«È¢) | |
96 | + InputAssistDM.Sorted := False; | |
97 | +end; | |
98 | +//! êÉACeðÇÁ·é | |
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êê©çACeðIðµ½Æ«ÌCxg | |
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 | +//! ÇÁ{^ºÌCxg | |
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 | +//! í{^ºÌCxg | |
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 | +//! Kp{^ºÌCxg | |
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 | + // êÌXV | |
159 | + GikoListView1.Selected.Caption := resWord.GetKey; | |
160 | + GikoListView1.Selected.SubItems[0] := resWord.GetCategory; | |
161 | + GikoListView1.AlphaSort; | |
162 | + end; | |
163 | + end; | |
164 | +end; | |
165 | +//! tH[ð¶éÆ«ÌCxg | |
166 | +procedure TInputAssistForm.FormClose(Sender: TObject; | |
167 | + var Action: TCloseAction); | |
168 | +begin | |
169 | + //\[góÔÌÝè | |
170 | + InputAssistDM.Sorted := True; | |
171 | +end; | |
172 | +//! o^PêêÌ\[gpÌä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 | + // JeSÅ\[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êêÌXgÌJNbNCxg | |
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¹{^ðºÌCxg | |
227 | +procedure TInputAssistForm.CloseButtonClick(Sender: TObject); | |
228 | +begin | |
229 | + Close(); | |
230 | +end; | |
231 | +//! JeSiÝR{{bNXðÇæêpÉ·é½ßÌCxg | |
232 | +procedure TInputAssistForm.CategoryComboBoxKeyPress(Sender: TObject; | |
233 | + var Key: Char); | |
234 | +begin | |
235 | + Key := #0; | |
236 | +end; | |
237 | +//! JeSiÝR{{bNXÅÌJeSÏ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 := 'üÍAVXgÝè'; | |
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 := 'üÍAVXg'; | |
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. |
@@ -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 |
@@ -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êÇÁ | |
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ðJeSÉÂo^³êÄ¢éPêðæ¾ | |
34 | + function GetStartWithCategoryResistWords(Key: String; var list: TStringList): Integer; | |
35 | + //! KeyÌJeSÉo^³êÄ¢éPêðæ¾ | |
36 | + function GetCategoryResistWords(Key: String; var list: TStringList): Integer; | |
37 | + //! o^ÏÝL[ÌSÄÌJeSXgæ¾ | |
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 | + //GXP[vµÄ¢é=ð³·é | |
73 | + Result := MojuUtils.CustomStringReplace(FKey, '=', '='); | |
74 | +end; | |
75 | +//! FKeyÉlðÝè·é | |
76 | +procedure TResistWord.SetKey(Value: String); | |
77 | +begin | |
78 | + //=ÍÛ¶Ég¤ÌÅGXP[v·é | |
79 | + FKey := MojuUtils.CustomStringReplace(Value, '=', '='); | |
80 | +end; | |
81 | +//! FCategoryÉÝè³êÄ¢élðæ¾·é | |
82 | +function TResistWord.GetCategory: String; | |
83 | +begin | |
84 | + //GXP[vµÄ¢é=ð³·é | |
85 | + Result := MojuUtils.CustomStringReplace(FCategory, '=', '='); | |
86 | +end; | |
87 | +//! FCategoryÉlðÝè·é | |
88 | +procedure TResistWord.SetCategory(Value: String); | |
89 | +begin | |
90 | + //=ÍÛ¶Ég¤ÌÅGXP[v·é | |
91 | + FCategory := MojuUtils.CustomStringReplace(Value, '=', '='); | |
92 | +end; | |
93 | +//! FTextÉÝè³êÄ¢élðæ¾·é | |
94 | +function TResistWord.GetText: String; | |
95 | +begin | |
96 | + //GXP[vµÄ¢é=ð³·é | |
97 | + Result := MojuUtils.CustomStringReplace(FText, '=', '='); | |
98 | + // #1ɵ½üsR[hð#13#10ɳ·é | |
99 | + Result := MojuUtils.CustomStringReplace(Result, #1, #13#10); | |
100 | +end; | |
101 | +procedure TResistWord.SetText(Value: String); | |
102 | +begin | |
103 | + //=ÍÛ¶Ég¤ÌÅGXP[v·é | |
104 | + FText := MojuUtils.CustomStringReplace(Value, '=', '='); | |
105 | + //üsR[hð#1É·éi1sÉ·é½ß) | |
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̶ÝðmF | |
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è³ê½pXÌ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 | +//! fXgN^ | |
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 | +//! RXgN^ | |
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êÇÁ | |
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('JeS'); | |
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³êÄ¢é©çAqbg·êÎA±·é͸ | |
274 | + break; | |
275 | + end; | |
276 | + end; | |
277 | + end; | |
278 | +end; | |
279 | +//! KeyðJeSÉÂ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ÌJeSÉ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ÄÌJeSXgæ¾ | |
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¡`FbNð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ðJeSÉÂo^PêðÔ·Ì\[gpär\bh | |
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. |
@@ -111,7 +111,6 @@ begin | ||
111 | 111 | if ListView.Items.Count > 0 then |
112 | 112 | ListView.Selected := ListView.Items[0]; |
113 | 113 | EditorForm := TEditorForm.Create(Self); |
114 | - GikoSys.LoadKeySetting(EditorForm.ActionList, GikoSys.GetEditorKeyFileName); | |
115 | 114 | try |
116 | 115 | for i := 0 to EditorForm.ActionList.ActionCount - 1 do begin |
117 | 116 | if EditorForm.ActionList.Actions[i] is TAction then begin |
@@ -10,6 +10,7 @@ type | ||
10 | 10 | TListViewUtils = class(TObject) |
11 | 11 | private |
12 | 12 | {Private é¾} |
13 | + | |
13 | 14 | class procedure DrawCategoryItem(BBS: TBBS; Item: TListItem; ListView: TListView); |
14 | 15 | class procedure DrawBoardItem(Category: TCategory; Item: TListItem; ListView: TListView); |
15 | 16 | class procedure DrawThreadItem(Board: TBoard; Item: TListItem; ListView: TListView); |
@@ -30,11 +31,10 @@ type | ||
30 | 31 | class procedure ListViewData(Sender: TObject; Item: TListItem); |
31 | 32 | end; |
32 | 33 | |
33 | - | |
34 | 34 | implementation |
35 | 35 | |
36 | 36 | uses |
37 | - GikoSystem, Sort, Setting, Giko, MojuUtils, GikoDataModule; | |
37 | + GikoSystem, Sort, Setting, Giko, MojuUtils, GikoDataModule, DateUtils, Math; | |
38 | 38 | |
39 | 39 | const |
40 | 40 | //c[EXgACR |
@@ -612,6 +612,7 @@ end; | ||
612 | 612 | class procedure TListViewUtils.DrawItemLogThread(Thread: TThreadItem; Item: TListItem; ColumnCount: Integer); |
613 | 613 | var |
614 | 614 | i, idx : Integer; |
615 | + spanday: Double; | |
615 | 616 | begin |
616 | 617 | idx := 0; |
617 | 618 | for i := 0 to ColumnCount - 1 do begin |
@@ -655,6 +656,16 @@ begin | ||
655 | 656 | Item.SubItems[ idx ] := ''; |
656 | 657 | end else |
657 | 658 | Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', Thread.LastModified); |
659 | + gbcVigor: | |
660 | + begin | |
661 | + spanday := DaySpan(Sort.GetSortDate, Thread.CreateDate); | |
662 | + if (spanday > 0) then begin | |
663 | + Item.SubItems[ idx ] := Format('%f', [Thread.AllResCount / spanday]); | |
664 | + end else begin | |
665 | + Item.SubItems[ idx ] := ''; | |
666 | + end; | |
667 | + | |
668 | + end; | |
658 | 669 | end; |
659 | 670 | Inc( idx ); |
660 | 671 | end; |
@@ -668,6 +679,7 @@ end; | ||
668 | 679 | class procedure TListViewUtils.DrawItemNoLogThread(Thread: TThreadItem; Item: TListItem; ColumnCount: Integer); |
669 | 680 | var |
670 | 681 | i, idx: Integer; |
682 | + spanday: Double; | |
671 | 683 | begin |
672 | 684 | idx := 0; |
673 | 685 | for i := 0 to ColumnCount - 1do begin |
@@ -686,9 +698,20 @@ begin | ||
686 | 698 | Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', Thread.CreateDate); |
687 | 699 | gbcLastModified: |
688 | 700 | Item.SubItems[ idx ] := ''; |
701 | + gbcVigor: | |
702 | + begin | |
703 | + spanday := DaySpan(Sort.GetSortDate, Thread.CreateDate); | |
704 | + if (spanday > 0) then begin | |
705 | + Item.SubItems[ idx ] := Format('%f', [Thread.AllResCount / spanday]); | |
706 | + end else begin | |
707 | + Item.SubItems[ idx ] := ''; | |
708 | + end; | |
709 | + | |
710 | + end; | |
689 | 711 | else |
690 | 712 | Item.SubItems[ idx ] := ''; |
691 | 713 | end; |
714 | + | |
692 | 715 | Inc( idx ); |
693 | 716 | end; |
694 | 717 | if Thread.NewArrival then |
@@ -32,6 +32,10 @@ uses | ||
32 | 32 | //<font>^OðSÄí·é |
33 | 33 | function DeleteFontTag( inSource : string) : string; |
34 | 34 | function RemoveToken(var s: string;const delimiter: string): string; |
35 | + // ³Q»(& -> & " -> &auot; ÉÏ··é) | |
36 | + function Sanitize(const s: String): String; | |
37 | + // ³Q»ð(& -> & &auot; -> " ÉÏ··é) | |
38 | + function UnSanitize(const s: String): String; | |
35 | 39 | |
36 | 40 | implementation |
37 | 41 | // |C^[AZuÉæé¬|X |
@@ -358,6 +362,17 @@ begin | ||
358 | 362 | s := ''; |
359 | 363 | end; |
360 | 364 | end; |
361 | - | |
365 | +//! ³Q»(& -> & " -> &auot; ÉÏ··é) | |
366 | +function Sanitize(const s: String): String; | |
367 | +begin | |
368 | + Result := CustomStringReplace(s, '&', '&'); | |
369 | + Result := CustomStringReplace(Result, '"', '"'); | |
370 | +end; | |
371 | +//! ³Q»ð(& -> & &auot; -> " ÉÏ··é) | |
372 | +function UnSanitize(const s: String): String; | |
373 | +begin | |
374 | + Result := CustomStringReplace(s, '"', '"'); | |
375 | + Result := CustomStringReplace(Result, '&', '&'); | |
376 | +end; | |
362 | 377 | |
363 | 378 | end. |
@@ -73,15 +73,15 @@ type | ||
73 | 73 | end; |
74 | 74 | /// XXgÌJ ID |
75 | 75 | type TGikoBoardColumnID = (gbcTitle, gbcAllCount, gbcLocalCount, gbcNonAcqCount, |
76 | - gbcNewCount, gbcUnReadCount, gbcRoundName, gbcRoundDate, gbcCreated, gbcLastModified );{gbcLastModified,} | |
76 | + gbcNewCount, gbcUnReadCount, gbcRoundName, gbcRoundDate, gbcCreated, gbcLastModified, gbcVigor );{gbcLastModified,} | |
77 | 77 | /// XXgÌJ¼ |
78 | - const GikoBoardColumnCaption : array[0..9] of string = | |
78 | + const GikoBoardColumnCaption : array[0..10] of string = | |
79 | 79 | ( 'Xbh¼', 'JEg', 'æ¾', '¢æ¾', 'V ', |
80 | - '¢Ç', 'ñ\ñ', 'æ¾ú', 'Xì¬ú', 'ÅIXVú' ); | |
81 | - const GikoBoardColumnAlignment : array[0..9] of TAlignment = ( | |
80 | + '¢Ç', 'ñ\ñ', 'æ¾ú', 'Xì¬ú', 'ÅIXVú', '¨¢' ); | |
81 | + const GikoBoardColumnAlignment : array[0..10] of TAlignment = ( | |
82 | 82 | taLeftJustify, taRightJustify, taRightJustify, taRightJustify, |
83 | 83 | taRightJustify, taRightJustify, taLeftJustify, taLeftJustify, |
84 | - taLeftJustify, taLeftJustify); | |
84 | + taLeftJustify, taLeftJustify, taRightJustify); | |
85 | 85 | /// XXgJzñ |
86 | 86 | type TGikoBoardColumnList = class( TList ) |
87 | 87 | private |
@@ -259,7 +259,7 @@ type | ||
259 | 259 | //XgJwb_[TCY |
260 | 260 | FBBSColumnWidth: array[0..0] of Integer; |
261 | 261 | FCategoryColumnWidth: array[0..2] of Integer; |
262 | - FBoardColumnWidth: array[0..9] of Integer; | |
262 | + FBoardColumnWidth: array[0..10] of Integer; | |
263 | 263 | |
264 | 264 | /// JeSXgJ |
265 | 265 | FBBSColumnOrder : TGikoBBSColumnList; |
@@ -491,7 +491,7 @@ type | ||
491 | 491 | function GetMainKeyFileName: String; |
492 | 492 | function GetEditorKeyFileName: String; |
493 | 493 | procedure WriteLogFolder(AVal : String); |
494 | - | |
494 | + function GetInputAssistFileName : String; | |
495 | 495 | //óMobt@TCY |
496 | 496 | property RecvBufferSize: Integer read FRecvBufferSize write FRecvBufferSize; |
497 | 497 | //HTTP1.1gp |
@@ -772,7 +772,8 @@ const | ||
772 | 772 | MAX_POPUP_RES : Integer = 10; |
773 | 773 | GESTURE_FILE_NAME = 'Gestures.ini'; |
774 | 774 | SPAMFILTER_FILE_NAME = 'SpamFilter.ini'; |
775 | - LANGUAGE_FILE_NAME = 'language.ini'; | |
775 | + LANGUAGE_FILE_NAME = 'language.ini'; | |
776 | + INPUTASSIST_FILE_NAME = 'InputAssist.ini'; | |
776 | 777 | |
777 | 778 | |
778 | 779 |
@@ -935,7 +936,7 @@ procedure TSetting.ReadSettingFile(); | ||
935 | 936 | const |
936 | 937 | DEFAULT_BBS_WIDTH: array[0..0] of Integer = (140); |
937 | 938 | 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); | |
939 | 940 | MAX_WIDTH: Integer = 2000; |
940 | 941 | var |
941 | 942 | ini: TMemIniFile; |
@@ -1164,8 +1165,12 @@ begin | ||
1164 | 1165 | end; |
1165 | 1166 | if FBoardColumnOrder.Count = 0 then begin |
1166 | 1167 | // Ý誳¢ÌÅì¬ |
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ÍftHgÅñ\¦É·é | |
1170 | + if ( i <> Ord(gbcVigor) ) then begin | |
1171 | + FBoardColumnOrder.Add( TGikoBoardColumnID( i ) ); | |
1172 | + end; | |
1173 | + end; | |
1169 | 1174 | end; |
1170 | 1175 | finally |
1171 | 1176 | wkList.Free; |
@@ -1257,7 +1262,7 @@ begin | ||
1257 | 1262 | FBoardSortIndex := ini.ReadInteger('ThreadList', 'BoardSortIndex', 0); |
1258 | 1263 | FBoardSortOrder := ini.ReadBool('ThreadList', 'BoardSortOrder', True); |
1259 | 1264 | // DLãÌ©®\[g |
1260 | - FAutoSortThreadList := ini.ReadBool('ThreadList', 'AutoSort', True); | |
1265 | + FAutoSortThreadList := ini.ReadBool('ThreadList', 'AutoSort', False); | |
1261 | 1266 | //Dat¿X\[g |
1262 | 1267 | FDatOchiSortIndex := ini.ReadInteger('ThreadList', 'DatOchiSortIndex', -1); |
1263 | 1268 | FDatOchiSortOrder := ini.ReadBool('ThreadList', 'DatOchiSortOrder', False); |
@@ -2175,8 +2180,13 @@ begin | ||
2175 | 2180 | end; |
2176 | 2181 | function TSetting.GetEditorKeyFileName: String; |
2177 | 2182 | 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; | |
2179 | 2188 | end; |
2189 | + | |
2180 | 2190 | end. |
2181 | 2191 | |
2182 | 2192 |
@@ -4,7 +4,7 @@ interface | ||
4 | 4 | uses |
5 | 5 | Windows, Messages, SysUtils, Classes, Controls, Forms, |
6 | 6 | BoardGroup,DateUtils, |
7 | - Setting; | |
7 | + Setting, Math; | |
8 | 8 | |
9 | 9 | function CategorySortProc(Item1, Item2: Pointer): integer; |
10 | 10 | function BoardSortProc(List: TStringList; Item1, Item2: Integer): integer; |
@@ -12,13 +12,16 @@ uses | ||
12 | 12 | function CompareBool(Item1, Item2: Boolean): integer; |
13 | 13 | function CompareInt(Item1, Item2: Integer): Integer; |
14 | 14 | function CompareDate(Item1, Item2: TDateTime): Integer; |
15 | - | |
15 | + procedure SetSortDate(Date: TDateTime); | |
16 | + function GetSortDate(): TDateTime; | |
16 | 17 | var |
17 | 18 | SortOrder: Boolean; |
18 | 19 | SortIndex: Integer; |
19 | 20 | SortNoFlag: Boolean; |
20 | 21 | |
21 | 22 | implementation |
23 | +var | |
24 | + FSortDate: TDateTime; | |
22 | 25 | |
23 | 26 | function CategorySortProc(Item1, Item2: Pointer): integer; |
24 | 27 | var |
@@ -73,6 +76,7 @@ function ThreadItemSortProc(List: TStringList; Item1, Item2: Integer): integer; | ||
73 | 76 | var |
74 | 77 | ThreadItem1: TThreadItem; |
75 | 78 | ThreadItem2: TThreadItem; |
79 | + SpanDay1, SpanDay2: Double; | |
76 | 80 | begin |
77 | 81 | ThreadItem1 := TThreadItem(List.Objects[ Item1 ]); |
78 | 82 | ThreadItem2 := TThreadItem(List.Objects[ Item2 ]); |
@@ -105,6 +109,22 @@ begin | ||
105 | 109 | gbcRoundDate: Result := CompareDateTime(ThreadItem1.RoundDate, ThreadItem2.RoundDate); {gbcLastModified:} |
106 | 110 | gbcCreated: Result := CompareDateTime(ThreadItem1.CreateDate, ThreadItem2.CreateDate); |
107 | 111 | gbcLastModified: Result := CompareDateTime(ThreadItem1.LastModified, ThreadItem2.LastModified); {gbcLastModified:} |
112 | + gbcVigor: | |
113 | + begin | |
114 | + SpanDay1 := DaySpan(FSortDate, ThreadItem1.CreateDate); | |
115 | + SpanDay2 := DaySpan(FSortDate, ThreadItem2.CreateDate); | |
116 | + if (SpanDay1 > 0) and (SpanDay2 > 0) then begin | |
117 | + Result := CompareValue( | |
118 | + ThreadItem1.AllResCount / SpanDay1, | |
119 | + ThreadItem2.AllResCount / SpanDay2); | |
120 | + end else if (SpanDay1 > 0) then begin | |
121 | + Result := 1; | |
122 | + end else if (SpanDay2 > 0) then begin | |
123 | + Result := -1; | |
124 | + end else begin | |
125 | + Result := 0; | |
126 | + end; | |
127 | + end; | |
108 | 128 | else |
109 | 129 | Result := 0; |
110 | 130 | end; |
@@ -163,5 +183,12 @@ begin | ||
163 | 183 | else |
164 | 184 | Result := 0; |
165 | 185 | end; |
166 | - | |
186 | +procedure SetSortDate(Date: TDateTime); | |
187 | +begin | |
188 | + FSortDate := Date; | |
189 | +end; | |
190 | +function GetSortDate(): TDateTime; | |
191 | +begin | |
192 | + Result := FSortDate; | |
193 | +end; | |
167 | 194 | end. |
@@ -71,7 +71,9 @@ uses | ||
71 | 71 | ListViewUtils in 'ListViewUtils.pas', |
72 | 72 | GikoDataModule in 'GikoDataModule.pas' {GikoDM: TDataModule}, |
73 | 73 | 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}; | |
75 | 77 | |
76 | 78 | {$R *.RES} |
77 | 79 | {$R gikoResource.res} |
@@ -90,7 +92,11 @@ begin | ||
90 | 92 | Wnd := FindWindow('TGikoForm', nil); |
91 | 93 | if Wnd <> 0 then begin |
92 | 94 | //ùÉN®ÏÝMRirÌANeBu»ACR»³êÄ½ç³ |
93 | - SetForegroundWindow(Wnd); | |
95 | + try | |
96 | + SetForegroundWindow(Wnd); | |
97 | + except | |
98 | + //ú»ªIíÁĢȢÆtHAOEhÉÚ¹¸ÉáO¶ | |
99 | + end; | |
94 | 100 | if IsIconic(Wnd) then |
95 | 101 | SendMessage(Wnd, WM_SYSCOMMAND, SC_RESTORE, -1); |
96 | 102 | // AppWnd := GetWindowLong(Wnd, GWL_HWNDPARENT); |
@@ -122,6 +128,7 @@ begin | ||
122 | 128 | Application.CreateForm(TFavoriteDM, FavoriteDM); |
123 | 129 | Application.CreateForm(TAddressHistoryDM, AddressHistoryDM); |
124 | 130 | Application.CreateForm(TGikoDM, GikoDM); |
131 | + Application.CreateForm(TInputAssistDM, InputAssistDM); | |
125 | 132 | Application.CreateForm(TGikoForm, GikoForm); |
126 | 133 | Application.Run; |
127 | 134 | ReleaseMutex(hMutex); |
@@ -0,0 +1,23 @@ | ||
1 | +[MRL] | |
2 | +¬±=@@@@@@ÈÈ@@`PP(,,ßDß)@@@UUPU U | |
3 | +¬±ãë=@@@ ÈÈ@@@(@@,,)@@@/@@|@`iQQj | |
4 | +¬±Àè=@@ÈÈ@@@(,,ßDß)@@/ ÂÂ`iQQj | |
5 | +¬±§¿=@@ÈÈ@@(,,ßDß)@ ¼@@Â@ `@@|@@ µMi | |
6 | + | |
7 | +[JeS] | |
8 | +«½[=·Àªªª( LÍ`)ßÍß)*ß[ß)¥Ö¥) ßDß)L[`)¥Í¥)P°P)L_T`)`DL)-Q-)LDM)ªª!!! | |
9 | + | |
10 | +[½s] | |
11 | +«½[=·Àªªªªª(ßÍß)ªªªªª!!!!·Àªªªªª(ßÍß)ªªªªª!!!!·Àªªªªª(ßÍß)ªªªªª!!!!·Àªªªªª(ßÍß)ªªªªª!!!!·Àªªªªª(ßÍß)ªªªªª!!!! | |
12 | + | |
13 | +[®¨] | |
14 | +Áé=@ @ÉÉÉÉ@@-Q__@@(߸ß*)@@_Q___@______P@@¦_ÉÜ_@@____@___@c^_@/R~@__@__Q@@@@./É_m_@@Q@@@./^._^RÐ@ß-@@Ц@-__P___________ | |
15 | + | |
16 | +[N}[] | |
17 | +Ü[=@@ ¿QQQ¿ @@ | m@@@@@ R @@/@@@@@ |@N}II @ |@@@@( __)@ ~ @c¤@@@|¾|@@¤M_ /@QQ@ Rm@/L>@ ) (QQQj@@@/@(_^ @|@@@@@@ / @|@@^_@_ @|@/@@@ )@ ) @¾@@@ i@ _ @@@@@@ _Q) | |
18 | +£é=@@@@@@@@@@@@@@@@@@@@@@Q ^-@C¤_ @@@@@@@@@@ QQ@@@@@ @@^: : : : : : : : : : : ( @@@@@@@@@ qqqq@R@@@@@/: : : : ::;:;: ;: ;:;: ; : : : ::T @@@@@@@@@@q½@@}@@@@@{:: : : :m@--]'@¤__: : ::p @@ ¿QQQ¿@ |@@ |@@@@@ {:: : :m ,_;:;:;m¤ Fª S: :::} @@ | m@@@@@ R !@@ !@@@A@@: :É@^ñ\-¤@|: ::É @@/@@@@@ |@@/@@@C,¥_@@|@/^@ P7/ /::m @ |@@@@( __)@ ~^@, f, ¥@N@ r(_ñ-£{^ @c¤@@@|¾|@@^@@¤¥æ f@@^¤^/|@PPR /@QQ@ Rm@/@@@@@@@@ ^@@ //@|^^_ r (QQQj@@@/@@@@@@@ @/@@@ //@@ /_ ^ @@@@@@@/@@@@@@@ @ / @@@@@@@/@ | |
19 | + | |
20 | +[AA] | |
21 | +µåÚ=(L¥Ö¥`) | |
22 | +ऱ˦æ=@@@@@@@@@@@@@@@@@¡¢ @@@@@@@@@@@@@@@@@bà.b @@@@@@@@@@@@@@@@@b¤@| @@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@ Ë @@@@@@@@@@@@@@@@@ ¦ .| @@@@@@@@@@@@@@@@@ æ .| @@@@@@ÊÞ¶@@@@ºÞÙ§@@ !!. @@@@@@@@@@@@@@@@@¤§@@@@ÌßÝÌßÝ @@@@R(`DL)É@R(`DL)É@@(`DL)É@@@ i@`Dj @@@@|PPP||PPP||PPP| i R¢U ` `@PP@@.PP@@PP@@ |>£ | |
23 | + |
@@ -9,11 +9,11 @@ comic6=30 | ||
9 | 9 | dso=10 |
10 | 10 | etc3=30 |
11 | 11 | 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 | |
17 | 17 | food6=30 |
18 | 18 | game9=30 |
19 | 19 | game10=30 |
@@ -21,12 +21,9 @@ hobby7=30 | ||
21 | 21 | hobby8=30 |
22 | 22 | human5=30 |
23 | 23 | 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 | |
30 | 27 | love3=30 |
31 | 28 | money4=30 |
32 | 29 | music4=30 |
@@ -43,8 +40,8 @@ school5=30 | ||
43 | 40 | science4=30 |
44 | 41 | society3=30 |
45 | 42 | sports2=0 |
46 | -sports9=30 | |
47 | -that3=30 | |
43 | +sports9=60 | |
44 | +that4=30 | |
48 | 45 | tmp5=45 |
49 | 46 | travel2=30 |
50 | 47 | tv7=30 |
@@ -53,4 +50,4 @@ idol=30 | ||
53 | 50 | pie=30 |
54 | 51 | sakura01=30 |
55 | 52 | sakura02=30 |
56 | -sakura03=30 | |
\ No newline at end of file | ||
53 | +sakura03=30 |
@@ -1,4 +1,4 @@ | ||
1 | -¡MRir Version1.00 ÊÞÀ51 Readme.txt | |
1 | +¡MRir Version1.00 ÊÞÀ52 Readme.txt | |
2 | 2 | |
3 | 3 | |
4 | 4 | ------------------------------ |
@@ -107,21 +107,28 @@ LICENSE | ||
107 | 107 | ------------------------------ |
108 | 108 | ð |
109 | 109 | ------------------------------ |
110 | -200X/XX/XX | |
110 | +2006/XX/YY | |
111 | + Version ÊÞÀ52 | |
112 | +@üÍAVXg@\ÇÁ | |
113 | +@XbhêÉh¨¢hJÇÁiftHgñ\¦j | |
114 | +@¨CÉüèAðAMOÌXbh^Cg¼ðTj^CY·éæ¤ÉC³ | |
115 | +im[gÌë½âèÖ̪IÎj | |
116 | + | |
117 | +2006/01/14 | |
111 | 118 | Version ÊÞÀ51 |
119 | +@CtH[ãÅÌV[gJbgL[ÌDæʪMRir©ÌªÅãÊÉÏX | |
112 | 120 | @Xbh`æÌÅK» |
113 | 121 | @XÔwèURLðNbNµ½Æ«Ì®ìÅAæ¾ÏÝOÌXÔÌê©®ÅDL·éæ¤ÉÏX |
114 | 122 | @XGfB^©çSambaÌÝèlðÏXÅ«éæ¤ÉÏX |
115 | 123 | @LrlbgãÅNbNE_uNbNCxgªßèɶ·ésïÌC³ |
116 | 124 | @}EXWFX`[LøÉvr [ãÅENbNÅ«È¢sïÌC³ |
117 | -@CtH[ãÅÌV[gJbgL[ÌDæʪMRir©ÌªÅãÊÉÏX | |
118 | 125 | @Cj [̨CÉüèÌ`æ̬» |
119 | 126 | @Xe[^Xo[É»Ý\¦µÄ¢éXbhÌeÊð\¦·éæ¤Éµ½ |
120 | 127 | @DAT¿µ½XÌeÊðæ¾Å«È¢sïÌC³ |
121 | 128 | @ÂXVÅ[Jt@CðwèÅ«éæ¤ÉÏX |
122 | 129 | @Xbhê_E[hãÌ\[gðIvV» |
123 | 130 | @NG[hÉS¼pÐçªÈJ^JiÌá¢ð¯ê·éIvVÌÇÁ |
124 | -@XÌiÝÅS¼pÐçªÈJ^J^Ìá¢ð³·éæ¤ÉÏX | |
131 | +@XÌiÝÅS¼pÐçªÈJ^JiÌá¢ð³·éæ¤ÉÏX | |
125 | 132 | |
126 | 133 | 2005/10/10 |
127 | 134 | Version ÊÞÀ50 [X3 |
@@ -90,6 +90,7 @@ Folder=gikoNavi | ||
90 | 90 | 87=config\Board\MRir.txt |
91 | 91 | 88=Samba.default |
92 | 92 | 89=config\language.ini |
93 | +90=config\InputAssist.ini | |
93 | 94 | |
94 | 95 | [Group] |
95 | 96 | 1=MRir,gikoNavi.exe |