• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

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

ギコナビ


Commit MetaInfo

Revisão58e677de547cceba64ae02b6c9837e18ebb83f18 (tree)
Hora2006-01-17 00:19:02
Autorcvs2git <cvs2git>
Commitercvs2git

Mensagem de Log

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

Mudança Sumário

Diff

--- a/Editor.dfm
+++ b/Editor.dfm
@@ -1,6 +1,6 @@
11 object EditorForm: TEditorForm
2- Left = 328
3- Top = 257
2+ Left = 432
3+ Top = 258
44 Width = 640
55 Height = 449
66 HorzScrollBar.Visible = False
@@ -58,24 +58,14 @@ object EditorForm: TEditorForm
5858 Top = 30
5959 Width = 632
6060 Height = 354
61- ActivePage = RocalRuleTab
61+ ActivePage = EditorTab
6262 Align = alClient
6363 MultiLine = True
64- TabIndex = 4
64+ TabIndex = 0
6565 TabOrder = 0
6666 OnChange = EditorPageChange
6767 object EditorTab: TTabSheet
6868 Caption = #32232#38598
69- object BodyEdit: TMemo
70- Left = 0
71- Top = 60
72- Width = 624
73- Height = 267
74- Align = alClient
75- ScrollBars = ssBoth
76- TabOrder = 0
77- WordWrap = False
78- end
7969 object NameBasePanel: TPanel
8070 Left = 0
8171 Top = 29
@@ -83,7 +73,7 @@ object EditorForm: TEditorForm
8373 Height = 31
8474 Align = alTop
8575 BevelOuter = bvNone
86- TabOrder = 2
76+ TabOrder = 1
8777 object NameLabel: TLabel
8878 Left = 4
8979 Top = 8
@@ -144,7 +134,7 @@ object EditorForm: TEditorForm
144134 Height = 29
145135 Align = alTop
146136 BevelOuter = bvNone
147- TabOrder = 1
137+ TabOrder = 0
148138 object Label1: TLabel
149139 Left = 4
150140 Top = 8
@@ -161,6 +151,16 @@ object EditorForm: TEditorForm
161151 TabOrder = 0
162152 end
163153 end
154+ object BodyEdit: TMemo
155+ Left = 0
156+ Top = 60
157+ Width = 624
158+ Height = 267
159+ Align = alClient
160+ ScrollBars = ssBoth
161+ TabOrder = 2
162+ WordWrap = False
163+ end
164164 end
165165 object PreviewTab: TTabSheet
166166 Caption = #12503#12524#12499#12517#12540
@@ -1733,6 +1733,12 @@ object EditorForm: TEditorForm
17331733 OnExecute = UpdateSambaActionExecute
17341734 OnUpdate = UpdateSambaActionUpdate
17351735 end
1736+ object InputAssistAction: TAction
1737+ Tag = -1
1738+ Category = #32232#38598
1739+ Caption = #20837#21147#12450#12471#12473#12488
1740+ OnExecute = InputAssistActionExecute
1741+ end
17361742 end
17371743 object IdLogDebug: TIdLogDebug
17381744 OnReceive = IdLogDebugReceive
@@ -1748,4 +1754,16 @@ object EditorForm: TEditorForm
17481754 Left = 233
17491755 Top = 123
17501756 end
1757+ object InputAssistPopupMenu: TPopupMenu
1758+ AutoHotkeys = maManual
1759+ AutoPopup = False
1760+ OwnerDraw = True
1761+ Left = 272
1762+ Top = 128
1763+ end
1764+ object ApplicationEvents1: TApplicationEvents
1765+ OnMessage = ApplicationEvents1Message
1766+ Left = 304
1767+ Top = 128
1768+ end
17511769 end
--- a/Editor.pas
+++ b/Editor.pas
@@ -17,7 +17,7 @@ uses
1717 IdAntiFreezeBase, IdAntiFreeze, IdBaseComponent, IdComponent,
1818 IdTCPConnection, IdTCPClient, IdHTTP, ActnList, StdActns, IdIntercept,
1919 IdLogBase, IdLogDebug, IdException, DateUtils, bmRegExp,
20- Gesture;
20+ Gesture, AppEvnts;
2121
2222 type
2323 // TSetLayeredWindowAttributes = function(wnd: HWND; crKey: DWORD; bAlpha: BYTE; dwFlag: DWORD): Boolean; stdcall;
@@ -44,7 +44,6 @@ type
4444 N02: TMenuItem;
4545 ToolBarImageList: TImageList;
4646 HotToobarImageList: TImageList;
47- BodyEdit: TMemo;
4847 NameBasePanel: TPanel;
4948 NameLabel: TLabel;
5049 MailLabel: TLabel;
@@ -127,6 +126,10 @@ type
127126 UpdateSambaAction: TAction;
128127 Samba241: TMenuItem;
129128 N7: TMenuItem;
129+ InputAssistAction: TAction;
130+ InputAssistPopupMenu: TPopupMenu;
131+ BodyEdit: TMemo;
132+ ApplicationEvents1: TApplicationEvents;
130133
131134 procedure EditorPageChange(Sender: TObject);
132135 procedure FormCreate(Sender: TObject);
@@ -181,6 +184,9 @@ type
181184 procedure BeLogInOutEActionUpdate(Sender: TObject);
182185 procedure UpdateSambaActionUpdate(Sender: TObject);
183186 procedure UpdateSambaActionExecute(Sender: TObject);
187+ procedure InputAssistActionExecute(Sender: TObject);
188+ procedure ApplicationEvents1Message(var Msg: tagMSG;
189+ var Handled: Boolean);
184190 private
185191 FThreadItem: TThreadItem;
186192 FBoard: TBoard;
@@ -195,6 +201,8 @@ type
195201 FHost: string;
196202 FNow: TDateTime;
197203 FGestures : TMouseGesture;
204+ FInputAssistKey: String; ///< “ü—̓AƒVƒXƒg‚̃L[
205+ FResistWords: TStringList; ///< “ü—̓AƒVƒXƒg‚ÌŽ«‘‚©‚ç‚ÌŒŸõŒ‹‰Ê
198206 procedure Preview;
199207 function RepHtml(s: string): string;
200208 function Check: Boolean;
@@ -244,6 +252,8 @@ type
244252 function LFusianaGet(s: String): Boolean;
245253 // Cookie‚̎擾
246254 procedure GetCookie(Rawtext: String; ABoard: TBoard);
255+ //! “ü—̓AƒVƒXƒg‚̃|ƒbƒvƒAƒbƒvƒƒjƒ…[‚̃NƒŠƒbƒNƒCƒxƒ“ƒg
256+ procedure InputAssistMenuClick(Sender: TObject);
247257 protected
248258 procedure CreateParams(var Params: TCreateParams); override;
249259 public
@@ -252,13 +262,13 @@ type
252262 procedure SetThreadItem(Item: TThreadItem);
253263 procedure SetBoard(Item: TBoard);
254264 property BBSID: string read FBBSID write FBBSID;
255-
256265 end;
257266
258267 implementation
259268
260269 uses
261- Giko, ItemDownload, MojuUtils, IdGlobal, GikoMessage;
270+ Giko, ItemDownload, MojuUtils, IdGlobal, GikoMessage, Imm,
271+ InputAssistDataModule;
262272 const
263273 CAPTION_NAME_NEW: string = 'ƒMƒRƒiƒr ƒXƒŒ—§‚ăGƒfƒBƒ^';
264274 CAPTION_NAME_RES: string = 'ƒMƒRƒiƒr ƒŒƒXƒGƒfƒBƒ^';
@@ -427,7 +437,8 @@ begin
427437 finally
428438 ini.Free;
429439 end;
430-
440+ // ƒL[Ý’è‚̓ǂݍž‚Ý
441+ GikoSys.LoadKeySetting(ActionList, GikoSys.GetEditorKeyFileName);
431442 // ƒ}ƒEƒXƒWƒFƒXƒ`ƒƒ[‚̃Cƒ“ƒXƒg[ƒ‹
432443 if GikoSys.Setting.GestureEnabled then begin
433444 MouseGesture.UnHook;
@@ -930,33 +941,35 @@ begin
930941
931942 if ABoard = nil then Exit;
932943
933- if FileExists(ABoard.GetSETTINGTXTFileName) then begin
934- body := TStringList.Create;
935- try
936- body.LoadFromFile(ABoard.GetSETTINGTXTFileName);
937- Remote := GetFusianaName(body, ABoard);
938- finally
939- body.Free;
940- end;
941- end;
942-
943- //Setting.txt‚ª‚È‚©‚Á‚½‚çŽæ“¾
944- //ŽI‚É•‰‰×‚ª‚©‚©‚è‚»‚¤‚Å•|‚¢EEE
945- if not FileExists(ABoard.GetSETTINGTXTFileName) then begin
946- //GetSETTINGTXTAction‚ðŒÄ‚яo‚·‚ÆIndy‚ª‰Šú‰»‚³‚ê‚é‚̂ŁA
944+ if FileExists(ABoard.GetSETTINGTXTFileName) then begin
945+ body := TStringList.Create;
946+ try
947+ body.LoadFromFile(ABoard.GetSETTINGTXTFileName);
948+ Remote := GetFusianaName(body, ABoard);
949+ finally
950+ body.Free;
951+ end;
952+ end;
953+
954+ //Setting.txt‚ª‚È‚©‚Á‚½‚çŽæ“¾
955+ //ŽI‚É•‰‰×‚ª‚©‚©‚è‚»‚¤‚Å•|‚¢EEE
956+ if not FileExists(ABoard.GetSETTINGTXTFileName) then begin
957+ //GetSETTINGTXTAction‚ðŒÄ‚яo‚·‚ÆIndy‚ª‰Šú‰»‚³‚ê‚é‚̂ŁA
947958 //‚±‚±‚ÅCookie‚ð•Û‘¶‚µ‚È‚­‚Ä‚Í‚¢‚¯‚È‚¢
948959 tmpRawheader := Indy.Response.RawHeaders.Text;
949960 GetSETTINGTXTAction.Execute;
950961 body := TStringList.Create;
951962 try
952- body.LoadFromFile(ABoard.GetSETTINGTXTFileName);
953- Remote := GetFusianaName(body, ABoard);
954- finally
955- body.Free;
956- end;
963+ if FileExists(ABoard.GetSETTINGTXTFileName) then begin
964+ body.LoadFromFile(ABoard.GetSETTINGTXTFileName);
965+ Remote := GetFusianaName(body, ABoard);
966+ end;
967+ finally
968+ body.Free;
969+ end;
957970 end;
958971
959- if Remote = 'fusianasan' then begin
972+ if Remote = 'fusianasan' then begin
960973 MsgResult := MsgBox(
961974 Handle,
962975 'ƒŠƒ‚[ƒgƒzƒXƒg‚ð•\Ž¦‚·‚é‹@”\‚ªŽg‚í‚ê‚Ä‚¢‚Ü‚·' + #13#10 +
@@ -971,8 +984,8 @@ begin
971984 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
972985 DrawMenuBar(Handle);
973986 Exit;
974- end;
975- end;
987+ end;
988+ end;
976989 end;
977990
978991 if ResultType = grtOK then begin
@@ -1731,9 +1744,6 @@ var
17311744 settingBody: TStringList;
17321745 tmpBoard: TBoard;
17331746 begin
1734- if FWork then
1735- Exit;
1736- FWork := True;
17371747
17381748 InitIdHTTP(Indy);
17391749 if FThreadItem = nil then
@@ -1784,7 +1794,6 @@ begin
17841794 end;
17851795 ShowBoardInformation(tmpBoard, BoardInformationMemo);
17861796
1787- FWork := False;
17881797 end;
17891798
17901799 procedure TEditorForm.ShowBoardInformation(ABoard: TBoard; AMemo: TMemo);
@@ -2211,4 +2220,156 @@ begin
22112220 end;
22122221 end;
22132222
2223+procedure TEditorForm.InputAssistActionExecute(Sender: TObject);
2224+var
2225+ count, i : Integer;
2226+ item : TMenuItem;
2227+ point: TPoint;
2228+ Bitmap : TBitmap;
2229+ TextWidth, ItemWidth, tmpWidth: Integer;
2230+begin
2231+ if FInputAssistKey = '' then Exit;
2232+
2233+ InputAssistPopupMenu.Items.Clear;
2234+
2235+ if (FResistWords = nil) then begin
2236+ FResistWords := TStringList.Create;
2237+ end else begin
2238+ FResistWords.Clear;
2239+ end;
2240+
2241+ if (GetKeyState( VK_SHIFT ) < 0) then begin
2242+ // ƒVƒtƒg‚ª‰Ÿ‚³‚ê‚Ä‚¢‚ê‚΁AƒL[‚ÅŽn‚Ü‚éƒJƒeƒSƒŠ
2243+ count :=
2244+ InputAssistDM.GetStartWithCategoryResistWords(
2245+ FInputAssistKey, FResistWords);
2246+ end else begin
2247+ // ƒVƒtƒg‚ª–³‚¢‚̂ŁAƒL[‚ÅŽn‚Ü‚éƒL[
2248+ count :=
2249+ InputAssistDM.GetStartWithKeyResistWords(
2250+ FInputAssistKey, FResistWords);
2251+ end;
2252+ Bitmap := TBitmap.Create;
2253+ try
2254+ Bitmap.Canvas.Font.Assign(BodyEdit.Font);
2255+ // ƒ}[ƒWƒ“5px
2256+ TextWidth := Bitmap.Canvas.TextWidth(FInputAssistKey) + 5;
2257+ ItemWidth := 0;
2258+ for i := 0 to count - 1 do begin
2259+ item := TMenuItem.Create(nil);
2260+ item.Break := mbNone;
2261+ item.Caption := FResistWords[i];
2262+ item.Tag := i;
2263+ item.OnClick := InputAssistMenuClick;
2264+ InputAssistPopupMenu.Items.Add(item);
2265+
2266+ tmpWidth := Bitmap.Canvas.TextWidth(Item.Caption);
2267+ if (tmpWidth > ItemWidth) then begin
2268+ ItemWidth := tmpWidth;
2269+ end;
2270+ end;
2271+ finally
2272+ Bitmap.Free;
2273+ end;
2274+
2275+ if (count > 0) then begin
2276+ GetCaretpos(point);
2277+ point.X := point.X + Self.Left + (Self.Width - BodyEdit.Width) div 2;
2278+ point.Y := point.Y + Self.Top + (Self.Height - Self.ClientHeight);
2279+
2280+ if Screen.DesktopWidth >
2281+ (point.X + TextWidth + ItemWidth) then begin
2282+ InputAssistPopupMenu.Popup(
2283+ point.X + TextWidth,
2284+ point.Y + EditorPage.Top + EditorPage.TabHeight + BodyEdit.Top);
2285+ end else begin
2286+ InputAssistPopupMenu.Popup(
2287+ point.X - TextWidth - ItemWidth,
2288+ point.Y + EditorPage.Top + EditorPage.TabHeight + BodyEdit.Top);
2289+ end;
2290+ end;
2291+end;
2292+
2293+procedure TEditorForm.InputAssistMenuClick(Sender: TObject);
2294+var
2295+ line, pos, sel : Integer;
2296+ text, left, right : String;
2297+ IMC: HIMC;
2298+begin
2299+ if not (Sender is TMenuItem) then Exit;
2300+
2301+ if (FResistWords <> nil) then begin
2302+ try
2303+ text :=
2304+ TResistWord(FResistWords.Objects[TMenuItem(Sender).Tag]).GetText;
2305+ except
2306+ text := '';
2307+ end;
2308+ IMC := ImmGetContext(BodyEdit.Handle); //ƒRƒ“ƒeƒLƒXƒgŽæ“¾
2309+ try
2310+ ImmNotifyIME(IMC, NI_COMPOSITIONSTR, CPS_CANCEL, 0);
2311+ finally
2312+ ImmReleaseContext(BodyEdit.Handle, IMC); //ƒRƒ“ƒeƒLƒXƒg‰ð•ú
2313+ end;
2314+
2315+ FResistWords.Clear;
2316+ FInputAssistKey := '';
2317+ end;
2318+ BodyEdit.Lines.BeginUpdate;
2319+ line := SendMessage(BodyEdit.Handle,EM_LINEFROMCHAR,-1,0); //s
2320+ sel := BodyEdit.SelStart;
2321+ pos := sel - SendMessage(BodyEdit.Handle, EM_LINEINDEX, -1, 0); //Œ…
2322+ if (pos > 0) then begin
2323+ left := Copy(BodyEdit.Lines[line], 0, pos);
2324+ end else begin
2325+ left := '';
2326+ end;
2327+ right := Copy(BodyEdit.Lines[line], pos + 1, Length(BodyEdit.Lines[line]));
2328+ BodyEdit.Lines.Strings[line] := left + text + right;
2329+ BodyEdit.Lines.EndUpdate;
2330+ //@ƒLƒƒƒŒƒbƒg‚̈ʒu‚ðXV‚·‚é
2331+ BodyEdit.SelStart := sel + Length(text);
2332+ // ƒLƒƒƒŒƒbƒg‚̈ʒu‚܂ŃXƒNƒ[ƒ‹
2333+ BodyEdit.Perform(EM_SCROLLCARET, 0, 0);
2334+end;
2335+
2336+procedure TEditorForm.ApplicationEvents1Message(var Msg: tagMSG;
2337+ var Handled: Boolean);
2338+var
2339+ wmMsg: TWMKey;
2340+ IMC: HIMC;
2341+ Len: integer;
2342+ Str: string;
2343+begin
2344+ if (Self.Active) then begin
2345+ case Msg.message of
2346+ //ƒL[‰Ÿ‰º‚̂ݎ󂯎æ‚é
2347+ WM_KEYDOWN:
2348+ begin
2349+ // ƒ^ƒu‚ªh•ÒWh‚ÅCtrlƒL[‚ª‰Ÿ‚³‚ê‚Ä‚¢‚é‚Ì‚ðŠm”F‚·‚é
2350+ if (EditorPage.ActivePageIndex = 0)
2351+ and (GetKeyState( VK_CONTROL ) < 0) then begin
2352+ wmMsg.Msg := Msg.message;
2353+ wmMsg.CharCode := Word(Msg.wParam);
2354+ wmMsg.KeyData := Msg.lParam;
2355+ if (wmMsg.CharCode = 229) and (wmMsg.KeyData = 3735553) then begin
2356+ IMC := ImmGetContext(BodyEdit.Handle); //ƒRƒ“ƒeƒLƒXƒgŽæ“¾
2357+ Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //‚Ü‚¸’·‚³‚ðŽæ“¾
2358+ if (Len > 0) then begin
2359+ SetLength(Str, Len + 1); //Buffer‚̃ƒ‚ƒŠ‚ðÝ’è
2360+ ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //‚Ü‚¸’·‚³‚ðŽæ“¾
2361+ SetLength(Str, Len);
2362+ FInputAssistKey := Str;
2363+ InputAssistActionExecute(nil);
2364+ Handled := True;
2365+ end;
2366+ ImmReleaseContext(BodyEdit.Handle, IMC); //ƒRƒ“ƒeƒLƒXƒg‰ð•ú
2367+ end;
2368+ end;
2369+ end;
2370+ end;
2371+
2372+ end;
2373+end;
2374+
22142375 end.
--- a/Giko.dfm
+++ b/Giko.dfm
@@ -1,6 +1,6 @@
11 object GikoForm: TGikoForm
2- Left = 363
3- Top = 92
2+ Left = 97
3+ Top = 51
44 HorzScrollBar.Visible = False
55 VertScrollBar.Visible = False
66 AutoScroll = False
@@ -7959,6 +7959,12 @@ object GikoForm: TGikoForm
79597959 object N43: TMenuItem
79607960 Caption = '-'
79617961 end
7962+ object N22: TMenuItem
7963+ Action = GikoDM.SetInputAssistAction
7964+ end
7965+ object N42: TMenuItem
7966+ Caption = '-'
7967+ end
79627968 object PlugInMenu: TMenuItem
79637969 Caption = #12503#12521#12464#12452#12531'(&P)'
79647970 end
--- a/Giko.pas
+++ b/Giko.pas
@@ -402,6 +402,8 @@ type
402402 N74: TMenuItem;
403403 WikiFAQ: TMenuItem;
404404 GikoApplicationEvents: TApplicationEvents;
405+ N22: TMenuItem;
406+ N42: TMenuItem;
405407 procedure FormCreate(Sender: TObject);
406408 procedure FormDestroy(Sender: TObject);
407409 procedure BrowserStatusTextChange(Sender: TObject;
@@ -588,7 +590,8 @@ type
588590 FIsHandledWheel : Boolean; ///< Šù‚Ɏ󂯎æ‚Á‚½ WM_MOUSEWHEEL ‚©‚Ç‚¤‚©
589591 DiffComp: Boolean; //Add by Genyakun ƒXƒŒ‚ªXV‚³‚ꂽ‚Æ‚«‚ÉTrue‚É‚È‚é
590592 FOrigenCaption: String; //‚¨‹C‚É“ü‚èƒcƒŠ[‚̃AƒCƒeƒ€•ÒWŽž‚̕ҏW‘O‚Ì•¶Žš—ñ
591- FPreviewBrowserRect: TRect; ///< ƒvƒŒƒrƒ…[‚Ì•\Ž¦ˆÊ’u‚ð‹L‰¯‚·‚é
593+ FPreviewBrowserRect: TRect; ///< ƒvƒŒƒrƒ…[‚Ì•\Ž¦ˆÊ’u‚ð‹L‰¯‚·‚é
594+ FActionListGroupIndexes: array of Integer; ///<GikoDMã‚̃AƒNƒVƒ‡ƒ“ƒŠƒXƒg‚ÌŠeƒAƒNƒVƒ‡ƒ“‚ɐݒ肳‚ꂽGroupIndex‚ð•Û‘¶‚·‚é”z—ñ
592595 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
593596 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
594597 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
@@ -648,12 +651,14 @@ type
648651 function GetScreenCursor(): TCursor;
649652 //ƒJ[ƒ\ƒ‹‚ðÝ’è‚·‚é
650653 procedure SetScreenCursor(Cursor : TCursor);
651- //! ƒAƒNƒVƒ‡ƒ“‚̃`ƒFƒbƒNó‘Ԃ̏‰Šú‰»
652- procedure InitActionChecked();
653654 //! ƒ_ƒEƒ“ƒ[ƒhƒRƒ“ƒgƒ[ƒ‹ƒXƒŒƒbƒh‚̐¶¬
654655 procedure CreateControlThread();
655656 //! ƒuƒ‰ƒEƒU‚̐¶¬
656657 procedure CreateBrowsers(count: Integer);
658+ //! ActionList‚ÌGroupIndex‚Ì•Û‘¶
659+ procedure GetGroupIndex(ActionList: TActionList);
660+ //! ActionList‚ÌGroupIndex‚̐ݒè
661+ procedure SetGroupIndex(ActionList: TActionList);
657662 protected
658663 procedure CreateParams(var Params: TCreateParams); override;
659664 procedure WndProc(var Message: TMessage); override;
@@ -820,7 +825,8 @@ uses
820825 FavoriteArrange, AddressHistory, Preview, Gesture,
821826 About, Option, Round, Splash, Sort, ListSelect, Imm,
822827 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
823- HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage;
828+ HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
829+ InputAssistDataModule;
824830
825831 const
826832 BLANK_HTML: string = 'about:blank';
@@ -869,12 +875,16 @@ begin
869875 Writeln(' I—¹Žž‚́AƒMƒRƒiƒrƒEƒBƒ“ƒhƒE‚ð•Â‚¶‚Ä‚­‚¾‚³‚¢');
870876 Writeln('============================================================');
871877 {$ENDIF}
878+//try
872879 FTreeType := gttNone;
873880 // ‹N“®Žž‚É•Û‘¶‚³‚ê‚Ä‚µ‚Ü‚¤‘΍ô
874881 FStartUp := true;
875882 Application.HookMainWindow(Hook);
876883 FIsIgnoreResize := rtResizing;
877-
884+ //ActionList‚ÌGuoupIndex‚ð•Û‘¶‚µ‚āA0‚ɃNƒŠƒA‚·‚éB
885+ //(‹N“®Žž‚Ƀc[ƒ‹ƒ{ƒ^ƒ“‚ÌDownƒvƒƒpƒeƒB‚𔽉f‚³‚¹‚é“s‡ãGroupIndex‚͐ݒè‚Å‚«‚È‚¢)
886+ //‚±‚êˆÈŒãSet`‚ōĐݒ肷‚é‚܂ŁAAction‚ÌChecked‚ð‚¢‚¶‚é‚Æ‚«‚Í’ˆÓI
887+ GetGroupIndex(GikoDM.GikoFormActionList);
878888 FSearchDialog := nil;
879889 CreateBrowsers(BROWSER_COUNT);
880890
@@ -944,6 +954,49 @@ begin
944954 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
945955 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
946956
957+ //ƒ~ƒ…[ƒg‚̏ó‘Ô‚ðÝ’è
958+ GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
959+
960+ // ƒŒƒX•\Ž¦”͈Í
961+ FResRangeMenuSelect := GikoSys.ResRange;
962+ case GikoSys.ResRange of
963+ Ord( grrAll ):
964+ begin
965+ GikoDM.AllResAction.Execute;
966+ end;
967+ Ord( grrSelect ):
968+ begin
969+ SelectComboBox.Text := SelectComboBox.Items[ 1 ];
970+ GikoDM.SelectResAction.Checked := True;
971+ end;
972+ else
973+ case FResRangeMenuSelect of
974+ Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
975+ Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
976+ 100: GikoDM.OnlyAHundredResAction.Checked := True;
977+ end;
978+ end;
979+
980+ // ƒXƒŒƒbƒhˆê——•\Ž¦”͈Í
981+ case GikoSys.Setting.ThreadRange of
982+ gtrAll:
983+ begin
984+ GikoDM.AllItemAction.Checked := True;
985+ ViewType := gvtAll;
986+ end;
987+ gtrLog:
988+ begin
989+ GikoDM.LogItemAction.Checked := True;
990+ ViewType := gvtLog;
991+ end;
992+ gtrNew:
993+ begin
994+ GikoDM.NewItemAction.Checked := True;
995+ ViewType := gvtNew;
996+ end;
997+ end;
998+
999+
9471000 //ƒuƒ‰ƒEƒUƒ^ƒuƒtƒHƒ“ƒg
9481001 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
9491002 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
@@ -952,9 +1005,27 @@ begin
9521005 BrowserTab.Font.Style := [fsBold];
9531006 if GikoSys.Setting.BrowserTabFontItalic then
9541007 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1008+ BrowserTab.DoubleBuffered := True;
9551009 FDragWFirst := false;
9561010 SetContent(BrowserNullTab); //ƒuƒ‰ƒEƒU‚ð‹ó”’•\Ž¦
9571011
1012+ //ƒuƒ‰ƒEƒUƒ^ƒu
1013+ GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1014+
1015+ if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1016+ GikoDM.BrowserTabTopAction.Checked := True;
1017+ end else begin
1018+ GikoDM.BrowserTabBottomAction.Checked := True;
1019+ end;
1020+
1021+ if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1022+ GikoDM.BrowserTabTabStyleAction.Checked := True;
1023+ end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1024+ GikoDM.BrowserTabButtonStyleAction.Checked := True;
1025+ end else begin
1026+ GikoDM.BrowserTabFlatStyleAction.Checked := True;
1027+ end;
1028+
9581029 //ƒvƒƒOƒŒƒXƒo[‚̏‰Šú‰»
9591030 ProgressBar.Parent := StatusBar;
9601031 ProgressBar.Top := 2;
@@ -968,10 +1039,14 @@ begin
9681039
9691040 // ƒ{[ƒhƒtƒ@ƒCƒ‹—ñ‹“(ReadFavorite ‚æ‚èæ‚ɍs‚¤‚±‚Æ)
9701041 GikoSys.ListBoardFile;
971-
1042+ //@˜A‘±‹N“®Žž‚ɃXƒvƒ‰ƒbƒVƒ…ƒEƒBƒ“ƒhƒE‚̃ƒ‚ƒŠ‚ª•s’è‚É
1043+ try
9721044 // ƒXƒvƒ‰ƒbƒVƒ…ƒEƒBƒ“ƒhƒE‚̃vƒƒOƒŒƒXƒo[‚̐ݒè
973- SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
974-
1045+ if (SplashWindow <> nil) then begin
1046+ SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1047+ end;
1048+ except
1049+ end;
9751050 // ‚·‚ׂĂÌBBS‚ð“ǂݍž‚ñ‚Å‚¨‚­
9761051 for i := Length(BBSs) - 1 downto 0 do begin
9771052 if not BBSs[i].IsBoardFileRead then
@@ -982,6 +1057,7 @@ begin
9821057 SplashWindow.Update;
9831058 end;
9841059 end;
1060+
9851061 //„‰ñƒf[ƒ^“ǂݍž‚Ý
9861062 RoundList := TRoundList.Create;
9871063 RoundList.LoadRoundBoardFile;
@@ -1200,7 +1276,8 @@ begin
12001276 FavoriteAddToolButton.Caption := '’ljÁ...';
12011277 AntiIndivAbonMenuItem.Caption := 'ŒÂ•Ê‚ ‚ځ`‚ñ‰ðœ';
12021278
1203-
1279+ //“ü—̓AƒVƒXƒg‹@\‚̏‰Šú‰»
1280+ InputAssistDM.Init(GikoSys.GetInputAssistFileName);
12041281 end;
12051282
12061283 // CoolBar ‚̐ݒè‚ð•Ï”‚É•Û‘¶
@@ -1341,51 +1418,20 @@ begin
13411418 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
13421419 GikoDM.BrowserNameBarVisibleActionExecute( nil );
13431420
1344- //ƒuƒ‰ƒEƒUƒ^ƒu
1345- GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1346- GikoDM.BrowserTabVisibleActionExecute(nil);
1347-
1348- if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1349- GikoDM.BrowserTabTopAction.Checked := True;
1350- GikoDM.BrowserTabTopActionExecute(nil);
1351- end else begin
1352- GikoDM.BrowserTabBottomAction.Checked := True;
1353- GikoDM.BrowserTabBottomActionExecute(nil);
1354- end;
1355-
1356- if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1357- GikoDM.BrowserTabTabStyleAction.Checked := True;
1358- GikoDM.BrowserTabTabStyleActionExecute(nil);
1359- end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1360- GikoDM.BrowserTabButtonStyleAction.Checked := True;
1361- GikoDM.BrowserTabButtonStyleActionExecute(nil);
1362- end else begin
1363- GikoDM.BrowserTabFlatStyleAction.Checked := True;
1364- GikoDM.BrowserTabFlatStyleActionExecute(nil);
1365- end;
1366-
1367- // ListView ‚̃wƒbƒ_ƒhƒ‰ƒbƒO
1368-// ListView.FullDrag := True;
1369-
13701421 // CoolBar •œŒ³
13711422 LoadCoolBarSettings;
13721423
13731424 //d—v@‚±‚ꂪ‚È‚¢‚ƃc[ƒ‹ƒ{ƒ^ƒ“‚̍XV‚ª‚¨‚©‚µ‚­‚È‚é
13741425 // ResetBandInfo( ListCoolBar, ListToolBar );
13751426 FIsIgnoreResize := rtNone;
1376- //ƒc[ƒ‹ƒo[‚̍XV‚ðI‚¦‚½Œã‚É‚â‚ç‚È‚¢‚Æ‚¢‚¯‚È‚¢‚Ì‚©‚à
1377- //ƒAƒNƒVƒ‡ƒ“‚̃`ƒFƒbƒNó‘Ô‚ð‰Šú‰»
1378- InitActionChecked();
13791427
13801428 //FormCrete‚©‚çˆÚ“®B
13811429 if GikoSys.Setting.TabAutoLoadSave then begin
13821430 GikoDM.TabAutoLoadAction.Execute;
13831431 end;
1384- //‚É‚¿‚á‚ñŒêˆÄ“àƒTƒ|[ƒg‹@”\
1385- if GikoSys.Setting.GengoSupport then begin
1386- //—\’è’n
1387- //TestŒü‚¯
1388- end;
1432+
1433+ //ActionList‚ÌGroupIndex‚ðŒ³‚É–ß‚·
1434+ SetGroupIndex(GikoDM.GikoFormActionList);
13891435
13901436 FStartUp := false;
13911437 end;
@@ -1474,6 +1520,8 @@ begin
14741520 // CoolBar •Û‘¶
14751521 //if (GikoForm.WindowState <> wsMinimized) and (GikoForm.WindowState <> wsMaximized) then
14761522
1523+ //“ü—̓AƒVƒXƒg‹@\‚̐ݒè‚Ì•Û‘¶
1524+ InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
14771525
14781526 //‚¨‹C‚É“ü‚è•Û‘¶
14791527 try
@@ -3560,7 +3608,6 @@ begin
35603608 FTabHintIndex := -1;
35613609 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
35623610 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3563- BrowserTab.Tabs.BeginUpdate;
35643611 try
35653612 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
35663613 doc := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser.Document;
@@ -3576,15 +3623,25 @@ begin
35763623 if j <> -1 then
35773624 FBrowsers.Move(j, BROWSER_COUNT - 1);
35783625 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;
3626+ BrowserTab.Tabs.BeginUpdate;
3627+ try
3628+ TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
3629+ if ( BrowserTab.Tabs.Count - 1 = i ) and
3630+ ( BrowserTab.TabRect(i).Left
3631+ <= BrowserTab.DisplayRect.Left ) then begin
3632+ BrowserTab.ScrollTabs(-1);
3633+ end;
3634+ BrowserTab.Tabs.Delete(i);
3635+ if idx > i then begin
3636+ BrowserTab.TabIndex := idx - 1;
3637+ end else begin
3638+ if BrowserTab.Tabs.Count -1 >= idx then
3639+ BrowserTab.TabIndex := idx
3640+ else
3641+ BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3642+ end;
3643+ finally
3644+ BrowserTab.Tabs.EndUpdate;
35883645 end;
35893646 if BrowserTab.Tabs.Count = 0 then begin
35903647 BrowserNullTab.Thread := nil;
@@ -3604,7 +3661,6 @@ begin
36043661 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
36053662 FBrowsers.Move(BROWSER_COUNT - 1, 0);
36063663 end;
3607- BrowserTab.Tabs.EndUpdate;
36083664 if( FActiveContent = nil) then
36093665 BrowserTab.OnChange(nil);
36103666 Exit;
@@ -3620,7 +3676,6 @@ begin
36203676 FTabHintIndex := -1;
36213677 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
36223678 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3623- BrowserTab.Tabs.BeginUpdate;
36243679 try
36253680 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
36263681 doc := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser.Document;
@@ -3637,15 +3692,25 @@ begin
36373692 if j <> -1 then
36383693 FBrowsers.Move(j, BROWSER_COUNT - 1);
36393694 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;
3695+ BrowserTab.Tabs.BeginUpdate;
3696+ try
3697+ TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
3698+ if ( BrowserTab.Tabs.Count - 1 = i ) and
3699+ ( BrowserTab.TabRect(i).Left
3700+ <= BrowserTab.DisplayRect.Left ) then begin
3701+ BrowserTab.ScrollTabs(-1);
3702+ end;
3703+ BrowserTab.Tabs.Delete(i);
3704+ if idx > i then begin
3705+ BrowserTab.TabIndex := idx - 1;
3706+ end else begin
3707+ if BrowserTab.Tabs.Count -1 >= idx then
3708+ BrowserTab.TabIndex := idx
3709+ else
3710+ BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3711+ end;
3712+ finally
3713+ BrowserTab.Tabs.EndUpdate;
36493714 end;
36503715 if(BrowserTab.TabIndex <> -1) and
36513716 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
@@ -3663,7 +3728,6 @@ begin
36633728 FBrowsers.Move(BROWSER_COUNT - 1, 0);
36643729 end;
36653730
3666- BrowserTab.Tabs.EndUpdate;
36673731 if( FActiveContent = nil) then
36683732 BrowserTab.OnChange(nil);
36693733 Exit;
@@ -3927,52 +3991,53 @@ var
39273991 i, j: Integer;
39283992 idx: Integer;
39293993 begin
3994+ BrowserTab.Tabs.BeginUpdate;
3995+ try
3996+ if not BrowserTab.Dragging then begin
3997+ FTabHintIndex := -1;
3998+ BrowserTab.Hint := '';
3999+ idx := BrowserTab.TabIndex;
4000+ if idx = -1 then begin
4001+ SetContent(BrowserNullTab);
4002+
4003+ end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
4004+ if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
4005+ j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
4006+ if j <> -1 then
4007+ FBrowsers.Move(j ,0);
4008+ end else begin
4009+ if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
4010+ (FActiveContent.Browser <> BrowserNullTab.Browser) and
4011+ (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
4012+ FBrowsers.Move(BROWSER_COUNT - 1, 0);
39304013
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;
4014+ for i := 0 to BrowserTab.Tabs.Count - 1 do begin
4015+ if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
4016+ ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
4017+ break;
4018+ end;
39534019 end;
4020+ TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
4021+ TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
4022+ FBrowsers.Move(BROWSER_COUNT - 1, 0);
39544023 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;
4024+ MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
4025+ TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
4026+ SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
39654027
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;
4028+ if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
4029+ AddressComboBox.Text := GetActiveContent.URL;
39714030
4031+ if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
4032+ (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
4033+ then
4034+ else
4035+ GikoDM.SetFocusForBrowserAction.Execute;
4036+ end;
39724037 end;
3973-
4038+ finally
4039+ BrowserTab.Tabs.EndUpdate;
39744040 end;
3975-
39764041 end;
39774042
39784043
@@ -4001,54 +4066,51 @@ end;
40014066
40024067 procedure TGikoForm.SetBrowserTabState;
40034068 var
4004-// i: Integer;
40054069 CoolBand: TCoolBand;
40064070 begin
40074071 BrowserBottomPanel.AutoSize := False;
40084072 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;
4073+ BrowserTab.Hide;
4074+ BrowserTab.Tabs.BeginUpdate;
4075+ try
4076+ if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
4077+ BrowserTab.Style := tsTabs;
4078+ if GikoSys.Setting.BrowserTabPosition = gtpTop then
4079+ BrowserTab.TabPosition := tpTop
4080+ else
4081+ BrowserTab.TabPosition := tpBottom;
4082+ end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
4083+ BrowserTab.TabPosition := tpTop;
4084+ BrowserTab.Style := tsButtons;
4085+ end else begin
4086+ BrowserTab.TabPosition := tpTop;
4087+ BrowserTab.Style := tsFlatButtons
4088+ end;
40334089
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;
4090+ if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
4091+ BrowserTab.Parent := BrowserTabToolBar;
4092+ BrowserBottomPanel.Hide;
4093+ CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4094+ if CoolBand <> nil then
4095+ CoolBand.Visible := True;
4096+ end else begin
4097+ BrowserTab.Parent := BrowserBottomPanel;
4098+ BrowserTab.Top := 0;
4099+ BrowserTab.Left := 0;
4100+ BrowserBottomPanel.Show;
4101+ CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4102+ if CoolBand <> nil then
4103+ CoolBand.Visible := False;
4104+ end;
4105+ finally
4106+ BrowserTab.Tabs.EndUpdate;
4107+ BrowserTab.Show;
4108+ end;
40454109 end else begin
40464110 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
40474111 if CoolBand <> nil then
40484112 CoolBand.Visible := False;
40494113 BrowserBottomPanel.Visible := False;
4050-// BrowserTab.Visible := False;
4051-// BrowserTopPanel.Height := 26;
40524114 GikoDM.AllTabCloseAction.Execute;
40534115 end;
40544116 end;
@@ -7580,61 +7642,6 @@ begin
75807642 MsgBox(Handle, s, 'ˆ—‚³‚ê‚È‚©‚Á‚½—áŠO', MB_OK or MB_ICONSTOP);
75817643 end;
75827644 // *************************************************************************
7583-//! ƒAƒNƒVƒ‡ƒ“‚̃`ƒFƒbƒNó‘Ԃ̏‰Šú‰» Form‚ÌCreate‚ŌĂяo‚µ‚Ä‚à”½‰f‚µ‚È‚¢
7584-// *************************************************************************
7585-procedure TGikoForm.InitActionChecked();
7586-begin
7587- //ƒƒOƒCƒ“ó‘Ô‚ðÄÝ’è
7588- GikoDM.LoginAction.Checked := GikoDM.LoginAction.Checked;
7589- //ƒ~ƒ…[ƒg‚̏ó‘Ô‚ðÝ’è
7590- GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
7591- //‰æ–Ê‚Ì•ªŠ„‚̏ó‘Ô‚ðÄÝ’è
7592- GikoDM.ArrangeAction.Checked := GikoDM.ArrangeAction.Checked;
7593-
7594- //ƒXƒŒ‘S•”•\Ž¦ƒ{ƒ^ƒ“‚ð‰Ÿ‚³‚ꂽó‘Ô‚É‚·‚é
7595- GikoDM.AllItemAction.Checked := True;
7596- GikoDM.AllResAction.Checked := True;
7597-
7598- // ƒŒƒX•\Ž¦”͈Í
7599- FResRangeMenuSelect := GikoSys.ResRange;
7600- case GikoSys.ResRange of
7601- Ord( grrAll ):
7602- begin
7603- GikoDM.AllResAction.Execute;
7604- end;
7605- Ord( grrSelect ):
7606- begin
7607- SelectComboBox.Text := SelectComboBox.Items[ 1 ];
7608- GikoDM.SelectResAction.Checked := True;
7609- end;
7610- else
7611- case FResRangeMenuSelect of
7612- Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
7613- Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
7614- 100: GikoDM.OnlyAHundredResAction.Checked := True;
7615- end;
7616- end;
7617-
7618- // ƒXƒŒƒbƒhˆê——•\Ž¦”͈Í
7619- case GikoSys.Setting.ThreadRange of
7620- gtrAll:
7621- begin
7622- GikoDM.AllItemAction.Checked := True;
7623- ViewType := gvtAll;
7624- end;
7625- gtrLog:
7626- begin
7627- GikoDM.LogItemAction.Checked := True;
7628- ViewType := gvtLog;
7629- end;
7630- gtrNew:
7631- begin
7632- GikoDM.NewItemAction.Checked := True;
7633- ViewType := gvtNew;
7634- end;
7635- end;
7636-end;
7637-// *************************************************************************
76387645 //! ƒ_ƒEƒ“ƒ[ƒhƒRƒ“ƒgƒ[ƒ‹ƒXƒŒƒbƒh‚̐¶¬
76397646 // *************************************************************************
76407647 procedure TGikoForm.CreateControlThread();
@@ -7757,7 +7764,7 @@ begin
77577764 rect := TreeView.Selected.DisplayRect(true);
77587765 if ((rect.Left <= X) and (rect.Right >= X)) and
77597766 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7760- // ƒNƒŠƒbƒN‚ƃ_ƒuƒ‹ƒNƒŠƒbƒN‚ðƒRƒR‚Å”»’è
7767+ // ƒNƒŠƒbƒN‚ƃ_ƒuƒ‹ƒNƒŠƒbƒN‚ðƒRƒR‚Å”»’è
77617768 if ssDouble in Shift then begin
77627769 TreeDoubleClick( TreeView.Selected );
77637770 end else begin
@@ -7768,6 +7775,45 @@ begin
77687775 end;
77697776 end;
77707777 end;
7778+//! ActionList‚ÌGroupIndex‚Ì•Û‘¶
7779+procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
7780+var
7781+ i: Integer;
7782+begin
7783+ if ActionList <> nil then begin
7784+ SetLength(FActionListGroupIndexes, ActionList.ActionCount);
7785+
7786+ for i := 0 to ActionList.ActionCount - 1 do begin
7787+ try
7788+ FActionListGroupIndexes[i] :=
7789+ TCustomAction(ActionList.Actions[i]).GroupIndex;
7790+ TCustomAction(ActionList.Actions[i]).GroupIndex
7791+ := 0;
7792+ except
7793+ ;//Cast‚Å‚«‚È‚¢‚Æ‚«‘΍ô
7794+ end;
7795+ end;
7796+
7797+ end;
7798+end;
7799+//! ActionList‚ÌGroupIndex‚̐ݒè
7800+procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
7801+var
7802+ i: Integer;
7803+begin
7804+ if ActionList <> nil then begin
7805+ if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
7806+ for i := 0 to ActionList.ActionCount - 1 do begin
7807+ try
7808+ TCustomAction(ActionList.Actions[i]).GroupIndex
7809+ := FActionListGroupIndexes[i];
7810+ except
7811+ ;//Cast‚Å‚«‚È‚¢‚Æ‚«‘΍ô
7812+ end;
7813+ end;
7814+ end;
7815+ end;
7816+end;
77717817
77727818 initialization
77737819 OleInitialize(nil);
--- a/GikoDataModule.dfm
+++ b/GikoDataModule.dfm
@@ -37,7 +37,7 @@ object GikoDM: TGikoDM
3737 end
3838 object NewBoardAction: TAction
3939 Category = #12501#12449#12452#12523
40- Caption = #26495#26356#26032'(&B)...'
40+ Caption = #26495#19968#35239#26356#26032'(&B)...'
4141 Hint = #12508#12540#12489#26356#26032#12480#12452#12450#12525#12464#12434#34920#31034#12377#12427
4242 OnExecute = NewBoardActionExecute
4343 end
@@ -1201,6 +1201,12 @@ object GikoDM: TGikoDM
12011201 Hint = #12473#12524#12483#12489#12398#23481#37327#12434#12501#12449#12452#12523#12363#12425#20877#35336#31639#12377#12427
12021202 OnExecute = ThreadSizeCalcForFileActionExecute
12031203 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
12041210 end
12051211 object ToobarImageList: TImageList
12061212 Left = 44
--- a/GikoDataModule.pas
+++ b/GikoDataModule.pas
@@ -212,6 +212,7 @@ type
212212 ToobarImageList: TImageList;
213213 SaveDialog: TSaveDialog;
214214 ThreadSizeCalcForFileAction: TAction;
215+ SetInputAssistAction: TAction;
215216 procedure EditNGActionExecute(Sender: TObject);
216217 procedure ReloadActionExecute(Sender: TObject);
217218 procedure GoFowardActionExecute(Sender: TObject);
@@ -394,6 +395,7 @@ type
394395 procedure AllSelectActionExecute(Sender: TObject);
395396 procedure AllSelectActionUpdate(Sender: TObject);
396397 procedure ThreadSizeCalcForFileActionExecute(Sender: TObject);
398+ procedure SetInputAssistActionExecute(Sender: TObject);
397399 private
398400 { Private éŒ¾ }
399401 procedure ClearResFilter;
@@ -434,7 +436,7 @@ uses
434436 ToolBarUtil, NewBoard, HTMLCreate, IndividualAbon,
435437 GikoBayesian, About, ShellAPI,
436438 RoundName, RoundData, Menus, ListViewUtils,
437- ThreadControl, GikoMessage;
439+ ThreadControl, GikoMessage, InputAssist;
438440
439441
440442 {$R *.dfm}
@@ -1062,7 +1064,6 @@ begin
10621064 if Item = nil then Exit;
10631065 Editor := TEditorForm.Create(GikoForm.GetMainForm);
10641066 Editor.SetThreadItem(Item);
1065- GikoSys.LoadKeySetting(Editor.ActionList, GikoSys.GetEditorKeyFileName);
10661067 Editor.Show;
10671068 Editor.BodyEdit.SetFocus;
10681069 end;
@@ -1563,7 +1564,7 @@ begin
15631564 try
15641565 if Dlg.ShowModal = mrOk then begin
15651566 GikoSys.SaveKeySetting(GikoFormActionList, Setting.KEY_SETTING_FILE_NAME);
1566- GikoSys.SaveKeySetting(Dlg.EditorForm.ActionList, Setting.KEY_SETTING_FILE_NAME);
1567+ GikoSys.SaveKeySetting(Dlg.EditorForm.ActionList, Setting.EKEY_SETTING_FILE_NAME);
15671568 GikoSys.Setting.Gestures.SaveGesture( GikoSys.Setting.GetGestureFileName );
15681569 end;
15691570
@@ -2227,7 +2228,6 @@ begin
22272228
22282229 Editor := TEditorForm.Create(GikoForm);
22292230 Editor.SetThreadItem(Item);
2230- GikoSys.LoadKeySetting(Editor.ActionList, GikoSys.GetEditorKeyFileName);
22312231 Editor.BodyEdit.Text := '>>' + IntToStr(Number) + #13#10;
22322232 Editor.Show;
22332233 Editor.BodyEdit.SetFocus;
@@ -3783,5 +3783,17 @@ begin
37833783 ShowMessage('ŒvŽZI—¹‚µ‚Ü‚µ‚½B');
37843784 end;
37853785
3786+procedure TGikoDM.SetInputAssistActionExecute(Sender: TObject);
3787+var
3788+ form : TInputAssistForm;
3789+begin
3790+ form := TInputAssistForm.Create(GikoForm);
3791+ try
3792+ form.ShowModal;
3793+ finally
3794+ form.Release;
3795+ end;
3796+end;
3797+
37863798 end.
37873799
--- a/GikoSystem.pas
+++ b/GikoSystem.pas
@@ -152,6 +152,7 @@ type
152152
153153 function GetMainKeyFileName : String;
154154 function GetEditorKeyFileName: String;
155+ function GetInputAssistFileName: String;
155156 procedure ReadSubjectFile(Board: TBoard);
156157 procedure CreateThreadDat(Board: TBoard);
157158 procedure WriteThreadDat(Board: TBoard);
@@ -254,7 +255,7 @@ const
254255 ZERO_DATE: Integer = 25569;
255256 BETA_VERSION_NAME_E = 'beta';
256257 BETA_VERSION_NAME_J = 'ÊÞÀ';
257- BETA_VERSION = 51;
258+ BETA_VERSION = 52;
258259 BETA_VERSION_BUILD = ''; //!< debug”Å‚È‚Ç
259260 APP_NAME = 'gikoNavi';
260261 BE_PHP_URL = 'http://be.2ch.net/test/p.php?i=';
@@ -3248,7 +3249,11 @@ function TGikoSys.GetEditorKeyFileName: String;
32483249 begin
32493250 Result := Setting.GetEditorKeyFileName;
32503251 end;
3251-
3252+//! “ü—̓AƒVƒXƒg‚̐ݒèƒtƒ@ƒCƒ‹–¼
3253+function TGikoSys.GetInputAssistFileName: String;
3254+begin
3255+ Result := Setting.GetInputAssistFileName;
3256+end;
32523257 //! ƒMƒRƒiƒr‚̃ƒbƒZ[ƒW‚ðÝ’è‚·‚é
32533258 procedure TGikoSys.SetGikoMessage;
32543259 begin
--- a/HTMLCreate.pas
+++ b/HTMLCreate.pas
@@ -970,17 +970,17 @@ const
970970 FORMAT_NOMAIL = '<a name="%s"></a><div class="header"><span class="no"><a href="menu:%s">%s</a></span>'
971971 + '<span class="name_label">–¼‘OF</span> <span class="name"><b>%s</b></span>'
972972 + '<span class="date_label">“Še“úF</span> <span class="date">%s</span></div>'
973- + '<div class="mes">%s</div>';
973+ + '<div class="mes">%s</div>'#13#10;
974974
975975 FORMAT_SHOWMAIL = '<a name="%s"></a><div class="header"><span class="no"><a href="menu:%s">%s</a></span>'
976976 + '<span class="name_label"> –¼‘OF </span><a class="name_mail" href="mailto:%s">'
977977 + '<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>'#13#10;
979979
980980 FORMAT_NOSHOW = '<a name="%s"></a><div class="header"><span class="no"><a href="menu:%s">%s</a></span>'
981981 + '<span class="name_label"> –¼‘OF </span><a class="name_mail" href="mailto:%s">'
982982 + '<b>%s</b></a><span class="date_label"> “Še“úF</span><span class="date"> %s</span></div>'
983- + '<div class="mes">%s </div>';
983+ + '<div class="mes">%s</div>'#13#10;
984984
985985 var
986986 i: integer;
@@ -1045,7 +1045,7 @@ begin
10451045 else if GikoSys.Setting.ShowMail then
10461046 doc.Write(Format(FORMAT_SHOWMAIL, [No, No, No, Res.FMailTo, Res.FName, Res.FMailTo, Res.FDateTime, Res.FBody]))
10471047 else
1048- doc.Write(Format(FORMAT_NOSHOW, [No, No, No, Res.FName, Res.FDateTime, Res.FBody]));
1048+ doc.Write(Format(FORMAT_NOSHOW, [No, No, No, Res.FMailTo, Res.FName, Res.FDateTime, Res.FBody]));
10491049 end;
10501050
10511051 if ThreadItem.Kokomade = (i + 1) then begin
--- /dev/null
+++ b/InputAssist.dfm
@@ -0,0 +1,325 @@
1+object InputAssistForm: TInputAssistForm
2+ Left = 328
3+ Top = 115
4+ Width = 494
5+ Height = 453
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 = 486
22+ Height = 177
23+ Align = alTop
24+ Caption = 'Panel1'
25+ TabOrder = 0
26+ object GikoListView1: TGikoListView
27+ Left = 8
28+ Top = 8
29+ Width = 361
30+ Height = 161
31+ Columns = <>
32+ ReadOnly = True
33+ RowSelect = True
34+ SmallImages = ColumnImageList
35+ TabOrder = 0
36+ ViewStyle = vsReport
37+ OnColumnClick = GikoListView1ColumnClick
38+ OnCompare = GikoListView1Compare
39+ OnSelectItem = GikoListView1SelectItem
40+ end
41+ object DeleteButton: TButton
42+ Left = 382
43+ Top = 40
44+ Width = 75
45+ Height = 25
46+ Caption = #21066#38500
47+ TabOrder = 1
48+ OnClick = DeleteButtonClick
49+ end
50+ object AddButton: TButton
51+ Left = 382
52+ Top = 8
53+ Width = 75
54+ Height = 25
55+ Caption = #36861#21152
56+ TabOrder = 2
57+ OnClick = AddButtonClick
58+ end
59+ object ApplyButton: TButton
60+ Left = 382
61+ Top = 72
62+ Width = 75
63+ Height = 25
64+ Caption = #36969#29992
65+ TabOrder = 3
66+ OnClick = ApplyButtonClick
67+ end
68+ object CloseButton: TButton
69+ Left = 384
70+ Top = 136
71+ Width = 75
72+ Height = 25
73+ Caption = #32066#20102
74+ TabOrder = 4
75+ OnClick = CloseButtonClick
76+ end
77+ end
78+ object Panel2: TPanel
79+ Left = 0
80+ Top = 177
81+ Width = 486
82+ Height = 249
83+ Align = alClient
84+ Caption = 'Panel2'
85+ TabOrder = 1
86+ object Panel3: TPanel
87+ Left = 1
88+ Top = 1
89+ Width = 484
90+ Height = 49
91+ Align = alTop
92+ BevelOuter = bvNone
93+ TabOrder = 0
94+ object KeyNameEdit: TLabeledEdit
95+ Left = 8
96+ Top = 21
97+ Width = 161
98+ Height = 20
99+ EditLabel.Width = 36
100+ EditLabel.Height = 12
101+ EditLabel.Caption = #12461#12540#21517
102+ LabelPosition = lpAbove
103+ LabelSpacing = 3
104+ TabOrder = 0
105+ end
106+ object CategoryNameEdit: TLabeledEdit
107+ Left = 184
108+ Top = 21
109+ Width = 121
110+ Height = 20
111+ EditLabel.Width = 53
112+ EditLabel.Height = 12
113+ EditLabel.Caption = #12459#12486#12468#12522#21517
114+ LabelPosition = lpAbove
115+ LabelSpacing = 3
116+ TabOrder = 1
117+ end
118+ end
119+ object Panel4: TPanel
120+ Left = 1
121+ Top = 50
122+ Width = 484
123+ Height = 198
124+ Align = alClient
125+ BevelOuter = bvNone
126+ TabOrder = 1
127+ object TextMemo: TMemo
128+ Left = 0
129+ Top = 0
130+ Width = 484
131+ Height = 198
132+ Align = alClient
133+ ScrollBars = ssBoth
134+ TabOrder = 0
135+ end
136+ end
137+ end
138+ object ColumnImageList: TImageList
139+ Left = 384
140+ Top = 144
141+ Bitmap = {
142+ 494C010102000400040010001000FFFFFFFFFF00FFFFFFFFFFFFFFFF424D3600
143+ 0000000000003600000028000000400000001000000001002000000000000010
144+ 0000000000000000000000000000000000000000000000000000000000000000
145+ 0000000000000000000000000000000000000000000000000000000000000000
146+ 0000000000000000000000000000000000000000000000000000000000000000
147+ 0000000000000000000000000000000000000000000000000000000000000000
148+ 0000000000000000000000000000000000000000000000000000000000000000
149+ 0000000000000000000000000000000000000000000000000000000000000000
150+ 0000000000000000000000000000000000000000000000000000000000000000
151+ 0000000000000000000000000000000000000000000000000000000000000000
152+ 0000000000000000000000000000000000000000000000000000000000000000
153+ 0000000000000000000000000000000000000000000000000000000000000000
154+ 0000000000000000000000000000000000000000000000000000000000000000
155+ 0000000000000000000000000000000000000000000000000000000000000000
156+ 0000000000000000000000000000000000000000000000000000000000000000
157+ 0000000000000000000000000000000000000000000000000000000000000000
158+ 0000000000000000000000000000000000000000000000000000000000000000
159+ 0000000000000000000000000000000000000000000000000000000000000000
160+ 0000000000000000000000000000000000000000000000000000000000000000
161+ 0000000000000000000000000000000000000000000000000000000000000000
162+ 0000000000000000000000000000000000000000000000000000000000000000
163+ 0000000000000000000000000000000000000000000000000000000000000000
164+ 0000000000000000000000000000000000000000000000000000000000000000
165+ 0000000000000000000000000000000000000000000000000000000000000000
166+ 0000000000000000000000000000000000000000000000000000000000000000
167+ 0000000000000000000000000000000000000000000000000000000000000000
168+ 0000000000000000000000000000000000000000000000000000000000000000
169+ 0000000000000000000000000000000000000000000000000000000000000000
170+ 0000000000000000000000000000000000000000000000000000000000000000
171+ 0000000000000000000000000000000000000000000000000000000000000000
172+ 0000000000000000000000000000000000000000000000000000000000000000
173+ 0000000000000000000000000000000000000000000000000000000000000000
174+ 0000000000000000000000000000000000000000000000000000000000000000
175+ 0000000000000000000000000000000000000000000000000000000000000000
176+ 000000000000000000000000000000000000000000000000000000000000FFFF
177+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
178+ 0000000000000000000000000000000000000000000000000000000000000000
179+ 0000000000000000000080808000FFFFFF000000000000000000000000000000
180+ 0000000000000000000000000000000000000000000000000000000000000000
181+ 0000000000000000000000000000000000000000000000000000000000000000
182+ 0000000000000000000000000000000000000000000000000000000000000000
183+ 0000000000000000000000000000000000000000000000000000000000000000
184+ 0000000000000000000000000000000000000000000000000000000000008080
185+ 80008080800000000000000000000000000000000000FFFFFF00FFFFFF000000
186+ 0000000000000000000000000000000000000000000000000000000000000000
187+ 0000000000008080800080808000FFFFFF00FFFFFF0000000000000000000000
188+ 0000000000000000000000000000000000000000000000000000000000000000
189+ 0000000000000000000000000000000000000000000000000000000000000000
190+ 0000000000000000000000000000000000000000000000000000000000000000
191+ 0000000000000000000000000000000000000000000000000000000000000000
192+ 0000000000000000000000000000000000000000000000000000000000000000
193+ 00008080800000000000000000000000000000000000FFFFFF00000000000000
194+ 0000000000000000000000000000000000000000000000000000000000000000
195+ 000000000000808080000000000000000000FFFFFF0000000000000000000000
196+ 0000000000000000000000000000000000000000000000000000000000000000
197+ 0000000000000000000000000000000000000000000000000000000000000000
198+ 0000000000000000000000000000000000000000000000000000000000000000
199+ 0000000000000000000000000000000000000000000000000000000000000000
200+ 0000000000000000000000000000000000000000000000000000000000000000
201+ 000080808000808080000000000000000000FFFFFF00FFFFFF00000000000000
202+ 0000000000000000000000000000000000000000000000000000000000000000
203+ 000080808000808080000000000000000000FFFFFF00FFFFFF00000000000000
204+ 0000000000000000000000000000000000000000000000000000000000000000
205+ 0000000000000000000000000000000000000000000000000000000000000000
206+ 0000000000000000000000000000000000000000000000000000000000000000
207+ 0000000000000000000000000000000000000000000000000000000000000000
208+ 0000000000000000000000000000000000000000000000000000000000000000
209+ 000000000000808080000000000000000000FFFFFF0000000000000000000000
210+ 0000000000000000000000000000000000000000000000000000000000000000
211+ 00008080800000000000000000000000000000000000FFFFFF00000000000000
212+ 0000000000000000000000000000000000000000000000000000000000000000
213+ 0000000000000000000000000000000000000000000000000000000000000000
214+ 0000000000000000000000000000000000000000000000000000000000000000
215+ 0000000000000000000000000000000000000000000000000000000000000000
216+ 0000000000000000000000000000000000000000000000000000000000000000
217+ 0000000000008080800080808000FFFFFF00FFFFFF0000000000000000000000
218+ 0000000000000000000000000000000000000000000000000000000000008080
219+ 80008080800000000000000000000000000000000000FFFFFF00FFFFFF000000
220+ 0000000000000000000000000000000000000000000000000000000000000000
221+ 0000000000000000000000000000000000000000000000000000000000000000
222+ 0000000000000000000000000000000000000000000000000000000000000000
223+ 0000000000000000000000000000000000000000000000000000000000000000
224+ 0000000000000000000000000000000000000000000000000000000000000000
225+ 0000000000000000000080808000FFFFFF000000000000000000000000000000
226+ 0000000000000000000000000000000000000000000000000000000000008080
227+ 8000808080008080800080808000808080008080800080808000808080000000
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+ 0000000000000000000000000000000000000000000000000000000000000000
245+ 0000000000000000000000000000000000000000000000000000000000000000
246+ 0000000000000000000000000000000000000000000000000000000000000000
247+ 0000000000000000000000000000000000000000000000000000000000000000
248+ 0000000000000000000000000000000000000000000000000000000000000000
249+ 0000000000000000000000000000000000000000000000000000000000000000
250+ 0000000000000000000000000000000000000000000000000000000000000000
251+ 0000000000000000000000000000000000000000000000000000000000000000
252+ 0000000000000000000000000000000000000000000000000000000000000000
253+ 0000000000000000000000000000000000000000000000000000000000000000
254+ 0000000000000000000000000000000000000000000000000000000000000000
255+ 0000000000000000000000000000000000000000000000000000000000000000
256+ 0000000000000000000000000000000000000000000000000000000000000000
257+ 0000000000000000000000000000000000000000000000000000000000000000
258+ 0000000000000000000000000000000000000000000000000000000000000000
259+ 0000000000000000000000000000000000000000000000000000000000000000
260+ 0000000000000000000000000000000000000000000000000000000000000000
261+ 0000000000000000000000000000000000000000000000000000000000000000
262+ 0000000000000000000000000000000000000000000000000000000000000000
263+ 0000000000000000000000000000000000000000000000000000000000000000
264+ 0000000000000000000000000000000000000000000000000000000000000000
265+ 0000000000000000000000000000000000000000000000000000000000000000
266+ 0000000000000000000000000000000000000000000000000000000000000000
267+ 0000000000000000000000000000000000000000000000000000000000000000
268+ 0000000000000000000000000000000000000000000000000000000000000000
269+ 0000000000000000000000000000000000000000000000000000000000000000
270+ 0000000000000000000000000000000000000000000000000000000000000000
271+ 0000000000000000000000000000000000000000000000000000000000000000
272+ 000000000000000000000000000000000000424D3E000000000000003E000000
273+ 2800000040000000100000000100010000000000800000000000000000000000
274+ 000000000000000000000000FFFFFF00FFFFFFFF00000000FFFFFFFF00000000
275+ FFFFFFFF00000000FFFFFFFF00000000E01FFCFF00000000E79FF87F00000000
276+ F7BFFB7F00000000F33FF33F00000000FB7FF7BF00000000F87FE79F00000000
277+ FCFFE01F00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000
278+ FFFFFFFF00000000FFFFFFFF00000000}
279+ end
280+ object InputAssistFormActionList: TActionList
281+ Left = 376
282+ Top = 184
283+ object EditCut1: TEditCut
284+ Category = #32232#38598
285+ Caption = #20999#12426#21462#12426'(&T)'
286+ 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
287+ ImageIndex = 0
288+ ShortCut = 16472
289+ end
290+ object EditCopy1: TEditCopy
291+ Category = #32232#38598
292+ Caption = #12467#12500#12540'(&C)'
293+ Hint = #12467#12500#12540'|'#36984#25246#37096#20998#12434#12467#12500#12540#12375#12289#12463#12522#12483#12503#12508#12540#12489#12395#36865#12427
294+ ImageIndex = 1
295+ ShortCut = 16451
296+ end
297+ object EditPaste1: TEditPaste
298+ Category = #32232#38598
299+ Caption = #36028#12426#20184#12369'(&P)'
300+ Hint = #36028#12426#20184#12369'|'#12463#12522#12483#12503#12508#12540#12489#12398#20869#23481#12434#36028#12426#20184#12369#12427
301+ ImageIndex = 2
302+ ShortCut = 16470
303+ end
304+ object EditSelectAll1: TEditSelectAll
305+ Category = #32232#38598
306+ Caption = #12377#12409#12390#12434#36984#25246'(&A)'
307+ Hint = #12377#12409#12390#12434#36984#25246'|'#12489#12461#12517#12513#12531#12488#20840#20307#12434#36984#25246#12377#12427
308+ ShortCut = 16449
309+ end
310+ object EditUndo1: TEditUndo
311+ Category = #32232#38598
312+ Caption = #20803#12395#25147#12377'(&U)'
313+ Hint = #20803#12395#25147#12377'|'#30452#21069#12398#22793#26356#12434#20803#12395#25147#12377
314+ ImageIndex = 3
315+ ShortCut = 16474
316+ end
317+ object EditDelete1: TEditDelete
318+ Category = #32232#38598
319+ Caption = #21066#38500'(&D)'
320+ Hint = #21066#38500'|'#36984#25246#37096#20998#12434#21066#38500#12377#12427
321+ ImageIndex = 5
322+ ShortCut = 46
323+ end
324+ end
325+end
--- /dev/null
+++ b/InputAssist.pas
@@ -0,0 +1,214 @@
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+ DeleteButton: TButton;
16+ AddButton: TButton;
17+ ApplyButton: TButton;
18+ Panel3: TPanel;
19+ KeyNameEdit: TLabeledEdit;
20+ CategoryNameEdit: TLabeledEdit;
21+ Panel4: TPanel;
22+ TextMemo: TMemo;
23+ ColumnImageList: TImageList;
24+ CloseButton: TButton;
25+ InputAssistFormActionList: TActionList;
26+ EditCut1: TEditCut;
27+ EditCopy1: TEditCopy;
28+ EditPaste1: TEditPaste;
29+ EditSelectAll1: TEditSelectAll;
30+ EditUndo1: TEditUndo;
31+ EditDelete1: TEditDelete;
32+ procedure FormCreate(Sender: TObject);
33+ procedure GikoListView1SelectItem(Sender: TObject; Item: TListItem;
34+ Selected: Boolean);
35+ procedure AddButtonClick(Sender: TObject);
36+ procedure DeleteButtonClick(Sender: TObject);
37+ procedure ApplyButtonClick(Sender: TObject);
38+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
39+ procedure GikoListView1Compare(Sender: TObject; Item1,
40+ Item2: TListItem; Data: Integer; var Compare: Integer);
41+ procedure GikoListView1ColumnClick(Sender: TObject;
42+ Column: TListColumn);
43+ procedure CloseButtonClick(Sender: TObject);
44+ private
45+ { Private éŒ¾ }
46+ FSortColumn : Integer;
47+ procedure AddListViewItem(ResWord : TResistWord);
48+ public
49+ { Public éŒ¾ }
50+ end;
51+
52+var
53+ InputAssistForm: TInputAssistForm;
54+
55+implementation
56+
57+
58+{$R *.dfm}
59+//! ƒtƒH[ƒ€¶¬‚̃Cƒxƒ“ƒg
60+procedure TInputAssistForm.FormCreate(Sender: TObject);
61+var
62+ i : Integer;
63+ column: TListColumn;
64+begin
65+ FSortColumn := 0;
66+ GikoListView1.Columns.Clear;
67+ column := GikoListView1.Columns.Add;
68+ column.ImageIndex := 0;
69+ column.Caption := 'ƒL[';
70+ column.Width := 150;
71+ column := GikoListView1.Columns.Add;
72+ column.Caption := 'ƒJƒeƒSƒŠ';
73+ column.Width := 80;
74+ for i := 0 to InputAssistDM.ResistWordCount - 1 do begin
75+ AddListViewItem(InputAssistDM.GetResistWord(i));
76+ end;
77+ //ƒ\[ƒgó‘Ô‚ð‰ðœ (‰ðœ‚µ‚È‚¢‚ƃAƒCƒeƒ€‚̃L[–¼‚ð•ÏX‚Å‚«‚È‚¢)
78+ InputAssistDM.Sorted := False;
79+end;
80+//! ˆê——‚ɃAƒCƒeƒ€‚ð’ljÁ‚·‚鏈—
81+procedure TInputAssistForm.AddListViewItem(ResWord : TResistWord);
82+var
83+ item: TListItem;
84+begin
85+ item := GikoListView1.Items.Add;
86+ item.ImageIndex := -1;
87+ item.Caption := resWord.GetKey;
88+ item.SubItems.Add(resWord.GetCategory);
89+ item.Data := resWord;
90+end;
91+//! “o˜^’PŒêˆê——‚©‚çƒAƒCƒeƒ€‚ð‘I‘ð‚µ‚½‚Æ‚«‚̃Cƒxƒ“ƒg
92+procedure TInputAssistForm.GikoListView1SelectItem(Sender: TObject;
93+ Item: TListItem; Selected: Boolean);
94+begin
95+ if (Item <> nil) and (Item.Data <> nil) then begin
96+ KeyNameEdit.Text := TResistWord(Item.Data).GetKey;
97+ CategoryNameEdit.Text := TResistWord(Item.Data).GetCategory;
98+ TextMemo.Lines.Text := TResistWord(Item.Data).GetText;
99+ end else begin
100+ TextMemo.Lines.Text := '';
101+ end;
102+end;
103+//! ’ljÁƒ{ƒ^ƒ“‰Ÿ‰ºŽž‚̃Cƒxƒ“ƒg
104+procedure TInputAssistForm.AddButtonClick(Sender: TObject);
105+var
106+ resWord : TResistWord;
107+begin
108+ if (Length(KeyNameEdit.Text) = 0) then begin
109+ ShowMessage('ƒL[–¼‚ðÝ’肵‚Ä‚­‚¾‚³‚¢B');
110+ end else begin
111+ resWord := InputAssistDM.Add(KeyNameEdit.Text);
112+ resWord.SetCategory(CategoryNameEdit.Text);
113+ resWord.SetText(TextMemo.Text);
114+ AddListViewItem(resWord);
115+ GikoListView1.AlphaSort;
116+ end;
117+end;
118+//! íœƒ{ƒ^ƒ“‰Ÿ‰ºŽž‚̃Cƒxƒ“ƒg
119+procedure TInputAssistForm.DeleteButtonClick(Sender: TObject);
120+begin
121+ if GikoListView1.Selected <> nil then begin
122+ InputAssistDM.DeleteResistWord(GikoListView1.Selected.Data);
123+ GikoListView1.Selected.Data := nil;
124+ GikoListView1.DeleteSelected;
125+ end;
126+end;
127+//! “K—pƒ{ƒ^ƒ“‰Ÿ‰ºŽž‚̃Cƒxƒ“ƒg
128+procedure TInputAssistForm.ApplyButtonClick(Sender: TObject);
129+var
130+ resWord : TResistWord;
131+begin
132+ if GikoListView1.Selected <> nil then begin
133+ if (Length(KeyNameEdit.Text) = 0) then begin
134+ ShowMessage('ƒL[–¼‚𖳂µ‚É‚Í‚Å‚«‚Ü‚¹‚ñB');
135+ end else begin
136+ resWord := TResistWord(GikoListView1.Selected.Data);
137+ resWord.SetKey(KeyNameEdit.Text);
138+ resWord.SetCategory(CategoryNameEdit.Text);
139+ resWord.SetText(TextMemo.Text);
140+ // ˆê——‚̍XV
141+ GikoListView1.Selected.Caption := resWord.GetKey;
142+ GikoListView1.Selected.SubItems[0] := resWord.GetCategory;
143+ GikoListView1.AlphaSort;
144+ end;
145+ end;
146+end;
147+//! ƒtƒH[ƒ€‚ð•Â‚¶‚é‚Æ‚«‚̃Cƒxƒ“ƒg
148+procedure TInputAssistForm.FormClose(Sender: TObject;
149+ var Action: TCloseAction);
150+begin
151+ //ƒ\[ƒgó‘Ԃ̐ݒè
152+ InputAssistDM.Sorted := True;
153+end;
154+//! “o˜^’PŒêˆê——‚̃\[ƒg—p‚Ì”äŠrˆ—
155+procedure TInputAssistForm.GikoListView1Compare(Sender: TObject; Item1,
156+ Item2: TListItem; Data: Integer; var Compare: Integer);
157+begin
158+ if ((FSortColumn and 2) > 0) then begin
159+ // ƒJƒeƒSƒŠ‚Ń\[ƒg
160+ Compare := AnsiCompareStr(Item1.SubItems[0], Item2.SubItems[0]);
161+ if (Compare = 0) then begin
162+ Compare := AnsiCompareStr(Item1.Caption, Item2.Caption);
163+ end;
164+ end else begin
165+ // ƒL[‚Ń\[ƒg
166+ Compare := AnsiCompareStr(Item1.Caption, Item2.Caption);
167+ if (Compare = 0) then begin
168+ Compare := AnsiCompareStr(Item1.SubItems[0], Item2.SubItems[0]);
169+ end;
170+ end;
171+ // ¸‡~‡‚Ì”½“]
172+ if ((FSortColumn and 1) > 0) then begin
173+ Compare := Compare * -1;
174+ end;
175+ ;
176+end;
177+//! “o˜^’PŒêˆê——‚̃ŠƒXƒg‚̃Jƒ‰ƒ€ƒNƒŠƒbƒNƒCƒxƒ“ƒg
178+procedure TInputAssistForm.GikoListView1ColumnClick(Sender: TObject;
179+ Column: TListColumn);
180+var
181+ i : Integer;
182+begin
183+ if Column <> nil then begin
184+ // ƒCƒ[ƒW‚̍폜
185+ for i := 0 to GikoListView1.Columns.Count - 1 do begin
186+ GikoListView1.Column[i].ImageIndex := -1;
187+ end;
188+
189+ // FSortColumn ‹ô”:¸‡ Šï”F~‡
190+ if Column.Caption = 'ƒL[' then begin
191+ if FSortColumn = 0 then begin
192+ FSortColumn := 1;
193+ end else begin
194+ FSortColumn := 0;
195+ end;
196+ end else begin
197+ if FSortColumn = 2 then begin
198+ FSortColumn := 3;
199+ end else begin
200+ FSortColumn := 2;
201+ end;
202+ end;
203+ Column.ImageIndex := (FSortColumn and 1);
204+ GikoListView1.AlphaSort;
205+ end;
206+
207+end;
208+//! I—¹ƒ{ƒ^ƒ“‚ð‰Ÿ‰ºŽž‚̃Cƒxƒ“ƒg
209+procedure TInputAssistForm.CloseButtonClick(Sender: TObject);
210+begin
211+ Close();
212+end;
213+
214+end.
--- /dev/null
+++ b/InputAssistDataModule.dfm
@@ -0,0 +1,9 @@
1+object InputAssistDM: TInputAssistDM
2+ OldCreateOrder = False
3+ OnCreate = DataModuleCreate
4+ OnDestroy = DataModuleDestroy
5+ Left = 582
6+ Top = 174
7+ Height = 150
8+ Width = 215
9+end
--- /dev/null
+++ b/InputAssistDataModule.pas
@@ -0,0 +1,329 @@
1+unit InputAssistDataModule;
2+
3+interface
4+
5+uses
6+ SysUtils, Classes;
7+
8+type
9+ TResistWord = class;
10+
11+ TInputAssistDM = class(TDataModule)
12+ procedure DataModuleDestroy(Sender: TObject);
13+ procedure DataModuleCreate(Sender: TObject);
14+ private
15+ { Private éŒ¾ }
16+ FInit : Boolean;
17+ FDictionary : TStringList; ///< “o˜^’PŒê‚Æ’èŒ^•¶‚ÌŽ«‘
18+ function GetSorted: Boolean; ///< ƒ\[ƒg‚̏ó‘Ԃ̎擾
19+ procedure SetSorted(Value: Boolean); ///< ƒ\[ƒgó‘Ԃ̐ݒè
20+
21+ public
22+ { Public éŒ¾ }
23+ property Sorted : Boolean read GetSorted write SetSorted;
24+ procedure Init(FilePath: String);
25+ procedure SaveToFile(FilePath: String);
26+ function ResistWordCount : Integer; ///<“o˜^’PŒê”Žæ“¾
27+ function GetResistWord(Index: Integer): TResistWord; ///< “o˜^’PŒêŽæ“¾
28+ procedure DeleteResistWord(ResistWord: TResistWord); ///< “o˜^’PŒê‚̍폜
29+ function Add(Key: String): TResistWord; ///< “o˜^’PŒê’ljÁ
30+ procedure ChangeKey(ResistWord: TResistWord); ///< “o˜^’PŒê‚̃L[•ÏX
31+ //! Key‚ðƒL[‚ÉŽ‚“o˜^‚³‚ê‚Ä‚¢‚é’PŒê‚ðŽæ“¾
32+ function GetStartWithKeyResistWords(Key: String; var list: TStringList): Integer;
33+ //! Key‚ðƒJƒeƒSƒŠ‚ÉŽ‚“o˜^‚³‚ê‚Ä‚¢‚é’PŒê‚ðŽæ“¾
34+ function GetStartWithCategoryResistWords(Key: String; var list: TStringList): Integer;
35+ end;
36+
37+ TResistWord = class(TObject)
38+ private
39+ FKey : String; ///< •ÏŠ·Žž‚̃L[‚É‚È‚é
40+ FCategory : String; ///< •ª—Þ
41+ FText : String; ///< ’èŒ^•¶
42+ public
43+ function GetKey: String;
44+ procedure SetKey(Value: String);
45+ function GetCategory: String;
46+ procedure SetCategory(Value: String);
47+ function GetText: String;
48+ procedure SetText(Value: String);
49+ property Key: String read FKey write FKey;
50+ property Category: String read FCategory write FCategory;
51+ property Text: String read GetText write SetText;
52+ end;
53+
54+ function CategorySort(List: TStringList; Index1, Index2: Integer): Integer;
55+var
56+ InputAssistDM: TInputAssistDM;
57+
58+implementation
59+
60+uses
61+ MojuUtils, IniFiles;
62+
63+{$R *.dfm}
64+//! FKey‚ɐݒ肳‚ê‚Ä‚¢‚é’l‚ðŽæ“¾‚·‚é
65+function TResistWord.GetKey: String;
66+begin
67+ //ƒGƒXƒP[ƒv‚µ‚Ä‚¢‚é=‚𕜌³‚·‚é
68+ Result := MojuUtils.CustomStringReplace(FKey, '&#61;', '=');
69+end;
70+//! FKey‚É’l‚ðÝ’è‚·‚é
71+procedure TResistWord.SetKey(Value: String);
72+begin
73+ //=‚Í•Û‘¶Žž‚ÉŽg‚¤‚̂ŃGƒXƒP[ƒv‚·‚é
74+ FKey := MojuUtils.CustomStringReplace(Value, '=', '&#61;');
75+end;
76+//! FCategory‚ɐݒ肳‚ê‚Ä‚¢‚é’l‚ðŽæ“¾‚·‚é
77+function TResistWord.GetCategory: String;
78+begin
79+ //ƒGƒXƒP[ƒv‚µ‚Ä‚¢‚é=‚𕜌³‚·‚é
80+ Result := MojuUtils.CustomStringReplace(FCategory, '&#61;', '=');
81+end;
82+//! FCategory‚É’l‚ðÝ’è‚·‚é
83+procedure TResistWord.SetCategory(Value: String);
84+begin
85+ //=‚Í•Û‘¶Žž‚ÉŽg‚¤‚̂ŃGƒXƒP[ƒv‚·‚é
86+ FCategory := MojuUtils.CustomStringReplace(Value, '=', '&#61;');
87+end;
88+//! FText‚ɐݒ肳‚ê‚Ä‚¢‚é’l‚ðŽæ“¾‚·‚é
89+function TResistWord.GetText: String;
90+begin
91+ //ƒGƒXƒP[ƒv‚µ‚Ä‚¢‚é=‚𕜌³‚·‚é
92+ Result := MojuUtils.CustomStringReplace(FText, '&#61;', '=');
93+ // #1‚É‚µ‚½‰üsƒR[ƒh‚ð#13#10‚É•œŒ³‚·‚é
94+ Result := MojuUtils.CustomStringReplace(Result, #1, #13#10);
95+end;
96+procedure TResistWord.SetText(Value: String);
97+begin
98+ //=‚Í•Û‘¶Žž‚ÉŽg‚¤‚̂ŃGƒXƒP[ƒv‚·‚é
99+ FText := MojuUtils.CustomStringReplace(Value, '=', '&#61;');
100+ //‰üsƒR[ƒh‚ð#1‚É‚·‚éi1s‚É‚·‚邽‚ß)
101+ FText := MojuUtils.CustomStringReplace(FText, #13#10, #1);
102+end;
103+//! ƒtƒ@ƒCƒ‹‚ð“ǂݍž‚ñ‚ŏ‰Šú‰»‚·‚é
104+procedure TInputAssistDM.Init(FilePath: String);
105+var
106+ ini : TMemIniFile;
107+ sections: TStringList;
108+ keys: TStringList;
109+ i, j : Integer;
110+ resWord : TResistWord;
111+begin
112+ FInit := True;
113+ try
114+ // ƒtƒ@ƒCƒ‹‚Ì‘¶Ý‚ðŠm”F
115+ if FileExists(FilePath) then begin
116+ ini := TMemIniFile.Create(FilePath);
117+ sections := TStringList.Create;
118+ keys := TStringList.Create;
119+ try
120+ ini.ReadSections(sections);
121+
122+ for i :=0 to sections.Count - 1 do begin
123+ keys.Clear;
124+ ini.ReadSection(sections[i], keys);
125+ for j := 0 to keys.Count - 1 do begin
126+ resWord := TResistWord.Create;
127+ resWord.SetCategory(sections[i]);
128+ resWord.SetKey(keys[j]);
129+ resWord.SetText(ini.ReadString(sections[i], keys[j], ''));
130+ FDictionary.AddObject(resWord.GetKey, resWord);
131+ end;
132+ end;
133+ finally
134+ keys.Free;
135+ sections.Free;
136+ ini.Free;
137+ end;
138+ end;
139+
140+ except
141+ FInit := False;
142+ end;
143+end;
144+//! Žw’肳‚ꂽƒpƒX‚̃tƒ@ƒCƒ‹‚É•Û‘¶‚·‚é
145+procedure TInputAssistDM.SaveToFile(FilePath: String);
146+var
147+ ini : TMemIniFile;
148+ i : Integer;
149+ resWord : TResistWord;
150+begin
151+ if FileExists(FilePath) then begin
152+ try
153+ DeleteFile(FilePath);
154+ except
155+ end;
156+ end;
157+ ini := TMemIniFile.Create(FilePath);
158+ try
159+ for i :=0 to FDictionary.Count - 1 do begin
160+ resWord := TResistWord(FDictionary.Objects[i]);
161+ ini.WriteString(resWord.FCategory, resWord.FKey, resWord.FText);
162+ end;
163+ ini.UpdateFile;
164+ finally
165+ ini.Free;
166+ end;
167+end;
168+//! ƒfƒXƒgƒ‰ƒNƒ^
169+procedure TInputAssistDM.DataModuleDestroy(Sender: TObject);
170+var
171+ i : Integer;
172+begin
173+ if (FDictionary <> nil) then begin
174+ for i := FDictionary.Count - 1 downto 0 do begin
175+ TResistWord(FDictionary.Objects[i]).Free;
176+ end;
177+ FDictionary.Clear;
178+ FDictionary.Capacity := 0;
179+ FDictionary.Free;
180+ end;
181+end;
182+//! ƒRƒ“ƒXƒgƒ‰ƒNƒ^
183+procedure TInputAssistDM.DataModuleCreate(Sender: TObject);
184+begin
185+ FDictionary := TStringList.Create;
186+ FDictionary.Duplicates := dupAccept;
187+ FDictionary.Sorted := True;
188+end;
189+//! “o˜^’PŒê”Žæ“¾
190+function TInputAssistDM.ResistWordCount : Integer;
191+begin
192+ Result := 0;
193+ if (FDictionary <> nil) then begin
194+ Result := FDictionary.Count;
195+ end;
196+end;
197+//! “o˜^’PŒêŽæ“¾
198+function TInputAssistDM.GetResistWord(Index: Integer): TResistWord;
199+begin
200+ Result := nil;
201+ if (FDictionary <> nil) then begin
202+ if (Index >= 0) and (Index < FDictionary.Count) then begin
203+ Result := TResistWord(FDictionary.Objects[index]);
204+ end;
205+ end;
206+end;
207+//! “o˜^’PŒê‚̍폜
208+procedure TInputAssistDM.DeleteResistWord(ResistWord: TResistWord);
209+var
210+ i : Integer;
211+begin
212+ if (FDictionary <> nil) then begin
213+ for i := 0 to FDictionary.Count - 1 do begin
214+ if (ResistWord = FDictionary.Objects[i]) then begin
215+ TResistWord(FDictionary.Objects[i]).Free;
216+ FDictionary.Delete(i);
217+ break;
218+ end;
219+ end;
220+ end;
221+end;
222+//! “o˜^’PŒê’ljÁ
223+function TInputAssistDM.Add(Key: String): TResistWord;
224+var
225+ resWord : TResistWord;
226+begin
227+ Result := nil;
228+ if (FDictionary <> nil) then begin
229+ resWord := TResistWord.Create;
230+ resWord.SetKey(Key);
231+ resWord.SetCategory('ƒJƒeƒSƒŠ');
232+ resWord.SetText('’èŒ^•¶');
233+ FDictionary.AddObject(Key, resWord);
234+ Result := resWord;
235+ end;
236+end;
237+//! “o˜^’PŒê‚̃L[•ÏX
238+procedure TInputAssistDM.ChangeKey(ResistWord: TResistWord);
239+var
240+ i : Integer;
241+begin
242+ if (FDictionary <> nil) then begin
243+ for i := 0 to FDictionary.Count - 1 do begin
244+ if (ResistWord = FDictionary.Objects[i]) then begin
245+ FDictionary.Strings[i] := ResistWord.GetKey;
246+ break;
247+ end;
248+ end;
249+ end;
250+end;
251+//! Key‚ðŽ‚Â“o˜^‚³‚ê‚Ä‚¢‚é’PŒê‚ðŽæ“¾
252+function TInputAssistDM.GetStartWithKeyResistWords(Key: String; var list: TStringList): Integer;
253+var
254+ i : Integer;
255+ resWord : TResistWord;
256+
257+begin
258+ Result := 0;
259+ if (FDictionary <> nil) and (list <> nil) then begin
260+ Key := ZenToHan(Key);
261+ for i := 0 to FDictionary.Count - 1 do begin
262+ if (AnsiPos(Key, ZenToHan(FDictionary.Strings[i])) = 1) then begin
263+ Inc(Result);
264+ resWord := TResistWord(FDictionary.Objects[i]);
265+ list.AddObject(resWord.GetKey + '(' +
266+ resWord.GetCategory + ')', resWord);
267+ end else if (Result > 0) then begin
268+ //ƒ\[ƒg‚³‚ê‚Ä‚¢‚é‚©‚çAƒqƒbƒg‚·‚ê‚ΘA‘±‚·‚é‚Í‚¸
269+ break;
270+ end;
271+ end;
272+ end;
273+end;
274+//! Key‚ðƒJƒeƒSƒŠ‚ÉŽ‚“o˜^‚³‚ê‚Ä‚¢‚é’PŒê‚ðŽæ“¾
275+function TInputAssistDM.GetStartWithCategoryResistWords(Key: String; var list: TStringList): Integer;
276+var
277+ i : Integer;
278+ resWord : TResistWord;
279+begin
280+ Result := 0;
281+ if (FDictionary <> nil) and (list <> nil) then begin
282+ Key := ZenToHan(Key);
283+ for i := 0 to FDictionary.Count - 1 do begin
284+ resWord := TResistWord(FDictionary.Objects[i]);
285+ if (AnsiPos(Key, ZenToHan(resWord.GetCategory)) = 1) then begin
286+ Inc(Result);
287+ list.AddObject(resWord.GetKey + '(' +
288+ resWord.GetCategory + ')', resWord);
289+ end;
290+ end;
291+ list.CustomSort(CategorySort);
292+ end;
293+end;
294+
295+//! ƒ\[ƒg‚̏ó‘Ԃ̎擾
296+function TInputAssistDM.GetSorted: Boolean;
297+begin
298+ Result := False;
299+ if (FDictionary <> nil) then begin
300+ Result := FDictionary.Sorted;
301+ end;
302+end;
303+//! ƒ\[ƒgó‘Ԃ̐ݒè
304+procedure TInputAssistDM.SetSorted(Value: Boolean);
305+begin
306+ if (FDictionary <> nil) then begin
307+ FDictionary.Sorted := Value;
308+ end;
309+end;
310+
311+//! Key‚ðƒJƒeƒSƒŠ‚ÉŽ‚“o˜^’PŒê‚ð•Ô‚·Žž‚̃\[ƒg—p”äŠrƒƒ\ƒbƒh
312+function CategorySort(List: TStringList; Index1, Index2: Integer): Integer;
313+var
314+ resWord1 : TResistWord;
315+ resWord2 : TResistWord;
316+begin
317+ Result := 0;
318+ try
319+ resWord1 := TResistWord(List.Objects[Index1]);
320+ resWord2 := TResistWord(List.Objects[Index2]);
321+ Result := AnsiCompareStr(resWord1.GetCategory, resWord2.GetCategory);
322+ if (Result = 0) then begin
323+ Result := AnsiCompareStr(resWord1.GetKey, resWord2.GetKey);
324+ end;
325+ except
326+ end;
327+end;
328+
329+end.
--- a/KeySetting.pas
+++ b/KeySetting.pas
@@ -111,7 +111,6 @@ begin
111111 if ListView.Items.Count > 0 then
112112 ListView.Selected := ListView.Items[0];
113113 EditorForm := TEditorForm.Create(Self);
114- GikoSys.LoadKeySetting(EditorForm.ActionList, GikoSys.GetEditorKeyFileName);
115114 try
116115 for i := 0 to EditorForm.ActionList.ActionCount - 1 do begin
117116 if EditorForm.ActionList.Actions[i] is TAction then begin
--- a/Setting.pas
+++ b/Setting.pas
@@ -491,7 +491,7 @@ type
491491 function GetMainKeyFileName: String;
492492 function GetEditorKeyFileName: String;
493493 procedure WriteLogFolder(AVal : String);
494-
494+ function GetInputAssistFileName : String;
495495 //ŽóMƒoƒbƒtƒ@ƒTƒCƒY
496496 property RecvBufferSize: Integer read FRecvBufferSize write FRecvBufferSize;
497497 //HTTP1.1Žg—p
@@ -772,7 +772,8 @@ const
772772 MAX_POPUP_RES : Integer = 10;
773773 GESTURE_FILE_NAME = 'Gestures.ini';
774774 SPAMFILTER_FILE_NAME = 'SpamFilter.ini';
775- LANGUAGE_FILE_NAME = 'language.ini';
775+ LANGUAGE_FILE_NAME = 'language.ini';
776+ INPUTASSIST_FILE_NAME = 'InputAssist.ini';
776777
777778
778779
@@ -2175,8 +2176,13 @@ begin
21752176 end;
21762177 function TSetting.GetEditorKeyFileName: String;
21772178 begin
2178- Result := GetConfigDir + EKEY_SETTING_FILE_NAME;
2179+ Result := GetConfigDir + EKEY_SETTING_FILE_NAME;
2180+end;
2181+function TSetting.GetInputAssistFileName : String;
2182+begin
2183+ Result := GetConfigDir + INPUTASSIST_FILE_NAME;
21792184 end;
2185+
21802186 end.
21812187
21822188
--- a/gikoNavi.dpr
+++ b/gikoNavi.dpr
@@ -71,7 +71,9 @@ uses
7171 ListViewUtils in 'ListViewUtils.pas',
7272 GikoDataModule in 'GikoDataModule.pas' {GikoDM: TDataModule},
7373 BrowserRecord in 'BrowserRecord.pas',
74- GikoMessage in 'GikoMessage.pas';
74+ GikoMessage in 'GikoMessage.pas',
75+ InputAssist in 'InputAssist.pas' {InputAssistForm},
76+ InputAssistDataModule in 'InputAssistDataModule.pas' {InputAssistDM: TDataModule};
7577
7678 {$R *.RES}
7779 {$R gikoResource.res}
@@ -90,7 +92,11 @@ begin
9092 Wnd := FindWindow('TGikoForm', nil);
9193 if Wnd <> 0 then begin
9294 //Šù‚É‹N“®Ï‚݃MƒRƒiƒr‚̃AƒNƒeƒBƒu‰»•ƒAƒCƒRƒ“‰»‚³‚ê‚Ä‚½‚ç•œŒ³
93- SetForegroundWindow(Wnd);
95+ try
96+ SetForegroundWindow(Wnd);
97+ except
98+ //‰Šú‰»‚ªI‚í‚Á‚Ä‚¢‚È‚¢‚ƃtƒHƒAƒOƒ‰ƒEƒ“ƒh‚Ɉڂ¹‚¸‚É—áŠO”­¶
99+ end;
94100 if IsIconic(Wnd) then
95101 SendMessage(Wnd, WM_SYSCOMMAND, SC_RESTORE, -1);
96102 // AppWnd := GetWindowLong(Wnd, GWL_HWNDPARENT);
@@ -122,6 +128,7 @@ begin
122128 Application.CreateForm(TFavoriteDM, FavoriteDM);
123129 Application.CreateForm(TAddressHistoryDM, AddressHistoryDM);
124130 Application.CreateForm(TGikoDM, GikoDM);
131+ Application.CreateForm(TInputAssistDM, InputAssistDM);
125132 Application.CreateForm(TGikoForm, GikoForm);
126133 Application.Run;
127134 ReleaseMutex(hMutex);
Binary files a/gikoNavi.res and b/gikoNavi.res differ
--- /dev/null
+++ b/readme/InputAssist.ini
@@ -0,0 +1,23 @@
1+[ƒMƒR”L]
2+‚¬‚±=@@@@@@ÈÈ@@`ŒPP(,,߄Dß)@@@UUPU U
3+‚¬‚±Œã‚ë=@@@ ÈÈ@@@(@@,,)@@@/@@|@`iQQj
4+‚¬‚±À‚è=@@ÈÈ@@@(,,߄Dß)@@/ ‚‚`iQQj
5+‚¬‚±—§‚¿=@@ÈÈ@@(,,߄Dß)@ ¼@@‚@ `@@|@@ ‚µM‚i
6+
7+[ƒJƒeƒSƒŠ]
8+‚«‚½[=·À„ª„ª„ª( LÍ`)߁Íß)*߁[ß)¥ƒÖ¥) ߄Dß)L[`)¥Í¥)P°P)L_T`)`„DL)-Q-)L„DM)„ª„ª!!!
9+
10+[‘½”s]
11+‚«‚½[=·À„ª„ª„ª„ª„ª(߁Íß)„ª„ª„ª„ª„ª!!!!·À„ª„ª„ª„ª„ª(߁Íß)„ª„ª„ª„ª„ª!!!!·À„ª„ª„ª„ª„ª(߁Íß)„ª„ª„ª„ª„ª!!!!·À„ª„ª„ª„ª„ª(߁Íß)„ª„ª„ª„ª„ª!!!!·À„ª„ª„ª„ª„ª(߁Íß)„ª„ª„ª„ª„ª!!!!
12+
13+[“®•¨]
14+‚­‚Á‚­‚é=@ @ÉÉÉɁ@@-Q__@@(߁¸ß*)@@„Ÿ_Q___@______P@@˜¦_Ɂ܁_@@____@___@œc^_@/Rƒ~@__@__Q@@@@./É_ƒm_@@Q@@@./^._^RЁ@ß-@@И¦@-__P___________
15+
16+[ƒNƒ}[]
17+‚­‚܁[=@@ ¿QQQ¿ @@ | ƒm@@@@@ R @@/@@œ@@@œ |@ƒNƒ}„Ÿ„ŸII @ |@@@@( _œ_)@ ƒ~ @œc¤@@@|¾|@@¤M_ /@QQ@ Rƒm@/L>@ ) (QQQj@@@/@(_^ @|@@@@@@ / @|@@^_@_ @|@/@@@ )@ ) @¾@@@ i@ _ @@@@@@ _Q)
18+‰£‚é=@@@@@@@@@@@@@@@@@@@@@@Q ^-@ƒC¤_ @@@@@@@@@@ QQ@@@@@ @@^: : : : : : : : : : : ( @@@@@@@@@ qqqq@R@@@@@/: : : : ::;:;: ;: ;:;: ; : : : ::T @@@@@@@@@@q½@@}@@@@@{:: : : :ƒm@--]'@¤__: : ::p @@ ¿QQQ¿@ |@@ |@@@@@ {:: : :ƒm ,_;:;:;ƒm¤ ƒFª S: :::} @@ | ƒm@@@@@ R !@@ !@@@A@@‚Œ: :Ɂ@^“ñ\-¤@|: ::É @@/@@œ@@@œ |@@/@@@C,¥_@@|@/^@ P7/ /::ƒm @ |@@@@( _œ_)@ ƒ~^@, f,ˆ ¥@N@ r(_“ñ„Ÿ-„£{^ @œc¤@@@|¾|@@^@@¤¥æ f@@^¤^/|@PPR /@QQ@ Rƒm@/@@@@@@@@ ^@@ //@|^^_ r (QQQj@@@/@@@@@@@ @/@@@ //@@ /_ ^ @@@@@@@/@@@@@@@ @ / @@@@@@@/@
19+
20+[AA]
21+‚µ‚å‚Ú=(L¥ƒÖ¥`)
22+‚à‚¤‚±‚Ë‚¦‚æ=@@@@@@@@@@@@@@@@@„¡„Ÿ„¢ @@@@@@@@@@@@@@@@@b‚à.b @@@@@@@@@@@@@@@@@b‚¤@| @@@@@@@@@@@@@@@@@„ —ˆ„  @@@@@@@@@@@@@@@@@„ ‚Ë„  @@@@@@@@@@@@@@@@@„ ‚¦ .| @@@@@@@@@@@@@@@@@„ ‚æ .| @@@@@@ÊÞ¶@@@@ºÞÙ§@@„  !!.„  @@@@@@@@@@@@@@@@@„¤„Ÿ„§@@@@ÌßÝÌßÝ @@@@R(`„DL)Ɂ@R(`„DL)Ɂ@@(`„DL)Ɂ@@@ i@`„Dj @@@@|PPP|„Ÿ|PPP|„Ÿ|PPP|„Ÿ i R„¢U ` `@PP@@.PP@@PP@@ |>„£
23+
--- a/readme/Samba.default
+++ b/readme/Samba.default
@@ -9,11 +9,11 @@ comic6=30
99 dso=10
1010 etc3=30
1111 etc4=30
12-ex9=20
13-ex10=20
14-ex11=20
15-ex12=20
16-ex13=20
12+ex9=15
13+ex11=15
14+ex12=15
15+ex13=15
16+ex14=15
1717 food6=30
1818 game9=30
1919 game10=30
@@ -21,12 +21,9 @@ hobby7=30
2121 hobby8=30
2222 human5=30
2323 life7=30
24-live14=15
25-live16=15
26-live18=15
27-live19=15
28-live20=15
29-live21=15
24+live14=10
25+live19=10
26+live22x=10
3027 love3=30
3128 money4=30
3229 music4=30
@@ -43,8 +40,8 @@ school5=30
4340 science4=30
4441 society3=30
4542 sports2=0
46-sports9=30
47-that3=30
43+sports9=60
44+that4=30
4845 tmp5=45
4946 travel2=30
5047 tv7=30
@@ -53,4 +50,4 @@ idol=30
5350 pie=30
5451 sakura01=30
5552 sakura02=30
56-sakura03=30
\ No newline at end of file
53+sakura03=30
--- a/readme/readme.txt
+++ b/readme/readme.txt
@@ -107,21 +107,21 @@ LICENSE
107107 ------------------------------
108108 —š—ð
109109 ------------------------------
110-200X/XX/XX
110+2006/01/14
111111 Version ÊÞÀ51
112+@ƒƒCƒ“ƒtƒH[ƒ€ã‚ł̃Vƒ‡[ƒgƒJƒbƒgƒL[‚Ì—Dæ‡ˆÊ‚ªƒMƒRƒiƒrŽ©‘Ì‚ªÅãˆÊ‚ɕύX
112113 @ƒXƒŒƒbƒh•`‰æˆ—‚̍œK‰»
113114 @ƒŒƒX”ÔŽw’èURL‚ðƒNƒŠƒbƒN‚µ‚½‚Æ‚«‚Ì“®ì‚ŁAŽæ“¾Ï‚ÝŠO‚̃ŒƒX”Ԃ̏ꍇŽ©“®‚ÅDL‚·‚é‚悤‚ɕύX
114115 @ƒŒƒXƒGƒfƒBƒ^‚©‚çSamba‚̐ݒè’l‚ð•ÏX‚Å‚«‚é‚悤‚ɕύX
115116 @ƒLƒƒƒrƒlƒbƒgã‚ŃNƒŠƒbƒNEƒ_ƒuƒ‹ƒNƒŠƒbƒNƒCƒxƒ“ƒg‚ª‰ßè‚É”­¶‚·‚é•s‹ï‡‚̏C³
116117 @ƒ}ƒEƒXƒWƒFƒXƒ`ƒƒ[—LŒøŽž‚ɃvƒŒƒrƒ…[ã‚ʼnEƒNƒŠƒbƒN‚Å‚«‚È‚¢•s‹ï‡‚̏C³
117-@ƒƒCƒ“ƒtƒH[ƒ€ã‚ł̃Vƒ‡[ƒgƒJƒbƒgƒL[‚Ì—Dæ‡ˆÊ‚ªƒMƒRƒiƒrŽ©‘Ì‚ªÅãˆÊ‚ɕύX
118118 @ƒƒCƒ“ƒƒjƒ…[‚Ì‚¨‹C‚É“ü‚è‚Ì•`‰æ‚̍‚‘¬‰»
119119 @ƒXƒe[ƒ^ƒXƒo[‚ÉŒ»Ý•\Ž¦‚µ‚Ä‚¢‚éƒXƒŒƒbƒh‚Ì—e—Ê‚ð•\Ž¦‚·‚é‚悤‚É‚µ‚½
120120 @DAT—Ž‚¿‚µ‚½ƒXƒŒ‚Ì—e—Ê‚ðŽæ“¾‚Å‚«‚È‚¢•s‹ï‡‚̏C³
121121 @”XV‚э[ƒJƒ‹ƒtƒ@ƒCƒ‹‚ðŽw’è‚Å‚«‚é‚悤‚ɕύX
122122 @ƒXƒŒƒbƒhˆê——ƒ_ƒEƒ“ƒ[ƒhŒã‚̃\[ƒg‚ðƒIƒvƒVƒ‡ƒ“‰»
123123 @NGƒ[ƒh‚É‘S”¼Šp‚Ђ炪‚ȃJƒ^ƒJƒi‚̈Ⴂ‚𓯈ꎋ‚·‚éƒIƒvƒVƒ‡ƒ“‚̒ljÁ
124-@ƒŒƒX‚̍iž‚Ý‚Å‘S”¼Šp‚Ђ炪‚ȃJƒ^ƒJƒ^‚̈Ⴂ‚𖳎‹‚·‚é‚悤‚ɕύX
124+@ƒŒƒX‚̍iž‚Ý‚Å‘S”¼Šp‚Ђ炪‚ȃJƒ^ƒJƒi‚̈Ⴂ‚𖳎‹‚·‚é‚悤‚ɕύX
125125
126126 2005/10/10
127127 Version ÊÞÀ50 ƒŠƒŠ[ƒX3
--- a/readme/setup.INF
+++ b/readme/setup.INF
@@ -90,6 +90,7 @@ Folder=gikoNavi
9090 87=config\Board\ƒMƒRƒiƒr.txt
9191 88=Samba.default
9292 89=config\language.ini
93+90=config\InputAssist.ini
9394
9495 [Group]
9596 1=ƒMƒRƒiƒr,gikoNavi.exe