• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javaandroidc++linuxc#objective-ccocoa誰得qtrubypythongamewindowsbathyscaphephpguic翻訳omegattwitterframeworktestbtronarduinovb.net計画中(planning stage)directxpreviewerゲームエンジンdom

ギコナビ


Commit MetaInfo

Revision71881b65cd5f8c4952b462688354d4fdbd841c9b (tree)
Time2007-01-22 02:43:43
Authorcvs2git <cvs2git>
Commitercvs2git

Log Message

This commit was manufactured by cvs2svn to create branch 'Bb54'.

Change Summary

Incremental Difference

--- a/AbonUnit.pas
+++ b/AbonUnit.pas
@@ -883,8 +883,11 @@ begin
883883 Dec(ps);
884884
885885 //ƒVƒŠƒAŒêƒuƒ‰ƒNƒ‰‚Ì‚Å‚È‚¢
886- if (icode <1792) or (icode > 1871) then
887- Result := Result + Copy(AString, 1, ps - PChar(AString) + 1);
886+ if ( icode < 1758) or
887+ ((icode > 1871) and (icode < 1958)) or
888+ (icode > 1968) then begin
889+ Result := Result + Copy(AString, 1, ps - PChar(AString) + 1);
890+ end;
888891
889892 Delete(AString, 1, ps - PChar(AString) + 1);
890893 end else begin
--- a/BrowserRecord.pas
+++ b/BrowserRecord.pas
@@ -32,6 +32,7 @@ type
3232 //property Movement : string read FMovement write FMovement;
3333 procedure Move(const AName: string);
3434 procedure IDAnchorPopup(Abody :string);
35+ procedure OpenFindDialog;
3536 end;
3637 // BrowserRecord‚ɂ‚¢‚Ä‚¢‚éFBrowser‚ðŠO‚·
3738 procedure ReleaseBrowser( BRecord: TBrowserRecord);
@@ -148,6 +149,48 @@ begin
148149 end;
149150 end;
150151 end;
151-
152+{
153+\brief ŒŸõƒ_ƒCƒAƒƒOŒÄ‚яo‚µ
154+}
155+procedure TBrowserRecord.OpenFindDialog();
156+const
157+ CGID_WebBrowser: TGUID = '{ED016940-BD5B-11cf-BA4E-00C04FD70816}';
158+ HTMLID_FIND = 1;
159+var
160+ CmdTarget : IOleCommandTarget;
161+ vaIn, vaOut: OleVariant;
162+ PtrGUID: PGUID;
163+begin
164+ if (Self.Browser <> nil) and (Self.Browser.Document <> nil) then begin
165+ //ƒuƒ‰ƒEƒU‚ªƒf[ƒ^‚̓ǂݍž‚Ý’†‚ÌŽž‚͓ǂݍž‚Ý‚ð‘Ò‚Â
166+ while (Self.Browser.ReadyState <> READYSTATE_COMPLETE) and
167+ (Self.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
168+ Sleep(1);
169+ Application.ProcessMessages;
170+ end;
171+ vaIn := 0;
172+ vaOut := 0;
173+ New(PtrGUID);
174+ PtrGUID^ := CGID_WebBrowser;
175+ try
176+ try
177+ if Self.Browser.Document
178+ .QueryInterface(IOleCommandTarget, CmdTarget)
179+ = S_OK then begin
180+ if CmdTarget <> nil then begin
181+ try
182+ CmdTarget.Exec(PtrGUID, HTMLID_FIND, 0, vaIn, vaOut);
183+ finally
184+ CmdTarget._Release;
185+ end;
186+ end;
187+ end;
188+ except
189+ end;
190+ finally
191+ Dispose(PtrGUID);
192+ end;
193+ end;
194+end;
152195
153196 end.
--- a/Editor.dfm
+++ b/Editor.dfm
@@ -486,7 +486,7 @@ object EditorForm: TEditorForm
486486 Top = 124
487487 Bitmap = {
488488 494C01010C000E00040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
489- 0000000000003600000028000000400000004000000001002000000000000040
489+ 0000000000003600000028000000400000004000000001001000000000000020
490490 0000000000000000000000000000000000000000000000000000000000000000
491491 0000000000000000000000000000000000000000000000000000000000000000
492492 0000000000000000000000000000000000000000000000000000000000000000
@@ -555,6 +555,62 @@ object EditorForm: TEditorForm
555555 0000000000000000000000000000000000000000000000000000000000000000
556556 0000000000000000000000000000000000000000000000000000000000000000
557557 0000000000000000000000000000000000000000000000000000000000000000
558+ 0000000000000000000000000000000000000000000000000000000010421042
559+ 1042104210421042000000000000000000000000000000000000000000004208
560+ 0000000000000000000000000000000000000000000000000000000010421042
561+ 1042104210421042000000000000000000000000000000000000000000000000
562+ 0000000000000000000000000000000000000000000000001042104210421042
563+ 1042104210421042104210420000000000000000000000000000B556630C4208
564+ 0000420800000000000000000000000000000000000000000000104218631863
565+ 1863186318631863104200000000000000000000000000000000000000000000
566+ 0000000000000000000000000000000000000000000010421042104210421042
567+ 1042104210421042104210421042000000000000000000004208DE7B08218410
568+ 4208420800004208000000000000000000000000000000001042186300000000
569+ 0000000000000000000010420000000000000000000000000000000000000000
570+ 0000000000000000000000000000000000000000000010421042104210421042
571+ 1042104210421042104210421042000000000000000042083967FF7FBD77D65A
572+ E71C841042084208000042080000000000000000000010421863186300000000
573+ FF7FFF7FFF7F1863000000001042000000000000000000000000000000000000
574+ 0000000000000000000000000000000000000000104210421042104210421042
575+ 1042104210421042104210421042104200000000B556EF3DBD77BD77FF7FDE7B
576+ 9C73734EA5148410210442080000420800000000104218631863186300000000
577+ FF7F186318631863000000001863104200000000000000000000000000000000
578+ 00000000000000000000000000000000000000001042104210421042FF7FFF7F
579+ 10421042FF7FFF7F104210421042104200004208FF7FDE7B7B6FFF7FFF7FDE7B
580+ DE7BDE7B7B6F734EA51484102104420800000000104218631863186300000000
581+ FF7F186318631863000000001863104200000000000000000000000000000000
582+ 000000000000000000000000000000000000000010421042104210421042FF7F
583+ FF7FFF7FFF7F1042104210421042104200004208FF7FFF7FFF7FFF7FDE7BDE7B
584+ DE7BBD77BD777B6F5A6B31468410630C00000000104218631863186300000000
585+ 0000000000000000000018631863104200000000000000000000000000000000
586+ 0000000000000000000000000000000000000000104210421042104210421042
587+ FF7FFF7F1042104210421042104210420000000042085A6BDE7BDE7BDE7BDE7B
588+ BD77BD77BD779C735A6B5A6B1863CE3900000000104218631863186300000000
589+ FF7FFF7FFF7F0000186318631863104200000000000000000000000000000000
590+ 000000000000000000000000000000000000000010421042104210421042FF7F
591+ FF7FFF7FFF7F10421042104210421042000000000000000042085A6BDE7BDE7B
592+ BD779C739C735A6B5A6B39671863000000000000104218631863186300000000
593+ FF7F186318630000000018631863104200000000000000000000000000000000
594+ 00000000000000000000000000000000000000001042104210421042FF7FFF7F
595+ 10421042FF7FFF7F104210421042104200000000000000000000000042083967
596+ 9C737B6F5A6B5A6B396718630000000000000000104218631863186300000000
597+ FF7F186318630000000018631863104200000000000000000000000000000000
598+ 0000000000000000000000000000000000000000000010421042104210421042
599+ 1042104210421042104210421042000000000000000000000000000000000000
600+ 420818635A6B3967396700000000000000000000000010421863186300000000
601+ FF7FFF7FFF7F0000000018631042000000000000000000000000000000000000
602+ 0000000000000000000000000000000000000000000010421042104210421042
603+ 1042104210421042104210421042000000000000000000000000000000000000
604+ 000000004208F75E000000000000000000000000000000001042186300000000
605+ 0000000000000000186310420000000000000000000000000000000000000000
606+ 0000000000000000000000000000000000000000000000001042104210421042
607+ 1042104210421042104210420000000000000000000000000000000000000000
608+ 0000000000000000000000000000000000000000000000000000104218631863
609+ 1863186318631863104200000000000000000000000000000000000000000000
610+ 0000000000000000000000000000000000000000000000000000000010421042
611+ 1042104210421042000000000000000000000000000000000000000000000000
612+ 0000000000000000000000000000000000000000000000000000000010421042
613+ 1042104210421042000000000000000000000000000000000000000000000000
558614 0000000000000000000000000000000000000000000000000000000000000000
559615 0000000000000000000000000000000000000000000000000000000000000000
560616 0000000000000000000000000000000000000000000000000000000000000000
@@ -569,10 +625,51 @@ object EditorForm: TEditorForm
569625 0000000000000000000000000000000000000000000000000000000000000000
570626 0000000000000000000000000000000000000000000000000000000000000000
571627 0000000000000000000000000000000000000000000000000000000000000000
628+ 0000FF7FFF7FFF7FFF7FFF7FFF7FFF7F00000000000000000000000000000000
572629 0000000000000000000000000000000000000000000000000000000000000000
573630 0000000000000000000000000000000000000000000000000000000000000000
631+ 0000FF7FFF7FFF7FFF7FFF7FFF7FFF7F000000000000FF7FFF7FFF7FFF7FFF7F
632+ 0000FF7F00000000000000000000FF7F00000000000000000000000010421042
633+ 1042104210421042104210421042104200000000000000000000000010421042
634+ 1042104210421042104210421042104200000000000000000000000000000000
635+ 0000FF7F00000000000000000000FF7F000000000000FF7FFF7FFF7FFF7FFF7F
636+ 0000FF7FFF7FFF7FFF7FFF7FFF7FFF7F00000000000000000000000010421042
637+ 1042104210421042104210421042104200000000000000000000000010421042
638+ 1042104210421042104210421042104200000000000000000000000000000000
639+ 0000FF7FFF7FFF7FFF7FFF7FFF7FFF7F000000000000FF7FFF7FFF7FFF7FFF7F
640+ 0000FF7F000000000000FF7F0000000000000000000000000000000000000000
641+ 0000000000000000104210421042104200000000000000000000000000000000
642+ 00000000000000001042104210421042000000000000FF7FFF7FFF7FFF7FFF7F
643+ 0000FF7F00000000000000000000FF7F000000000000FF7FFF7FFF7FFF7FFF7F
644+ 0000FF7FFF7FFF7FFF7FFF7F0000FF7F00000000000000000000000018631863
645+ 1863186318630000104210421042104200000000FF7FFF7FFF7FFF7FFF7FFF7F
646+ FF7FFF7FFF7F00001042104210421042000000000000FF7F0000000000000000
647+ 0000FF7FFF7FFF7FFF7FFF7FFF7FFF7F000000000000FF7FFF7FFF7FFF7FFF7F
648+ 0000FF7FFF7FFF7FFF7FFF7F0000000000000000000000000000000018631863
649+ 1863186318630000104210421042104200000000FF7FFF7FFF7FFF7FFF7FFF7F
650+ FF7FFF7FFF7F00001042104210421042000000000000FF7FFF7FFF7FFF7FFF7F
651+ 0000FF7F00000000FF7F000000000000000000000000FF7FFF7FFF7FFF7FFF7F
652+ 0000000000000000000000000000000000000000000000000000000018631863
653+ 1863186318630000104210421042104200000000FF7FFF7FFF7FFF7FFF7FFF7F
654+ FF7FFF7FFF7F00001042104210421042000000000000FF7F0000000000000000
655+ 0000FF7FFF7FFF7FFF7F0000FF7F0000000000000000FF7FFF7FFF7FFF7FFF7F
656+ FF7FFF7FFF7FFF7FFF7FFF7FFF7F000000000000000000000000104210421042
657+ 1042104210420000000000000000000000000000FF7FFF7FFF7FFF7FFF7FFF7F
658+ FF7FFF7FFF7F00000000000000000000000000000000FF7FFF7FFF7FFF7FFF7F
659+ 0000FF7FFF7FFF7FFF7F000000000000000000000000FF7FFF7F000000000000
660+ 00000000000000000000FF7FFF7F000000000000000000000000104210421042
661+ 1042104210420000000000000000000000000000FF7FFF7FFF7FFF7FFF7FFF7F
662+ FF7FFF7FFF7F00000000000000000000000000000000FF7F00000000FF7F0000
663+ 00000000000000000000000000000000000000000000FF7FFF7F0000FF7FFF7F
664+ FF7FFF7FFF7FFF7F0000FF7FFF7F000000000000000000000000000000000000
665+ 0000000000000000000000000000000000000000FF7FFF7FFF7FFF7FFF7FFF7F
666+ FF7FFF7FFF7F00000000000000000000000000000000FF7FFF7FFF7FFF7F0000
667+ FF7F0000000000000000000000000000000000000000FF7FFF7FFF7F0000FF7F
668+ 00000000FF7F0000FF7FFF7FFF7F000000000000000000000000000000000000
574669 0000000000000000000000000000000000000000000000000000000000000000
670+ 00000000000000000000000000000000000000000000FF7FFF7FFF7FFF7F0000
575671 0000000000000000000000000000000000000000000000000000000000000000
672+ FF7FFF7F00000000000000000000000000000000000000000000000000000000
576673 0000000000000000000000000000000000000000000000000000000000000000
577674 0000000000000000000000000000000000000000000000000000000000000000
578675 0000000000000000000000000000000000000000000000000000000000000000
@@ -587,417 +684,64 @@ object EditorForm: TEditorForm
587684 0000000000000000000000000000000000000000000000000000000000000000
588685 0000000000000000000000000000000000000000000000000000000000000000
589686 0000000000000000000000000000000000000000000000000000000000000000
687+ 00000000000000000000000000000000000000000000FF7FFF7FFF7FFF7FFF7F
688+ FF7FFF7FFF7F0000000000000000000000000000000000000000000000000000
590689 0000000000000000000000000000000000000000000000000000000000000000
591690 0000000000000000000000000000000000000000000000000000000000000000
691+ 0000000000000000000000000000000000000000FF7F0000FF7FFF7FFF7FFF7F
692+ FF7FFF7FFF7FFF7F000000000000000000000000000000000000000000000000
693+ 00000000000000000000000000000000000000000000000000000000FF7FFF7F
592694 0000000000000000000000000000000000000000000000000000000000000000
695+ 00000000000000000000FF7FFF7F000000000000FF7FFF7F0000FF7FFF7FFF7F
696+ FF7FFF7FFF7FFF7FFF7F00000000000000000000000000000000000000000000
697+ 00000000000000000000000000000000000000000000000000000000FF7FFF7F
698+ 000000000000FF7FFF7F00000000000000001042104210421042104210421042
699+ 10420000FF7FFF7FFF7FFF7FFF7FFF7F00000000FF7FFF7FFF7F0000FF7FFF7F
700+ FF7FFF7FFF7FFF7FFF7FFF7F0000000000000000000000000000000000000000
701+ 00000000000000000000000000000000000000000000000000000000FF7FFF7F
702+ 000000000000FF7FFF7F00000000000000001863FF7FFF7FFF7FFF7FFF7FFF7F
703+ FF7F0000000000000000FF7FFF7F000000000000FF7FFF7FFF7FFF7F00000000
593704 0000000000000000000000000000000000000000000000000000000000000000
594705 0000000000000000000000000000000000000000000000000000000000000000
706+ 000000000000FF7FFF7F00000000000000001863FF7FFF7FFF7FFF7FFF7FFF7F
707+ FF7FFF7FFF7FFF7FFF7F00000000000000000000FF7FFF7FFF7FFF7FFF7FFF7F
708+ FF7FFF7F00000000000000000000000000000000000000000000000000000000
595709 0000000000000000000000000000000000000000000000000000000000000000
710+ 0000000000000000000000000000000000001863FF7FFF7F0000000000000000
711+ FF7FFF7FFF7FFF7FFF7F00001042000000000000FF7FFF7FFF7F000000000000
596712 0000000000000000000000000000000000000000000000000000000000000000
597713 0000000000000000000000000000000000000000000000000000000000000000
714+ 0000000000000000000000000000000000001863FF7FFF7FFF7FFF7FFF7FFF7F
715+ FF7FFF7FFF7FFF7FFF7FFF7F1042000000000000000000000000000000000000
598716 0000000000000000000000000000000000000000000000000000000000000000
599717 0000000000000000000000000000000000000000000000000000000000000000
718+ 0000000000000000000000000000000000001863FF7FFF7F0000000000000000
719+ 000000000000FF7FFF7FFF7F1042000000000000000000000000000000001042
720+ 1042104210421042104210421042104210420000000000000000000000000000
600721 0000000000000000000000000000000000000000000000000000000000000000
722+ 0000000000000000000000000000000000001863FF7FFF7FFF7FFF7FFF7FFF7F
723+ FF7FFF7FFF7FFF7FFF7FFF7F1042000000000000000000000000000000001863
724+ FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F10420000000000000000000000000000
601725 0000000000000000000000000000000000000000000000000000000000000000
726+ 0000000000000000000000000000000000001863FF7FFF7F0000000000000000
727+ 00000000000000000000FF7F1042000000000000000000000000000000001863
728+ FF7FFF7F000000000000FF7FFF7FFF7F10420000000000000000000000000000
602729 0000000000000000000000000000000000000000000000000000000000000000
730+ 0000000000000000000000000000000000001863FF7FFF7FFF7FFF7FFF7FFF7F
731+ FF7FFF7FFF7FFF7FFF7FFF7F1042000000000000000000000000000000001863
732+ FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F10420000000000000000000000000000
603733 0000000000000000000000000000000000000000000000000000000000000000
734+ 0000000000000000000000000000000000001863186318631863186318631863
735+ 1863186318631863186318631863000000000000000000000000000000000000
736+ 0000FF7F0000000000000000FF7FFF7F10420000000000000000000000000000
604737 0000000000000000000000000000000000000000000000000000000000000000
605738 0000000000000000000000000000000000000000000000000000000000000000
739+ 0000000000000000000000000000000000000000000000000000000000001863
740+ FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F10420000000000000000000000000000
606741 0000000000000000000000000000000000000000000000000000000000000000
607742 0000000000000000000000000000000000000000000000000000000000000000
608- 0000000000000000000000000000000000000000000000000000000000000000
609- 0000000000000000000000000000000000000000000000000000000000000000
610- 0000000000000000000000000000000000000000000000000000000000000000
611- 0000000000000000000000000000000000000000000000000000000000000000
612- 0000000000000000000000000000000000000000000000000000000000000000
613- 0000000000000000000000000000000000000000000000000000000000000000
614- 0000000000000000000000000000000000000000000000000000000000000000
615- 0000000000000000000000000000000000000000000000000000000000000000
616- 0000000000000000000000000000000000000000000000000000000000000000
617- 0000000000000000000000000000000000000000000000000000000000000000
618- 0000000000000000000000000000000000000000000000000000000000000000
619- 0000000000000000000000000000000000000000000000000000000000000000
620- 0000000000000000000000000000000000000000000000000000000000000000
621- 0000000000000000000000000000000000000000000000000000000000000000
622- 0000000000000000000000000000000000000000000000000000000000000000
623- 0000000000000000000000000000000000000000000000000000000000000000
624- 0000000000000000000000000000000000000000000000000000000000000000
625- 0000000000000000000000000000000000000000000000000000000000000000
626- 0000000000000000000000000000000000000000000000000000000000000000
627- 0000000000008484840084848400848484008484840084848400848484000000
628- 0000000000000000000000000000000000000000000000000000000000000000
629- 0000000000000000000010101000000000000000000000000000000000000000
630- 0000000000000000000000000000000000000000000000000000000000000000
631- 0000000000008080800080808000808080008080800080808000808080000000
632- 0000000000000000000000000000000000000000000000000000000000000000
633- 0000000000000000000000000000000000000000000000000000000000000000
634- 0000000000000000000000000000000000000000000000000000000000008484
635- 8400848484008484840084848400848484008484840084848400848484008484
636- 8400848484000000000000000000000000000000000000000000000000000000
637- 0000ADADAD001818180010101000000000001010100000000000000000000000
638- 0000000000000000000000000000000000000000000000000000000000000000
639- 000080808000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C0008080
640- 8000000000000000000000000000000000000000000000000000000000000000
641- 0000000000000000000000000000000000000000000000000000000000000000
642- 0000000000000000000000000000000000000000000000000000848484008484
643- 8400848484008484840084848400848484008484840084848400848484008484
644- 8400848484008484840000000000000000000000000000000000000000001010
645- 1000F7F7F7004242420021212100101010001010100000000000101010000000
646- 0000000000000000000000000000000000000000000000000000000000008080
647- 8000C0C0C0000000000000000000000000000000000000000000000000000000
648- 0000808080000000000000000000000000000000000000000000000000000000
649- 0000000000000000000000000000000000000000000000000000000000000000
650- 0000000000000000000000000000000000000000000000000000848484008484
651- 8400848484008484840084848400848484008484840084848400848484008484
652- 840084848400848484000000000000000000000000000000000010101000CECE
653- CE00FFFFFF00EFEFEF00B5B5B500393939002121210010101000101010000000
654- 000010101000000000000000000000000000000000000000000080808000C0C0
655- C000C0C0C0000000000000000000FFFFFF00FFFFFF00FFFFFF00C0C0C0000000
656- 0000000000008080800000000000000000000000000000000000000000000000
657- 0000000000000000000000000000000000000000000000000000000000000000
658- 0000000000000000000000000000000000000000000084848400848484008484
659- 8400848484008484840084848400848484008484840084848400848484008484
660- 84008484840084848400848484000000000000000000ADADAD007B7B7B00EFEF
661- EF00EFEFEF00FFFFFF00F7F7F700E7E7E7009C9C9C0029292900212121000808
662- 0800101010000000000010101000000000000000000080808000C0C0C000C0C0
663- C000C0C0C0000000000000000000FFFFFF00C0C0C000C0C0C000C0C0C0000000
664- 000000000000C0C0C00080808000000000000000000000000000000000000000
665- 0000000000000000000000000000000000000000000000000000000000000000
666- 0000000000000000000000000000000000000000000084848400848484008484
667- 840084848400FFFFFF00FFFFFF008484840084848400FFFFFF00FFFFFF008484
668- 84008484840084848400848484000000000010101000FFFFFF00F7F7F700DEDE
669- DE00FFFFFF00FFFFFF00F7F7F700F7F7F700F7F7F700DEDEDE009C9C9C002929
670- 2900212121000808080010101000000000000000000080808000C0C0C000C0C0
671- C000C0C0C0000000000000000000FFFFFF00C0C0C000C0C0C000C0C0C0000000
672- 000000000000C0C0C00080808000000000000000000000000000000000000000
673- 0000000000000000000000000000000000000000000000000000000000000000
674- 0000000000000000000000000000000000000000000084848400848484008484
675- 84008484840084848400FFFFFF00FFFFFF00FFFFFF00FFFFFF00848484008484
676- 84008484840084848400848484000000000010101000FFFFFF00FFFFFF00FFFF
677- FF00FFFFFF00F7F7F700F7F7F700F7F7F700EFEFEF00EFEFEF00DEDEDE00D6D6
678- D6008C8C8C002121210018181800000000000000000080808000C0C0C000C0C0
679- C000C0C0C0000000000000000000000000000000000000000000000000000000
680- 0000C0C0C000C0C0C00080808000000000000000000000000000000000000000
681- 0000000000000000000000000000000000000000000000000000000000000000
682- 0000000000000000000000000000000000000000000084848400848484008484
683- 8400848484008484840084848400FFFFFF00FFFFFF0084848400848484008484
684- 8400848484008484840084848400000000000000000010101000D6D6D600F7F7
685- F700F7F7F700F7F7F700F7F7F700EFEFEF00EFEFEF00EFEFEF00E7E7E700D6D6
686- D600D6D6D600C6C6C60073737300000000000000000080808000C0C0C000C0C0
687- C000C0C0C0000000000000000000FFFFFF00FFFFFF00FFFFFF0000000000C0C0
688- C000C0C0C000C0C0C00080808000000000000000000000000000000000000000
689- 0000000000000000000000000000000000000000000000000000000000000000
690- 0000000000000000000000000000000000000000000084848400848484008484
691- 84008484840084848400FFFFFF00FFFFFF00FFFFFF00FFFFFF00848484008484
692- 8400848484008484840084848400000000000000000000000000000000001010
693- 1000D6D6D600F7F7F700F7F7F700EFEFEF00E7E7E700E7E7E700D6D6D600D6D6
694- D600CECECE00C6C6C60000000000000000000000000080808000C0C0C000C0C0
695- C000C0C0C0000000000000000000FFFFFF00C0C0C000C0C0C000000000000000
696- 0000C0C0C000C0C0C00080808000000000000000000000000000000000000000
697- 0000000000000000000000000000000000000000000000000000000000000000
698- 0000000000000000000000000000000000000000000084848400848484008484
699- 840084848400FFFFFF00FFFFFF008484840084848400FFFFFF00FFFFFF008484
700- 8400848484008484840084848400000000000000000000000000000000000000
701- 00000000000010101000CECECE00E7E7E700DEDEDE00D6D6D600D6D6D600CECE
702- CE00C6C6C6000000000000000000000000000000000080808000C0C0C000C0C0
703- C000C0C0C0000000000000000000FFFFFF00C0C0C000C0C0C000000000000000
704- 0000C0C0C000C0C0C00080808000000000000000000000000000000000000000
705- 0000000000000000000000000000000000000000000000000000000000000000
706- 0000000000000000000000000000000000000000000000000000848484008484
707- 8400848484008484840084848400848484008484840084848400848484008484
708- 8400848484008484840000000000000000000000000000000000000000000000
709- 000000000000000000000000000010101000C6C6C600D6D6D600CECECE00CECE
710- CE0000000000000000000000000000000000000000000000000080808000C0C0
711- C000C0C0C0000000000000000000FFFFFF00FFFFFF00FFFFFF00000000000000
712- 0000C0C0C0008080800000000000000000000000000000000000000000000000
713- 0000000000000000000000000000000000000000000000000000000000000000
714- 0000000000000000000000000000000000000000000000000000848484008484
715- 8400848484008484840084848400848484008484840084848400848484008484
716- 8400848484008484840000000000000000000000000000000000000000000000
717- 0000000000000000000000000000000000000000000010101000BDBDBD000000
718- 0000000000000000000000000000000000000000000000000000000000008080
719- 8000C0C0C000000000000000000000000000000000000000000000000000C0C0
720- C000808080000000000000000000000000000000000000000000000000000000
721- 0000000000000000000000000000000000000000000000000000000000000000
722- 0000000000000000000000000000000000000000000000000000000000008484
723- 8400848484008484840084848400848484008484840084848400848484008484
724- 8400848484000000000000000000000000000000000000000000000000000000
725- 0000000000000000000000000000000000000000000000000000000000000000
726- 0000000000000000000000000000000000000000000000000000000000000000
727- 000080808000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C0008080
728- 8000000000000000000000000000000000000000000000000000000000000000
729- 0000000000000000000000000000000000000000000000000000000000000000
730- 0000000000000000000000000000000000000000000000000000000000000000
731- 0000000000008484840084848400848484008484840084848400848484000000
732- 0000000000000000000000000000000000000000000000000000000000000000
733- 0000000000000000000000000000000000000000000000000000000000000000
734- 0000000000000000000000000000000000000000000000000000000000000000
735- 0000000000008080800080808000808080008080800080808000808080000000
736- 0000000000000000000000000000000000000000000000000000000000000000
737- 0000000000000000000000000000000000000000000000000000000000000000
738- 0000000000000000000000000000000000000000000000000000000000000000
739- 0000000000000000000000000000000000000000000000000000000000000000
740- 0000000000000000000000000000000000000000000000000000000000000000
741- 0000000000000000000000000000000000000000000000000000000000000000
742- 0000000000000000000000000000000000000000000000000000000000000000
743- 0000000000000000000000000000000000000000000000000000000000000000
744- 0000000000000000000000000000000000000000000000000000000000000000
745- 0000000000000000000000000000000000000000000000000000000000000000
746- 0000000000000000000000000000000000000000000000000000000000000000
747- 0000000000000000000000000000000000000000000000000000000000000000
748- 0000000000000000000000000000000000000000000000000000000000000000
749- 0000000000000000000000000000000000000000000000000000000000000000
750- 0000000000000000000000000000000000000000000000000000000000000000
751- 0000000000000000000000000000000000000000000000000000000000000000
752- 0000000000000000000000000000000000000000000000000000000000000000
753- 0000000000000000000000000000000000000000000000000000000000000000
754- 0000000000000000000000000000000000000000000000000000000000000000
755- 0000000000000000000000000000000000000000000000000000000000000000
756- 0000000000000000000000000000000000000000000000000000000000000000
757- 0000000000000000000000000000000000000000000000000000000000000000
758- 0000000000000000000000000000000000000000000000000000000000000000
759- 0000000000000000000000000000000000000000000000000000000000000000
760- 0000000000000000000000000000000000000000000000000000000000000000
761- 0000000000000000000000000000000000000000000000000000000000000000
762- 0000000000000000000000000000000000000000000000000000000000000000
763- 0000000000000000000000000000000000000000000000000000000000000000
764- 0000000000000000000000000000000000000000000000000000000000000000
765- 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
766- FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000
767- 0000000000000000000000000000000000000000000000000000000000000000
768- 0000000000000000000000000000000000000000000000000000000000000000
769- 0000000000000000000000000000000000000000000000000000000000000000
770- 0000000000000000000000000000000000000000000000000000000000000000
771- 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
772- FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000FFFFFF00FFFF
773- FF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF0000000000000000000000
774- 00000000000000000000FFFFFF00000000000000000000000000000000000000
775- 0000000000008484840084848400848484008484840084848400848484008484
776- 8400848484008484840084848400000000000000000000000000000000000000
777- 0000000000008484840084848400848484008484840084848400848484008484
778- 8400848484008484840084848400000000000000000000000000000000000000
779- 000000000000000000000000000000000000FFFFFF0000000000000000000000
780- 00000000000000000000FFFFFF00000000000000000000000000FFFFFF00FFFF
781- FF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFF
782- FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000
783- 0000000000008484840084848400848484008484840084848400848484008484
784- 8400848484008484840084848400000000000000000000000000000000000000
785- 0000000000008484840084848400848484008484840084848400848484008484
786- 8400848484008484840084848400000000000000000000000000000000000000
787- 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
788- FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000FFFFFF00FFFF
789- FF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF0000000000000000000000
790- 0000FFFFFF000000000000000000000000000000000000000000000000000000
791- 0000000000000000000000000000000000000000000000000000000000008484
792- 8400848484008484840084848400000000000000000000000000000000000000
793- 0000000000000000000000000000000000000000000000000000000000008484
794- 8400848484008484840084848400000000000000000000000000FFFFFF00FFFF
795- FF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF0000000000000000000000
796- 00000000000000000000FFFFFF00000000000000000000000000FFFFFF00FFFF
797- FF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFF
798- FF00FFFFFF0000000000FFFFFF00000000000000000000000000000000000000
799- 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000008484
800- 84008484840084848400848484000000000000000000FFFFFF00FFFFFF00FFFF
801- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000008484
802- 8400848484008484840084848400000000000000000000000000FFFFFF000000
803- 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
804- FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000FFFFFF00FFFF
805- FF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFF
806- FF00FFFFFF000000000000000000000000000000000000000000000000000000
807- 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000008484
808- 84008484840084848400848484000000000000000000FFFFFF00FFFFFF00FFFF
809- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000008484
810- 8400848484008484840084848400000000000000000000000000FFFFFF00FFFF
811- FF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF000000000000000000FFFF
812- FF00000000000000000000000000000000000000000000000000FFFFFF00FFFF
813- FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000
814- 0000000000000000000000000000000000000000000000000000000000000000
815- 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000008484
816- 84008484840084848400848484000000000000000000FFFFFF00FFFFFF00FFFF
817- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000008484
818- 8400848484008484840084848400000000000000000000000000FFFFFF000000
819- 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
820- FF0000000000FFFFFF0000000000000000000000000000000000FFFFFF00FFFF
821- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
822- FF00FFFFFF00FFFFFF0000000000000000000000000000000000000000000000
823- 0000848484008484840084848400848484008484840084848400000000000000
824- 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
825- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000
826- 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF
827- FF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFF
828- FF00000000000000000000000000000000000000000000000000FFFFFF00FFFF
829- FF00000000000000000000000000000000000000000000000000000000000000
830- 0000FFFFFF00FFFFFF0000000000000000000000000000000000000000000000
831- 0000848484008484840084848400848484008484840084848400000000000000
832- 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
833- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000
834- 0000000000000000000000000000000000000000000000000000FFFFFF000000
835- 000000000000FFFFFF0000000000000000000000000000000000000000000000
836- 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF
837- FF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
838- 0000FFFFFF00FFFFFF0000000000000000000000000000000000000000000000
839- 0000000000000000000000000000000000000000000000000000000000000000
840- 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
841- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000
842- 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF
843- FF00FFFFFF00FFFFFF0000000000FFFFFF000000000000000000000000000000
844- 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF
845- FF00FFFFFF0000000000FFFFFF000000000000000000FFFFFF0000000000FFFF
846- FF00FFFFFF00FFFFFF0000000000000000000000000000000000000000000000
847- 0000000000000000000000000000000000000000000000000000000000000000
848- 0000000000000000000000000000000000000000000000000000000000000000
849- 0000000000000000000000000000000000000000000000000000000000000000
850- 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF
851- FF00FFFFFF00FFFFFF0000000000000000000000000000000000000000000000
852- 0000000000000000000000000000000000000000000000000000000000000000
853- 0000000000000000000000000000FFFFFF00FFFFFF0000000000000000000000
854- 0000000000000000000000000000000000000000000000000000000000000000
855- 0000000000000000000000000000000000000000000000000000000000000000
856- 0000000000000000000000000000000000000000000000000000000000000000
857- 0000000000000000000000000000000000000000000000000000000000000000
858- 0000000000000000000000000000000000000000000000000000000000000000
859- 0000000000000000000000000000000000000000000000000000000000000000
860- 0000000000000000000000000000000000000000000000000000000000000000
861- 0000000000000000000000000000000000000000000000000000000000000000
862- 0000000000000000000000000000000000000000000000000000000000000000
863- 0000000000000000000000000000000000000000000000000000000000000000
864- 0000000000000000000000000000000000000000000000000000000000000000
865- 0000000000000000000000000000000000000000000000000000000000000000
866- 0000000000000000000000000000000000000000000000000000000000000000
867- 0000000000000000000000000000000000000000000000000000000000000000
868- 0000000000000000000000000000000000000000000000000000000000000000
869- 0000000000000000000000000000000000000000000000000000000000000000
870- 0000000000000000000000000000000000000000000000000000000000000000
871- 0000000000000000000000000000000000000000000000000000000000000000
872- 0000000000000000000000000000000000000000000000000000000000000000
873- 0000000000000000000000000000000000000000000000000000000000000000
874- 0000000000000000000000000000000000000000000000000000000000000000
875- 0000000000000000000000000000000000000000000000000000000000000000
876- 0000000000000000000000000000000000000000000000000000000000000000
877- 0000000000000000000000000000000000000000000000000000000000000000
878- 0000000000000000000000000000000000000000000000000000000000000000
879- 0000000000000000000000000000000000000000000000000000000000000000
880- 0000000000000000000000000000000000000000000000000000000000000000
881- 0000000000000000000000000000000000000000000000000000000000000000
882- 0000000000000000000000000000000000000000000000000000000000000000
883- 0000000000000000000000000000000000000000000000000000000000000000
884- 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF
885- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000
886- 0000000000000000000000000000000000000000000000000000000000000000
887- 0000000000000000000000000000000000000000000000000000000000000000
888- 0000000000000000000000000000000000000000000000000000000000000000
889- 0000000000000000000000000000000000000000000000000000000000000000
890- 0000000000000000000000000000000000000000000000000000000000000000
891- 0000000000000000000000000000000000000000000000000000000000000000
892- 00000000000000000000000000000000000000000000FFFFFF0000000000FFFF
893- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
894- 0000000000000000000000000000000000000000000000000000000000000000
895- 0000000000000000000000000000000000000000000000000000000000000000
896- 0000000000000000000000000000000000000000000000000000000000000000
897- 000000000000FFFFFF00FFFFFF00000000000000000000000000000000000000
898- 0000000000000000000000000000000000000000000000000000000000000000
899- 0000000000000000000000000000000000000000000000000000000000000000
900- 0000FFFFFF00FFFFFF00000000000000000000000000FFFFFF00FFFFFF000000
901- 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
902- FF00000000000000000000000000000000000000000000000000000000000000
903- 0000000000000000000000000000000000000000000000000000000000000000
904- 0000000000000000000000000000000000000000000000000000000000000000
905- 000000000000FFFFFF00FFFFFF00000000000000000000000000FFFFFF00FFFF
906- FF00000000000000000000000000000000008484840084848400848484008484
907- 84008484840084848400848484008484840000000000FFFFFF00FFFFFF00FFFF
908- FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF
909- FF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
910- FF00FFFFFF000000000000000000000000000000000000000000000000000000
911- 0000000000000000000000000000000000000000000000000000000000000000
912- 0000000000000000000000000000000000000000000000000000000000000000
913- 000000000000FFFFFF00FFFFFF00000000000000000000000000FFFFFF00FFFF
914- FF0000000000000000000000000000000000C6C6C600FFFFFF00FFFFFF00FFFF
915- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
916- 0000FFFFFF00FFFFFF00000000000000000000000000FFFFFF00FFFFFF00FFFF
917- FF00FFFFFF000000000000000000000000000000000000000000000000000000
918- 0000000000000000000000000000000000000000000000000000000000000000
919- 0000000000000000000000000000000000000000000000000000000000000000
920- 0000000000000000000000000000000000000000000000000000000000000000
921- 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF
922- FF0000000000000000000000000000000000C6C6C600FFFFFF00FFFFFF00FFFF
923- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
924- FF000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
925- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000
926- 0000000000000000000000000000000000000000000000000000000000000000
927- 0000000000000000000000000000000000000000000000000000000000000000
928- 0000000000000000000000000000000000000000000000000000000000000000
929- 0000000000000000000000000000000000000000000000000000000000000000
930- 000000000000000000000000000000000000C6C6C600FFFFFF00FFFFFF000000
931- 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
932- FF000000000084848400000000000000000000000000FFFFFF00FFFFFF00FFFF
933- FF00000000000000000000000000000000000000000000000000000000000000
934- 0000000000000000000000000000000000000000000000000000000000000000
935- 0000000000000000000000000000000000000000000000000000000000000000
936- 0000000000000000000000000000000000000000000000000000000000000000
937- 0000000000000000000000000000000000000000000000000000000000000000
938- 000000000000000000000000000000000000C6C6C600FFFFFF00FFFFFF00FFFF
939- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
940- FF00FFFFFF008484840000000000000000000000000000000000000000000000
941- 0000000000000000000000000000000000000000000000000000000000000000
942- 0000000000000000000000000000000000000000000000000000000000000000
943- 0000000000000000000000000000000000000000000000000000000000000000
944- 0000000000000000000000000000000000000000000000000000000000000000
945- 0000000000000000000000000000000000000000000000000000000000000000
946- 000000000000000000000000000000000000C6C6C600FFFFFF00FFFFFF000000
947- 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF
948- FF00FFFFFF008484840000000000000000000000000000000000000000000000
949- 0000000000000000000084848400848484008484840084848400848484008484
950- 8400848484008484840084848400848484000000000000000000000000000000
951- 0000000000000000000000000000000000000000000000000000000000000000
952- 0000000000000000000000000000000000000000000000000000000000000000
953- 0000000000000000000000000000000000000000000000000000000000000000
954- 000000000000000000000000000000000000C6C6C600FFFFFF00FFFFFF00FFFF
955- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
956- FF00FFFFFF008484840000000000000000000000000000000000000000000000
957- 00000000000000000000C6C6C600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
958- FF00FFFFFF00FFFFFF00FFFFFF00848484000000000000000000000000000000
959- 0000000000000000000000000000000000000000000000000000000000000000
960- 0000000000000000000000000000000000000000000000000000000000000000
961- 0000000000000000000000000000000000000000000000000000000000000000
962- 000000000000000000000000000000000000C6C6C600FFFFFF00FFFFFF000000
963- 0000000000000000000000000000000000000000000000000000000000000000
964- 0000FFFFFF008484840000000000000000000000000000000000000000000000
965- 00000000000000000000C6C6C600FFFFFF00FFFFFF0000000000000000000000
966- 0000FFFFFF00FFFFFF00FFFFFF00848484000000000000000000000000000000
967- 0000000000000000000000000000000000000000000000000000000000000000
968- 0000000000000000000000000000000000000000000000000000000000000000
969- 0000000000000000000000000000000000000000000000000000000000000000
970- 000000000000000000000000000000000000C6C6C600FFFFFF00FFFFFF00FFFF
971- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
972- FF00FFFFFF008484840000000000000000000000000000000000000000000000
973- 00000000000000000000C6C6C600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
974- FF00FFFFFF00FFFFFF00FFFFFF00848484000000000000000000000000000000
975- 0000000000000000000000000000000000000000000000000000000000000000
976- 0000000000000000000000000000000000000000000000000000000000000000
977- 0000000000000000000000000000000000000000000000000000000000000000
978- 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6
979- C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6
980- C600C6C6C600C6C6C60000000000000000000000000000000000000000000000
981- 000000000000000000000000000000000000FFFFFF0000000000000000000000
982- 000000000000FFFFFF00FFFFFF00848484000000000000000000000000000000
983- 0000000000000000000000000000000000000000000000000000000000000000
984- 0000000000000000000000000000000000000000000000000000000000000000
985- 0000000000000000000000000000000000000000000000000000000000000000
986- 0000000000000000000000000000000000000000000000000000000000000000
987- 0000000000000000000000000000000000000000000000000000000000000000
988- 0000000000000000000000000000000000000000000000000000000000000000
989- 00000000000000000000C6C6C600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
990- FF00FFFFFF00FFFFFF00FFFFFF00848484000000000000000000000000000000
991- 0000000000000000000000000000000000000000000000000000000000000000
992- 0000000000000000000000000000000000000000000000000000000000000000
993- 0000000000000000000000000000000000000000000000000000000000000000
994- 0000000000000000000000000000000000000000000000000000000000000000
995- 0000000000000000000000000000000000000000000000000000000000000000
996- 0000000000000000000000000000000000000000000000000000000000000000
997- 00000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6
998- C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000
999- 0000000000000000000000000000000000000000000000000000000000000000
1000- 0000000000000000000000000000000000000000000000000000000000000000
743+ 0000000000000000000000000000000000000000000000000000000000001863
744+ 1863186318631863186318631863186318630000000000000000000000000000
1001745 0000000000000000000000000000000000000000000000000000000000000000
1002746 000000000000000000000000000000000000424D3E000000000000003E000000
1003747 2800000040000000400000000100010000000000000200000000000000000000
@@ -1025,74 +769,7 @@ object EditorForm: TEditorForm
1025769 Top = 124
1026770 Bitmap = {
1027771 494C01010C000E00040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
1028- 0000000000003600000028000000400000004000000001002000000000000040
1029- 0000000000000000000000000000000000000000000000000000000000000000
1030- 0000000000000000000000000000000000000000000000000000000000000000
1031- 0000000000000000000000000000000000000000000000000000000000000000
1032- 0000000000000000000000000000000000000000000000000000000000000000
1033- 0000000000000000000000000000000000000000000000000000000000000000
1034- 0000000000000000000000000000000000000000000000000000000000000000
1035- 0000000000000000000000000000000000000000000000000000000000000000
1036- 0000000000000000000000000000000000000000000000000000000000000000
1037- 0000000000000000000000000000000000000000000000000000000000000000
1038- 0000000000000000000000000000000000000000000000000000000000000000
1039- 0000000000000000000000000000000000000000000000000000000000000000
1040- 0000000000000000000000000000000000000000000000000000000000000000
1041- 0000000000000000000000000000000000000000000000000000000000000000
1042- 0000000000000000000000000000000000000000000000000000000000000000
1043- 0000000000000000000000000000000000000000000000000000000000000000
1044- 0000000000000000000000000000000000000000000000000000000000000000
1045- 0000000000000000000000000000000000000000000000000000000000000000
1046- 0000000000000000000000000000000000000000000000000000000000000000
1047- 0000000000000000000000000000000000000000000000000000000000000000
1048- 0000000000000000000000000000000000000000000000000000000000000000
1049- 0000000000000000000000000000000000000000000000000000000000000000
1050- 0000000000000000000000000000000000000000000000000000000000000000
1051- 0000000000000000000000000000000000000000000000000000000000000000
1052- 0000000000000000000000000000000000000000000000000000000000000000
1053- 0000000000000000000000000000000000000000000000000000000000000000
1054- 0000000000000000000000000000000000000000000000000000000000000000
1055- 0000000000000000000000000000000000000000000000000000000000000000
1056- 0000000000000000000000000000000000000000000000000000000000000000
1057- 0000000000000000000000000000000000000000000000000000000000000000
1058- 0000000000000000000000000000000000000000000000000000000000000000
1059- 0000000000000000000000000000000000000000000000000000000000000000
1060- 0000000000000000000000000000000000000000000000000000000000000000
1061- 0000000000000000000000000000000000000000000000000000000000000000
1062- 0000000000000000000000000000000000000000000000000000000000000000
1063- 0000000000000000000000000000000000000000000000000000000000000000
1064- 0000000000000000000000000000000000000000000000000000000000000000
1065- 0000000000000000000000000000000000000000000000000000000000000000
1066- 0000000000000000000000000000000000000000000000000000000000000000
1067- 0000000000000000000000000000000000000000000000000000000000000000
1068- 0000000000000000000000000000000000000000000000000000000000000000
1069- 0000000000000000000000000000000000000000000000000000000000000000
1070- 0000000000000000000000000000000000000000000000000000000000000000
1071- 0000000000000000000000000000000000000000000000000000000000000000
1072- 0000000000000000000000000000000000000000000000000000000000000000
1073- 0000000000000000000000000000000000000000000000000000000000000000
1074- 0000000000000000000000000000000000000000000000000000000000000000
1075- 0000000000000000000000000000000000000000000000000000000000000000
1076- 0000000000000000000000000000000000000000000000000000000000000000
1077- 0000000000000000000000000000000000000000000000000000000000000000
1078- 0000000000000000000000000000000000000000000000000000000000000000
1079- 0000000000000000000000000000000000000000000000000000000000000000
1080- 0000000000000000000000000000000000000000000000000000000000000000
1081- 0000000000000000000000000000000000000000000000000000000000000000
1082- 0000000000000000000000000000000000000000000000000000000000000000
1083- 0000000000000000000000000000000000000000000000000000000000000000
1084- 0000000000000000000000000000000000000000000000000000000000000000
1085- 0000000000000000000000000000000000000000000000000000000000000000
1086- 0000000000000000000000000000000000000000000000000000000000000000
1087- 0000000000000000000000000000000000000000000000000000000000000000
1088- 0000000000000000000000000000000000000000000000000000000000000000
1089- 0000000000000000000000000000000000000000000000000000000000000000
1090- 0000000000000000000000000000000000000000000000000000000000000000
1091- 0000000000000000000000000000000000000000000000000000000000000000
1092- 0000000000000000000000000000000000000000000000000000000000000000
1093- 0000000000000000000000000000000000000000000000000000000000000000
1094- 0000000000000000000000000000000000000000000000000000000000000000
1095- 0000000000000000000000000000000000000000000000000000000000000000
772+ 0000000000003600000028000000400000004000000001001000000000000020
1096773 0000000000000000000000000000000000000000000000000000000000000000
1097774 0000000000000000000000000000000000000000000000000000000000000000
1098775 0000000000000000000000000000000000000000000000000000000000000000
@@ -1161,382 +838,193 @@ object EditorForm: TEditorForm
1161838 0000000000000000000000000000000000000000000000000000000000000000
1162839 0000000000000000000000000000000000000000000000000000000000000000
1163840 0000000000000000000000000000000000000000000000000000000000000000
841+ 0000000000000000000000000000000000000000000000000000000000400040
842+ 0040004000400040000000000000000000000000000000000000000000000821
843+ 0000000000000000000000000000000000000000000000000000000000410041
844+ 0041004100410041000000000000000000000000000000000000000000000000
845+ 0000000000000000000000000000000000000000000000000040004000400040
846+ 0040004000400040004000400000000000000000000000000000524A0821E71C
847+ 0000E71C00000000000000000000000000000000000000000000004108720872
848+ 0872087208720872004100000000000000000000000000000000000000000000
849+ 0000000000000000000000000000000000000000000000400040004000400040
850+ 004000400040004000400040004000000000000000000000E71C3A6B8C314929
851+ 0821082100000821000000000000000000000000000000000041087200000000
852+ 0000000000000000000000410000000000000000000000000000000000000000
853+ 0000000000000000000000000000000000000000000000400040004000400040
854+ 00400040004000400040004000400000000000000000E71C94527B6F3767714E
855+ 8B2D49290821E71C0000E71C0000000000000000000000410872087200000000
856+ FF7FFF7FFF7F0872000000000041000000000000000000000000000000000000
857+ 0000000000000000000000000000000000000000004000400040004000400040
858+ 004000400040004000400040004000400000630C524AEF3D186318635A6B3967
859+ F55E30466A294829E71C08210000082100000000004108720872087200000000
860+ FF7F087208720872000000000872004100000000000000000000000000000000
861+ 00000000000000000000000000000000000000000040004000400040FF7FFF7F
862+ 00400040FF7FFF7F0040004000400040000008215A6B5A6BB5565A6B5A6B3967
863+ 39671863D55E30466A294829E71C082100000000004108720872087200000000
864+ FF7F087208720872000000000872004100000000000000000000000000000000
865+ 000000000000000000000000000000000000000000400040004000400040FF7F
866+ FF7FFF7FFF7F00400040004000400040000008219D777B6F7B6F5A6B5A6B3967
867+ 3967F862F75EB65AB4562F464925282500000000004108720872087200000000
868+ 0000000000000000000008720872004100000000000000000000000000000000
869+ 0000000000000000000000000000000000000000004000400040004000400040
870+ FF7FFF7F004000400040004000400040000000000821B3565A6B5A6B39671967
871+ 1863F75EF75ED65AB556955692520E4200000000004108720872087200000000
872+ FF7FFF7FFF7F0000087208720872004100000000000000000000000000000000
873+ 000000000000000000000000000000000000000000400040004000400040FF7F
874+ FF7FFF7FFF7F0040004000400040004000000000000000000821B35639671967
875+ F862D75ED65AB55695569452734E841000000000004108720872087200000000
876+ FF7F087208720000000008720872004100000000000000000000000000000000
877+ 00000000000000000000000000000000000000000040004000400040FF7FFF7F
878+ 00400040FF7FFF7F004000400040004000000000000000000000000008219352
879+ D75EB65AB556B556945274528410000000000000004108720872087200000000
880+ FF7F087208720000000008720872004100000000000000000000000000000000
881+ 0000000000000000000000000000000000000000000000400040004000400040
882+ 0040004000400040004000400040000000000000000000000000000000000000
883+ 08219252B55694529452A5140000000000000000000000410872087200000000
884+ FF7FFF7FFF7F0000000008720041000000000000000000000000000000000000
885+ 0000000000000000000000000000000000000000000000400040004000400040
886+ 0040004000400040004000400040000000000000000000000000000000000000
887+ 000000000821724EA51400000000000000000000000000000041087200000000
888+ 0000000000000000087200410000000000000000000000000000000000000000
889+ 0000000000000000000000000000000000000000000000000040004000400040
890+ 0040004000400040004000400000000000000000000000000000000000000000
891+ 0000000000000000000000000000000000000000000000000000004108720872
892+ 0872087208720872004100000000000000000000000000000000000000000000
893+ 0000000000000000000000000000000000000000000000000000000000400040
894+ 0040004000400040000000000000000000000000000000000000000000000000
895+ 0000000000000000000000000000000000000000000000000000000000410041
896+ 0041004100410041000000000000000000000000000000000000000000000000
1164897 0000000000000000000000000000000000000000000000000000000000000000
1165898 0000000000000000000000000000000000000000000000000000000000000000
1166- 0000000000000000840000008400000084000000840000008400000084000000
1167899 0000000000000000000000000000000000000000000000000000000000000000
1168- 0000000000000000000042424200000000000000000000000000000000000000
1169900 0000000000000000000000000000000000000000000000000000000000000000
1170- 0000000000000040800000408000004080000040800000408000004080000000
1171901 0000000000000000000000000000000000000000000000000000000000000000
1172902 0000000000000000000000000000000000000000000000000000000000000000
1173903 0000000000000000000000000000000000000000000000000000000000000000
1174- 8400000084000000840000008400000084000000840000008400000084000000
1175- 8400000084000000000000000000000000000000000000000000000000000000
1176- 0000949494004242420039393900000000003939390000000000000000000000
1177904 0000000000000000000000000000000000000000000000000000000000000000
1178- 0000004080004080E0004080E0004080E0004080E0004080E0004080E0000040
1179- 8000000000000000000000000000000000000000000000000000000000000000
1180905 0000000000000000000000000000000000000000000000000000000000000000
1181- 0000000000000000000000000000000000000000000000000000000084000000
1182- 8400000084000000840000008400000084000000840000008400000084000000
1183- 8400000084000000840000000000000000000000000000000000000000003939
1184- 3900D6CED600636363004A525200424242004242420000000000424242000000
1185- 0000000000000000000000000000000000000000000000000000000000000040
1186- 80004080E0000000000000000000000000000000000000000000000000000000
1187- 0000004080000000000000000000000000000000000000000000000000000000
1188906 0000000000000000000000000000000000000000000000000000000000000000
1189- 0000000000000000000000000000000000000000000000000000000084000000
1190- 8400000084000000840000008400000084000000840000008400000084000000
1191- 840000008400000084000000000000000000000000000000000039393900A5A5
1192- A500DEDEDE00BDCECE008C9C9C005A635A004A52520042424200393939000000
1193- 0000393939000000000000000000000000000000000000000000004080004080
1194- E0004080E0000000000000000000FFFFFF00FFFFFF00FFFFFF004080E0000000
1195- 0000000000000040800000000000000000000000000000000000000000000000
907+ 1000100010001000100010001000100010000000000000000000000000000000
1196908 0000000000000000000000000000000000000000000000000000000000000000
1197- 0000000000000000000000000000000000000000000000008400000084000000
1198- 8400000084000000840000008400000084000000840000008400000084000000
1199- 84000000840000008400000084000000000018181800949494007B7B7B00C6C6
1200- C600C6C6C600D6D6D600CECECE00ADBDBD00848C8C00525A5200425252003939
1201- 39004242420000000000424242000000000000000000004080004080E0004080
1202- E0004080E0000000000000000000FFFFFF004080E0004080E0004080E0000000
1203- 0000000000004080E00000408000000000000000000000000000000000000000
1204909 0000000000000000000000000000000000000000000000000000000000000000
1205- 0000000000000000000000000000000000000000000000008400000084000000
1206- 840000008400FFFFFF00FFFFFF000000840000008400FFFFFF00FFFFFF000000
1207- 84000000840000008400000084000000000042424200D6D6D600D6D6D600ADAD
1208- AD00D6D6D600D6D6D600CECECE00CECECE00C6C6C600ADB5BD00848C8C00525A
1209- 52004252520039393900424242000000000000000000004080004080E0004080
1210- E0004080E0000000000000000000FFFFFF004080E0004080E0004080E0000000
1211- 0000000000004080E00000408000000000000000000000000000000000000000
910+ 1000100010001000100010001000100010000000000000000000000000000000
911+ 1000FF7FFF7FFF7FFF7FFF7FFF7FFF7F10000000000000000000000000000000
1212912 0000000000000000000000000000000000000000000000000000000000000000
1213- 0000000000000000000000000000000000000000000000008400000084000000
1214- 84000000840000008400FFFFFF00FFFFFF00FFFFFF00FFFFFF00000084000000
1215- 84000000840000008400000084000000000042424200EFE7EF00DEDEDE00DEDE
1216- DE00D6D6D600D6D6D600CECECE00CECECE00C6BDC600BDBDBD00B5ADB500A5AD
1217- AD007B8C8C004A524A00424A4A000000000000000000004080004080E0004080
1218- E0004080E0000000000000000000000000000000000000000000000000000000
1219- 00004080E0004080E00000408000000000000000000000000000000000000000
1220- 0000000000000000000000000000000000000000000000000000000000000000
1221- 0000000000000000000000000000000000000000000000008400000084000000
1222- 8400000084000000840000008400FFFFFF00FFFFFF0000008400000084000000
1223- 84000000840000008400000084000000000000000000424242009CADAD00D6D6
1224- D600D6D6D600CECECE00CEC6CE00C6C6C600BDBDBD00BDBDBD00B5B5B500ADAD
1225- AD00ADA5AD0094A5A500738484000000000000000000004080004080E0004080
1226- E0004080E0000000000000000000FFFFFF00FFFFFF00FFFFFF00000000004080
1227- E0004080E0004080E00000408000000000000000000000000000000000000000
1228- 0000000000000000000000000000000000000000000000000000000000000000
1229- 0000000000000000000000000000000000000000000000008400000084000000
1230- 84000000840000008400FFFFFF00FFFFFF00FFFFFF00FFFFFF00000084000000
1231- 8400000084000000840000008400000000000000000000000000000000004242
1232- 42009CADAD00CECECE00CEC6CE00C6BDC600BDB5BD00B5B5B500ADADAD00ADA5
1233- AD00A5A5A5009C9C9C00212121000000000000000000004080004080E0004080
1234- E0004080E0000000000000000000FFFFFF004080E0004080E000000000000000
1235- 00004080E0004080E00000408000000000000000000000000000000000000000
1236- 0000000000000000000000000000000000000000000000000000000000000000
1237- 0000000000000000000000000000000000000000000000008400000084000000
1238- 840000008400FFFFFF00FFFFFF000000840000008400FFFFFF00FFFFFF000000
1239- 8400000084000000840000008400000000000000000000000000000000000000
1240- 000000000000424242009CA5A500BDB5BD00B5ADB500ADADAD00ADADAD00A5A5
1241- A500A59CA50021212100000000000000000000000000004080004080E0004080
1242- E0004080E0000000000000000000FFFFFF004080E0004080E000000000000000
1243- 00004080E0004080E00000408000000000000000000000000000000000000000
1244- 0000000000000000000000000000000000000000000000000000000000000000
1245- 0000000000000000000000000000000000000000000000000000000084000000
1246- 8400000084000000840000008400000084000000840000008400000084000000
1247- 8400000084000000840000000000000000000000000000000000000000000000
1248- 00000000000000000000000000004242420094A5A500ADADAD00A5A5A500A5A5
1249- A500292929000000000000000000000000000000000000000000004080004080
1250- E0004080E0000000000000000000FFFFFF00FFFFFF00FFFFFF00000000000000
1251- 00004080E0000040800000000000000000000000000000000000000000000000
1252- 0000000000000000000000000000000000000000000000000000000000000000
1253- 0000000000000000000000000000000000000000000000000000000084000000
1254- 8400000084000000840000008400000084000000840000008400000084000000
1255- 8400000084000000840000000000000000000000000000000000000000000000
1256- 0000000000000000000000000000000000000000000042424200949C9C002929
1257- 2900000000000000000000000000000000000000000000000000000000000040
1258- 80004080E0000000000000000000000000000000000000000000000000004080
1259- E000004080000000000000000000000000000000000000000000000000000000
1260- 0000000000000000000000000000000000000000000000000000000000000000
1261- 0000000000000000000000000000000000000000000000000000000000000000
1262- 8400000084000000840000008400000084000000840000008400000084000000
1263- 8400000084000000000000000000000000000000000000000000000000000000
1264- 0000000000000000000000000000000000000000000000000000000000000000
1265- 0000000000000000000000000000000000000000000000000000000000000000
1266- 0000004080004080E0004080E0004080E0004080E0004080E0004080E0000040
1267- 8000000000000000000000000000000000000000000000000000000000000000
1268- 0000000000000000000000000000000000000000000000000000000000000000
1269- 0000000000000000000000000000000000000000000000000000000000000000
1270- 0000000000000000840000008400000084000000840000008400000084000000
1271- 0000000000000000000000000000000000000000000000000000000000000000
1272- 0000000000000000000000000000000000000000000000000000000000000000
1273- 0000000000000000000000000000000000000000000000000000000000000000
1274- 0000000000000040800000408000004080000040800000408000004080000000
1275- 0000000000000000000000000000000000000000000000000000000000000000
1276- 0000000000000000000000000000000000000000000000000000000000000000
1277- 0000000000000000000000000000000000000000000000000000000000000000
1278- 0000000000000000000000000000000000000000000000000000000000000000
1279- 0000000000000000000000000000000000000000000000000000000000000000
1280- 0000000000000000000000000000000000000000000000000000000000000000
1281- 0000000000000000000000000000000000000000000000000000000000000000
1282- 0000000000000000000000000000000000000000000000000000000000000000
1283- 0000000000000000000000000000000000000000000000000000000000000000
1284- 0000000000000000000000000000000000000000000000000000000000000000
1285- 0000000000000000000000000000000000000000000000000000000000000000
1286- 0000000000000000000000000000000000000000000000000000000000000000
1287- 0000000000000000000000000000000000000000000000000000000000000000
1288- 0000000000000000000000000000000000000000000000000000000000000000
1289- 0000000000000000000000000000000000000000000000000000000000000000
1290- 0000000000000000000000000000000000000000000000000000000000000000
1291- 0000000000000000000000000000000000000000000000000000000000000000
1292- 0000000000000000000000000000000000000000000000000000000000000000
1293- 0000000000000000000000000000000000000000000000000000000000000000
1294- 0000000000000000000000000000000000000000000000000000000000000000
1295- 0000000000000000000000000000000000000000000000000000000000000000
1296- 0000000000000000000000000000840000008400000084000000840000008400
1297- 0000840000008400000084000000840000000000000000000000000000000000
1298- 0000000000000000000000000000000000000000000000000000000000000000
1299- 0000000000000000000000000000000000000000000000000000000000000000
1300- 0000000000000000000000000000000000000000000000000000000000000000
1301- 0000000000000000000000000000000000000000000000000000000000000000
1302- 0000000000000000000000000000840000008400000084000000840000008400
1303- 0000840000008400000084000000840000000000000000000000000000000000
1304- 000000000000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFF
1305- FF00FFFFFF00FFFFFF00FFFFFF00840000000000000000000000000000000000
1306- 0000000000000000000000000000000000000000000000000000000000000000
1307- 0000000000000000000000000000000000000000000000000000000000000000
1308- 0000000000000000000000000000000000000000000000000000000000000000
1309- 0000000000000000000000000000000000000000000000000000000000000000
1310- 000000000000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFF
1311- FF00FFFFFF00FFFFFF00FFFFFF00840000000000000000000000008484008484
1312- 840000848400848484000084840084000000FFFFFF0084000000840000008400
1313- 00008400000084000000FFFFFF00840000000000000000000000000000000000
1314- 0000000000008484840084848400848484008484840084848400848484008484
1315- 8400848484008484840084848400000000000000000000000000000000000000
1316- 0000000000008484840084848400848484008484840084848400848484008484
1317- 8400848484008484840084848400000000000000000000000000000000000000
1318- 000000000000000000000000000084000000FFFFFF0084000000840000008400
1319- 00008400000084000000FFFFFF00840000000000000000000000848484000084
1320- 840084848400008484008484840084000000FFFFFF00FFFFFF00FFFFFF00FFFF
1321- FF00FFFFFF00FFFFFF00FFFFFF00840000000000000000000000000000000000
1322- 0000000000008484840084848400848484008484840084848400848484008484
1323- 8400848484008484840084848400000000000000000000000000000000000000
1324- 0000000000008484840084848400848484008484840084848400848484008484
1325- 8400848484008484840084848400000000000000000000000000000000000000
1326- 000000000000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFF
1327- FF00FFFFFF00FFFFFF00FFFFFF00840000000000000000000000008484008484
1328- 840000848400848484000084840084000000FFFFFF0084000000840000008400
1329- 0000FFFFFF008400000084000000840000008484840084848400848484008484
1330- 8400848484008484840084848400848484008484840084848400848484008484
1331- 8400848484008484840084848400000000008484840084848400848484008484
1332- 8400848484008484840084848400848484008484840084848400848484008484
1333- 8400848484008484840084848400000000000000000000000000FFFFFF00FFFF
1334- FF00FFFFFF00FFFFFF00FFFFFF0084000000FFFFFF0084000000840000008400
1335- 00008400000084000000FFFFFF00840000000000000000000000848484000084
1336- 840084848400008484008484840084000000FFFFFF00FFFFFF00FFFFFF00FFFF
1337- FF00FFFFFF0084000000FFFFFF0084000000C6C6C60000000000000000000000
1338- 000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600848484008484
1339- 840084848400848484008484840000000000C6C6C600FFFFFF00FFFFFF00FFFF
1340- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00848484008484
1341- 8400848484008484840084848400000000000000000000000000FFFFFF000000
1342- 000000000000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFF
1343- FF00FFFFFF00FFFFFF00FFFFFF00840000000000000000000000008484008484
1344- 840000848400848484000084840084000000FFFFFF00FFFFFF00FFFFFF00FFFF
1345- FF00FFFFFF00840000008400000000000000C6C6C60000000000000000000000
1346- 000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600848484008484
1347- 840084848400848484008484840000000000C6C6C600FFFFFF00FFFFFF00FFFF
1348- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00848484008484
1349- 8400848484008484840084848400000000000000000000000000FFFFFF00FFFF
1350- FF00FFFFFF00FFFFFF00FFFFFF0084000000FFFFFF008400000084000000FFFF
1351- FF00840000008400000084000000840000000000000000000000848484000084
1352- 8400848484000084840084848400840000008400000084000000840000008400
1353- 000084000000840000000000000000000000C6C6C60000000000000000000000
1354- 000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600848484008484
1355- 840084848400848484008484840000000000C6C6C600FFFFFF00FFFFFF00FFFF
1356- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00848484008484
1357- 8400848484008484840084848400000000000000000000000000FFFFFF000000
1358- 000000000000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFF
1359- FF0084000000FFFFFF0084000000000000000000000000000000008484008484
1360- 8400008484008484840000848400848484000084840084848400008484008484
1361- 840000848400848484000000000000000000C6C6C60000000000000000000000
1362- 0000FF000000FF000000FF000000FF000000FF000000FF000000848484008400
1363- 000084000000840000008400000084000000C6C6C600FFFFFF00FFFFFF00FFFF
1364- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00848484008400
1365- 0000840000008400000084000000840000000000000000000000FFFFFF00FFFF
1366- FF00FFFFFF00FFFFFF00FFFFFF0084000000FFFFFF00FFFFFF00FFFFFF00FFFF
1367- FF00840000008400000000000000000000000000000000000000848484000084
1368- 8400000000000000000000000000000000000000000000000000000000000000
1369- 000084848400008484000000000000000000C6C6C60000000000000000000000
1370- 0000FF000000FF000000FF000000FF000000FF000000FF000000848484008400
1371- 000084000000840000008400000084000000C6C6C600FFFFFF00FFFFFF00FFFF
1372- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00848484008400
1373- 0000840000008400000084000000840000000000000000000000FFFFFF000000
1374- 000000000000FFFFFF0000000000840000008400000084000000840000008400
1375- 0000840000000000000000000000000000000000000000000000008484008484
1376- 840000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000
1377- 000000848400848484000000000000000000C6C6C60000000000000000000000
1378- 0000000000000000000000000000000000000000000000000000848484000000
1379- 000000000000000000000000000000000000C6C6C600FFFFFF00FFFFFF00FFFF
1380- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00848484000000
1381- 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF
1382- FF00FFFFFF00FFFFFF0000000000FFFFFF000000000000000000000000000000
1383- 0000000000000000000000000000000000000000000000000000848484000084
1384- 8400848484000000000000FFFF00000000000000000000FFFF00000000000084
1385- 8400848484000084840000000000000000008400000084000000840000008400
1386- 0000840000008400000084000000840000008400000084000000840000000000
1387- 000000000000000000000000000000000000FF000000FF000000FF000000FF00
1388- 0000FF000000FF000000FF000000FF000000FF000000FF000000FF0000000000
1389- 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF
1390- FF00FFFFFF00FFFFFF0000000000000000000000000000000000000000000000
1391- 0000000000000000000000000000000000000000000000000000000000000000
1392- 000000000000000000000000000000FFFF0000FFFF0000000000000000000000
1393- 0000000000000000000000000000000000008400000084000000840000008400
1394- 0000840000008400000084000000840000008400000084000000840000000000
1395- 000000000000000000000000000000000000FF000000FF000000FF000000FF00
1396- 0000FF000000FF000000FF000000FF000000FF000000FF000000FF0000000000
1397- 0000000000000000000000000000000000000000000000000000000000000000
1398- 0000000000000000000000000000000000000000000000000000000000000000
1399- 0000000000000000000000000000000000000000000000000000000000000000
1400- 0000000000000000000000000000000000000000000000000000000000000000
1401- 0000000000000000000000000000000000000000000000000000000000000000
1402- 0000000000000000000000000000000000000000000000000000000000000000
1403- 0000000000000000000000000000000000000000000000000000000000000000
1404- 0000000000000000000000000000000000000000000000000000000000000000
1405- 0000000000000000000000000000000000000000000000000000000000000000
1406- 0000000000000000000000000000000000000000000000000000000000000000
1407- 0000000000000000000000000000000000000000000000000000000000000000
1408- 0000000000000000000000000000000000000000000000000000000000000000
1409- 0000000000000000000000000000000000000000000000000000000000000000
1410- 0000000000000000000000000000000000000000000000000000000000000000
1411- 0000000000000000000000000000000000000000000000000000000000000000
1412- 0000000000000000000000000000000000000000000000000000000000000000
1413- 0000000000000000000000000000000000000000000000000000000000000000
1414- 0000000000000000000000000000000000000000000000000000000000000000
1415- 0000000000000000000000000000000000000000000000000000000000000000
1416- 0000000000000000000000000000000000000000000000000000000000000000
1417- 0000000000000000000000000000000000000000000000000000000000000000
1418- 0000000000000000000000000000000000000000000000000000000000000000
1419- 0000000000000000000000000000000000000000000000000000000000000000
1420- 0000000000000000000000000000000000000000000000000000000000000000
1421- 0000000000000000000000000000000000000000000000000000000000000000
1422- 0000000000000000000000000000000000000000000000000000000000000000
1423- 0000000000000000000000000000000000000000000000000000008484000084
1424- 8400008484000084840000848400008484000084840000848400000000000000
1425- 0000000000000000000000000000000000000000000000000000000000000000
1426- 0000000000000000000000000000000000000000000000000000000000000000
1427- 0000000000000000000000000000000000000000000000000000000000000000
1428- 0000000000008400000084000000000000000000000000000000000000000000
1429- 0000000000000000000000000000000000000000000000000000000000000000
1430- 0000000000000000000000000000000000000000000000000000000000000000
1431- 0000000000000000000000000000000000000000000000FFFF00000000000084
1432- 8400008484000084840000848400008484000084840000848400008484000000
1433- 0000000000000000000000000000000000000000000000000000000000000000
1434- 0000000000000000000000000000000000000000000000000000000000000000
1435- 0000000000000000000000000000000000000000000000000000000000000000
1436- 000084000000FFFFFF00FFFFFF00840000000000000000000000840000008400
1437- 0000000000000000000000000000000000000000000000000000000000000000
1438- 0000000000000000000000000000000000000000000000000000000000000000
1439- 000000FF000000FF000000000000000000000000000000FFFF0000FFFF000000
1440- 0000008484000084840000848400008484000084840000848400008484000084
1441- 8400000000000000000000000000000000000000000000000000000000000000
1442- 0000000000000000000000000000000000000000000000000000000000000000
1443- 0000000000000000000000000000000000000000000000000000000000000000
1444- 000084000000FFFFFF00FFFFFF00840000000000000084000000FFFFFF00FFFF
1445- FF00840000000000000000000000000000008484840084848400848484008484
1446- 8400848484008484840084848400848484000000000000FF000000FF000000FF
1447- 000000FF000000FF000000FF0000000000000000000000FFFF0000FFFF0000FF
1448- FF00000000000084840000848400008484000084840000848400008484000084
1449- 8400008484000000000000000000000000000000000000000000000000000000
1450- 0000000000000000000000000000000000000000000000000000000000000000
1451- 0000000000000000000000000000000000000000000000000000000000000000
1452- 000084000000FFFFFF00FFFFFF00840000000000000084000000FFFFFF00FFFF
1453- FF0084000000000000000000000000000000C6C6C60000FFFF00FFFFFF0000FF
1454- FF00FFFFFF0000FFFF00FFFFFF0000FFFF000000000000000000000000000000
1455- 000000FF000000FF000000000000000000000000000000FFFF0000FFFF0000FF
1456- FF0000FFFF000000000000000000000000000000000000000000000000000000
1457- 0000000000000000000000000000000000000000000000000000000000000000
1458- 0000000000000000000000000000000000000000000000000000000000008484
1459- 8400840000000000000000000000000000000000000000000000000000000000
1460- 0000000000008400000084000000840000000000000084000000FFFFFF00FFFF
1461- FF0084000000000000000000000000000000C6C6C600FFFFFF0000FFFF00FFFF
1462- FF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFF
1463- FF00000000000000000000000000000000000000000000FFFF0000FFFF0000FF
1464- FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000000000000000000000
1465- 0000000000000000000000000000000000000000000000000000840000008400
1466- 0000840000008400000084000000000000000000000000000000000000000000
1467- 0000840000008484840000000000000000000000000000000000000000000000
1468- 0000000000000000000000000000840000000000000084000000840000008400
1469- 000000000000000000000000000000000000C6C6C60000FFFF00FFFFFF000000
1470- 000000000000000000000000000000FFFF00FFFFFF0000FFFF00FFFFFF0000FF
1471- FF00000000008484840000000000000000000000000000FFFF0000FFFF0000FF
1472- FF00000000000000000000000000000000000000000000000000000000000000
1473- 0000000000000000000000000000000000000000000000000000840000008400
1474- 0000840000008400000000000000000000000000000000000000000000000000
1475- 0000000000008400000000000000000000000000000000000000000000000000
1476- 0000000000000000000000000000840000000000000084000000000000000000
1477- 000000000000000000000000000000000000C6C6C600FFFFFF0000FFFF00FFFF
1478- FF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFF
1479- FF0000FFFF008484840000000000000000000000000000000000000000000000
1480- 0000000000000000000000000000000000000000000000000000000000000000
1481- 0000000000000000000000000000000000000000000000000000840000008400
1482- 0000840000000000000000000000000000000000000000000000000000000000
1483- 0000000000008400000000000000000000000000000000000000000000000000
1484- 0000000000000000000000000000000000000000000000000000000000000000
1485- 000000000000000000000000000000000000C6C6C60000FFFF00FFFFFF000000
1486- 0000000000000000000000000000000000000000000000000000FFFFFF0000FF
1487- FF00FFFFFF008484840000000000000000000000000000000000000000000000
1488- 0000000000000000000084848400848484008484840084848400848484008484
1489- 8400848484008484840084848400848484000000000000000000840000008400
1490- 0000000000008400000000000000000000000000000000000000000000000000
1491- 0000000000008400000000000000000000000000000000000000000000000000
1492- 0000000000000000000000000000000000000000000000000000000000000000
1493- 000000000000000000000000000000000000C6C6C600FFFFFF0000FFFF00FFFF
1494- FF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFF
1495- FF0000FFFF008484840000000000000000000000000000000000000000000000
1496- 00000000000000000000C6C6C60000FFFF00FFFFFF0000FFFF00FFFFFF0000FF
1497- FF00FFFFFF0000FFFF00FFFFFF00848484000000000000000000840000000000
1498- 0000000000000000000084000000840000000000000000000000000000000000
1499- 0000840000008484840000000000000000000000000000000000000000000000
1500- 0000000000000000000000000000000000000000000000000000000000000000
1501- 000000000000000000000000000000000000C6C6C60000FFFF00FFFFFF000000
1502- 0000000000000000000000000000000000000000000000000000000000000000
1503- 0000FFFFFF008484840000000000000000000000000000000000000000000000
1504- 00000000000000000000C6C6C600FFFFFF0000FFFF0000000000000000000000
1505- 000000FFFF00FFFFFF0000FFFF00848484000000000000000000000000000000
1506- 0000000000000000000000000000000000008400000084000000840000008400
1507- 0000848484000000000000000000000000000000000000000000000000000000
1508- 0000000000000000000000000000000000000000000000000000000000000000
1509- 000000000000000000000000000000000000C6C6C600FFFFFF0000FFFF00FFFF
1510- FF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFF
1511- FF0000FFFF008484840000000000000000000000000000000000000000000000
1512- 00000000000000000000C6C6C60000FFFF00FFFFFF0000FFFF00FFFFFF0000FF
1513- FF00FFFFFF0000FFFF00FFFFFF00848484000000000000000000000000000000
1514- 0000000000000000000000000000000000000000000000000000000000000000
1515- 0000000000000000000000000000000000000000000000000000000000000000
1516- 0000000000000000000000000000000000000000000000000000000000000000
1517- 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6
1518- C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6
1519- C600C6C6C600C6C6C60000000000000000000000000000000000000000000000
1520- 00000000000000000000000000000000000000FFFF0000000000000000000000
1521- 000000000000FFFFFF0000FFFF00848484000000000000000000000000000000
1522- 0000000000000000000000000000000000000000000000000000000000000000
1523- 0000000000000000000000000000000000000000000000000000000000000000
1524- 0000000000000000000000000000000000000000000000000000000000000000
1525- 0000000000000000000000000000000000000000000000000000000000000000
1526- 0000000000000000000000000000000000000000000000000000000000000000
1527- 0000000000000000000000000000000000000000000000000000000000000000
1528- 00000000000000000000C6C6C60000FFFF00FFFFFF0000FFFF00FFFFFF0000FF
1529- FF00FFFFFF0000FFFF00FFFFFF00848484000000000000000000000000000000
1530- 0000000000000000000000000000000000000000000000000000000000000000
1531- 0000000000000000000000000000000000000000000000000000000000000000
1532- 0000000000000000000000000000000000000000000000000000000000000000
1533- 0000000000000000000000000000000000000000000000000000000000000000
1534- 0000000000000000000000000000000000000000000000000000000000000000
1535- 0000000000000000000000000000000000000000000000000000000000000000
1536- 00000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6
1537- C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000
1538913 0000000000000000000000000000000000000000000000000000000000000000
914+ 1000FF7FFF7FFF7FFF7FFF7FFF7FFF7F10000000000000421042004210420042
915+ 1000FF7F10001000100010001000FF7F10000000000000000000000010421042
916+ 1042104210421042104210421042104200000000000000000000000010421042
917+ 1042104210421042104210421042104200000000000000000000000000000000
918+ 1000FF7F10001000100010001000FF7F10000000000010420042104200421042
919+ 1000FF7FFF7FFF7FFF7FFF7FFF7FFF7F10000000000000000000000010421042
920+ 1042104210421042104210421042104200000000000000000000000010421042
921+ 1042104210421042104210421042104200000000000000000000000000000000
922+ 1000FF7FFF7FFF7FFF7FFF7FFF7FFF7F10000000000000421042004210420042
923+ 1000FF7F100010001000FF7F1000100010001042104210421042104210421042
924+ 1042104210421042104210421042104200001042104210421042104210421042
925+ 10421042104210421042104210421042000000000000FF7FFF7FFF7FFF7FFF7F
926+ 1000FF7F10001000100010001000FF7F10000000000010420042104200421042
927+ 1000FF7FFF7FFF7FFF7FFF7F1000FF7F10001863000000000000104218631863
928+ 1863186318631042104210421042104200001863FF7FFF7FFF7FFF7FFF7FFF7F
929+ FF7FFF7FFF7F10421042104210421042000000000000FF7F0000000000000000
930+ 1000FF7FFF7FFF7FFF7FFF7FFF7FFF7F10000000000000421042004210420042
931+ 1000FF7FFF7FFF7FFF7FFF7F1000100000001863000000000000104218631863
932+ 1863186318631042104210421042104200001863FF7FFF7FFF7FFF7FFF7FFF7F
933+ FF7FFF7FFF7F10421042104210421042000000000000FF7FFF7FFF7FFF7FFF7F
934+ 1000FF7F10001000FF7F10001000100010000000000010420042104200421042
935+ 1000100010001000100010001000000000001863000000000000104218631863
936+ 1863186318631042104210421042104200001863FF7FFF7FFF7FFF7FFF7FFF7F
937+ FF7FFF7FFF7F10421042104210421042000000000000FF7F0000000000000000
938+ 1000FF7FFF7FFF7FFF7F1000FF7F100000000000000000421042004210420042
939+ 10420042104200421042004210420000000018630000000000001F001F001F00
940+ 1F001F001F001042100010001000100010001863FF7FFF7FFF7FFF7FFF7FFF7F
941+ FF7FFF7FFF7F10421000100010001000100000000000FF7FFF7FFF7FFF7FFF7F
942+ 1000FF7FFF7FFF7FFF7F10001000000000000000000010420042000000000000
943+ 00000000000000000000104200420000000018630000000000001F001F001F00
944+ 1F001F001F001042100010001000100010001863FF7FFF7FFF7FFF7FFF7FFF7F
945+ FF7FFF7FFF7F10421000100010001000100000000000FF7F00000000FF7F0000
946+ 1000100010001000100010000000000000000000000000421042000018631863
947+ 1863186318631863000000421042000000001863000000000000000000000000
948+ 0000000000001042000000000000000000001863FF7FFF7FFF7FFF7FFF7FFF7F
949+ FF7FFF7FFF7F10420000000000000000000000000000FF7FFF7FFF7FFF7F0000
950+ FF7F00000000000000000000000000000000000000001042004210420000E07F
951+ 00000000E07F0000004210420042000000001000100010001000100010001000
952+ 1000100010001000000000000000000000001F001F001F001F001F001F001F00
953+ 1F001F001F001F000000000000000000000000000000FF7FFF7FFF7FFF7F0000
954+ 0000000000000000000000000000000000000000000000000000000000000000
955+ E07FE07F00000000000000000000000000001000100010001000100010001000
956+ 1000100010001000000000000000000000001F001F001F001F001F001F001F00
957+ 1F001F001F001F00000000000000000000000000000000000000000000000000
958+ 0000000000000000000000000000000000000000000000000000000000000000
959+ 0000000000000000000000000000000000000000000000000000000000000000
960+ 0000000000000000000000000000000000000000000000000000000000000000
961+ 0000000000000000000000000000000000000000000000000000000000000000
962+ 0000000000000000000000000000000000000000000000000000000000000000
963+ 0000000000000000000000000000000000000000000000000000000000000000
964+ 0000000000000000000000000000000000000000000000000000000000000000
965+ 0000000000000000000000000000000000000000000000000000000000000000
966+ 0000000000000000000000000000000000000000000000000000000000000000
967+ 0000000000000000000000000000000000000000000000000000000000000000
968+ 0000000000000000000000000000000000000000000000000000000000000000
969+ 0000000000000000000000000000000000000000000000000000000000000000
970+ 0000000000000000000000000000000000000000000000420042004200420042
971+ 0042004200420000000000000000000000000000000000000000000000000000
972+ 0000000000000000000000000000000000000000000000000000000010001000
973+ 0000000000000000000000000000000000000000000000000000000000000000
974+ 0000000000000000000000000000000000000000E07F00000042004200420042
975+ 0042004200420042000000000000000000000000000000000000000000000000
976+ 00000000000000000000000000000000000000000000000000001000FF7FFF7F
977+ 1000000000001000100000000000000000000000000000000000000000000000
978+ 00000000000000000000E003E003000000000000E07FE07F0000004200420042
979+ 0042004200420042004200000000000000000000000000000000000000000000
980+ 00000000000000000000000000000000000000000000000000001000FF7FFF7F
981+ 100000001000FF7FFF7F10000000000000001042104210421042104210421042
982+ 10420000E003E003E003E003E003E00300000000E07FE07FE07F000000420042
983+ 0042004200420042004200420000000000000000000000000000000000000000
984+ 00000000000000000000000000000000000000000000000000001000FF7FFF7F
985+ 100000001000FF7FFF7F10000000000000001863E07FFF7FE07FFF7FE07FFF7F
986+ E07F0000000000000000E003E003000000000000E07FE07FE07FE07F00000000
1539987 0000000000000000000000000000000000000000000000000000000000000000
988+ 0000000000000000104210000000000000000000000000000000000010001000
989+ 100000001000FF7FFF7F10000000000000001863FF7FE07FFF7FE07FFF7FE07F
990+ FF7FE07FFF7FE07FFF7F00000000000000000000E07FE07FE07FE07FE07FE07F
991+ E07FE07F00000000000000000000000000000000000010001000100010001000
992+ 0000000000000000000010001042000000000000000000000000000000000000
993+ 1000000010001000100000000000000000001863E07FFF7F0000000000000000
994+ E07FFF7FE07FFF7FE07F00001042000000000000E07FE07FE07F000000000000
995+ 0000000000000000000000000000000000000000000010001000100010000000
996+ 0000000000000000000000001000000000000000000000000000000000000000
997+ 1000000010000000000000000000000000001863FF7FE07FFF7FE07FFF7FE07F
998+ FF7FE07FFF7FE07FFF7FE07F1042000000000000000000000000000000000000
999+ 0000000000000000000000000000000000000000000010001000100000000000
1000+ 0000000000000000000000001000000000000000000000000000000000000000
1001+ 0000000000000000000000000000000000001863E07FFF7F0000000000000000
1002+ 000000000000FF7FE07FFF7F1042000000000000000000000000000000001042
1003+ 1042104210421042104210421042104210420000000010001000000010000000
1004+ 0000000000000000000000001000000000000000000000000000000000000000
1005+ 0000000000000000000000000000000000001863FF7FE07FFF7FE07FFF7FE07F
1006+ FF7FE07FFF7FE07FFF7FE07F1042000000000000000000000000000000001863
1007+ E07FFF7FE07FFF7FE07FFF7FE07FFF7F10420000000010000000000000001000
1008+ 1000000000000000000010001042000000000000000000000000000000000000
1009+ 0000000000000000000000000000000000001863E07FFF7F0000000000000000
1010+ 00000000000000000000FF7F1042000000000000000000000000000000001863
1011+ FF7FE07F000000000000E07FFF7FE07F10420000000000000000000000000000
1012+ 0000100010001000100010420000000000000000000000000000000000000000
1013+ 0000000000000000000000000000000000001863FF7FE07FFF7FE07FFF7FE07F
1014+ FF7FE07FFF7FE07FFF7FE07F1042000000000000000000000000000000001863
1015+ E07FFF7FE07FFF7FE07FFF7FE07FFF7F10420000000000000000000000000000
1016+ 0000000000000000000000000000000000000000000000000000000000000000
1017+ 0000000000000000000000000000000000001863186318631863186318631863
1018+ 1863186318631863186318631863000000000000000000000000000000000000
1019+ 0000E07F0000000000000000FF7FE07F10420000000000000000000000000000
1020+ 0000000000000000000000000000000000000000000000000000000000000000
1021+ 0000000000000000000000000000000000000000000000000000000000000000
1022+ 0000000000000000000000000000000000000000000000000000000000001863
1023+ E07FFF7FE07FFF7FE07FFF7FE07FFF7F10420000000000000000000000000000
1024+ 0000000000000000000000000000000000000000000000000000000000000000
1025+ 0000000000000000000000000000000000000000000000000000000000000000
1026+ 0000000000000000000000000000000000000000000000000000000000001863
1027+ 1863186318631863186318631863186318630000000000000000000000000000
15401028 0000000000000000000000000000000000000000000000000000000000000000
15411029 000000000000000000000000000000000000424D3E000000000000003E000000
15421030 2800000040000000400000000100010000000000000200000000000000000000
@@ -1778,13 +1266,6 @@ object EditorForm: TEditorForm
17781266 Left = 200
17791267 Top = 124
17801268 end
1781- object Timer1: TTimer
1782- Enabled = False
1783- Interval = 500
1784- OnTimer = Timer1Timer
1785- Left = 233
1786- Top = 123
1787- end
17881269 object InputAssistPopupMenu: TPopupMenu
17891270 AutoHotkeys = maManual
17901271 AutoPopup = False
--- a/Editor.pas
+++ b/Editor.pas
@@ -12,12 +12,12 @@ uses
1212 SHDocVw_TLB,
1313 MSHTML_TLB,
1414 {$IFEND}
15- ActiveX, {HTTPApp,} YofUtils, Trip, IniFiles, StrUtils,
15+ ActiveX, {HTTPApp,} YofUtils, IniFiles, StrUtils,
1616 GikoSystem, GikoUtil, ImgList, Clipbrd, BoardGroup,
1717 IdAntiFreezeBase, IdAntiFreeze, IdBaseComponent, IdComponent,
1818 IdTCPConnection, IdTCPClient, IdHTTP, ActnList, StdActns, IdIntercept,
1919 IdLogBase, IdLogDebug, IdException, DateUtils, bmRegExp,
20- Gesture, AppEvnts;
20+ Gesture, AppEvnts, SambaTimer;
2121
2222 type
2323 // TSetLayeredWindowAttributes = function(wnd: HWND; crKey: DWORD; bAlpha: BYTE; dwFlag: DWORD): Boolean; stdcall;
@@ -89,7 +89,6 @@ type
8989 SelectAllAction: TAction;
9090 N2: TMenuItem;
9191 SelectAll1: TMenuItem;
92- Timer1: TTimer;
9392 QuotePasteAction: TAction;
9493 QuotePasteMenuItem: TMenuItem;
9594 C1: TMenuItem;
@@ -169,7 +168,6 @@ type
169168 AStream: TStream);
170169 procedure SelectAllActionExecute(Sender: TObject);
171170 procedure StatusBarResize(Sender: TObject);
172- procedure Timer1Timer(Sender: TObject);
173171 procedure FormActivate(Sender: TObject);
174172 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
175173 procedure QuotePasteActionExecute(Sender: TObject);
@@ -206,41 +204,20 @@ type
206204 FStatusCode: Integer;
207205 FDebugStrReceive: string;
208206 FDebugStrSend: string;
209- FSambaTime: TDateTime;
210- FHost: string;
211207 FNow: TDateTime;
212208 FGestures : TMouseGesture;
213209 FInputAssistKey: String; ///< “ü—̓AƒVƒXƒg‚̃L[
214210 FResistWords: TStringList; ///< “ü—̓AƒVƒXƒg‚ÌŽ«‘‚©‚ç‚ÌŒŸõŒ‹‰Ê
211+ FSambaTimer: TSambaTimer; ///< Samba‘΍ô‚̃^ƒCƒ}[
215212 procedure Preview;
216- function RepHtml(s: string): string;
217213 function Check: Boolean;
218214 procedure SetNameList(sName, sMail: string);
219-// procedure Send(SendType: TGikoSendType; SPID: string; PON: string; FirstWriting: Boolean);
220-// procedure Send(SPID: string; PON: string; FirstWriting: Boolean);
221- procedure Send(ACOOKIE: string; SPID: string; PON: string; FirstWriting: Boolean);
222-
215+ procedure Send(const ACOOKIE: string; const SPID: string; const PON: string; FirstWriting: Boolean);
223216 function GetActiveControlHandle: THandle;
224-// function GetSendData: string;
225-// procedure GetSendData(Source: TStringStream);
226217 procedure GetSendData(Source: TStringStream);
227218 procedure SaveSendFile;
228219 procedure SetContent(Content: string; ABrowser: TWebBrowser);
229220 function GetResultType(ResponseText: string): TGikoResultType;
230- //Samba‚ÌŽžŠÔ‚ð“ǂݍž‚Þ
231- procedure ReadSambaTime(const AHost: string);
232- //Samba‚ÉŽžŠÔ‚ð‘‚«ž‚Þ
233- procedure WriteSambaTime(const AHost: string; ATime: TDateTime);
234- //Samba‚̐ݒè’l‚ð“ǂݍž‚Þ
235- function ReadSettingTime(const AHost: string): Integer;
236- //Samba‚Ɉø‚Á‚©‚©‚é‚©ŒŸ¸‚·‚é
237- function CheckSambaTime(const AHost: string; ATime: TDateTime): Boolean;
238- //Samba‚̐ݒè’l‚ð‘‚«ž‚Þ
239- procedure SetSamba24(AURL: string);
240- //Samba‚̐ݒè’l‚ðXV‚·‚é
241- procedure UpdateSamba(const AHost: String; value: Integer);
242- /// ˆø—p•„‚̎擾
243- function GetOEIndentChar : string;
244221 /// –{•¶‚̎擾
245222 function GetBody : string;
246223 //IdHttp‚̏‰Šú‰»
@@ -258,7 +235,7 @@ type
258235 //HEAD.TXTŽ©“®•\Ž¦
259236 procedure ShowBoardHead(ABoard: TBoard; AMemo: TMemo);
260237 //LocalFusianaTrapAlart
261- function LFusianaGet(s: String): Boolean;
238+ function LFusianaGet(const s: String): Boolean;
262239 // Cookie‚̎擾
263240 procedure GetCookie(Rawtext: String; ABoard: TBoard);
264241 //! “ü—̓AƒVƒXƒg‚̃|ƒbƒvƒAƒbƒvƒƒjƒ…[‚̃NƒŠƒbƒNƒCƒxƒ“ƒg
@@ -267,6 +244,28 @@ type
267244 procedure InsertText(Memo: TMemo; Text: String);
268245 //! ‘—M’†Ž~
269246 procedure CancelSend(ABoard: TBoard; ASysMenu: HMENU);
247+ //! Sambaƒ^ƒCƒ}[ƒCƒxƒ“ƒg
248+ procedure SambaTimer(Sender: TObject);
249+ //! ƒEƒBƒ“ƒhƒE‚̈ʒu‚ƃTƒCƒY‚̐ݒè
250+ procedure SetWindowRect;
251+ //! Šg’£ƒ^ƒuÝ’è
252+ procedure SetExtraTab;
253+ //! ”Ž擾
254+ function GetBoard : TBoard;
255+ //! URL‚̃f[ƒ^‚ðstream‚ÉŽæ‚荞‚Þ
256+ procedure GetWebData(const URL: string; const RefURL: string;
257+ Modified: TDateTime; stream: TStream);
258+ //! GikoForm‚ɐV’…ƒƒbƒZ[ƒW‚ð’ljÁ‚·‚é
259+ procedure AddFormMessageNew(icon: TGikoMessageIcon);
260+ //! ƒ[ƒJƒ‹fusianaƒgƒ‰ƒbƒv
261+ function isLocalFusianaTrap: Boolean;
262+ //! ƒ[ƒJƒ‹fusianaƒgƒ‰ƒbƒv
263+ function isRemoteFusianaTrap: Boolean;
264+ //! Header•¶Žš—ñŽæ“¾
265+ function getHeaderStr(const ACOOKIE: string; const SPID : string;
266+ const PON : string; Board : TBoard) : string;
267+ //! fusianaŒxƒ_ƒCƒAƒƒO
268+ function FusianaMsgBox: Integer;
270269 protected
271270 procedure CreateParams(var Params: TCreateParams); override;
272271 public
@@ -274,6 +273,7 @@ type
274273 procedure SetFont;
275274 procedure SetThreadItem(Item: TThreadItem);
276275 procedure SetBoard(Item: TBoard);
276+ procedure UpdateSambaStatus;
277277 property BBSID: string read FBBSID write FBBSID;
278278 end;
279279
@@ -281,7 +281,7 @@ implementation
281281
282282 uses
283283 Giko, ItemDownload, MojuUtils, IdGlobal, GikoMessage, Imm,
284- InputAssistDataModule, InputAssist;
284+ InputAssistDataModule, InputAssist, HTMLCreate;
285285 const
286286 CAPTION_NAME_NEW: string = 'ƒMƒRƒiƒr ƒXƒŒ—§‚ăGƒfƒBƒ^';
287287 CAPTION_NAME_RES: string = 'ƒMƒRƒiƒr ƒŒƒXƒGƒfƒBƒ^';
@@ -336,50 +336,17 @@ begin
336336 end;}
337337
338338 procedure TEditorForm.FormCreate(Sender: TObject);
339-var
340- wp: TWindowPlacement;
341- hUser32 : HINST;
342- ini: TIniFile;
343339 begin
344340 FWork := False;
341+ FSambaTimer := TSambaTimer.Create(Self);
342+ FSambaTimer.Interval := 0;
345343 Browser.Navigate('about:blank');
346344 TitlePictureBrowser.Navigate('about:blank');
347345 FBoard := nil;
348346 FThreadItem := nil;
349347
350348 //ƒEƒBƒ“ƒhƒE‚̈ʒuÝ’è
351- wp.length := sizeof(wp);
352- wp.rcNormalPosition.Top := GikoSys.Setting.EditWindowTop;
353- wp.rcNormalPosition.Left := GikoSys.Setting.EditWindowLeft;
354-
355- wp.rcNormalPosition.Bottom := GikoSys.Setting.EditWindowTop + GikoSys.Setting.EditWindowHeight;
356- wp.rcNormalPosition.Right := GikoSys.Setting.EditWindowLeft + GikoSys.Setting.EditWindowWidth;
357- wp.showCmd := SW_HIDE;
358- SetWindowPlacement(Handle, @wp);
359-
360- if GikoSys.Setting.EditWindowMax then
361- WindowState := wsMaximized;
362-
363- //ƒEƒBƒ“ƒhƒE‚ª‰æ–ÊŠO‚È‚ç‰æ–Ê“à‚Ɉړ®‚·‚é
364- if (Left + Width) > Screen.Width then
365-// Left := Screen.Width - Width;
366- Left := 0;
367- if (Top + Height) > Screen.Height then
368-// Top := Screen.Height - Height;
369- Top := 0;
370- if Left < 0 then
371- Left := 0;
372- if Top < 0 then
373- Top := 0;
374-
375- //Œ»Ý‚̃EƒBƒ“ƒhƒE‚̈ʒu‚ð•Û‘¶
376- GikoSys.Setting.EditWindowTop := Top + WINDOWMOVE_V; // ŽŸ‚ÉŠJ‚­ƒEƒBƒ“ƒhƒE‚Í
377- GikoSys.Setting.EditWindowLeft := Left + WINDOWMOVE_H; // @@@‰EŽÎ‚߉º‚É‚¸‚ç‚·
378- //ƒEƒBƒ“ƒhƒE‚Ì•‚ƍ‚‚³‚ª¬‚³‚·‚¬‚¢‚ê‚ÎŒ³‚É–ß‚·
379- if GikoSys.Setting.EditWindowHeight < 144 then
380- Height := 400;
381- if GikoSys.Setting.EditWindowWidth < 144 then
382- Width := 640;
349+ SetWindowRect;
383350
384351 EditorPage.ActivePage := EditorTab;
385352 FNameComboEdit := GetWindow(NameComboBox.Handle, GW_CHILD);
@@ -387,20 +354,8 @@ begin
387354 NameComboBox.Items.Assign(GikoSys.Setting.NameList);
388355 MailComboBox.Items.Assign(GikoSys.Setting.MailList);
389356 SetFont;
390- hUser32 := 0;
391- try
392- try
393- hUser32 := LoadLibrary('User32.dll');
394- if hUser32 <> 0 then
395- TransAction.Enabled := true
396- else
397- TransAction.Enabled := false;
398- except
399- TransAction.Enabled := false;
400- end;
401- finally
402- FreeLibrary(hUser32);
403- end;
357+ // ”¼“§–¾—˜—p‰Â”\Ý’è
358+ TransAction.Enabled := GikoSys.CanUser32DLL;
404359
405360 // ƒEƒBƒ“ƒhƒE‚̃XƒeƒCó‘Ô
406361 if GikoSys.Setting.EditWindowStay then begin // ƒXƒeƒCó‘Ô
@@ -428,17 +383,9 @@ begin
428383
429384 SpaceToNBSPAction.Checked := GikoSys.Setting.SpaceToNBSP;
430385 AmpToCharRefAction.Checked := GikoSys.Setting.AmpToCharRef;
386+ // ƒ[ƒJƒ‹ƒ‹[ƒ‹{”ƒgƒbƒv‰æ‘œ‚̃^ƒu‚̐ݒè
387+ SetExtraTab;
431388
432- ini := TIniFile.Create(GikoSys.Setting.GetFileName);
433-
434- try
435- BoardtopTab.TabVisible := ini.Readbool('EditorForm', 'BoardTopTab', False);
436- BoardTop.Checked := BoardtopTab.TabVisible;
437- RocalRuleTab.TabVisible := ini.ReadBool('EditorForm', 'LocalRuleTab', False);
438- LocalRule.Checked := RocalRuleTab.TabVisible;
439- finally
440- ini.Free;
441- end;
442389 // ƒL[Ý’è‚̓ǂݍž‚Ý
443390 GikoSys.LoadKeySetting(ActionList, GikoSys.GetEditorKeyFileName);
444391 // ƒ}ƒEƒXƒWƒFƒXƒ`ƒƒ[‚̃Cƒ“ƒXƒg[ƒ‹
@@ -456,7 +403,6 @@ begin
456403 end;
457404 SaveNameMailAction.Checked := True;
458405 end;
459-
460406 procedure TEditorForm.SetBoard(Item: TBoard);
461407 begin
462408 FBoard := Item;
@@ -465,7 +411,13 @@ begin
465411 MailComboBox.Text := FBoard.KotehanMail;
466412 SageCheckBox.Checked := AnsiPos('sage', MailComboBox.Text) <> 0;
467413 TitlePanel.Visible := True;
468- SetSamba24(FBoard.URL);
414+
415+ if (FSambaTimer.SetBoard(FBoard) >= 0) then begin
416+ UpdateSambaStatus;
417+ FNow := Now();
418+ FSambaTimer.OnTimer := SambaTimer;
419+ end;
420+
469421 ShowBoardInformation(FBoard, BoardInformationMemo);
470422 ShowTitlePicture();
471423 end;
@@ -478,7 +430,13 @@ begin
478430 MailComboBox.Text := FThreadItem.ParentBoard.KotehanMail;
479431 SageCheckBox.Checked := AnsiPos('sage', MailComboBox.Text) <> 0;
480432 TitlePanel.Visible := False;
481- SetSamba24(FThreadItem.ParentBoard.URL);
433+
434+ if (FSambaTimer.SetBoard(FThreadItem.ParentBoard) >= 0) then begin
435+ UpdateSambaStatus;
436+ FNow := Now();
437+ FSambaTimer.OnTimer := SambaTimer;
438+ end;
439+
482440 ShowBoardInformation(FThreadItem.ParentBoard, BoardInformationMemo);
483441 ShowTitlePicture();
484442 end;
@@ -576,73 +534,38 @@ var
576534 No: string;
577535 Mail: string;
578536 Namae: string;
579- DateTime: string;
580537 Body: string;
581538 s: string;
582-
583- posTrip : Integer;
584- tripOrigin : string;
585539 begin
586540 if FThreadItem = nil then begin
587541 No := '1';
588- Title := RepHtml(TitleEdit.Text);
542+ Title := THTMLCreate.RepHtml(TitleEdit.Text);
589543 end else begin
590544 No := IntToStr(FThreadItem.Count + 1);
591- Title := RepHtml(FThreadItem.Title);
545+ Title := THTMLCreate.RepHtml(FThreadItem.Title);
592546 end;
593547
594- body := GetBody;
595- Namae := RepHtml(NameComboBox.Text);
596- Mail := RepHtml(MailComboBox.Text);
597- Body := RepHtml(body);
598- Body := StringReplace(Body, #13#10, '<br>', [rfReplaceAll]);
599- DateTime := FormatDateTime('yyyy/mm/dd(aaa) hh:nn', now);
548+ Body := GetBody;
549+ Namae := THTMLCreate.RepHtml(NameComboBox.Text);
550+ Mail := THTMLCreate.RepHtml(MailComboBox.Text);
551+ Body := THTMLCreate.RepHtml(Body);
552+ Body := CustomStringReplace(Body, #13#10, '<br>', False);
553+
600554
601555 if Trim(Namae) = '' then
602556 Namae := '–¼–³‚µ‚³‚ñ';
603557
604- s := '<HTML><HEAD>' + #13#10
605- + '<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">' + #13#10
606- + '<TITLE>' + title + '</TITLE>' + #13#10
607-// + '<STYLE><!--BODY{font-size : 9pt;font-family : "‚l‚r ‚oƒSƒVƒbƒN";}--></STYLE>' + #13#10
608- + '</HEAD>' + #13#10
609- + '<BODY text="#000000" bgcolor="#EFEFEF" link="#0000FF" alink="#FF0000" vlink="#660099">' + #13#10
610- + '<FONT COLOR="#FF0000">' + title + '</FONT>' + #13#10
611- + '<DL>' + #13#10;
612- posTrip := AnsiPos( '#', Namae );
613- if posTrip > 0 then
614- begin
615- tripOrigin := Copy( Namae, posTrip + 1, Length( Namae ) );
616- Namae :=
617- Copy( Namae, 1, posTrip - 1 ) + '</B> Ÿ' +
618- get_2ch_trip( PChar( tripOrigin ) ) + '<B>';
619- end;
620- if Mail = '' then
621- s := s + '<DT>' + No + ' F <FONT color="forestgreen"><B>' + Namae + '</B></FONT> F ' + DateTime+ '<BR><DD>' + Body + '<BR><BR><BR>' + #13#10
622- else
623- s := s + '<DT>' + No + ' F <A href="mailto:' + Mail + '"><B>' + Namae + '</B></A> [' + Mail + ']F ' + DateTime+ '<BR><DD>' + Body + '<BR><BR><BR>' + #13#10;
624- s := s + '</BODY></HTML>';
558+ s := THTMLCreate.CreatePreviewHTML(Title, No, Mail, Namae, Body);
559+
625560 SetContent(s, Browser);
626561 end;
627562
628-function TEditorForm.RepHtml(s: string): string;
629-begin
630-// s := StringReplace(s, '&', '&amp;', [rfReplaceAll]);
631- s := CustomStringReplace(s, '<', '&lt;');
632- s := CustomStringReplace(s, '>', '&gt;');
633-// s := StringReplace(s, ' ', '&nbsp;', [rfReplaceAll]); //Žd—l•ÏX‚É‚æ‚è&nbsp;Žg—p•s‰Â
634- s := CustomStringReplace(s, '"', '&quot;');
635- Result := s;
636-end;
637-
638563 procedure TEditorForm.EditorPageChange(Sender: TObject);
639564 var
640565 tmpBoard: TBoard;
641566 begin
642- if FThreadItem = nil then
643- tmpBoard := FBoard
644- else
645- tmpBoard := FThreadItem.ParentBoard;
567+
568+ tmpBoard := GetBoard;
646569
647570 if tmpBoard = nil then Exit;
648571
@@ -679,10 +602,8 @@ var
679602 Board: TBoard;
680603 begin
681604 Result := True;
682- if FThreadItem = nil then
683- Board := FBoard
684- else
685- Board := FThreadItem.ParentBoard;
605+
606+ Board := GetBoard;
686607
687608 if (not GikoSys.Setting.UseMachineTime) and
688609 ((Board.LastGetTime = 0) or
@@ -712,6 +633,7 @@ end;
712633 procedure TEditorForm.FormClose(Sender: TObject; var Action: TCloseAction);
713634 begin
714635 Action := caFree;
636+ FSambaTimer.Free;
715637 end;
716638
717639 procedure TEditorForm.FormDestroy(Sender: TObject);
@@ -818,77 +740,33 @@ begin
818740 DrawMenuBar(Handle);
819741 end;
820742
821-procedure TEditorForm.Send(ACOOKIE: string; SPID: string; PON: string; FirstWriting: Boolean);
822-const
823- MSG_FUSIANA : string = 'ƒŠƒ‚[ƒgƒzƒXƒg‚ð•\Ž¦‚·‚é‹@”\‚ªŽg‚í‚ê‚Ä‚¢‚Ü‚·'#13#10 +
824- '‚à‚µ‚àŠÔˆá‚Á‚Ä‚±‚Ì•û–@‚ŃzƒXƒg‚ª•\Ž¦‚³‚ꂽ‚Æ‚µ‚Ä‚àAŽ©ŒÈÓ”C‚Ȃ̂ō폜ˆË—Š‚ɂ͉ž‚¶‚Ü‚¹‚ñB' +
825- #13#10#13#10'Ó”C‚𕉂¤‚±‚Æ‚ð³‘ø‚µ‚ď‘‚«ž‚Ý‚Ü‚·‚©H';
743+procedure TEditorForm.Send( const ACOOKIE: string; const SPID: string;
744+ const PON: string; FirstWriting: Boolean);
826745 var
827746 TextStream: TStringStream;
828747 Source: TStringStream;
829748 ResponseText: string;
830749 URL: string;
831- RefURL: string;
832750 State: TGikoDownloadState;
833751 ResultType: TGikoResultType;
834752 MsgResult: Integer;
835- Cookie: string;
836753 Board: TBoard;
837754 sysMenu : HMENU;
838- //fusianasanƒgƒ‰ƒbƒv by’èŠú•Ö
839- Namae : String;
840- body : TStringList;
841- Remote : String;
842- ABoard : TBoard;
843755 {Protocol,Host, Path, Document, Port, Bookmark : String;}
844756 begin
845757 FAbort := False;
846758 State := gdsError;
847- Namae := RepHtml(NameComboBox.Text);
848- if FThreadItem = nil then
849- Board := FBoard
850- else
851- Board := FThreadItem.ParentBoard;
759+ Board := GetBoard;
852760
853761
854-// tmpRawheader := '';
855762 InitIdHTTP(Indy);
856763 if FThreadItem = nil then begin
857764 URL := FBoard.GetSendURL;
858- RefURL := GikoSys.UrlToServer(FBoard.URL) + 'test/bbs.cgi';
765+ Indy.Request.Referer := GikoSys.UrlToServer(FBoard.URL) + 'test/bbs.cgi';
859766 end else begin
860767 URL := FThreadItem.GetSendURL;
861- RefURL := FThreadItem.URL;
768+ Indy.Request.Referer := FThreadItem.URL;
862769 end;
863-// Indy.Request.UserAgent := GikoSys.GetUserAgent;
864- Indy.Request.Referer := RefURL;
865-// Indy.Request.AcceptEncoding := '';
866-
867- Cookie := '';
868- if ACOOKIE <> '' then
869- Cookie := ACOOKIE;
870- if SPID <> '' then
871- Cookie := Cookie + 'SPID=' + SPID + '; ';
872- if PON <> '' then
873- Cookie := Cookie + 'PON=' + PON + '; ';
874-
875- //ƒzƒXƒg‚ª2ch‚ŁABe‚ÉLogin‚µ‚Ä‚¢‚ê‚ÎBE‚̃f[ƒ^‚ð‘—‚é
876- //GikoSys.ParseURI( URL, Protocol,Host, Path, Document, Port, Bookmark );
877- //if GikoSys.Is2chHost(Host) and GikoSys.Setting.BeLogin then
878- if (Board.Is2ch) then begin
879- // ŒÅ’è‚̃NƒbƒL[‚ª‚ ‚ê‚ΐH‚킹‚é
880- if Length(GikoSys.Setting.FixedCookie) > 0 then begin
881- // ƒzƒXƒg‚ª2ch‚̏ꍇCŒÅ’è‚̃NƒbƒL[‚ðH‚킹‚é
882- Cookie := Cookie + GikoSys.Setting.FixedCookie + '; ';
883- end;
884- if (GikoSys.Setting.BeLogin) then begin
885- Cookie := Cookie + 'MDMD=' + GikoSys.Setting.BeCode + '; '
886- + 'DMDM=' + GikoSys.Setting.BeUserID + '; ';
887- end;
888-
889- end;
890-
891- Cookie := 'Cookie: ' + Cookie + 'NAME=' + NameComboBox.Text + '; MAIL=' + MailComboBox.Text;
892770
893771 sysMenu := GetSystemMenu( Handle, false );
894772 EnableMenuItem( sysMenu, SC_CLOSE, MF_GRAYED );
@@ -902,7 +780,7 @@ begin
902780 Indy.Request.AcceptLanguage := 'ja';
903781 Indy.Request.Accept := 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*';
904782 Indy.Request.ContentType := 'application/x-www-form-urlencoded';
905- Indy.Request.CustomHeaders.Add(Cookie);
783+ Indy.Request.CustomHeaders.Add(getHeaderStr(ACOOKIE, SPID, PON, Board));
906784 TextStream := TStringStream.Create('');
907785 Source := TStringStream.Create('');
908786 try
@@ -912,67 +790,15 @@ begin
912790
913791 if (FirstWriting) then begin
914792 //ƒtƒVƒAƒiƒgƒ‰ƒbƒvŒx(LocalMode) by ’èŠú•Ö
915- if GikoSys.Setting.LocalTrapAtt then begin
916- if LFusianaGet(Namae) then begin
917- MsgResult := MsgBox( Handle, MSG_FUSIANA, 'î•ñ',
918- MB_YESNO or MB_ICONQUESTION);
919- if MsgResult = IDNO then begin
920- CancelSend( Board, SysMenu );
921- Exit;
922- end;
923- end;
924- if ((Namae = 'ŽRèÂ') or (Namae = 'fusianasan')) then begin
925- MsgResult := MsgBox(Handle, MSG_FUSIANA, 'î•ñ',
926- MB_YESNO or MB_ICONQUESTION);
927- if MsgResult = IDNO then begin
928- CancelSend( Board, SysMenu );
929- Exit;
930- end;
931- end;
932- end;
933-
934- if GikoSys.Setting.RemoteTrapAtt then begin
935- if FThreadItem = nil then
936- ABoard := FBoard
937- else
938- ABoard := FThreadItem.ParentBoard;
939-
940- if ABoard = nil then Exit;
941-
942- if FileExists(ABoard.GetSETTINGTXTFileName) then begin
943- body := TStringList.Create;
944- try
945- body.LoadFromFile(ABoard.GetSETTINGTXTFileName);
946- Remote := GetFusianaName(body, ABoard);
947- finally
948- body.Free;
949- end;
950- end else begin
951- //Setting.txt‚ª‚È‚©‚Á‚½‚çŽæ“¾
952- //ŽI‚É•‰‰×‚ª‚©‚©‚è‚»‚¤...
953- //if not FileExists(ABoard.GetSETTINGTXTFileName) then begin
954- GetSETTINGTXTAction.Execute;
955- body := TStringList.Create;
956- try
957- if FileExists(ABoard.GetSETTINGTXTFileName) then begin
958- body.LoadFromFile(ABoard.GetSETTINGTXTFileName);
959- Remote := GetFusianaName(body, ABoard);
960- end;
961- finally
962- body.Free;
963- end;
964- end;
965-
966- if Remote = 'fusianasan' then begin
967- MsgResult := MsgBox(
968- Handle, MSG_FUSIANA, 'î•ñ',
969- MB_YESNO or MB_ICONQUESTION);
970- if MsgResult = IDNO then begin
971- CancelSend( Board, SysMenu );
972- Exit;
973- end;
974- end;
975- end;
793+ if (isLocalFusianaTrap) then begin
794+ CancelSend( Board, SysMenu );
795+ Exit;
796+ end;
797+ //ƒtƒVƒAƒiƒgƒ‰ƒbƒvŒx(Remote)
798+ if (isRemoteFusianaTrap) then begin
799+ CancelSend( Board, SysMenu );
800+ Exit;
801+ end;
976802 end;
977803
978804 GetSendData(Source);
@@ -988,9 +814,10 @@ begin
988814
989815
990816 if ResultType = grtOK then begin
991- if (GikoSys.Setting.UseSamba) and (Timer1.Enabled) then
992- WriteSambaTime(FHost, Now());
993-
817+ if (GikoSys.Setting.UseSamba) and (FSambaTimer.Enabled) then
818+ begin
819+ FSambaTimer.WriteSambaTime(Now());
820+ end;
994821 State := gdsComplete;
995822 end else if ResultType = grtCookie then begin
996823 //ƒ‹[ƒv–hŽ~
@@ -1045,8 +872,10 @@ begin
1045872 Exit;
1046873 end;
1047874 end else begin
1048- if (GikoSys.Setting.UseSamba) and (Timer1.Enabled) then
1049- WriteSambaTime(FHost, Now());
875+ if (GikoSys.Setting.UseSamba) and (FSambaTimer.Enabled) then
876+ begin
877+ FSambaTimer.WriteSambaTime(Now());
878+ end;
1050879
1051880 State := gdsError;
1052881 raise Exception.Create('');
@@ -1097,34 +926,23 @@ begin
1097926 if FStatusCode = 302 then begin
1098927 GikoForm.PlaySound('ResEnd');
1099928 SaveSendFile;
1100- if FThreadItem = nil then
1101- GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, gmiOK)
1102- else
1103- GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, gmiOK);
929+ AddFormMessageNew( gmiOK );
1104930 Close;
1105931 Exit;
1106932 end;
1107933 if State = gdsComplete then begin
1108934 GikoForm.PlaySound('ResEnd');
1109935 SaveSendFile;
1110- if FThreadItem = nil then
1111- GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, gmiOK)
1112- else
1113- GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, gmiOK);
936+ AddFormMessageNew( gmiOK );
1114937 Close;
1115938 end else if State = gdsError then begin
1116- if FThreadItem = nil then
1117- GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, gmiOK)
1118- else
1119- GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, gmiOK);
1120-
939+ AddFormMessageNew( gmiOK );
1121940 EditorPage.ActivePage := PreviewTab;
1122941 SetContent(ResponseText, Browser);
1123942 end else if State = gdsAbort then begin
1124943 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiSAD);
1125944 end;
1126945 end;
1127-
1128946 function TEditorForm.GetResultType(ResponseText: string): TGikoResultType;
1129947 begin
1130948 if AnsiPos('‘‚«‚±‚Ý‚ªI‚í‚è‚Ü‚µ‚½', ResponseText) <> 0 then
@@ -1159,10 +977,7 @@ var
1159977 Board: TBoard;
1160978 body : string;
1161979 begin
1162- if FThreadItem = nil then
1163- Board := FBoard
1164- else
1165- Board := FThreadItem.ParentBoard;
980+ Board := GetBoard;
1166981
1167982 if GikoSys.Setting.UseMachineTime then begin
1168983 if GikoSys.Setting.TimeAdjust then
@@ -1217,11 +1032,13 @@ begin
12171032 ini.WriteDateTime(sDate, 'Date', Now);
12181033 if FThreadItem = nil then begin
12191034 ini.WriteString(sDate, 'Title', MojuUtils.Sanitize(TitleEdit.Text));
1220- ini.WriteString(sDate, 'BBS', FBoard.BBSID);
1035+ //ini.WriteString(sDate, 'BBS', FBoard.BBSID);
1036+ ini.WriteString(sDate, 'URL', FBoard.URL);
12211037 ini.WriteInteger(sDate, 'NewThread', 1);
12221038 end else begin
12231039 ini.WriteString(sDate, 'Title', FThreadItem.Title);
1224- ini.WriteString(sDate, 'BBS', FThreadItem.ParentBoard.BBSID);
1040+ //ini.WriteString(sDate, 'BBS', FThreadItem.ParentBoard.BBSID);
1041+ ini.WriteString(sDate, 'URL', FThreadItem.URL);
12251042 ini.WriteString(sDate, 'Key', ChangeFileExt(FThreadItem.FileName, ''));
12261043 end;
12271044
@@ -1249,10 +1066,7 @@ begin
12491066 Application.ProcessMessages;
12501067 if not Check then Exit;
12511068
1252- if FThreadItem = nil then
1253- Board := FBoard
1254- else
1255- Board := FThreadItem.ParentBoard;
1069+ Board := GetBoard;
12561070
12571071 if FThreadItem = nil then begin
12581072 rc := GikoUtil.MsgBox(Handle,
@@ -1309,7 +1123,7 @@ begin
13091123 end;
13101124 end;
13111125 end else begin
1312- if not Timer1.Enabled then begin
1126+ if not FSambaTimer.Enabled then begin
13131127 if CompareDateTime(Board.Expires ,Now) <= 0 then begin
13141128 Board.Cookie := '';
13151129 Board.SPID := '';
@@ -1317,7 +1131,7 @@ begin
13171131 end;
13181132 Send(Board.Cookie, Board.SPID, Board.PON, True);
13191133 end else begin
1320- if not CheckSambaTime(FHost, Now()) then begin
1134+ if not FSambaTimer.CheckSambaTime(Now()) then begin
13211135 rc := GikoUtil.MsgBox(Handle,
13221136 'Samba24‚Ì‹K’è’l–¢–ž‚Ì•b”‚µ‚©Œo‰ß‚µ‚Ä‚¢‚Ü‚¹‚ñB'#13#10
13231137 + '‘—M‚𒆎~‚µ‚Ü‚·‚©H' + #13#10
@@ -1348,8 +1162,9 @@ begin
13481162 end;
13491163 finally
13501164 FWork := False;
1351- if Timer1.Enabled then
1352- ReadSambaTime(FHost);
1165+ if FSambaTimer.Enabled then begin
1166+ FNow := FSambaTimer.Update;
1167+ end;
13531168 end;
13541169 end;
13551170
@@ -1532,85 +1347,13 @@ begin
15321347
15331348 end;
15341349
1535-procedure TEditorForm.Timer1Timer(Sender: TObject);
1536-begin
1537- if FSambaTime = ZERO_DATE then
1538- StatusBar.Panels[1].Text := '‰‘'
1539- else begin
1540- FNow := IncMilliSecond(FNow, 500);
1541- StatusBar.Panels[1].Text := Format('%8.0f•bŒo‰ß', [SecondSpan(FNow, FSambaTime)]);
1542- end;
1543-
1544-end;
1545-//Samba.ini‚̏‘‚«ž‚ÝŽžŠÔ‚ð“ǂݍž‚Þ
1546-procedure TEditorForm.ReadSambaTime(const AHost: string);
1547-var
1548- ini :TMemIniFile;
1549- tmp: string;
1550-begin
1551- Timer1.Enabled := false; //Œo‰ß•b”•\Ž¦Timer‚ðOff‚É‚·‚éi‚±‚ꂪON‚Ì‚Æ‚«Samba24‘΍ôOnj
1552- ini := TMemIniFile.Create(GikoSys.GetSambaFileName);
1553- try
1554- //•¶Žš—ñ‚Å“Ç‚ÝŽæ‚Á‚āA•ÏŠ·ŠÖ”‚ÅTDateTime‚Ö
1555- tmp := ini.ReadString('Send', AHost, DateTimeToStr(ZERO_DATE));
1556- FSambaTime := ConvertDateTimeString(tmp);
1557- finally
1558- ini.Free;
1559- end;
1560- FNow := Now(); //Œ»ÝŽžŠÔ‚ðŽæ“¾iTimer•\Ž¦—p‚ŁACheck‚·‚é‚Æ‚«‚͍ĂÑNow()‚ðŒÄ‚ԁj
1561- Timer1.Enabled := true; //Œo‰ß•b”•\Ž¦Timer‚ðOn‚É‚·‚éi‚±‚ꂪON‚Ì‚Æ‚«Samba24‘΍ôOnj
1562-end;
1563-//Samba.ini‚ɍŏI‘‚«ž‚ÝŽžŠÔ‚ð‘‚«ž‚Þ
1564-procedure TEditorForm.WriteSambaTime(const AHost: string; ATime: TDateTime);
1565-var
1566- ini :TMemIniFile;
1567-begin
1568- ini := TMemIniFile.Create(GikoSys.GetSambaFileName);
1569- try
1570- ini.WriteDateTime('Send', AHost, ATime);
1571- ini.UpdateFile;
1572- finally
1573- ini.Free;
1574- end;
1575-end;
1576-//ÅI‘‚«ž‚ÝŽžŠÔ‚ÆŒ»ÝŽž‚ð”äŠr‚·‚éi^F‹K’è’lˆÈã@‹UF‹K’è’l–¢–žj
1577-function TEditorForm.CheckSambaTime(const AHost: string; ATime: TDateTime): Boolean;
1578-var
1579- pastsec: double;
1580- SettingTime: Integer;
1581-begin
1582- SettingTime := ReadSettingTime(AHost);
1583- ReadSambaTime(AHost);
1584- pastsec := SecondSpan(ATime, FSambaTime);
1585- if pastsec > SettingTime then
1586- Result := true
1587- else
1588- Result := false;
1589-end;
1590-//AHostiŽI–¼j‚ÌSamba‚Ì‹K’è’l‚ð“ǂݍž‚Þ
1591-function TEditorForm.ReadSettingTime(const AHost: string): Integer;
1592-var
1593- ini :TMemIniFile;
1594-begin
1595- ini := TMemIniFile.Create(GikoSys.GetSambaFileName);
1596- try
1597- Result := ini.ReadInteger('Setting', AHost, 0);
1598- //‹K’è’l‚ª‚O‚Ì‚Æ‚«A‚à‚µ‚­‚͐ݒ肳‚ê‚Ä‚¢‚È‚¢‚Æ‚«‚́Aƒtƒ@ƒCƒ‹‚ɏ‘‚«‚½‚·B
1599- if Result = 0 then begin
1600- ini.WriteInteger('Setting', AHost, 0);
1601- ini.UpdateFile;
1602- end;
1603- //StatusBar‚É‚±‚ÌŽI‚Ì‹K’è’l‚ð•\Ž¦‚·‚é
1604- StatusBar.Panels[2].Text := 'Samba24‹K’è’l' + IntToStr(Result);
1605- finally
1606- ini.Free;
1607- end;
1608-end;
16091350 //Form‚ªActive‚É‚È‚Á‚½‚çÅI‘‚«ž‚ÝŽžŠÔ‚ð“ǂݍž‚Þ
16101351 procedure TEditorForm.FormActivate(Sender: TObject);
16111352 begin
1612- if ( Timer1.Enabled ) and ( FThreadItem <> nil )then
1613- ReadSambaTime(FHost);
1353+ if ( FSambaTimer.Enabled ) and ( FThreadItem <> nil ) then
1354+ begin
1355+ FNow := FSambaTimer.Update;
1356+ end;
16141357 if GikoSys.Setting.GestureEnabled then begin
16151358 GikoSys.Setting.Gestures.ClearGesture;
16161359 GikoSys.Setting.Gestures.LoadGesture(
@@ -1622,63 +1365,12 @@ begin
16221365 MouseGesture.SetHook( Handle );
16231366 end;
16241367 end;
1625-//Samba24‘΍ô‚ðŽg‚¤‚©‚Ç‚¤‚©Œˆ‚ß‚éŠÖ”
1626-//ReadSambaTime ‚ðŒÄ‚яo‚·‚ÆTimer‚ªOn‚É‚È‚é
1627-procedure TEditorForm.SetSamba24(AURL: string);
1628-var
1629- Protocol, Host, Path, Document, Port, Bookmark : string;
1630-begin
1631- //Samba24‘΍ô‚ð‚µ‚È‚¢‚È‚çI—¹
1632- if not GikoSys.Setting.UseSamba then
1633- Exit;
1634- //Host‚ÌURL‚É'.2ch.'‚©'.bbspink.'‚ªŠÜ‚Ü‚ê‚Ä‚¢‚½‚çSamba24‘΍ô‚ð‚·‚é
1635- GikoSys.ParseURI( AURL, Protocol,Host, Path, Document, Port, Bookmark );
1636- if GikoSys.Is2chHost(Host) then begin
1637- Host := Copy(Host, 1, AnsiPos('.', Host) - 1);
1638- FHost := Host; //FHost=ŽI–¼
1639- ReadSambaTime(FHost); //ˆÈ‘O‚̏‘‚«ž‚ÝŽžŠÔ‚ð“ǂݍž‚Þ
1640- ReadSettingTime(FHost); //Samba‚̐ݒè‚ð“ǂݍž‚Þ
1641- end;
1642-end;
16431368 procedure TEditorForm.FormCloseQuery(Sender: TObject;
16441369 var CanClose: Boolean);
16451370 begin
16461371 CanClose := not FWork;
16471372 end;
16481373
1649-function TEditorForm.GetOEIndentChar : string;
1650-var
1651- regKey : TRegistry;
1652- Identities : string;
1653- IndentChar : DWORD;
1654-const
1655- DEFAULT_CHAR = '> ';
1656- OE_MAIL_PATH = '\Software\Microsoft\Outlook Express\5.0\Mail';
1657- INDENT_CHAR = 'Indent Char';
1658-begin
1659-
1660- Result := DEFAULT_CHAR;
1661- regKey := TRegistry.Create;
1662- try
1663- try
1664- regKey.RootKey := HKEY_CURRENT_USER;
1665- if not regKey.OpenKey( 'Identities', False ) then
1666- Exit;
1667- Identities := regKey.ReadString( 'Default User ID' );
1668- if Identities = '' then
1669- Exit;
1670- if not regKey.OpenKey( Identities + OE_MAIL_PATH, False ) then
1671- Exit;
1672- IndentChar := regKey.ReadInteger( INDENT_CHAR );
1673- Result := Char( IndentChar ) + ' ';
1674- except
1675- end;
1676- finally
1677- regKey.Free;
1678- end;
1679-
1680-end;
1681-
16821374 procedure TEditorForm.QuotePasteActionExecute(Sender: TObject);
16831375 var
16841376 s : TStringList;
@@ -1686,7 +1378,7 @@ var
16861378 quote : string;
16871379 begin
16881380
1689- quote := GetOEIndentChar;
1381+ quote := GikoSys.GetOEIndentChar;
16901382 s := TStringList.Create;
16911383 try
16921384 s.Text := Clipboard.AsText;
@@ -1731,68 +1423,59 @@ end;
17311423
17321424 procedure TEditorForm.GetSETTINGTXTActionExecute(Sender: TObject);
17331425 var
1426+ memStream: TMemoryStream;
17341427 URL, RefURL: string;
17351428 settingBody: TStringList;
17361429 tmpBoard: TBoard;
17371430 begin
1738-
1739- if FWork then begin
1740- Exit;
1741- end;
1742-
1743- FWork := True;
1744-
1745- InitIdHTTP(Indy);
1746- if FThreadItem = nil then
1747- tmpBoard := FBoard
1748- else
1749- tmpBoard := FThreadItem.ParentBoard;
1750-
1751- if tmpBoard = nil then Exit;
1752-
1753- RefURL := tmpBoard.URL;
1754- if RefURL[Length(RefURL)] <> '/' then
1755- URL := RefURL + '/' + 'SETTING.TXT'
1756- else
1757- URL := RefURL + 'SETTING.TXT';
1758-
1759- Indy.Request.LastModified := tmpBoard.SETTINGTXTTime;
1760- Indy.Request.Referer := RefURL;
1761- Screen.Cursor := crHourGlass;
1762- settingBody := TStringList.Create;
1763- try
1764- StatusBar.Panels[0].Text := 'SETTING.TXTƒ_ƒEƒ“ƒ[ƒh’†';
1765- try
1766- IdAntiFreeze.Active := True;
1767- try
1768- settingBody.Text := Indy.Get(URL);
1769- finally
1770- IdAntiFreeze.Active := False;
1771- end;
1772- if( Indy.ResponseCode = 200 ) then begin
1773- settingBody.SaveToFile(tmpBoard.GetSETTINGTXTFileName);
1774- tmpBoard.SETTINGTXTTime := Indy.Response.LastModified;
1775- tmpBoard.IsSETTINGTXT := true;
1776- tmpBoard.TitlePictureURL := GetTitlePictureURL(settingBody, tmpBoard);
1777- tmpBoard.Modified := true;
1778- StatusBar.Panels[0].Text := 'SETTING.TXTŽæ“¾Š®—¹(' + IntToStr(Indy.ResponseCode) + ')';
1779- end;
1780- except
1781- on E: EIdException do begin
1782- if( AnsiPos('304', E.Message) > 0 ) then
1783- StatusBar.Panels[0].Text := 'SETTING.TXTXV–³‚µ(' + IntToStr(Indy.ResponseCode) + ')'
1784- else
1785- StatusBar.Panels[0].Text := 'SETTING.TXTŽæ“¾ƒGƒ‰[(' + IntToStr(Indy.ResponseCode) + ')';
1786- end;
1787- end;
1788- finally
1789- settingBody.Free;
1790- Screen.Cursor := crDefault;
1791- FWork := False;
1792- end;
1793- ShowBoardInformation(tmpBoard, BoardInformationMemo);
1794-
1795-
1431+ if not FWork then begin
1432+ FWork := True;
1433+
1434+ tmpBoard := GetBoard;
1435+ if tmpBoard <> nil then begin
1436+
1437+ RefURL := tmpBoard.URL;
1438+ if RefURL[Length(RefURL)] <> '/' then
1439+ URL := RefURL + '/' + 'SETTING.TXT'
1440+ else
1441+ URL := RefURL + 'SETTING.TXT';
1442+ Screen.Cursor := crHourGlass;
1443+ memStream := TMemoryStream.Create;
1444+ try
1445+ try
1446+ StatusBar.Panels[0].Text := 'SETTING.TXTƒ_ƒEƒ“ƒ[ƒh’†';
1447+ GetWebData(URL, RefURL, tmpBoard.SETTINGTXTTime, memStream);
1448+ if( Indy.ResponseCode = 200 ) then begin
1449+ settingBody := TStringList.Create;
1450+ try
1451+ memStream.Seek(0, soFromBeginning);
1452+ settingBody.LoadFromStream(memStream);
1453+ settingBody.SaveToFile(tmpBoard.GetSETTINGTXTFileName);
1454+ tmpBoard.SETTINGTXTTime := Indy.Response.LastModified;
1455+ tmpBoard.IsSETTINGTXT := true;
1456+ tmpBoard.TitlePictureURL := GetTitlePictureURL(settingBody, tmpBoard);
1457+ tmpBoard.Modified := true;
1458+ finally
1459+ settingBody.Free;
1460+ end;
1461+ StatusBar.Panels[0].Text := 'SETTING.TXTŽæ“¾Š®—¹(' + IntToStr(Indy.ResponseCode) + ')';
1462+ end;
1463+ except
1464+ on E: EIdException do begin
1465+ if( AnsiPos('304', E.Message) > 0 ) then
1466+ StatusBar.Panels[0].Text := 'SETTING.TXTXV–³‚µ(' + IntToStr(Indy.ResponseCode) + ')'
1467+ else
1468+ StatusBar.Panels[0].Text := 'SETTING.TXTŽæ“¾ƒGƒ‰[(' + IntToStr(Indy.ResponseCode) + ')';
1469+ end;
1470+ end;
1471+ finally
1472+ memStream.Free;
1473+ Screen.Cursor := crDefault;
1474+ end;
1475+ ShowBoardInformation(tmpBoard, BoardInformationMemo);
1476+ end;
1477+ FWork := False;
1478+ end;
17961479 end;
17971480
17981481 procedure TEditorForm.ShowBoardInformation(ABoard: TBoard; AMemo: TMemo);
@@ -1866,51 +1549,60 @@ begin
18661549 Exit;
18671550
18681551 FWork := True;
1869-
1870- InitIdHTTP(Indy);
18711552 memStream := TMemoryStream.Create;
18721553 try
1873- if FThreadItem = nil then
1874- tmpBoard := FBoard
1875- else
1876- tmpBoard := FThreadItem.ParentBoard;
1554+ tmpBoard := GetBoard;
18771555
1878- Indy.Request.Referer := tmpBoard.URL;
1879- if tmpBoard.TitlePictureURL <> '' then begin
1556+ if (tmpBoard <> nil) and (tmpBoard.TitlePictureURL <> '') then begin
18801557 StatusBar.Panels[0].Text := '”ƒgƒbƒv‰æ‘œƒ_ƒEƒ“ƒ[ƒh’†';
18811558 Screen.Cursor := crHourGlass;
18821559 try
1883- IdAntiFreeze.Active := True;
1884- try
1885- Indy.Get(tmpBoard.TitlePictureURL, memStream);
1886- finally
1887- IdAntiFreeze.Active := False;
1888- end;
1560+ // URL‚ðŽw’肵‚ăƒ‚ƒŠ‚ɓǂݍž‚Þ
1561+ GetWebData(tmpBoard.TitlePictureURL, tmpBoard.URL,
1562+ ZERO_DATE, memStream);
18891563 if Indy.ResponseCode = 200 then begin
18901564 memStream.SaveToFile(tmpBoard.GetTitlePictureFileName);
18911565 ShowTitlePicture();
18921566 tmpBoard.Modified := true;
18931567 end;
1568+ StatusBar.Panels[0].Text := '”ƒgƒbƒv‰æ‘œ (' + IntToStr(Indy.ResponseCode) + ')';
18941569 except
18951570 end;
18961571 end;
18971572 finally
1898- Screen.Cursor := crDefault;
1899- StatusBar.Panels[0].Text := '”ƒgƒbƒv‰æ‘œ (' + IntToStr(Indy.ResponseCode) + ')';
19001573 memStream.Free;
1574+ FWork := False;
1575+ Screen.Cursor := crDefault;
19011576 end;
1577+end;
1578+{
1579+\brief URL‚̃f[ƒ^‚ðstream‚ɓǂݍž‚Þ
1580+\param URL “ǂݍž‚ސæ
1581+\param RefURL referer‚ɐݒ肷‚é
1582+\param Modified Modified‚ɐݒ肷‚é
1583+\param stream “ǂݍž‚ñ‚¾ƒf[ƒ^‚Ì•Û‘¶æ
1584+}
1585+procedure TEditorForm.GetWebData(const URL: string; const RefURL: string;
1586+ Modified: TDateTime; stream: TStream);
1587+begin
1588+ InitIdHTTP(Indy);
1589+ Indy.Request.Referer := RefURL;
1590+ Indy.Request.LastModified := Modified;
1591+
1592+ IdAntiFreeze.Active := True;
1593+ try
1594+ Indy.Get(URL, stream);
1595+ finally
1596+ IdAntiFreeze.Active := False;
1597+ end;
19021598
1903- FWork := False;
19041599 end;
19051600 procedure TEditorForm.ShowTitlePicture();
19061601 var
19071602 tmpBoard: TBoard;
19081603 s: String;
19091604 begin
1910- if FThreadItem = nil then
1911- tmpBoard := FBoard
1912- else
1913- tmpBoard := FThreadItem.ParentBoard;
1605+ tmpBoard := GetBoard;
19141606
19151607 if FileExists(tmpBoard.GetTitlePictureFileName) then begin
19161608 TitlePictureBrowser.Navigate(tmpBoard.GetTitlePictureFileName);
@@ -1940,71 +1632,63 @@ var
19401632 URL, RefURL: string;
19411633 settingBody: TStringList;
19421634 tmpBoard: TBoard;
1635+ memStream: TMemoryStream;
19431636 begin
1944- if FWork then
1945- Exit;
1637+ if not FWork then begin
19461638 FWork := True;
19471639
1948- InitIdHTTP(Indy);
1949- if FThreadItem = nil then
1950- tmpBoard := FBoard
1951- else
1952- tmpBoard := FThreadItem.ParentBoard;
1953-
1954- if tmpBoard = nil then Exit;
1955-
1956- RefURL := tmpBoard.URL;
1957- if RefURL[Length(RefURL)] <> '/' then
1958- URL := RefURL + '/' + 'head.txt'
1959- else
1960- URL := RefURL + 'head.txt';
1961-
1962- if FileExists(tmpBoard.GETHEADTXTFileName) then
1963- Indy.Request.LastModified := tmpBoard.HEADTXTTime
1964- else
1965- Indy.Request.LastModified := ZERO_DATE;
1966-
1967- Indy.Request.Referer := RefURL;
1968- Screen.Cursor := crHourGlass;
1969- settingBody := TStringList.Create;
1970- try
1971- StatusBar.Panels[0].Text := 'ƒ[ƒJƒ‹ƒ‹[ƒ‹(head.txt)ƒ_ƒEƒ“ƒ[ƒh’†';
1972- try
1973- IdAntiFreeze.Active := True;
1974- try
1975- settingBody.Text := Indy.Get(URL);
1976- finally
1977- IdAntiFreeze.Active := False;
1978- end;
1979- if( Indy.ResponseCode = 200 ) then begin
1980- settingBody.Insert(0, '<HTML lang="ja"><HEAD>');
1981- settingBody.Insert(1, '<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">');
1982- settingBody.Insert(2, '<TITLE>' + tmpBoard.Title + '</TITLE>');
1983- settingBody.Insert(3, '<base href="' + RefURL + '"></HEAD><BODY>');
1984- settingBody.Add('</BODY></HTML>');
1985- settingBody.SaveToFile(tmpBoard.GETHEADTXTFileName);
1986- tmpBoard.HEADTXTTime := Indy.Response.LastModified;
1987- tmpBoard.IsHEADTXT := true;
1988- tmpBoard.Modified := true;
1989- StatusBar.Panels[0].Text := 'ƒ[ƒJƒ‹ƒ‹[ƒ‹Žæ“¾Š®—¹(' + IntToStr(Indy.ResponseCode) + ')';
1990- end;
1991- except
1992- on E: EIdException do begin
1993- if( AnsiPos('304', E.Message) > 0 ) then
1994- StatusBar.Panels[0].Text := 'ƒ[ƒJƒ‹ƒ‹[ƒ‹XV–³‚µ(' + IntToStr(Indy.ResponseCode) + ')'
1995- else
1996- StatusBar.Panels[0].Text := 'ƒ[ƒJƒ‹ƒ‹[ƒ‹Žæ“¾ƒGƒ‰[(' + IntToStr(Indy.ResponseCode) + ')';
1997- end;
1998- end;
1999- finally
2000- settingBody.Free;
2001- Screen.Cursor := crDefault;
1640+ tmpBoard := GetBoard;
1641+ if (tmpBoard <> nil) then begin
1642+
1643+ RefURL := tmpBoard.URL;
1644+ if RefURL[Length(RefURL)] <> '/' then
1645+ URL := RefURL + '/' + 'head.txt'
1646+ else
1647+ URL := RefURL + 'head.txt';
1648+
1649+ Screen.Cursor := crHourGlass;
1650+ memStream := TMemoryStream.Create;
1651+ try
1652+ StatusBar.Panels[0].Text := 'ƒ[ƒJƒ‹ƒ‹[ƒ‹(head.txt)ƒ_ƒEƒ“ƒ[ƒh’†';
1653+ try
1654+ GetWebData(URL, RefURL, tmpBoard.HEADTXTTime, memStream);
1655+ if( Indy.ResponseCode = 200 ) then begin
1656+ settingBody := TStringList.Create;
1657+ try
1658+ memStream.Seek(0, soFromBeginning);
1659+ settingBody.LoadFromStream(memStream);
1660+ settingBody.Insert(0, '<HTML lang="ja"><HEAD>');
1661+ settingBody.Insert(1, '<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">');
1662+ settingBody.Insert(2, '<TITLE>' + tmpBoard.Title + '</TITLE>');
1663+ settingBody.Insert(3, '<base href="' + RefURL + '"></HEAD><BODY>');
1664+ settingBody.Add('</BODY></HTML>');
1665+ settingBody.SaveToFile(tmpBoard.GETHEADTXTFileName);
1666+ tmpBoard.HEADTXTTime := Indy.Response.LastModified;
1667+ tmpBoard.IsHEADTXT := true;
1668+ tmpBoard.Modified := true;
1669+ finally
1670+ settingBody.Free;
1671+ end;
1672+ StatusBar.Panels[0].Text := 'ƒ[ƒJƒ‹ƒ‹[ƒ‹Žæ“¾Š®—¹(' + IntToStr(Indy.ResponseCode) + ')';
1673+ end;
1674+ except
1675+ on E: EIdException do begin
1676+ if( AnsiPos('304', E.Message) > 0 ) then
1677+ StatusBar.Panels[0].Text := 'ƒ[ƒJƒ‹ƒ‹[ƒ‹XV–³‚µ(' + IntToStr(Indy.ResponseCode) + ')'
1678+ else
1679+ StatusBar.Panels[0].Text := 'ƒ[ƒJƒ‹ƒ‹[ƒ‹Žæ“¾ƒGƒ‰[(' + IntToStr(Indy.ResponseCode) + ')';
1680+ end;
1681+ end;
1682+ finally
1683+ memStream.Free;
1684+ Screen.Cursor := crDefault;
1685+ end;
1686+ if tmpBoard.IsHEADTXT then begin
1687+ ShowBoardHead(tmpboard, LocalEdit);
1688+ end;
1689+ end;
20021690 FWork := False;
2003- end;
2004- if tmpBoard.IsHEADTXT then begin
2005- ShowBoardHead(tmpboard, LocalEdit);
2006- end;
2007-
1691+ end;
20081692
20091693 end;
20101694
@@ -2015,10 +1699,7 @@ var
20151699 begin
20161700 body := GetBody;
20171701 //‚Ç‚¤‚àA‰üs•ª‚¸‚ê‚Ä‚½‚Á‚Û‚¢‚¯‚ǁA–{“–‚©‚æ‚­•ª‚©‚ç‚È‚¢B
2018- if FThreadItem = nil then
2019- Board := FBoard
2020- else
2021- Board := FThreadItem.ParentBoard;
1702+ Board := GetBoard;
20221703
20231704 if Board.BoardPlugIn <> nil then
20241705 body := CustomStringReplace(body, #13#10, '<br>')
@@ -2029,12 +1710,13 @@ end;
20291710
20301711 procedure TEditorForm.LocalRuleClick(Sender: TObject);
20311712 var
2032- ini: TIniFile;
1713+ ini: TMemIniFile;
20331714 begin
2034- ini := TIniFile.Create(GikoSys.Setting.GetFileName);
1715+ ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
20351716 try
20361717 RocalRuleTab.TabVisible := LocalRule.Checked;
20371718 ini.WriteBool('EditorForm', 'LocalRuleTab', RocalRuleTab.TabVisible);
1719+ ini.UpdateFile;
20381720 finally
20391721 ini.Free;
20401722 end;
@@ -2075,6 +1757,7 @@ var
20751757 Action: TAction;
20761758 begin
20771759 s := MouseGesture.GetGestureStr;
1760+ MouseGesture.Clear;
20781761 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
20791762 if Action <> nil then
20801763 Action.Execute;
@@ -2105,10 +1788,7 @@ var
21051788 URL: String;
21061789 ABoard: TBoard;
21071790 begin
2108- if FThreadItem = nil then
2109- ABoard := FBoard
2110- else
2111- ABoard := FThreadItem.ParentBoard;
1791+ ABoard := GetBoard;
21121792
21131793 if ABoard = nil then Exit;
21141794
@@ -2122,12 +1802,14 @@ begin
21221802 KotehanCheckBox.Enabled := SaveNameMailAction.Checked;
21231803 end;
21241804
2125-function TEditorForm.LFusianaGet(s: String): Boolean;
1805+function TEditorForm.LFusianaGet(const s: String): Boolean;
1806+const
1807+ FUSIANA = 'fusianasan';
21261808 var
21271809 i: Integer;
21281810 begin
2129- i := AnsiPos('fusianasan', s);
2130- if (i > 0) then Result := True else Result := False;
1811+ i := AnsiPos(FUSIANA, s);
1812+ Result := (i > 0);
21311813 end;
21321814
21331815 procedure TEditorForm.BeLogInOutEActionExecute(Sender: TObject);
@@ -2180,24 +1862,11 @@ begin
21801862 end;
21811863 end;
21821864
2183-//! Samba‚̐ݒè’l‚ðXV‚·‚é
2184-procedure TEditorForm.UpdateSamba(const AHost: String; value: Integer);
2185-var
2186- ini :TMemIniFile;
2187-begin
2188- ini := TMemIniFile.Create(GikoSys.GetSambaFileName);
2189- try
2190- ini.WriteInteger('Setting', AHost, value);
2191- ini.UpdateFile;
2192- finally
2193- ini.Free;
2194- end;
2195-end;
21961865
21971866 //! ƒTƒ“ƒoXV‚̃AƒNƒVƒ‡ƒ“‚ÌUpdateƒCƒxƒ“ƒg@ŠÈ’P‚Ì‚½‚߃^ƒCƒ}[‚Æ“¯‚¶‚É‚µ‚Ä‚¨‚­
21981867 procedure TEditorForm.UpdateSambaActionUpdate(Sender: TObject);
21991868 begin
2200- UpdateSambaAction.Enabled := Timer1.Enabled;
1869+ UpdateSambaAction.Enabled := FSambaTimer.Enabled;
22011870 end;
22021871
22031872 //! ƒTƒ“ƒoXVƒAƒNƒVƒ‡ƒ“
@@ -2209,14 +1878,14 @@ begin
22091878 if InputQuery('Samba24Ý’è’lXV', 'V‚µ‚¢Ý’è’l‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢', input) then begin
22101879 input := ZenToHan(input);
22111880 if GikoSys.IsNumeric(input) then begin
2212- UpdateSamba(FHost, StrToInt(input));
2213- //‘S‚ẴtƒH[ƒ€‚©‚çA“¯‚¶ƒzƒXƒg‚̃GƒfƒBƒ^‚ɓǂݍž‚ÝŽwŽ¦
1881+ FSambaTimer.UpdateSambaSetting(StrToInt(input));
1882+ UpdateSambaStatus;
1883+ //‘S‚ẴtƒH[ƒ€‚©‚çASambaƒ^ƒCƒ}[‚ðXV‚·‚é
22141884 for i := 0 to Screen.FormCount - 1 do begin
22151885 if Screen.Forms[i] is TEditorForm then begin
2216- if FHost = TEditorForm(Screen.Forms[i]).FHost then begin
2217- TEditorForm(Screen.Forms[i]).ReadSettingTime(FHost);
2218- end;
2219- end;
1886+ TEditorForm(Screen.Forms[i]).FSambaTimer.Update;
1887+ TEditorForm(Screen.Forms[i]).UpdateSambaStatus;
1888+ end;
22201889 end;
22211890 end else begin
22221891 ShowMessage('”’l‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢');
@@ -2225,6 +1894,14 @@ begin
22251894 end;
22261895 end;
22271896
1897+procedure TEditorForm.UpdateSambaStatus;
1898+begin
1899+ if (FSambaTimer.Enabled) then begin
1900+ StatusBar.Panels[2].Text
1901+ := 'Samba24‹K’è’l' + IntToStr(FSambaTimer.SambaInterval);
1902+ end;
1903+end;
1904+
22281905 procedure TEditorForm.InputAssistActionExecute(Sender: TObject);
22291906 var
22301907 count, i : Integer;
@@ -2409,11 +2086,7 @@ var
24092086 Board : TBoard;
24102087 begin
24112088 // ƒXƒŒƒbƒh‚ª–³‚¢@ƒXƒŒ—§‚Ä‚Ì‚Æ‚«‚ÍFBoard‚𒼐ڎg‚¤
2412- if FThreadItem = nil then begin
2413- Board := FBoard
2414- end else begin
2415- Board := FThreadItem.ParentBoard;
2416- end;
2089+ Board := GetBoard;
24172090
24182091 // ƒNƒbƒL[‚̏î•ñ‚ðŽÌ‚Ä‚é
24192092 Board.Cookie := '';
@@ -2435,4 +2108,220 @@ begin
24352108 GetSETTINGTXTAction.Enabled := not FWork;
24362109 end;
24372110
2111+//! Sambaƒ^ƒCƒ}[ƒCƒxƒ“ƒg
2112+procedure TEditorForm.SambaTimer(Sender: TObject);
2113+begin
2114+
2115+ if FSambaTimer.WriteDeta = ZERO_DATE then
2116+ StatusBar.Panels[1].Text := '‰‘'
2117+ else begin
2118+ FNow := IncMilliSecond(FNow, 500);
2119+ StatusBar.Panels[1].Text :=
2120+ Format('%8.0f•bŒo‰ß', [SecondSpan(FNow, FSambaTimer.WriteDeta)]);
2121+ end;
2122+end;
2123+{
2124+\brief ƒEƒBƒ“ƒhƒE‚̈ʒu‚ƃTƒCƒY‚̐ݒè
2125+}
2126+procedure TEditorForm.SetWindowRect;
2127+var
2128+ wp: TWindowPlacement;
2129+begin
2130+ //ƒEƒBƒ“ƒhƒE‚̈ʒuÝ’è
2131+ wp.length := sizeof(wp);
2132+ wp.rcNormalPosition.Top := GikoSys.Setting.EditWindowTop;
2133+ wp.rcNormalPosition.Left := GikoSys.Setting.EditWindowLeft;
2134+
2135+ wp.rcNormalPosition.Bottom := GikoSys.Setting.EditWindowTop + GikoSys.Setting.EditWindowHeight;
2136+ wp.rcNormalPosition.Right := GikoSys.Setting.EditWindowLeft + GikoSys.Setting.EditWindowWidth;
2137+ wp.showCmd := SW_HIDE;
2138+ SetWindowPlacement(Handle, @wp);
2139+
2140+ if GikoSys.Setting.EditWindowMax then begin
2141+ WindowState := wsMaximized;
2142+ end;
2143+
2144+ //ƒEƒBƒ“ƒhƒE‚ª‰æ–ÊŠO‚È‚ç‰æ–Ê“à‚Ɉړ®‚·‚é
2145+ if (Left + Width) > Screen.Width then begin
2146+ Left := 0;
2147+ end;
2148+ if (Top + Height) > Screen.Height then begin
2149+ Top := 0;
2150+ end;
2151+ if Left < 0 then begin
2152+ Left := 0;
2153+ end;
2154+ if Top < 0 then begin
2155+ Top := 0;
2156+ end;
2157+
2158+ //Œ»Ý‚̃EƒBƒ“ƒhƒE‚̈ʒu‚ð•Û‘¶
2159+ GikoSys.Setting.EditWindowTop := Top + WINDOWMOVE_V; // ŽŸ‚ÉŠJ‚­ƒEƒBƒ“ƒhƒE‚Í
2160+ GikoSys.Setting.EditWindowLeft := Left + WINDOWMOVE_H; // @@@‰EŽÎ‚߉º‚É‚¸‚ç‚·
2161+ //ƒEƒBƒ“ƒhƒE‚Ì•‚ƍ‚‚³‚ª¬‚³‚·‚¬‚¢‚ê‚ÎŒ³‚É–ß‚·
2162+ if GikoSys.Setting.EditWindowHeight < 144 then begin
2163+ Height := 400;
2164+ end;
2165+ if GikoSys.Setting.EditWindowWidth < 144 then begin
2166+ Width := 640;
2167+ end;
2168+end;
2169+{
2170+\brief Šg’£ƒ^ƒuÝ’è
2171+}
2172+procedure TEditorForm.SetExtraTab;
2173+const
2174+ SECTION = 'EditorForm';
2175+var
2176+ ini: TMemIniFile;
2177+begin
2178+ ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
2179+ try
2180+ BoardtopTab.TabVisible := ini.Readbool(SECTION, 'BoardTopTab', False);
2181+ BoardTop.Checked := BoardtopTab.TabVisible;
2182+ RocalRuleTab.TabVisible := ini.ReadBool(SECTION, 'LocalRuleTab', False);
2183+ LocalRule.Checked := RocalRuleTab.TabVisible;
2184+ finally
2185+ ini.Free;
2186+ end;
2187+end;
2188+{
2189+\brief ”Ž擾
2190+\return ƒŒƒXƒGƒfƒBƒ^‚ª“Še‚µ‚悤‚Æ‚µ‚Ä‚¢‚é”Â
2191+}
2192+function TEditorForm.GetBoard : TBoard;
2193+begin
2194+ // ƒXƒŒƒbƒhƒAƒCƒeƒ€‚ªnull‚ÌŽž‚ÍFBoard
2195+ if FThreadItem = nil then begin
2196+ Result := FBoard;
2197+ end else begin
2198+ Result := FThreadItem.ParentBoard;
2199+ end;
2200+end;
2201+{
2202+\brief GikoForm‚ɃƒbƒZ[ƒW‚ð’ljÁ‚·‚é
2203+\param icon ƒƒbƒZ[ƒW‚ɂ‚­ƒAƒCƒRƒ“
2204+}
2205+procedure TEditorForm.AddFormMessageNew(icon: TGikoMessageIcon);
2206+begin
2207+ if FThreadItem = nil then begin
2208+ GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, icon)
2209+ end else begin
2210+ GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, icon);
2211+ end;
2212+
2213+end;
2214+{
2215+\brief ƒ[ƒJƒ‹fusianaƒgƒ‰ƒbƒv
2216+\return true:‘—M’†Ž~ false:‘—M
2217+}
2218+function TEditorForm.isLocalFusianaTrap: Boolean;
2219+var
2220+ Namae : string;
2221+begin
2222+ Result := False;
2223+ if GikoSys.Setting.LocalTrapAtt then begin
2224+ Namae := THTMLCreate.RepHtml(NameComboBox.Text);
2225+ if (LFusianaGet(Namae)) or (Namae = 'ŽRèÂ') then begin
2226+ if FusianaMsgBox = IDNO then begin
2227+ Result := True;
2228+ end;
2229+ end;
2230+ end;
2231+end;
2232+{
2233+\brief ƒŠƒ‚[ƒgfusianaƒgƒ‰ƒbƒv
2234+\return true:‘—M’†Ž~ false:‘—M
2235+}
2236+function TEditorForm.isRemoteFusianaTrap: Boolean;
2237+var
2238+ Namae : string;
2239+ Board : TBoard;
2240+ Remote: string;
2241+ body : TStringList;
2242+begin
2243+ Result := False;
2244+ Namae := THTMLCreate.RepHtml(NameComboBox.Text);
2245+ if (GikoSys.Setting.RemoteTrapAtt) and (Length(Namae) = 0) then begin
2246+ Board := GetBoard;
2247+
2248+ if Board = nil then Exit;
2249+
2250+ if not FileExists(Board.GetSETTINGTXTFileName) then begin
2251+ //Setting.txt‚ª‚È‚©‚Á‚½‚çŽæ“¾
2252+ //ŽI‚É•‰‰×‚ª‚©‚©‚è‚»‚¤...
2253+ try
2254+ GetSETTINGTXTAction.Execute;
2255+ except
2256+ end;
2257+ end;
2258+
2259+ Remote := '';
2260+ if FileExists(Board.GetSETTINGTXTFileName) then begin
2261+ body := TStringList.Create;
2262+ try
2263+ body.LoadFromFile(Board.GetSETTINGTXTFileName);
2264+ Remote := GetFusianaName(body, Board);
2265+ finally
2266+ body.Free;
2267+ end;
2268+ end;
2269+
2270+ if LFusianaGet(Remote) then begin
2271+ if FusianaMsgBox = IDNO then begin
2272+ Result := True;
2273+ end;
2274+ end;
2275+ end;
2276+end;
2277+{
2278+\brief Header•¶Žš—ñŽæ“¾
2279+\param ACOOKIE Cookie
2280+\param SPID SPID
2281+\param PON PON
2282+\param Board ”Â
2283+\return Header•¶Žš—ñ
2284+}
2285+function TEditorForm.getHeaderStr(const ACOOKIE: string; const SPID : string;
2286+ const PON : string; Board : TBoard) : string;
2287+begin
2288+ Result := ACOOKIE;
2289+ if SPID <> '' then
2290+ Result := Result + 'SPID=' + SPID + '; ';
2291+ if PON <> '' then
2292+ Result := Result + 'PON=' + PON + '; ';
2293+
2294+ //ƒzƒXƒg‚ª2ch‚ŁABe‚ÉLogin‚µ‚Ä‚¢‚ê‚ÎBE‚̃f[ƒ^‚ð‘—‚é
2295+ //GikoSys.ParseURI( URL, Protocol,Host, Path, Document, Port, Bookmark );
2296+ //if GikoSys.Is2chHost(Host) and GikoSys.Setting.BeLogin then
2297+ if (Board.Is2ch) then begin
2298+ // ŒÅ’è‚̃NƒbƒL[‚ª‚ ‚ê‚ΐH‚킹‚é
2299+ if Length(GikoSys.Setting.FixedCookie) > 0 then begin
2300+ // ƒzƒXƒg‚ª2ch‚̏ꍇCŒÅ’è‚̃NƒbƒL[‚ðH‚킹‚é
2301+ Result := Result + GikoSys.Setting.FixedCookie + '; ';
2302+ end;
2303+ if (GikoSys.Setting.BeLogin) then begin
2304+ Result := Result + 'MDMD=' + GikoSys.Setting.BeCode + '; '
2305+ + 'DMDM=' + GikoSys.Setting.BeUserID + '; ';
2306+ end;
2307+
2308+ end;
2309+
2310+ Result := 'Cookie: ' + Result + 'NAME=' + NameComboBox.Text + '; MAIL=' + MailComboBox.Text;
2311+
2312+end;
2313+{
2314+\brief fusianaŒxƒ_ƒCƒAƒƒO
2315+\return IDYES ‘‚«ž‚Þ IDNO ’†Ž~
2316+}
2317+function TEditorForm.FusianaMsgBox: Integer;
2318+const
2319+ MSG_FUSIANA : string = 'ƒŠƒ‚[ƒgƒzƒXƒg‚ð•\Ž¦‚·‚é‹@”\‚ªŽg‚í‚ê‚Ä‚¢‚Ü‚·'#13#10 +
2320+ '‚à‚µ‚àŠÔˆá‚Á‚Ä‚±‚Ì•û–@‚ŃzƒXƒg‚ª•\Ž¦‚³‚ꂽ‚Æ‚µ‚Ä‚àAŽ©ŒÈÓ”C‚Ȃ̂ō폜ˆË—Š‚ɂ͉ž‚¶‚Ü‚¹‚ñB' +
2321+ #13#10#13#10'Ó”C‚𕉂¤‚±‚Æ‚ð³‘ø‚µ‚ď‘‚«ž‚Ý‚Ü‚·‚©H';
2322+begin
2323+ Result := MsgBox(Handle, MSG_FUSIANA, 'î•ñ',
2324+ MB_YESNO or MB_ICONQUESTION);
2325+end;
2326+
24382327 end.
--- a/FavoriteArrange.dfm
+++ b/FavoriteArrange.dfm
@@ -87,6 +87,7 @@ object FavoriteArrangeDialog: TFavoriteArrangeDialog
8787 HideSelection = False
8888 Images = GikoForm.ItemIcon16
8989 Indent = 19
90+ PopupMenu = SortPopupMenu
9091 ReadOnly = True
9192 ShowRoot = False
9293 TabOrder = 0
@@ -123,4 +124,41 @@ object FavoriteArrangeDialog: TFavoriteArrangeDialog
123124 end
124125 end
125126 end
127+ object SortPopupMenu: TPopupMenu
128+ Left = 16
129+ Top = 160
130+ object N1: TMenuItem
131+ Caption = #21517#21069#38918#25972#21015
132+ object SortAscName: TMenuItem
133+ Caption = #26119#38918
134+ OnClick = SortAscNameClick
135+ end
136+ object SortDscName: TMenuItem
137+ Caption = #38477#38918
138+ OnClick = SortDscNameClick
139+ end
140+ end
141+ object SortURL: TMenuItem
142+ Caption = 'URL'#38918#25972#21015
143+ object SortAscURL: TMenuItem
144+ Caption = #26119#38918
145+ OnClick = SortAscURLClick
146+ end
147+ object SortDscURL: TMenuItem
148+ Caption = #38477#38918
149+ OnClick = SortDscURLClick
150+ end
151+ end
152+ object SortTitle: TMenuItem
153+ Caption = #12479#12452#12488#12523#38918#12477#12540#12488
154+ object SortAscTitle: TMenuItem
155+ Caption = #26119#38918
156+ OnClick = SortAscTitleClick
157+ end
158+ object SortDscTitle: TMenuItem
159+ Caption = #38477#38918
160+ OnClick = SortDscTitleClick
161+ end
162+ end
163+ end
126164 end
--- a/FavoriteArrange.pas
+++ b/FavoriteArrange.pas
@@ -5,7 +5,7 @@ interface
55 uses
66 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
77 Dialogs, ComCtrls, StdCtrls, ExtCtrls, Favorite, ImgList, NewFavoriteFolder,
8- GikoSystem, GikoUtil;
8+ GikoSystem, GikoUtil, Menus;
99
1010 type
1111 TFavoriteArrangeDialog = class(TForm)
@@ -19,6 +19,16 @@ type
1919 FolderTreeView: TTreeView;
2020 Panel4: TPanel;
2121 CloseButton: TButton;
22+ SortPopupMenu: TPopupMenu;
23+ SortAscName: TMenuItem;
24+ SortDscName: TMenuItem;
25+ N1: TMenuItem;
26+ SortURL: TMenuItem;
27+ SortAscURL: TMenuItem;
28+ SortDscURL: TMenuItem;
29+ SortTitle: TMenuItem;
30+ SortAscTitle: TMenuItem;
31+ SortDscTitle: TMenuItem;
2232 procedure CloseButtonClick(Sender: TObject);
2333 procedure FormCreate(Sender: TObject);
2434 procedure NewFolderButtonClick(Sender: TObject);
@@ -31,11 +41,15 @@ type
3141 procedure FolderTreeViewDragDrop(Sender, Source: TObject; X,
3242 Y: Integer);
3343 procedure FormDestroy(Sender: TObject);
44+ procedure SortDscNameClick(Sender: TObject);
45+ procedure SortAscNameClick(Sender: TObject);
46+ procedure SortDscURLClick(Sender: TObject);
47+ procedure SortAscURLClick(Sender: TObject);
48+ procedure SortDscTitleClick(Sender: TObject);
49+ procedure SortAscTitleClick(Sender: TObject);
3450 private
3551 { Private éŒ¾ }
36-// FDragNode: TTreeNode;
3752 FDeleteList: TList;
38-// procedure PrepareFavoriteTree(Favo: TFavoriteItem; Node: TTreeNode);
3953 procedure SetDeleteItemList(Node: TTreeNode);
4054 public
4155 { Public éŒ¾ }
@@ -44,10 +58,19 @@ type
4458 var
4559 FavoriteArrangeDialog: TFavoriteArrangeDialog;
4660
61+function SortProc(Node1, Node2: TTreeNode; Data: Longint): Integer; stdcall;
62+
4763 implementation
4864
4965 uses Giko;
5066
67+const
68+ SORT_ASC = 0;
69+ SORT_DSC = 1;
70+ SORT_NAME = 8;
71+ SORT_URL = 16;
72+ SORT_TITLE = 32;
73+
5174 {$R *.dfm}
5275
5376 procedure TFavoriteArrangeDialog.CloseButtonClick(Sender: TObject);
@@ -64,45 +87,8 @@ begin
6487 FolderTreeView.Items.GetFirstNode.Expanded := True;
6588 FolderTreeView.Items.GetFirstNode.Selected := True;
6689 end;
67-
68-
69-{ Node := FolderTreeView.Items.AddChild(nil, GikoForm.Favorite.Root.Title);
70- Node.ImageIndex := 0;
71- Node.Data := GikoForm.Favorite.Root;
72- PrepareFavoriteTree(GikoForm.Favorite.Root, Node);
73- Node.Expanded := True;
74- Node.Selected := True;}
7590 end;
7691
77-{procedure TFavoriteArrangeDialog.PrepareFavoriteTree(Favo: TFavoriteItem; Node: TTreeNode);
78-var
79- i: Integer;
80- ChildFavo: TFavoriteItem;
81- ChildNode: TTreeNode;
82-begin
83-{ for i := 0 to TFavoriteFolder(Favo).Count - 1 do begin
84-
85- ChildFavo := TFavoriteFolder(Favo).Items[i];
86- if ChildFavo is TFavoriteFolder then begin
87- ChildNode := FolderTreeView.Items.AddChild(Node, ChildFavo.Title);
88- ChildNode.ImageIndex := 0;
89- ChildNode.SelectedIndex := 0;
90- ChildNode.Data := ChildFavo;
91- PrepareFavoriteTree(ChildFavo, ChildNode);
92- end else if ChildFavo is TFavoriteBoardItem then begin
93- ChildNode := FolderTreeView.Items.AddChild(Node, ChildFavo.Title);
94- ChildNode.ImageIndex := 1;
95- ChildNode.SelectedIndex := 1;
96- ChildNode.Data := ChildFavo;
97- end else if ChildFavo is TFavoriteThreadItem then begin
98- ChildNode := FolderTreeView.Items.AddChild(Node, ChildFavo.Title);
99- ChildNode.ImageIndex := 2;
100- ChildNode.SelectedIndex := 2;
101- ChildNode.Data := ChildFavo;
102- end;
103- end;
104-end; }
105-
10692 procedure TFavoriteArrangeDialog.NewFolderButtonClick(Sender: TObject);
10793 var
10894 Dlg: TNewFavoriteFolderDialog;
@@ -229,5 +215,128 @@ begin
229215 SetDeleteItemList(Node.item[i]);
230216 end;
231217 end;
218+{
219+\brief ƒcƒŠ[‚̃\[ƒgˆ—
220+\pram Node1 ƒm[ƒh
221+\param Node2 ƒm[ƒh
222+\param Data ƒ\[ƒgƒIƒvƒVƒ‡ƒ“
223+\return Node1(>0) Node1=Node2(=0) Node2(<0)
224+}
225+function SortProc(Node1, Node2: TTreeNode; Data: Longint): Integer;
226+stdcall;
227+var
228+ folder1, folder2 : TFavoriteFolder;
229+ item1, item2 : TFavoriteItem;
230+begin
231+ if (TObject(Node1.Data) is TFavoriteItem) then begin
232+ item1 := TFavoriteItem(Node1.Data);
233+ folder1 := nil;
234+ end else begin
235+ item1 := nil;
236+ folder1 := TFavoriteFolder(Node1.Data);
237+ end;
238+ if (TObject(Node2.Data) is TFavoriteItem) then begin
239+ item2 := TFavoriteItem(Node2.Data);
240+ folder2 := nil;
241+ end else begin
242+ item2 := nil;
243+ folder2 := TFavoriteFolder(Node2.Data);
244+ end;
245+
246+ if (folder1 <> nil) and (folder2 = nil) then begin
247+ Result := 1;
248+ end else
249+ if (folder1 = nil) and (folder2 <> nil) then begin
250+ Result := -1;
251+ end else begin
252+ Result := 0;
253+ if (folder1 <> nil) and (folder2 <> nil) then begin
254+ Result := CompareStr(Node1.Text, Node2.Text);
255+ end else
256+ if (folder1 = nil) and (folder2 = nil) then begin
257+ if ((Data and SORT_NAME) > 0) then begin
258+ Result := CompareStr(Node1.Text, Node2.Text);
259+ end else
260+ if ((Data and SORT_URL) > 0) then begin
261+ Result := CompareStr(item1.URL, item2.URL);
262+ end else
263+ if ((Data and SORT_TITLE) > 0) then begin
264+ Result := CompareStr(item1.Title, item2.Title);
265+ end;
266+ end;
267+ if ((Data and SORT_DSC) > 0) then begin
268+ Result := -1 * Result;
269+ end;
270+ end;
271+end;
272+
273+{
274+\brief –¼‘O‚̍~‡ƒ\[ƒg
275+}
276+procedure TFavoriteArrangeDialog.SortDscNameClick(Sender: TObject);
277+begin
278+ if (FolderTreeView.Selected <> nil) and
279+ (TObject(FolderTreeView.Selected.Data) is TFavoriteFolder) then begin
280+ FolderTreeView.Selected
281+ .CustomSort(@SortProc, SORT_NAME or SORT_DSC, False);
282+ end;
283+end;
284+
285+{
286+\brief –¼‘O‚̏¸‡ƒ\[ƒg
287+}
288+procedure TFavoriteArrangeDialog.SortAscNameClick(Sender: TObject);
289+begin
290+ if (FolderTreeView.Selected <> nil) and
291+ (TObject(FolderTreeView.Selected.Data) is TFavoriteFolder) then begin
292+ FolderTreeView.Selected
293+ .CustomSort(@SortProc, SORT_NAME or SORT_ASC, False);
294+ end;
295+end;
296+{
297+\brief URL‚̍~‡ƒ\[ƒg
298+}
299+procedure TFavoriteArrangeDialog.SortDscURLClick(Sender: TObject);
300+begin
301+ if (FolderTreeView.Selected <> nil) and
302+ (TObject(FolderTreeView.Selected.Data) is TFavoriteFolder) then begin
303+ FolderTreeView.Selected
304+ .CustomSort(@SortProc, SORT_URL or SORT_DSC, False);
305+ end;
306+end;
307+{
308+\brief URL‚̏¸‡ƒ\[ƒg
309+}
310+procedure TFavoriteArrangeDialog.SortAscURLClick(Sender: TObject);
311+begin
312+ if (FolderTreeView.Selected <> nil) and
313+ (TObject(FolderTreeView.Selected.Data) is TFavoriteFolder) then begin
314+ FolderTreeView.Selected
315+ .CustomSort(@SortProc, SORT_URL or SORT_ASC, False);
316+ end;
317+end;
318+{
319+\brief ƒ^ƒCƒgƒ‹‚̍~‡ƒ\[ƒg
320+}
321+procedure TFavoriteArrangeDialog.SortDscTitleClick(Sender: TObject);
322+begin
323+ if (FolderTreeView.Selected <> nil) and
324+ (TObject(FolderTreeView.Selected.Data) is TFavoriteFolder) then begin
325+ FolderTreeView.Selected
326+ .CustomSort(@SortProc, SORT_TITLE or SORT_DSC, False);
327+ end;
328+end;
329+{
330+\brief ƒ^ƒCƒgƒ‹‚̏¸‡ƒ\[ƒg
331+}
332+procedure TFavoriteArrangeDialog.SortAscTitleClick(Sender: TObject);
333+begin
334+ if (FolderTreeView.Selected <> nil) and
335+ (TObject(FolderTreeView.Selected.Data) is TFavoriteFolder) then begin
336+ FolderTreeView.Selected
337+ .CustomSort(@SortProc, SORT_TITLE or SORT_ASC, False);
338+ end;
339+end;
232340
233341 end.
342+
--- a/Gesture.pas
+++ b/Gesture.pas
@@ -25,7 +25,6 @@ type
2525 function CheckAction(Message: Integer; x, y: Integer): Boolean;
2626 procedure AddAction(sx, sy: Integer);
2727 function AddGesture(Item: string): Integer;
28- procedure ClearGesture;
2928 function Get(Index: integer): string;
3029 procedure Put(Index: integer; Item: string);
3130 public
@@ -37,6 +36,7 @@ type
3736 property GestureCount: Integer read GetGestureCount;
3837 property Margin: Integer read FMargin write FMargin;
3938 function GetGestureStr: string;
39+ procedure Clear;
4040 property OnGestureStart: TNotifyEvent read FOnGestureStart write FOnGestureStart;
4141 property OnGestureMove: TNotifyEvent read FOnGestureMove write FOnGestureMove;
4242 property OnGestureEnd: TNotifyEvent read FOnGestureEnd write FOnGestureEnd;
@@ -49,6 +49,9 @@ var
4949
5050 implementation
5151
52+uses
53+ GikoSystem;
54+
5255 constructor TMouseGesture.Create;
5356 begin
5457 inherited;
@@ -62,7 +65,7 @@ end;
6265 destructor TMouseGesture.Destroy;
6366 begin
6467 UnHook;
65- ClearGesture;
68+ Clear;
6669 FGestureItemList.Free;
6770 inherited;
6871 end;
@@ -116,8 +119,8 @@ begin
116119 //ƒ}ƒEƒXƒWƒFƒXƒ`ƒƒ[‚̑ΏۂƈႤ‚Æ‚«‚́AŠJ•ú‚·‚é
117120 if (hwnd <> 0) and (hwnd <> FHandle) then begin
118121 ReleaseCapture;
122+ SetCapture(FHandle);
119123 end;
120- SetCapture(FHandle);
121124 dp := Point(x - FLastPoint.X, y - FLastPoint.Y);
122125 sp := Point(Sign(dp.X), Sign(dp.Y));
123126 if (dp.X * dp.X + dp.Y * dp.Y) > (FMargin * FMargin) then begin
@@ -130,11 +133,19 @@ begin
130133 FLastTime := GetTickCount;
131134 FLastPoint := Point(x, y);
132135 end;
133- Result := True;
134- end;
136+ Result := True;
137+ end;
135138 end;
136139 WM_RBUTTONDOWN: begin
137- if not FCancelMode then begin
140+ if (not FCancelMode) then begin
141+ if ( GikoSys.Setting.GestureIgnoreContext ) then begin
142+ //¡ƒ}ƒEƒX‚ðƒLƒƒƒvƒ`ƒƒ[‚µ‚Ä‚¢‚é‚̂𓾂é
143+ hwnd := GetCapture;
144+ //ƒ}ƒEƒXƒWƒFƒXƒ`ƒƒ[‚̑ΏۂƈႤ‚Æ‚«‚́AŠJ•ú‚·‚é
145+ if (hwnd <> 0) and (hwnd <> FHandle) then begin
146+ Exit;
147+ end;
148+ end;
138149 FBeginGesture := True;
139150 FLastTime := 0;
140151 FLastPoint := Point(x, y);
@@ -150,9 +161,11 @@ begin
150161 FBeginGesture := False;
151162 ReleaseCapture;
152163 if FGestureItemList.Count <> 0 then begin
153- if Assigned(FOnGestureEnd) then
164+ if Assigned(FOnGestureEnd) then begin
154165 FOnGestureEnd(Self);
155- ClearGesture;
166+ end else begin
167+ Clear;
168+ end;
156169 end else begin
157170 FCancelMode := True;
158171 //ƒWƒFƒXƒ`ƒƒ[‚¶‚á‚È‚©‚Á‚½ê‡Aƒ}ƒEƒXDOWN,UP‚ðƒGƒ~ƒ…ƒŒ[ƒg
@@ -228,7 +241,7 @@ begin
228241 end;
229242
230243 //ƒWƒFƒXƒ`ƒƒ[‚ðƒNƒŠƒA‚·‚é
231-procedure TMouseGesture.ClearGesture;
244+procedure TMouseGesture.Clear;
232245 begin
233246 FGestureItemList.Clear;
234247 end;
--- a/Giko.dfm
+++ b/Giko.dfm
@@ -159,7 +159,7 @@ object GikoForm: TGikoForm
159159 object ToolBar1: TToolBar
160160 Left = 2
161161 Top = 4
162- Width = 15
162+ Width = 16
163163 Height = 18
164164 Align = alNone
165165 AutoSize = True
@@ -971,7 +971,7 @@ object GikoForm: TGikoForm
971971 OnResize = AddressToolBarResize
972972 object AddressComboBox: TComboBox
973973 Left = 0
974- Top = 0
974+ Top = 1
975975 Width = 177
976976 Height = 20
977977 DropDownCount = 20
@@ -4478,6 +4478,9 @@ object GikoForm: TGikoForm
44784478 object B4: TMenuItem
44794479 Action = GikoDM.NewBoardAction
44804480 end
4481+ object N80: TMenuItem
4482+ Action = GikoDM.NewBoardSearchAction
4483+ end
44814484 object N7: TMenuItem
44824485 Caption = '-'
44834486 end
@@ -4520,6 +4523,12 @@ object GikoForm: TGikoForm
45204523 object N61: TMenuItem
45214524 Caption = '-'
45224525 end
4526+ object N77: TMenuItem
4527+ Action = GikoDM.StoredTaskTrayAction
4528+ end
4529+ object N78: TMenuItem
4530+ Caption = '-'
4531+ end
45234532 object ExitMenu: TMenuItem
45244533 Action = GikoDM.ExitAction
45254534 end
@@ -5156,6 +5165,18 @@ object GikoForm: TGikoForm
51565165 object LPMSep06: TMenuItem
51575166 Caption = '-'
51585167 end
5168+ object SaveThreadFile: TMenuItem
5169+ Caption = #36984#25246#12473#12524#12483#12489#12434#20445#23384#12377#12427
5170+ object HTML1: TMenuItem
5171+ Action = GikoDM.SelectItemSaveForHTML
5172+ end
5173+ object DAT4: TMenuItem
5174+ Action = GikoDM.SelectItemSaveForDat
5175+ end
5176+ end
5177+ object N79: TMenuItem
5178+ Caption = '-'
5179+ end
51595180 object ViewPMenu: TMenuItem
51605181 Caption = #34920#31034'(&V)'
51615182 object LargeIconLPMenu: TMenuItem
--- a/Giko.pas
+++ b/Giko.pas
@@ -18,14 +18,15 @@ uses
1818 Editor, RoundData, GikoPanel, Favorite, HTMLDocumentEvent,
1919 HintWindow, GikoCoolBar, GikoListView, Search, ExternalBoardManager,
2020 ExternalBoardPlugInMain, StdActns, Variants, ExtActns,IdTCPConnection,
21- IdBaseComponent, IdTCPClient, AppEvnts, BrowserRecord;
21+ IdBaseComponent, IdTCPClient, AppEvnts, BrowserRecord, MoveHistoryItem,
22+ ShellAPI,Preview, HistoryList;
2223
2324 const
2425 NGWORDNAME_PANEL = 3;
2526 THREADSIZE_PANEL = 2;
2627
2728 type
28- TGikoTreeType = (gttNone, gtt2ch, gttHistory, gttFavorite);
29+
2930 TToolBarSettingSenderType = (tssNone, tssMain, tssList, tssBrowser);
3031 TMinimizeType = (mtNone, mtMinimizing, mtMinimized);
3132 TResizeType = (rtNone, rtResizing);
@@ -409,6 +410,13 @@ type
409410 DAT3: TMenuItem;
410411 N76: TMenuItem;
411412 FavoriteTreeItemNameCopyPopupMenu: TMenuItem;
413+ N77: TMenuItem;
414+ N78: TMenuItem;
415+ SaveThreadFile: TMenuItem;
416+ N79: TMenuItem;
417+ HTML1: TMenuItem;
418+ DAT4: TMenuItem;
419+ N80: TMenuItem;
412420 procedure FormCreate(Sender: TObject);
413421 procedure FormDestroy(Sender: TObject);
414422 procedure BrowserStatusTextChange(Sender: TObject;
@@ -551,7 +559,7 @@ type
551559 FClickNode: TTreeNode;
552560 FHttpState: Boolean;
553561 FHint: TResPopup;
554- FPreviewBrowser: TWebBrowser;
562+ FPreviewBrowser: TPreviewBrowser;
555563 FPreviewURL: string;
556564 FBrowserSizeHeight: Integer;
557565 FBrowserSizeWidth: Integer;
@@ -562,7 +570,7 @@ type
562570 FActiveList: TObject;
563571 FActiveContent: TBrowserRecord; //
564572 FActiveBBS : TBBS;
565- FHistoryList: TList; //ƒqƒXƒgƒŠƒŠƒXƒg
573+ FHistoryList: THistoryList; //ƒqƒXƒgƒŠƒŠƒXƒg
566574 FTreeType: TGikoTreeType;
567575 FWorkCount: Integer;
568576 FNameCookie: string;
@@ -594,6 +602,7 @@ type
594602 FOrigenCaption: String; //‚¨‹C‚É“ü‚èƒcƒŠ[‚̃AƒCƒeƒ€•ÒWŽž‚̕ҏW‘O‚Ì•¶Žš—ñ
595603 FPreviewBrowserRect: TRect; ///< ƒvƒŒƒrƒ…[‚Ì•\Ž¦ˆÊ’u‚ð‹L‰¯‚·‚é
596604 FActionListGroupIndexes: array of Integer; ///<GikoDMã‚̃AƒNƒVƒ‡ƒ“ƒŠƒXƒg‚ÌŠeƒAƒNƒVƒ‡ƒ“‚ɐݒ肳‚ꂽGroupIndex‚ð•Û‘¶‚·‚é”z—ñ
605+
597606 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
598607 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
599608 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
@@ -665,6 +674,10 @@ type
665674 procedure RefreshListView(Thread: TThreadItem);
666675 //! ƒXƒŒƒbƒhˆê——‚Ì•\Ž¦”͈͐ݒèƒ`ƒFƒbƒNƒNƒŠƒA
667676 procedure ClearThreadRengeAction;
677+ //! ƒ^ƒXƒNƒgƒŒƒC‚̃AƒCƒRƒ“íœ•ƒtƒH[ƒ€•\Ž¦
678+ procedure UnStoredTaskTray;
679+ //! ƒŒƒXƒGƒfƒBƒ^‚Ì•\Ž¦”ñ•\Ž¦
680+ procedure ShowEditors(nCmdShow: Integer);
668681 protected
669682 procedure CreateParams(var Params: TCreateParams); override;
670683 procedure WndProc(var Message: TMessage); override;
@@ -677,6 +690,7 @@ type
677690 LastRoundTime: TDateTime;
678691 BrowserNullTab: TBrowserRecord;
679692 FControlThread: TThreadControl;
693+ FIconData : TNotifyIconData;
680694 procedure MoveToURL(const inURL: string);
681695 function InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True) : TBrowserRecord;
682696 procedure ReloadBBS;
@@ -709,14 +723,9 @@ type
709723 procedure SetListViewType(AViewType: TGikoViewType); overload;
710724 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
711725 procedure PlaySound(SoundEventName: string);
712- function AddHistory( FavItem: TFavoriteThreadItem ): Boolean;
713- procedure ClearHistory;
714- procedure SaveHistory;
715- procedure LoadHistory;
716726 procedure ShowBBSTree( inBBS : TBBS );
717727 procedure ShowBBSTreeOld( inBBS : TBBS );
718728 procedure ShowHistoryTree;
719- procedure SetHistoryTreeNode;
720729 procedure AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
721730 procedure SetBrowserTabState;
722731 procedure SetToolBarPopup;
@@ -788,6 +797,10 @@ type
788797 //! ƒc[ƒ‹ƒo[‚ɃXƒŒiž‚݃Rƒ“ƒ{ƒ{ƒbƒNƒX‚ðÝ’è‚·‚é
789798 procedure SetSelectComboBox();
790799
800+ //! ƒ^ƒXƒNƒgƒŒƒC‚ÉŠi”[‚µ‚½ƒAƒCƒRƒ“‚ðƒNƒŠƒbƒN‚µ‚½‚Æ‚«‚̏ˆ—
801+ procedure TaskTrayIconMessage(var Msg : TMsg); message WM_USER + 2010;
802+ //! ƒ^ƒXƒNƒgƒŒƒC‚ɃAƒCƒRƒ““o˜^•ƒtƒH[ƒ€‰B‚µ
803+ procedure StoredTaskTray;
791804 published
792805 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
793806 end;
@@ -820,13 +833,13 @@ implementation
820833
821834 uses
822835 GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
823- YofUtils, ShellAPI, ToolBarUtil, ToolBarSetting,
836+ YofUtils, ToolBarUtil, ToolBarSetting,
824837 GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
825- FavoriteArrange, AddressHistory, Preview, Gesture,
838+ FavoriteArrange, AddressHistory, Gesture,
826839 About, Option, Round, Splash, Sort, ListSelect, Imm,
827840 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
828841 HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
829- InputAssistDataModule;
842+ InputAssistDataModule, Types;
830843
831844 const
832845 BLANK_HTML: string = 'about:blank';
@@ -835,14 +848,13 @@ const
835848 DandD_THRESHOLD = 5; //D&D‚Ì臒lipixcel)
836849 //ƒvƒŒƒrƒ…[ƒtƒ@ƒCƒ‹–¼
837850 HTML_FILE_NAME = 'temp_preview.html';
838- ITEM_ICON_THREADLOG1 = 6; //ƒXƒŒƒAƒCƒRƒ“iƒƒO‚ ‚èj
839- ITEM_ICON_THREADLOG2 = 7; //ƒXƒŒƒAƒCƒRƒ“iƒƒO‚ ‚èj
840851 //ƒƒbƒZ[ƒWID
841852 USER_TREECLICK = WM_USER + 2000;
842853 USER_RESIZED = WM_USER + 2001;
843854 USER_MINIMIZED = WM_USER + 2002;
844855 USER_SETLINKBAR = WM_USER + 2003;
845856 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
857+ USER_TASKTRAY = WM_USER + 2010;
846858 {$R *.DFM}
847859
848860 procedure TGikoForm.CreateParams(var Params: TCreateParams);
@@ -889,7 +901,8 @@ begin
889901 GetGroupIndex(GikoDM.GikoFormActionList);
890902 FSearchDialog := nil;
891903 CreateBrowsers(BROWSER_COUNT);
892-
904+ FIconData.uID := 0;
905+
893906 //ƒƒjƒ…[ƒtƒHƒ“ƒg
894907 SetMenuFont;
895908
@@ -1119,10 +1132,11 @@ begin
11191132
11201133
11211134 // ƒqƒXƒgƒŠƒŠƒXƒg(LoadHistory ‚æ‚è‚àæ‚ɍs‚¤‚±‚Æ)
1122- FHistoryList := TList.Create;
1135+ FHistoryList := THistoryList.Create;
11231136
11241137 // —š—ð“ǂݍž‚Ý
1125- LoadHistory;
1138+ FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1139+ TreeView, FTreeType);
11261140
11271141 //‚¨‹C‚É“ü‚è“ǂݍž‚Ý
11281142 FavoriteDM.SetFavTreeView(FavoriteTreeView);
@@ -1287,6 +1301,7 @@ begin
12871301
12881302 //“ü—̓AƒVƒXƒg‹@\‚̏‰Šú‰»
12891303 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1304+
12901305 end;
12911306
12921307 // CoolBar ‚̐ݒè‚ð•Ï”‚É•Û‘¶
@@ -1596,12 +1611,12 @@ begin
15961611
15971612 //ƒqƒXƒgƒŠƒŠƒXƒg•Û‘¶
15981613 try
1599- SaveHistory;
1614+ FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
16001615 except
16011616 end;
16021617 try
16031618 try
1604- ClearHistory;
1619+ FHistoryList.Clear;
16051620 except
16061621 end;
16071622 finally
@@ -1747,8 +1762,8 @@ begin
17471762
17481763 //—š—ð‚Ì•Û‘¶‚Æ”jŠü
17491764 try
1750- SaveHistory;
1751- ClearHistory;
1765+ FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1766+ FHistoryList.Clear;
17521767 except
17531768 end;
17541769
@@ -1799,7 +1814,8 @@ begin
17991814 ShowBBSTree( BBSs[ 0 ] );
18001815
18011816 // —š—ð“ǂݍž‚Ý
1802- LoadHistory;
1817+ FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1818+ TreeView, FTreeType);
18031819
18041820 //‚¨‹C‚É“ü‚è“ǂݍž‚Ý
18051821 FavoriteDM.ReadFavorite;
@@ -1870,7 +1886,13 @@ begin
18701886 FActiveContent := nil;
18711887 Exit;
18721888 end;
1873-
1889+ // ‘O‰ñ‚Æ“¯‚¶ê‡I—¹
1890+ if (StatusBar.Panels[1].Text = Text2) then begin
1891+ {$IFDEF DEBUG}
1892+ Writeln('Status Text is not changed!');
1893+ {$ENDIF}
1894+ Exit;
1895+ end;
18741896 StatusBar.Panels[1].Text := Text2;
18751897
18761898 if FHint <> nil then begin
@@ -1884,6 +1906,8 @@ begin
18841906 if not GikoForm.Active then
18851907 Exit;
18861908
1909+
1910+
18871911 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
18881912 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
18891913
@@ -2519,7 +2543,7 @@ begin
25192543 FBrowsers.Move(BROWSER_COUNT - 1, 0);
25202544 end;
25212545 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2522- if not AddHistory( favItem ) then
2546+ if not FHistoryList.AddHistory( favItem, TreeView, FTreeType ) then
25232547 favItem.Free;
25242548
25252549 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
@@ -2999,209 +3023,10 @@ begin
29993023 end;
30003024 end;
30013025
3002-function TGikoForm.AddHistory( favItem : TFavoriteThreadItem ): Boolean;
3003-var
3004- i: Integer;
3005- Item: TFavoriteThreadItem;
3006- Node: TTreeNode;
3007-begin
3008-// Result := False;
3009-// if (GetActiveContent = ThreadItem) and
3010-// (ThreadItem.Count <= ThreadItem.Kokomade) then
3011-// Exit;
3012-// if GetActiveContent = ThreadItem then
3013-// Exit;
3014-
3015- Result := True;
3016- if FTreeType = gttHistory then
3017- TreeView.Selected := nil;
3018-
3019- for i := 0 to FHistoryList.Count - 1 do begin
3020- if TObject(FHistoryList[i]) is TFavoriteThreadItem then begin
3021- Item := TFavoriteThreadItem(FHistoryList[i]);
3022- if Item.URL = favItem.URL then begin
3023-// SetContent(ThreadItem);
3024- FHistoryList.Move(i, 0);
3025- if FTreeType = gttHistory then
3026- if TreeView.Items.GetFirstNode <> TreeView.Items[ i ] then
3027- TreeView.Items[ i ].MoveTo( TreeView.Items.GetFirstNode, naInsert );
3028- Result := false;
3029- Exit;
3030- end;
3031- end;
3032- end;
3033-
3034- if FHistoryList.Count > 0 then
3035- FHistoryList.Insert( 0, favItem )
3036- else
3037- FHistoryList.Add( favItem );
3038-// SetContent(ThreadItem);
3039-// while GikoSys.Setting.AddressHistoryCount < FHistoryList.Count do begin
3040- while GikoSys.Setting.MaxRecordCount < FHistoryList.Count do begin
3041- i := FHistoryList.Count - 1;
3042- TObject( FHistoryList.Items[ i ] ).Free;
3043- FHistoryList.Delete( i );
3044- end;
3045-
3046- if FTreeType = gttHistory then begin
3047- Node := TreeView.Items.Add( nil, favItem.Title );
3048- Node.MoveTo( TreeView.Items.GetFirstNode, naInsert );
3049- {
3050- if favItem.NewArrival then begin
3051- Node.ImageIndex := ITEM_ICON_THREADNEW1;
3052- Node.SelectedIndex := ITEM_ICON_THREADNEW2;
3053- end else begin
3054- Node.ImageIndex := ITEM_ICON_THREADLOG1;
3055- Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3056- end;
3057- }
3058- // •‰‰×‚ð‚©‚¯‚½‚­‚È‚¢‚Ì‚Å NewArrival ‚̃`ƒFƒbƒN‚ðs‚í‚È‚¢
3059- // ¦favItem.Item ƒvƒƒpƒeƒB‚Í dat ‚̓ǂݍž‚Ý‚ð•K—v‚Æ‚·‚é
3060- Node.ImageIndex := ITEM_ICON_THREADLOG1;
3061- Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3062- Node.Data := favItem;
3063- //while GikoSys.Setting.AddressHistoryCount < TreeView.Items.Count do begin
3064- while GikoSys.Setting.MaxRecordCount < TreeView.Items.Count do begin
3065- i := TreeView.Items.Count - 1;
3066- TreeView.Items.Item[ i ].Delete;
3067- end;
3068- end;
3069-end;
3070-
3026+//—š—ð‚©‚çíœ
30713027 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
3072-var
3073- i: Integer;
3074- node: TTreeNode;
3075-begin
3076- // ƒLƒƒƒrƒlƒbƒg‚É—š—ð‚ª•\Ž¦‚³‚ê‚Ä‚¢‚½‚çA
3077- // ƒLƒƒƒrƒlƒbƒg“à‚̃AƒCƒeƒ€‚àíœ‚·‚éB
3078- if (FTreeType = gttHistory) then begin
3079- node := TreeView.Items.GetFirstNode;
3080- while (node <> nil) do begin
3081- if ( TFavoriteThreadItem(node.Data).Item = threadItem ) then begin
3082- TreeView.Items.Delete(node);
3083- TreeView.Refresh;
3084- node := nil;
3085- end else begin
3086- node := node.GetNext;
3087- end;
3088- end;
3089- end;
3090- for i := 0 to FHistoryList.Count - 1 do begin
3091- if threadItem = TFavoriteThreadItem( FHistoryList.Items[i] ).Item then begin
3092- TFavoriteThreadItem( FHistoryList.Items[ i ] ).Free;
3093- FHistoryList.Delete(i);
3094- FHistoryList.Capacity := FHistoryList.Count;
3095- Break;
3096- end;
3097- end;
3098-end;
3099-
3100-procedure TGikoForm.ClearHistory;
3101-var
3102- i : Integer;
3103-begin
3104- //FHistoryList.Clear;
3105-
3106- try
3107- for i := FHistoryList.Count - 1 downto 0 do begin
3108- if TObject(FHistoryList[ i ]) is TFavoriteThreadItem then
3109- TFavoriteThreadItem(FHistoryList[ i ]).Free
3110- else if TObject(FHistoryList[ i ]) is TFavoriteBoardItem then
3111- TFavoriteBoardItem(FHistoryList[ i ]).Free;
3112-
3113- //FHistoryList.Delete(i);
3114- end;
3115- except
3116- end;
3117-
3118- FHistoryList.Clear;
3119- FHistoryList.Capacity := FHistoryList.Count;
3120-
3121-end;
3122-
3123-procedure TGikoForm.SaveHistory;
3124-var
3125- i, bound : Integer;
3126- saveList : TstringList;
3127-begin
3128-
3129- saveList := TStringList.Create;
3130- try
3131- FHistoryList.Pack;
3132- FHistoryList.Capacity := FHistoryList.Count;
3133- saveList.Add('<?xml version="1.0" encoding="Shift_JIS" standalone="yes"?>');
3134- saveList.Add('<address>');
3135- bound := FHistoryList.Count - 1;
3136- for i := bound downto 0 do begin
3137- // title ‚͍¡‚Ì‚Æ‚±‚ëŽg‚Á‚Ä‚¢‚È‚¢
3138- saveList.Add(
3139- '<history url="' + HtmlEncode( TFavoriteThreadItem( FHistoryList[ i ] ).URL ) + '"' +
3140- ' title="' + HtmlEncode( MojuUtils.Sanitize(TFavoriteThreadItem( FHistoryList[ i ] ).Title )) + '"/>');
3141- end;
3142- saveList.Add('</address>');
3143- saveList.SaveToFile( GikoSys.GetConfigDir + 'History.xml' );
3144- finally
3145- saveList.Free;
3146- end;
3147-
3148-end;
3149-
3150-procedure TGikoForm.LoadHistory;
3151-var
3152- i, bound : Integer;
3153- fileName : string;
3154- XMLDoc : IXMLDocument;
3155- XMLNode : IXMLNode;
3156- HistoryNode : IXMLNode;
3157- s : string;
3158- favItem : TFavoriteThreadItem;
3159-{$IFDEF DEBUG}
3160- st, rt : Cardinal;
3161-{$ENDIF}
31623028 begin
3163-{$IFDEF DEBUG}
3164- st := GetTickCount;
3165-{$ENDIF}
3166-
3167- fileName := GikoSys.GetConfigDir + 'History.xml';
3168-
3169- if FileExists( fileName ) then begin
3170- try
3171- XMLDoc := IXMLDocument.Create;
3172- //XMLDoc := LoadXMLDocument(FileName);
3173- LoadXMLDocument(FileName, XMLDoc);
3174- try
3175- XMLNode := XMLDoc.DocumentElement;
3176-
3177- if XMLNode.NodeName = 'address' then begin
3178- bound := XMLNode.ChildNodes.Count - 1;
3179- for i := 0 to bound do begin
3180- HistoryNode := XMLNode.ChildNodes[i];
3181- if HistoryNode.NodeName = 'history' then begin
3182- //if FReadCount >= sl.Count then begin
3183- s := Trim(HistoryNode.Attributes['url']);
3184- if s <> '' then begin
3185- favItem := TFavoriteThreadItem.Create(
3186- s, MojuUtils.UnSanitize(HistoryNode.Attributes[ 'title' ]) );
3187- if not AddHistory( favItem ) then
3188- favItem.Free;
3189- end;
3190- //end;
3191- end;
3192- end;
3193- end;
3194- finally
3195- XMLDoc.Free;
3196- end;
3197- except
3198- end;
3199- end;
3200-{$IFDEF DEBUG}
3201- rt := GetTickCount - st;
3202- Writeln('Runtime(Load Histroy) : ' + IntToStr(rt) + ' ms');
3203-{$ENDIF}
3204-
3029+ FHistoryList.DeleteHistory( threadItem, TreeView, TreeType );
32053030 end;
32063031
32073032 procedure TGikoForm.ShowBBSTreeOld(
@@ -3363,43 +3188,11 @@ begin
33633188 FTreeType := gttHistory;
33643189 HistoryToolBar.Show;
33653190 FavoriteToolBar.Hide;
3366- SetHistoryTreeNode;
3191+ FHistoryList.SetTreeNode( TreeView );
33673192 CabinetSelectToolButton.Caption := '—š—ðƒŠƒXƒg';
33683193 end;
33693194 end;
33703195
3371-procedure TGikoForm.SetHistoryTreeNode;
3372-var
3373- i: Integer;
3374- Node: TTreeNode;
3375- Item: TFavoriteThreadItem;
3376-begin
3377- TreeView.Items.BeginUpdate;
3378- try
3379- TreeView.Items.Clear;
3380- for i := 0 to FHistoryList.Count - 1 do begin
3381- Item := TFavoriteThreadItem(FHistoryList[i]);
3382- Node := TreeView.Items.Add(nil, Item.Title);
3383- {
3384- if Item.Item.NewArrival then begin
3385- Node.ImageIndex := ITEM_ICON_THREADNEW1;
3386- Node.SelectedIndex := ITEM_ICON_THREADNEW2;
3387- end else begin
3388- Node.ImageIndex := ITEM_ICON_THREADLOG1;
3389- Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3390- end;
3391- }
3392- // •‰‰×‚ð‚©‚¯‚½‚­‚È‚¢‚Ì‚Å NewArrival ‚̃`ƒFƒbƒN‚ðs‚í‚È‚¢
3393- // ¦Item.Item ƒvƒƒpƒeƒB‚Í dat ‚̓ǂݍž‚Ý‚ð•K—v‚Æ‚·‚é
3394- Node.ImageIndex := ITEM_ICON_THREADLOG1;
3395- Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3396- Node.Data := Item;
3397- end;
3398- finally
3399- TreeView.Items.EndUpdate;
3400- end;
3401-end;
3402-
34033196 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
34043197 var
34053198 ChangeEvent: TTVChangedEvent;
@@ -3782,7 +3575,7 @@ begin
37823575 LPMSep06.Visible := bCategory or bBoard;
37833576 BoardFavoriteAddMenu.Visible := bCategory;
37843577 ThreadFavoriteAddMenu.Visible := bBoard;
3785-
3578+ SaveThreadFile.Visible := bBoard;
37863579 AddRoundNameMenu(ItemReservPMenu);
37873580 AddRoundNameMenu(ListReservPMenu);
37883581 end;
@@ -3884,15 +3677,17 @@ var
38843677 wkIntTo: Integer;
38853678 BNum, BRes: string;
38863679 threadItem: TThreadItem;
3680+ aElement : IHTMLElement;
38873681 begin
3888-
38893682 Cancel := True;
3890- if (IHTMLDocument2(TWebBrowser(Sender).Document).activeElement <> nil) then begin
3891- Text := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement.Get_outerText;
3892- Html := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement.Get_outerHTML;
3683+ aElement := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement;
3684+ if ( aElement <> nil) then begin
3685+ Text := aElement.Get_outerText;
3686+ Html := aElement.Get_outerHTML;
38933687 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
38943688 or (AnsiPos('„„', Text) = 1) or (AnsiPos('„', Text) = 1) then begin
38953689 if GikoSys.Setting.ResAnchorJamp then begin
3690+
38963691 Text := ZenToHan(Trim(Text));
38973692
38983693 if(AnsiPos('>>', Text) = 1) then begin
@@ -3915,6 +3710,7 @@ begin
39153710
39163711 if wkIntSt <> 0 then begin
39173712 FActiveContent.IDAnchorPopup('');
3713+ MoveHisotryManager.pushItem(FActiveContent);
39183714 BrowserMovement(IntToStr(wkIntSt));
39193715 end;
39203716
@@ -3948,6 +3744,7 @@ begin
39483744 AddressComboBox.Items.Insert(0, URL);
39493745 end;
39503746 end;
3747+ MoveHisotryManager.pushItem(FActiveContent);
39513748 MoveToURL( URL );
39523749 end;
39533750 end;
@@ -4146,6 +3943,7 @@ procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
41463943 var
41473944 idx: Integer;
41483945 begin
3946+ FDragWFirst := False;
41493947 idx := BrowserTab.IndexOfTabAt(X, Y);
41503948 if idx <> -1 then
41513949 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
@@ -4160,14 +3958,11 @@ begin
41603958
41613959 TabIdx := BrowserTab.IndexOfTabAt(x, y);
41623960
4163- if ( ssLeft in Shift ) and ( BrowserTab.Style = tsTabs ) then begin
4164- if FDragWFirst = false then begin
4165- FDragWFirst := true;
4166- end else begin
3961+ if ( ssLeft in Shift ) then begin
3962+ if (FDragWFirst) then begin
41673963 BrowserTab.EndDrag(false);
41683964 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
4169- FDragWFirst := false;
4170- end;
3965+ end;
41713966 end else begin
41723967 BrowserTab.EndDrag(false);
41733968 FDragWFirst := false;
@@ -4823,14 +4618,21 @@ begin
48234618 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
48244619 Exit;
48254620 WM_SYSCOMMAND:
4826- if Message.WParam = SC_MINIMIZE then
4621+ if Message.WParam = SC_MINIMIZE then begin
48274622 OnMinimize;
4623+ PostMessage(Handle, USER_MINIMIZED, 0, 0);
4624+ end;
48284625 USER_TREECLICK:
48294626 TreeClick( TreeView.Selected );
48304627 USER_RESIZED:
48314628 OnResized;
48324629 USER_MINIMIZED:
4833- OnMinimized;
4630+ begin
4631+ if (GikoSys.Setting.StoredTaskTray) then begin
4632+ StoredTaskTray;
4633+ end;
4634+ OnMinimized;
4635+ end;
48344636 USER_SETLINKBAR:
48354637 SetLinkBar;
48364638 USER_DOCUMENTCOMPLETE:
@@ -4894,128 +4696,35 @@ procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
48944696 var
48954697 p: TPoint;
48964698 ARect: TRect;
4897- sl: TStringList;
4898- html: string;
4899- HtmlFileName: string;
4900-
4901- NavURL: OleVariant;
4902- Flags: OleVariant;
4903- TargetFrameName: OleVariant;
4904- PostData: OleVariant;
4905- Headers: OleVariant;
4906- WindowHeight: Integer;
4907- WindowWidth: Integer;
4908-
4909-// Style: Longint;
4910- Referer: string;
4911- Protocol, Host, Path, Document, Port, Bookmark: string;
49124699 begin
49134700 PreviewTimer.Enabled := False;
49144701
49154702 GetCursorpos(p);
49164703
4917- case GikoSys.Setting.PreviewSize of
4918- gpsXSmall: begin
4919- WindowWidth := 128;
4920- WindowHeight := 96;
4921- end;
4922- gpsSmall: begin
4923- WindowWidth := 256;
4924- WindowHeight := 192;
4925- end;
4926- gpsLarge: begin
4927- WindowWidth := 512;
4928- WindowHeight := 384;
4929- end;
4930- gpsXLarge: begin
4931- WindowWidth := 640;
4932- WindowHeight := 480;
4933- end;
4934- else begin //gpsMedium
4935- WindowWidth := 384;
4936- WindowHeight := 288;
4937- end;
4938- end;
4939-
4940- ARect := Rect(0, 0, WindowWidth, WindowHeight);
4941-
4942- case GikoSys.Setting.PopupPosition of
4943- gppRightTop: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - (ARect.Bottom - ARect.Top) - 15);
4944- gppRight: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
4945- gppRightBottom: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y + 15);
4946- gppTop: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - (ARect.Bottom - ARect.Top) - 15);
4947- gppCenter: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - ((ARect.Bottom - ARect.Top) div 2));
4948- gppBottom: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y + 15);
4949- gppLeftTop: OffsetRect(ARect, p.x + 15, p.y - (ARect.Bottom - ARect.Top) - 15);
4950- gppLeft: OffsetRect(ARect, p.x + 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
4951- gppLeftBottom: OffsetRect(ARect, p.x + 15, p.y + 15); //ƒMƒRƒiƒrƒXƒŒ ƒp[ƒg‚P‚Ì453Ž‚ÉŠ´ŽÓ
4952- end;
4953-
4954- html := '<html><head>'#13#10
4955- + '<SCRIPT>'#13#10
4956- + 'function init() {'#13#10
4957- + ' if ((document.body.clientHeight >= Image1.height) && (document.body.clientWidth >= Image1.width)) {'#13#10
4958- + ' } else {'#13#10
4959- + ' var dh, ih;'#13#10
4960- + ' dh = document.body.clientWidth / document.body.clientHeight;'#13#10
4961- + ' ih = Image1.width / Image1.height;'#13#10
4962- + ' if (document.body.clientWidth < document.body.clientHeight) {'#13#10
4963- + ' if (ih > dh)'#13#10
4964- + ' Image1.width = document.body.clientWidth;'#13#10
4965- + ' else'#13#10
4966- + ' Image1.height = document.body.clientHeight;'#13#10
4967- + ' } else {'#13#10
4968- + ' if (ih < dh)'#13#10
4969- + ' Image1.height = document.body.clientHeight;'#13#10
4970- + ' else'#13#10
4971- + ' Image1.width = document.body.clientWidth;'#13#10
4972- + ' }'#13#10
4973- + ' }'#13#10
4974- + ' Message.style.display = "none";'#13#10
4975- + '}'#13#10
4976- + '</SCRIPT>'#13#10
4977- + '</head>'#13#10
4978- + '<body topmargin="0" leftmargin="0" style="border-width: 1px; overflow:hidden; border-style: solid;" onLoad="init()">'#13#10
4979- + '<div align="center" id="Message">ƒvƒŒƒrƒ…[ì¬’†</div>'#13#10
4980- + '<div align="center"><img name="Image1" border="0" src="%ImageURL%"></div>'#13#10
4981- + '</body></html>';
4982- sl := TStringList.Create;
4983- try
4984- try
4985- HtmlFileName := GikoSys.GetAppDir + HTML_FILE_NAME;
4986- sl.Text := AnsiReplaceStr(html, '%ImageURL%', FPreviewURL);
4987- sl.SaveToFile(HtmlFileName);
4988- finally
4989- sl.Free;
4990- end;
4991- except
4992- end;
4704+ ARect := FPreviewBrowser.GetWindowRect(p);
4705+
4706+ FPreviewBrowser.PreviewImage(FPreviewURL);
4707+
4708+ if ARect.Bottom > Screen.DesktopHeight then begin
4709+ OffsetRect(ARect, 0, -(ARect.Bottom - Screen.DesktopHeight));
4710+ end;
4711+ if (ARect.Right > Screen.DesktopWidth) then begin
4712+ OffsetRect(ARect, -(ARect.Right - Screen.DesktopWidth), 0);
4713+ end;
4714+ if (ARect.Left < Screen.DesktopLeft) then begin
4715+ OffsetRect(ARect, +(Screen.DesktopLeft - ARect.Left), 0);
4716+ end;
4717+ if (ARect.Top < Screen.DesktopTop) then begin
4718+ OffsetRect(ARect, 0, (Screen.DesktopTop - ARect.Top));
4719+ end;
4720+
4721+ SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST,
4722+ ARect.Left, ARect.Top,
4723+ (ARect.Right - ARect.Left), (ARect.Bottom - ARect.Top),
4724+ SWP_NOACTIVATE or SWP_HIDEWINDOW);
49934725
4994- NavURL := HtmlFileName;
4995- Flags := 0;
4996- TargetFrameName := '';
4997- PostData := '';
4998-
4999- GikoSys.ParseURI(FPreviewURL, Protocol, Host, Path, Document, Port, Bookmark);
5000- Referer := Protocol + '://' + Host;
5001- if Port <> '' then
5002- Referer := Referer + ':' + Port;
5003- Referer := Referer + Path;
5004- Headers := 'Referer: ' + Referer;
5005- FPreviewBrowser.Navigate(NavURL, Flags, TargetFrameName, PostData, Headers);
5006- if ARect.Top + WindowHeight > Screen.DesktopHeight then
5007- ARect.Top := Screen.DesktopHeight - WindowHeight;
5008- if ARect.Left + WindowWidth > Screen.DesktopWidth then
5009- ARect.Left := Screen.DesktopWidth - WindowWidth;
5010- if ARect.Left < Screen.DesktopLeft then ARect.Left := Screen.DesktopLeft;
5011- if ARect.Bottom < Screen.DesktopTop then ARect.Bottom := Screen.DesktopTop;
5012-
5013- SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST, ARect.Left, ARect.Top, WindowWidth, WindowHeight, SWP_NOACTIVATE or SWP_HIDEWINDOW);
50144726 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
50154727 FPreviewBrowserRect := ARect;
5016-// Style := GetWindowLong(FPreviewBrowser.Handle, GWL_EXSTYLE);
5017-// SetWindowLong(FPreviewBrowser.Handle, GWL_EXSTYLE, Style xor WS_EX_APPWINDOW);
5018-
50194728 end;
50204729
50214730 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
@@ -5135,7 +4844,6 @@ begin
51354844 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
51364845 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
51374846 Exit;
5138- ClearHistory;
51394847 FHistoryList.Clear;
51404848 TreeView.Items.Clear;
51414849 end;
@@ -6346,24 +6054,18 @@ end;
63466054 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
63476055 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
63486056 begin
6349- if FDragWFirst <> true then begin
6057+ if FDragWFirst = true then
63506058 FDragWFirst := false;
6351-{
6352- end else if (abs( X - FMouseDownPos.X ) < Mouse.DragThreshold)
6353- and (abs( Y - FMouseDownPos.Y ) < Mouse.DragThreshold) then begin
6354-(*}
6355- end else begin
6356-//*)
6357- if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6358- if GikoSys.Setting.ListWidthState = glsMin then begin
6359- GikoDM.BrowserMaxAndFocusAction.Execute;
6360- end;
6361- end else begin
6362- if GikoSys.Setting.ListHeightState = glsMin then begin
6363- GikoDM.BrowserMaxAndFocusAction.Execute;
6364- end;
6365- end;
6366- end;
6059+
6060+ if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6061+ if GikoSys.Setting.ListWidthState = glsMin then begin
6062+ GikoDM.BrowserMaxAndFocusAction.Execute;
6063+ end;
6064+ end else begin
6065+ if GikoSys.Setting.ListHeightState = glsMin then begin
6066+ GikoDM.BrowserMaxAndFocusAction.Execute;
6067+ end;
6068+ end;
63676069 end;
63686070
63696071 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
@@ -7088,6 +6790,7 @@ var
70886790 Action: TAction;
70896791 begin
70906792 s := MouseGesture.GetGestureStr;
6793+ MouseGesture.Clear;
70916794 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
70926795 if Action <> nil then
70936796 Action.Execute;
@@ -7436,7 +7139,9 @@ begin
74367139 WM_KEYFIRST..WM_KEYLAST :
74377140 begin
74387141 //ƒL[ƒAƒbƒv‚Í–³Ž‹‚·‚é@KeyDown‚ƍ‡‚킹‚Ä‚Q‰ñŒÄ‚΂ê‚é‚©‚ç
7439- if (Msg.message <> WM_KEYUP) and (Msg.message <> WM_CHAR) then begin
7142+ if (Msg.message <> WM_KEYUP)
7143+ and (Msg.message <> WM_CHAR)
7144+ and (Msg.message <> WM_SYSKEYUP) then begin
74407145 wmMsg.Msg := Msg.message;
74417146 wmMsg.CharCode := Word(Msg.wParam);
74427147 wmMsg.KeyData := Msg.lParam;
@@ -7696,6 +7401,69 @@ begin
76967401 end;
76977402 end;
76987403
7404+procedure TGikoForm.TaskTrayIconMessage(var Msg: TMsg);
7405+begin
7406+ // ¶ƒNƒŠƒbƒN‚È‚ç•œŒ³‚·‚é
7407+ if (Msg.wParam = WM_LBUTTONUP) then begin
7408+ UnStoredTaskTray;
7409+ end;
7410+end;
7411+//! ƒ^ƒXƒNƒgƒŒƒC‚ɃAƒCƒRƒ““o˜^•ƒtƒH[ƒ€‰B‚µ
7412+procedure TGikoForm.StoredTaskTray;
7413+begin
7414+ try
7415+ if (FIconData.uID = 0) then begin
7416+ FIconData.cbSize := SizeOf(TNotifyIconData);
7417+ FIconData.uID := Self.Handle;
7418+ FIconData.Wnd := Handle;
7419+ FIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
7420+ FIconData.uCallbackMessage := USER_TASKTRAY;
7421+ FIconData.hIcon := Application.Icon.Handle; {ƒAƒCƒRƒ“Žw’è}
7422+ FIconData.szTip := 'ƒMƒRƒiƒr'; {ƒqƒ“ƒg•¶Žš—ñ}
7423+ Shell_NotifyIcon(NIM_ADD, @FIconData);
7424+ ShowEditors(SW_HIDE);
7425+ ShowWindow(Self.Handle, SW_HIDE);
7426+ end;
7427+ except
7428+ end;
7429+end;
7430+//! ƒ^ƒXƒNƒgƒŒƒC‚̃AƒCƒRƒ“íœ•ƒtƒH[ƒ€•\Ž¦
7431+procedure TGikoForm.UnStoredTaskTray;
7432+begin
7433+ try
7434+ try
7435+ Shell_NotifyIcon(NIM_DELETE, @FIconData);
7436+ SetForegroundWindow(Application.Handle);
7437+ except
7438+ end;
7439+ finally
7440+ FIconData.uID := 0;
7441+ // Action‚©‚çŠi”[‚µ‚½‚Æ‚«‚ÍTag‚Ì’l‚Í0ˆÈŠO
7442+ if (GikoDM.StoredTaskTrayAction.Tag = 0) then begin
7443+ ShowWindow(Self.Handle, SW_RESTORE);
7444+ end else begin
7445+ ShowWindow(Self.Handle, SW_SHOW);
7446+ end;
7447+ ShowEditors(SW_SHOW);
7448+ GikoDM.StoredTaskTrayAction.Tag := 0;
7449+ end;
7450+end;
7451+{
7452+\brief ƒŒƒXƒGƒfƒBƒ^‚Ì•\Ž¦”ñ•\Ž¦
7453+\param nCmdShow Windows.ShowWindow‚É‘—‚éƒpƒ‰ƒ[ƒ^‚Æ“¯‚¶
7454+}
7455+procedure TGikoForm.ShowEditors(nCmdShow: Integer);
7456+var
7457+ i : Integer;
7458+begin
7459+ // ƒŒƒXƒGƒfƒBƒ^‚ð’T‚·
7460+ for i := 0 to Screen.CustomFormCount - 1 do begin
7461+ if TObject(Screen.CustomForms[i]) is TEditorForm then
7462+ ShowWindow(Screen.CustomForms[i].Handle, nCmdShow);
7463+
7464+ end;
7465+end;
7466+
76997467 initialization
77007468 OleInitialize(nil);
77017469 finalization
--- a/GikoDataModule.dfm
+++ b/GikoDataModule.dfm
@@ -1,7 +1,7 @@
11 object GikoDM: TGikoDM
22 OldCreateOrder = False
33 OnCreate = DataModuleCreate
4- Left = 660
4+ Left = 514
55 Top = 170
66 Height = 336
77 Width = 286
@@ -696,7 +696,7 @@ object GikoDM: TGikoDM
696696 Hint = #24038#12398#12479#12502#12434#36984#25246#12377#12427
697697 ImageIndex = 48
698698 OnExecute = LeftTabSelectActionExecute
699- OnUpdate = LeftmostTabSelectActionUpdate
699+ OnUpdate = LeftTabSelectActionUpdate
700700 end
701701 object RightTabSelectAction: TAction
702702 Category = #12473#12524#12483#12489
@@ -712,7 +712,7 @@ object GikoDM: TGikoDM
712712 Hint = #19968#30058#21491#12398#12479#12502#12434#36984#25246#12377#12427
713713 ImageIndex = 49
714714 OnExecute = RightmostTabSelectActionExecute
715- OnUpdate = RightTabSelectActionUpdate
715+ OnUpdate = RightmostTabSelectActionUpdate
716716 end
717717 object FavoriteAddAction: TAction
718718 Category = #12362#27671#12395#20837#12426
@@ -1235,6 +1235,82 @@ object GikoDM: TGikoDM
12351235 OnExecute = CloseAllEditorActionExecute
12361236 OnUpdate = CloseAllEditorActionUpdate
12371237 end
1238+ object PrevMoveHistory: TAction
1239+ Category = #25805#20316
1240+ Caption = #12522#12531#12463#23653#27508#12434#25147#12427
1241+ Hint = #12522#12531#12463#23653#27508#12434#25147#12427
1242+ OnExecute = PrevMoveHistoryExecute
1243+ OnUpdate = PrevMoveHistoryUpdate
1244+ end
1245+ object NextMoveHistory: TAction
1246+ Category = #25805#20316
1247+ Caption = #12522#12531#12463#23653#27508#12434#36914#12416
1248+ Hint = #12522#12531#12463#23653#27508#12434#36914#12416
1249+ OnExecute = NextMoveHistoryExecute
1250+ OnUpdate = NextMoveHistoryUpdate
1251+ end
1252+ object ClickActiveElementAction: TAction
1253+ Category = #12473#12524#12483#12489
1254+ Caption = #12450#12463#12486#12451#12502#12394#35201#32032#12434#12463#12522#12483#12463#12377#12427
1255+ Hint = #12450#12463#12486#12451#12502#12394#35201#32032#12434#12463#12522#12483#12463#12377#12427
1256+ OnExecute = ClickActiveElementActionExecute
1257+ end
1258+ object VKDownAction: TAction
1259+ Category = #25805#20316
1260+ Caption = #19979#30690#21360#12461#12540#25276#19979
1261+ Hint = #19979#30690#21360#12461#12540#25276#19979
1262+ OnExecute = VKDownActionExecute
1263+ end
1264+ object VKUpAction: TAction
1265+ Category = #25805#20316
1266+ Caption = #19978#30690#21360#12461#12540#25276#19979
1267+ Hint = #19978#30690#21360#12461#12540#25276#19979
1268+ OnExecute = VKUpActionExecute
1269+ end
1270+ object VKRightAction: TAction
1271+ Category = #25805#20316
1272+ Caption = #21491#30690#21360#12461#12540#25276#19979
1273+ Hint = #21491#30690#21360#12461#12540#25276#19979
1274+ OnExecute = VKRightActionExecute
1275+ end
1276+ object VKLeftAction: TAction
1277+ Category = #25805#20316
1278+ Caption = #24038#30690#21360#12461#12540#25276#19979
1279+ Hint = #24038#30690#21360#12461#12540#25276#19979
1280+ OnExecute = VKLeftActionExecute
1281+ end
1282+ object StoredTaskTrayAction: TAction
1283+ Category = #25805#20316
1284+ Caption = #12479#12473#12463#12488#12524#12452#12395#26684#32013#12377#12427
1285+ Hint = #12479#12473#12463#12488#12524#12452#12395#26684#32013#12377#12427
1286+ OnExecute = StoredTaskTrayActionExecute
1287+ end
1288+ object AllImageLinkToClipbordAction: TAction
1289+ Category = #12473#12524#12483#12489
1290+ Caption = #12452#12513#12540#12472#12522#12531#12463'URL'#21462#24471
1291+ Hint = #34920#31034#12373#12428#12390#12356#12427#12377#12409#12390#12398#12524#12473#12363#12425#12452#12513#12540#12472#12408#12398#12522#12531#12463'URL'#12434#12463#12522#12483#12503#12508#12540#12489#12395#12467#12500#12540#12377#12427
1292+ OnExecute = AllImageLinkToClipbordActionExecute
1293+ OnUpdate = DependActiveCntentLogActionUpdate
1294+ end
1295+ object NewImageLinkToClipBoardAction: TAction
1296+ Category = #12473#12524#12483#12489
1297+ Caption = #26032#30528#12524#12473#12452#12513#12540#12472#12522#12531#12463'URL'#21462#24471
1298+ Hint = #34920#31034#12373#12428#12390#12356#12427#26032#30528#12524#12473#12363#12425#12452#12513#12540#12472#12408#12398#12522#12531#12463'URL'#12434#12463#12522#12483#12503#12508#12540#12489#12395#12467#12500#12540#12377#12427
1299+ OnExecute = NewImageLinkToClipBoardActionExecute
1300+ OnUpdate = DependActiveCntentLogActionUpdate
1301+ end
1302+ object SetForcusForAddresBarAction: TAction
1303+ Category = #12450#12489#12524#12473#12496#12540
1304+ Caption = #12450#12489#12524#12473#12496#12540#12395#12501#12457#12540#12459#12473#12434#24403#12390#12427
1305+ Hint = #12450#12489#12524#12473#12496#12540#12395#12501#12457#12540#12459#12473#12434#24403#12390#12427
1306+ OnExecute = SetForcusForAddresBarActionExecute
1307+ end
1308+ object NewBoardSearchAction: TAction
1309+ Category = #12501#12449#12452#12523
1310+ Caption = #31227#36578#26495#26908#32034
1311+ Hint = #31227#36578#12375#12390#12356#12427#26495#12398'URL'#12434#26908#32034#12377#12427
1312+ OnExecute = NewBoardSearchActionExecute
1313+ end
12381314 end
12391315 object ToobarImageList: TImageList
12401316 Left = 44
--- a/GikoDataModule.pas
+++ b/GikoDataModule.pas
@@ -12,7 +12,7 @@ uses
1212 MSHTML_TLB,
1313 {$IFEND}
1414 ComCtrls, BrowserRecord, Graphics, Messages, Setting, Dialogs,
15- ActiveX;
15+ ActiveX, MoveHistoryItem, HistoryList;
1616
1717 const
1818 CAPTION_NAME: string = 'ƒMƒRƒiƒr';
@@ -219,6 +219,18 @@ type
219219 LiveItemAction: TAction;
220220 FavoriteTreeViewItemNameCopyAction: TAction;
221221 CloseAllEditorAction: TAction;
222+ PrevMoveHistory: TAction;
223+ NextMoveHistory: TAction;
224+ ClickActiveElementAction: TAction;
225+ VKDownAction: TAction;
226+ VKUpAction: TAction;
227+ VKRightAction: TAction;
228+ VKLeftAction: TAction;
229+ StoredTaskTrayAction: TAction;
230+ AllImageLinkToClipbordAction: TAction;
231+ NewImageLinkToClipBoardAction: TAction;
232+ SetForcusForAddresBarAction: TAction;
233+ NewBoardSearchAction: TAction;
222234 procedure EditNGActionExecute(Sender: TObject);
223235 procedure ReloadActionExecute(Sender: TObject);
224236 procedure GoFowardActionExecute(Sender: TObject);
@@ -406,6 +418,22 @@ type
406418 procedure FavoriteTreeViewItemNameCopyActionExecute(Sender: TObject);
407419 procedure CloseAllEditorActionExecute(Sender: TObject);
408420 procedure CloseAllEditorActionUpdate(Sender: TObject);
421+ procedure PrevMoveHistoryUpdate(Sender: TObject);
422+ procedure PrevMoveHistoryExecute(Sender: TObject);
423+ procedure NextMoveHistoryUpdate(Sender: TObject);
424+ procedure NextMoveHistoryExecute(Sender: TObject);
425+ procedure ClickActiveElementActionExecute(Sender: TObject);
426+ procedure VKDownActionExecute(Sender: TObject);
427+ procedure VKUpActionExecute(Sender: TObject);
428+ procedure VKRightActionExecute(Sender: TObject);
429+ procedure VKLeftActionExecute(Sender: TObject);
430+ procedure StoredTaskTrayActionExecute(Sender: TObject);
431+ procedure LeftTabSelectActionUpdate(Sender: TObject);
432+ procedure RightmostTabSelectActionUpdate(Sender: TObject);
433+ procedure NewImageLinkToClipBoardActionExecute(Sender: TObject);
434+ procedure AllImageLinkToClipbordActionExecute(Sender: TObject);
435+ procedure SetForcusForAddresBarActionExecute(Sender: TObject);
436+ procedure NewBoardSearchActionExecute(Sender: TObject);
409437 private
410438 { Private éŒ¾ }
411439 procedure ClearResFilter;
@@ -421,6 +449,11 @@ type
421449 procedure ClearSelectComboBox;
422450 procedure ClearMailAllEditor();
423451 procedure ClearNameTextAllEditor();
452+ procedure MoveURLWithHistory(URL : String);
453+ procedure BackToHistory(item: TMoveHistoryItem);
454+ function GetActiveThreadLinks : IHTMLElementCollection;
455+ procedure GetImageLinkURLs(links : IHTMLElementCollection;
456+ URLs : TStringList; const Start: Integer);
424457 public
425458 { Public éŒ¾ }
426459 procedure RepaintStatusBar;
@@ -453,7 +486,7 @@ uses
453486 GikoBayesian, About, ShellAPI,
454487 RoundName, RoundData, Menus, ListViewUtils,
455488 ThreadControl, GikoMessage, InputAssist,
456- DefaultFileManager, Forms;
489+ DefaultFileManager, Forms, NewBoardURL;
457490
458491 const
459492 MSG_ERROR : string = 'ƒGƒ‰[';
@@ -554,24 +587,10 @@ end;
554587 //! ƒAƒhƒŒƒXƒo[‚É•\Ž¦‚µ‚Ä‚¢‚éƒAƒhƒŒƒX‚ÖˆÚ“®‚·‚é
555588 // *************************************************************************
556589 procedure TGikoDM.MoveToActionExecute(Sender: TObject);
557-var
558- URL: string;
559- idx: Integer;
560590 begin
561591 //ƒAƒhƒŒƒXƒRƒ“ƒ{ƒ{ƒbƒNƒX‚©‚çURL‚ðŽæ“¾
562- URL := Trim(GikoForm.AddressComboBox.Text);
563592 //URL‚Ɉړ®
564- GikoForm.MoveToURL(URL);
565- //ˆÈ‰ºA—š—ð‚̏ˆ—
566- idx := GikoForm.AddressComboBox.Items.IndexOf(URL);
567- if idx = -1 then begin
568- GikoForm.AddressComboBox.Items.Insert(0, URL);
569- if GikoForm.AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
570- GikoForm.AddressComboBox.Items.Delete(GikoForm.AddressComboBox.Items.Count - 1);
571- end else begin
572- GikoForm.AddressComboBox.Items.Delete(idx);
573- GikoForm.AddressComboBox.Items.Insert(0, URL);
574- end;
593+ MoveURLWithHistory( Trim(GikoForm.AddressComboBox.Text) );
575594 end;
576595 // *************************************************************************
577596 //! ‚¨‹C‚É“ü‚è‚̒ljÁƒ_ƒCƒAƒƒO‚ðŠJ‚­
@@ -1277,6 +1296,18 @@ begin
12771296 end;
12781297 end;
12791298 // *************************************************************************
1299+//! ¶‚̃^ƒu‚ð‘I‘ð‚·‚é‚ÌUpdateƒCƒxƒ“ƒg
1300+// *************************************************************************
1301+procedure TGikoDM.LeftTabSelectActionUpdate(Sender: TObject);
1302+begin
1303+ if ( not GikoSys.Setting.LoopBrowserTabs ) then begin
1304+ LeftmostTabSelectActionUpdate(Sender);
1305+ end else begin
1306+ TAction(Sender).Enabled := (GikoForm.BrowserTab.Tabs.Count > 1);
1307+ end;
1308+end;
1309+
1310+// *************************************************************************
12801311 //! ƒ^ƒu‚̐”‚ª‚PˆÈã‚ŁAƒ^ƒu‚̃Cƒ“ƒfƒbƒNƒX‚ª‚OˆÈŠO‚Å—LŒø‚É‚È‚éUpdateƒCƒxƒ“ƒg
12811312 // *************************************************************************
12821313 procedure TGikoDM.LeftmostTabSelectActionUpdate(Sender: TObject);
@@ -1296,7 +1327,13 @@ begin
12961327 end else if GikoForm.BrowserTab.TabIndex > 0 then begin
12971328 GikoForm.BrowserTab.TabIndex := GikoForm.BrowserTab.TabIndex - 1;
12981329 GikoForm.BrowserTab.OnChange(nil);
1299- end;
1330+ end else begin
1331+ if (GikoSys.Setting.LoopBrowserTabs) and
1332+ (GikoForm.BrowserTab.TabIndex = 0) then begin
1333+ GikoForm.BrowserTab.TabIndex := GikoForm.BrowserTab.Tabs.Count - 1;
1334+ GikoForm.BrowserTab.OnChange(nil);
1335+ end;
1336+ end;
13001337 end;
13011338 end;
13021339 // *************************************************************************
@@ -1311,17 +1348,27 @@ begin
13111348 end else if GikoForm.BrowserTab.TabIndex < (GikoForm.BrowserTab.Tabs.Count - 1) then begin
13121349 GikoForm.BrowserTab.TabIndex := GikoForm.BrowserTab.TabIndex + 1;
13131350 GikoForm.BrowserTab.OnChange(nil);
1314- end;
1351+ end else begin
1352+ if (GikoSys.Setting.LoopBrowserTabs) and
1353+ (GikoForm.BrowserTab.TabIndex = (GikoForm.BrowserTab.Tabs.Count - 1)) then begin
1354+ GikoForm.BrowserTab.TabIndex := 0;
1355+ GikoForm.BrowserTab.OnChange(nil);
1356+ end;
1357+ end;
13151358 end;
13161359 end;
13171360 // *************************************************************************
1318-//! ƒ^ƒu‚̐”‚ª‚PˆÈã‚ŁAƒ^ƒu‚ª‰E’[ˆÈŠO‚Å—LŒø‚É‚È‚éUpdateƒCƒxƒ“ƒg
1361+//! ‰E‚̃^ƒu‚ð‘I‘ð‚·‚éUpdateƒCƒxƒ“ƒg
13191362 // *************************************************************************
13201363 procedure TGikoDM.RightTabSelectActionUpdate(Sender: TObject);
13211364 begin
1322- TAction(Sender).Enabled := (GikoForm.BrowserTab.Tabs.Count > 0)
1323- and (GikoForm.BrowserTab.TabIndex <> GikoForm.BrowserTab.Tabs.Count - 1);
1365+ if ( not GikoSys.Setting.LoopBrowserTabs ) then begin
1366+ RightmostTabSelectActionUpdate(Sender);
1367+ end else begin
1368+ TAction(Sender).Enabled := (GikoForm.BrowserTab.Tabs.Count > 1);
1369+ end;
13241370 end;
1371+
13251372 // *************************************************************************
13261373 //! ˆê”Ô‰E‚̃^ƒu‚ð‘I‘ð‚·‚é
13271374 // *************************************************************************
@@ -1333,6 +1380,15 @@ begin
13331380 end;
13341381 end;
13351382 // *************************************************************************
1383+//! ˆê”Ô‰E‚̃^ƒu‚ð‘I‘ð‚·‚é‚ÌUpdateƒCƒxƒ“ƒg
1384+// *************************************************************************
1385+procedure TGikoDM.RightmostTabSelectActionUpdate(Sender: TObject);
1386+begin
1387+ TAction(Sender).Enabled := (GikoForm.BrowserTab.Tabs.Count > 0)
1388+ and (GikoForm.BrowserTab.TabIndex <> GikoForm.BrowserTab.Tabs.Count - 1);
1389+
1390+end;
1391+// *************************************************************************
13361392 //! ‘I‘ð‚³‚ê‚Ä‚¢‚éƒXƒŒƒbƒh‚ð‚¨‹C‚É“ü‚è‚ɒljÁ
13371393 // *************************************************************************
13381394 procedure TGikoDM.ThreadFavoriteAddActionExecute(Sender: TObject);
@@ -2235,7 +2291,8 @@ begin
22352291 URLs.Free;
22362292 end;
22372293
2238- if (GikoForm.BrowserTab.Tabs.Count = 0) then begin
2294+ if (GikoForm.BrowserTab.Tabs.Count = 0) and
2295+ (TabsOpenAction.Tag <> 1) then begin
22392296 ShowMessage('•\Ž¦‚·‚éƒ^ƒu‚ª‚ ‚è‚Ü‚¹‚ñB');
22402297 end;
22412298 end;
@@ -3685,7 +3742,7 @@ end;
36853742 // *************************************************************************
36863743 procedure TGikoDM.SetFocusForBrowserActionExecute(Sender: TObject);
36873744 begin
3688- GikoForm.ActiveContent.Browser.SetFocus;
3745+ GikoForm.ActiveContent.Browser.SetFocus;
36893746 end;
36903747 // *************************************************************************
36913748 //! ƒuƒ‰ƒEƒU‚ɃtƒH[ƒJƒX‚ð“–‚Ä‚éUpdateƒCƒxƒ“ƒg
@@ -3919,42 +3976,12 @@ begin
39193976 end;
39203977 end;
39213978 // *************************************************************************
3922-//! WebBrowser‚ÌŒŸõƒ_ƒCƒAƒƒO‚ðŒÄ‚яo‚·
3923-// *************************************************************************
3924-procedure OpenFindDialog(Browser: TWebbrowser);
3925-const
3926- CGID_WebBrowser: TGUID = '{ED016940-BD5B-11cf-BA4E-00C04FD70816}';
3927- HTMLID_FIND = 1;
3928-var
3929- CmdTarget : IOleCommandTarget;
3930- vaIn, vaOut: OleVariant;
3931- PtrGUID: PGUID;
3932-begin
3933- if Browser.Document <> nil then begin
3934- New(PtrGUID);
3935- PtrGUID^ := CGID_WebBrowser;
3936- try
3937- Browser.Document.QueryInterface(IOleCommandTarget, CmdTarget);
3938- if CmdTarget <> nil then begin
3939- try
3940- CmdTarget.Exec(PtrGUID, HTMLID_FIND, 0, vaIn, vaOut);
3941- finally
3942- CmdTarget._Release;
3943- end;
3944- end;
3945- except
3946- end;
3947- Dispose(PtrGUID);
3948- end;
3949-end;
3950-
3951-// *************************************************************************
39523979 //! Œ»Ý•\Ž¦‚µ‚Ä‚¢‚éƒXƒŒƒbƒh‚ÌŒŸõƒ_ƒCƒAƒƒO‚ð•\Ž¦‚·‚é
39533980 // *************************************************************************
39543981 procedure TGikoDM.OpenFindDialogActionExecute(Sender: TObject);
39553982 begin
39563983 if( GikoForm.ActiveContent <> nil) and (GikoForm.ActiveContent.Browser <> nil) then begin
3957- OpenFindDialog(GikoForm.ActiveContent.Browser);
3984+ GikoForm.ActiveContent.OpenFindDialog;
39583985 end;
39593986 end;
39603987
@@ -4038,5 +4065,276 @@ begin
40384065 end;
40394066 end;
40404067
4068+// *************************************************************************
4069+//! ƒŠƒ“ƒN—š—ð‚ð–ß‚é‚̍XVˆ—
4070+// *************************************************************************
4071+procedure TGikoDM.PrevMoveHistoryUpdate(Sender: TObject);
4072+begin
4073+ PrevMoveHistory.Enabled :=
4074+ (MoveHisotryManager.HisotryIndex > 0)
4075+end;
4076+// *************************************************************************
4077+//! ƒŠƒ“ƒN—š—ð‚ð–ß‚é
4078+// *************************************************************************
4079+procedure TGikoDM.PrevMoveHistoryExecute(Sender: TObject);
4080+begin
4081+ if ( GikoForm.BrowserTab.TabIndex >= 0 ) then begin
4082+ BackToHistory(MoveHisotryManager.getPrevItem
4083+ (TBrowserRecord(GikoForm.BrowserTab.Tabs
4084+ .Objects[GikoForm.BrowserTab.TabIndex])));
4085+ end else begin
4086+ BackToHistory(MoveHisotryManager.getPrevItem( nil ) );
4087+ end;
4088+end;
4089+//! ƒŠƒ“ƒN—š—ðˆ—
4090+procedure TGikoDM.BackToHistory(item: TMoveHistoryItem);
4091+var
4092+ browser : TWebBrowser;
4093+ doc : OleVariant;
4094+begin
4095+ if ( item <> nil ) then begin
4096+ if ( GikoForm.GetActiveContent = item.ThreadItem ) then begin
4097+ browser := TBrowserRecord(GikoForm.BrowserTab.Tabs
4098+ .Objects[GikoForm.BrowserTab.TabIndex]).Browser;
4099+ if (browser <> nil) then begin
4100+ try
4101+ doc := Idispatch( olevariant(browser.ControlInterface).Document) as IHTMLDocument2;
4102+ doc.Body.ScrollTop := item.ScrollTop;
4103+ except
4104+ end;
4105+ end;
4106+ end else begin
4107+ //URL‚Ɉړ®
4108+ MoveURLWithHistory(item.ThreadItem.URL);
4109+ end;
4110+ end;
4111+end;
4112+//! —š—ðˆ—‚‚«URLˆÚ“®
4113+procedure TGikoDM.MoveURLWithHistory(URL : String);
4114+var
4115+ idx : Integer;
4116+begin
4117+ //URL‚Ɉړ®
4118+ GikoForm.MoveToURL(URL);
4119+ //ˆÈ‰ºA—š—ð‚̏ˆ—
4120+ idx := GikoForm.AddressComboBox.Items.IndexOf(URL);
4121+ if idx = -1 then begin
4122+ GikoForm.AddressComboBox.Items.Insert(0, URL);
4123+ if GikoForm.AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
4124+ GikoForm.AddressComboBox.Items.Delete(GikoForm.AddressComboBox.Items.Count - 1);
4125+ end else begin
4126+ GikoForm.AddressComboBox.Items.Delete(idx);
4127+ GikoForm.AddressComboBox.Items.Insert(0, URL);
4128+ end;
4129+end;
4130+// *************************************************************************
4131+//! ƒŠƒ“ƒN—š—ð‚ði‚ނ̍XVˆ—
4132+// *************************************************************************
4133+procedure TGikoDM.NextMoveHistoryUpdate(Sender: TObject);
4134+begin
4135+ NextMoveHistory.Enabled :=
4136+ (MoveHisotryManager.HisotryIndex < MoveHisotryManager.Count - 1);
4137+end;
4138+// *************************************************************************
4139+//! ƒŠƒ“ƒN—š—ð‚ði‚Þ
4140+// *************************************************************************
4141+procedure TGikoDM.NextMoveHistoryExecute(Sender: TObject);
4142+begin
4143+ BackToHistory(MoveHisotryManager.getNextItem);
4144+end;
4145+// *************************************************************************
4146+//! ƒAƒNƒeƒBƒu—v‘f‚̃NƒŠƒbƒN
4147+// *************************************************************************
4148+procedure TGikoDM.ClickActiveElementActionExecute(Sender: TObject);
4149+var
4150+ browser : TWebBrowser;
4151+ elem : IHTMLElement;
4152+begin
4153+ if (GikoForm.GetActiveContent <> nil) then begin
4154+ if (GikoForm.BrowserTab.Tabs.Count > 0) and
4155+ (GikoForm.BrowserTab.TabIndex >= 0) then begin
4156+ browser := TBrowserRecord(GikoForm.BrowserTab.Tabs
4157+ .Objects[GikoForm.BrowserTab.TabIndex]).Browser;
4158+ if (browser <> nil) then begin
4159+ try
4160+ elem := IHTMLDocument2(browser.Document).activeElement;
4161+ elem.click;
4162+ except
4163+ end;
4164+ end;
4165+
4166+ end;
4167+ end;
4168+end;
4169+//! «ƒL[‚̃Gƒ~ƒ…ƒŒ[ƒgƒAƒNƒVƒ‡ƒ“
4170+procedure TGikoDM.VKDownActionExecute(Sender: TObject);
4171+begin
4172+ keybd_event(VK_DOWN, 0, KEYEVENTF_EXTENDEDKEY, 0);
4173+ keybd_event(VK_DOWN, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
4174+end;
4175+//! ªƒL[‚̃Gƒ~ƒ…ƒŒ[ƒgƒAƒNƒVƒ‡ƒ“
4176+procedure TGikoDM.VKUpActionExecute(Sender: TObject);
4177+begin
4178+ keybd_event(VK_UP, 0, KEYEVENTF_EXTENDEDKEY, 0);
4179+ keybd_event(VK_UP, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
4180+end;
4181+//! ¨ƒL[‚̃Gƒ~ƒ…ƒŒ[ƒgƒAƒNƒVƒ‡ƒ“
4182+procedure TGikoDM.VKRightActionExecute(Sender: TObject);
4183+begin
4184+ keybd_event(VK_RIGHT, 0, KEYEVENTF_EXTENDEDKEY, 0);
4185+ keybd_event(VK_RIGHT, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
4186+end;
4187+//! ©ƒL[‚̃Gƒ~ƒ…ƒŒ[ƒgƒAƒNƒVƒ‡ƒ“
4188+procedure TGikoDM.VKLeftActionExecute(Sender: TObject);
4189+begin
4190+ keybd_event(VK_LEFT, 0, KEYEVENTF_EXTENDEDKEY, 0);
4191+ keybd_event(VK_LEFT, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
4192+end;
4193+//! ƒ^ƒXƒNƒgƒŒƒC‚ÉŠi”[‚·‚é
4194+procedure TGikoDM.StoredTaskTrayActionExecute(Sender: TObject);
4195+begin
4196+ GikoForm.StoredTaskTray;
4197+ StoredTaskTrayAction.Tag := -1;
4198+end;
4199+
4200+{
4201+\breif ƒŠƒ“ƒNƒCƒ[ƒWŽæ“¾
4202+ƒCƒ[ƒW‚́C*.jpg, *.jpeg, *.gif, *.png
4203+}
4204+procedure TGikoDM.AllImageLinkToClipbordActionExecute(Sender: TObject);
4205+var
4206+ links : IHTMLElementCollection;
4207+ urls : TStringList;
4208+begin
4209+ links := GetActiveThreadLinks;
4210+ if (links <> nil) then begin
4211+ urls := TStringList.Create;
4212+ try
4213+ GetImageLinkURLs(links, urls, 0);
4214+ Clipboard.SetTextBuf(urls.GetText);
4215+ finally
4216+ urls.Free;
4217+ end;
4218+ end;
4219+end;
4220+
4221+{
4222+\breif V’…ƒŒƒX‚̃Šƒ“ƒNƒCƒ[ƒWŽæ“¾
4223+ƒCƒ[ƒW‚́C*.jpg, *.jpeg, *.gif, *.png
4224+}
4225+procedure TGikoDM.NewImageLinkToClipBoardActionExecute(Sender: TObject);
4226+var
4227+ links : IHTMLElementCollection;
4228+ urls : TStringList;
4229+ ThreadItem : TThreadItem;
4230+begin
4231+ ThreadItem := GikoForm.GetActiveContent;
4232+ links := GetActiveThreadLinks;
4233+ if (ThreadItem <> nil) and (links <> nil) then begin
4234+ urls := TStringList.Create;
4235+ try
4236+ GetImageLinkURLs(links, urls,
4237+ (ThreadItem.Count - ThreadItem.NewResCount + 1) );
4238+ Clipboard.SetTextBuf(urls.GetText);
4239+ finally
4240+ urls.Free;
4241+ end;
4242+ end;
4243+end;
4244+{
4245+\brief Œ»Ý•\Ž¦‚µ‚Ä‚¢‚éƒXƒŒƒbƒh‚Ì‚·‚ׂẴŠƒ“ƒN‚ðŽæ“¾‚·‚éB
4246+\return IHTMLElementCollection ƒŠƒ“ƒN‚̃RƒŒƒNƒVƒ‡ƒ“
4247+}
4248+function TGikoDM.GetActiveThreadLinks : IHTMLElementCollection;
4249+var
4250+ browser : TWebBrowser;
4251+begin
4252+ Result := nil;
4253+ if (GikoForm.GetActiveContent <> nil) then begin
4254+ if (GikoForm.BrowserTab.Tabs.Count > 0) and
4255+ (GikoForm.BrowserTab.TabIndex >= 0) then begin
4256+ browser := TBrowserRecord(GikoForm.BrowserTab.Tabs
4257+ .Objects[GikoForm.BrowserTab.TabIndex]).Browser;
4258+ if (browser <> nil) then begin
4259+ try
4260+ Result := IHTMLDocument2(browser.Document).links;
4261+ except
4262+ Result := nil;
4263+ end;
4264+ end;
4265+
4266+ end;
4267+ end;
4268+end;
4269+{
4270+\brief ƒCƒ[ƒW‚ւ̃Šƒ“ƒN‚ÌURL‚ðŽæ“¾‚·‚é
4271+\param links Žæ“¾‚·‚郊ƒ“ƒN‚Ì‘S‘̂̃RƒŒƒNƒVƒ‡ƒ“
4272+\param URLs Žæ“¾‚µ‚½URL‚Ì•Û‘¶æ
4273+\param Start Ý’肵‚½ƒŒƒX”ԍ†ˆÈ~‚ðŽæ“¾( > 0)
4274+}
4275+procedure TGikoDM.GetImageLinkURLs(links : IHTMLElementCollection;
4276+ URLs : TStringList; const Start: Integer);
4277+var
4278+ index ,i : Integer;
4279+ item : IHTMLElement;
4280+ url, ext : string;
4281+begin
4282+ if (links <> nil) then begin
4283+ index := 0;
4284+ for i := 0 to links.length - 1 do begin
4285+ item := links.item(i, 0) as IHTMLElement;
4286+ if (item <> nil) then begin
4287+ url := item.getAttribute('href', 0);
4288+ // ƒŒƒX‚̔ԍ†‚ðXV
4289+ if (Pos('menu:', url) > 0) then begin
4290+ index := StrToInt64Def(
4291+ Copy(url, 5, Length(url)), index + 1
4292+ );
4293+ end else begin
4294+ // ŠJŽnƒŒƒX”ԍ†ˆÈ~‚©ƒ`ƒFƒbƒN
4295+ if (index >= Start) then begin
4296+ ext := ExtractFileExt( AnsiLowerCase(url) );
4297+ // jpg,jpeg,gif,png‚ðƒ`ƒFƒbƒN
4298+ if (ext = '.jpg') or (ext = '.jpeg') or
4299+ (ext = '.gif') or (ext = '.png') then begin
4300+ urls.Add(url)
4301+ end;
4302+ end;
4303+ end;
4304+ end;
4305+ end;
4306+ end;
4307+end;
4308+{
4309+\brief ƒAƒhƒŒƒXƒo[‚ɃtƒH[ƒJƒX‚ð“–‚Ä‚é
4310+\param Sender ƒCƒxƒ“ƒg‚Ì”­¶Œ³
4311+}
4312+procedure TGikoDM.SetForcusForAddresBarActionExecute(Sender: TObject);
4313+begin
4314+ if ( GikoForm.AddressToolBar.Visible ) then begin
4315+ GikoForm.AddressComboBox.SetFocus;
4316+ end
4317+end;
4318+{
4319+\brief ˆÚ“]‚µ‚½”‚ÌURL‚ðŽæ“¾‚·‚éƒ_ƒCƒAƒOƒ‰ƒ€‚ð•\Ž¦‚·‚é
4320+}
4321+procedure TGikoDM.NewBoardSearchActionExecute(Sender: TObject);
4322+var
4323+ form : TNewBoardURLForm;
4324+ Msg: string;
4325+begin
4326+ if (EditorFormExists) then begin
4327+ Msg := 'ƒŒƒXƒGƒfƒBƒ^‚ð‘S‚ĕ‚¶‚Ä‚­‚¾‚³‚¢';
4328+ MsgBox(GikoForm.Handle, Msg, MSG_ERROR, MB_OK or MB_ICONSTOP);
4329+ Exit;
4330+ end;
4331+ form := TNewBoardURLForm.Create(Self);
4332+ try
4333+ form.ShowModal;
4334+ finally
4335+ form.Release;
4336+ end;
4337+end;
4338+
40414339 end.
40424340
--- a/GikoSystem.pas
+++ b/GikoSystem.pas
@@ -114,6 +114,8 @@ type
114114 FGikoMessage: TGikoMessage;
115115 //! ‚ ‚éƒZƒpƒŒ[ƒ^‚Å‹æØ‚ç‚ꂽ•¶Žš—ñ‚©‚ç‚Ž”Ô–Ú‚Ì•¶Žš—ñ‚ðŽæ‚èo‚·
116116 function ChooseString(const Text, Separator: string; Index: integer): string;
117+ //! ˆêŽžƒtƒ@ƒCƒ‹‚©‚ç‚Ì•œ‹Œ
118+ procedure RestoreThreadData(Board: TBoard);
117119 public
118120 { Public éŒ¾ }
119121 FAbon : TAbon;
@@ -247,6 +249,10 @@ type
247249 function GetGikoMessage(MesType: TGikoMessageListType): String;
248250 //! GMT‚ÌŽž‚ðTDateTime‚É•ÏŠ·‚·‚é
249251 function DateStrToDateTime(const DateStr: string): TDateTime;
252+ //! User32.dll‚ª—˜—p‚Å‚«‚é‚©
253+ function CanUser32DLL: Boolean;
254+ //! OEˆø—p•„Žæ“¾
255+ function GetOEIndentChar : string;
250256 end;
251257
252258 var
@@ -256,7 +262,7 @@ const
256262 ZERO_DATE: Integer = 25569;
257263 BETA_VERSION_NAME_E = 'beta';
258264 BETA_VERSION_NAME_J = 'ÊÞÀ';
259- BETA_VERSION = 53;
265+ BETA_VERSION = 54;
260266 BETA_VERSION_BUILD = ''; //!< debug”Å‚È‚Ç
261267 APP_NAME = 'gikoNavi';
262268 BE_PHP_URL = 'http://be.2ch.net/test/p.php?i=';
@@ -554,24 +560,17 @@ var
554560 ThreadItem: TThreadItem;
555561 FileName: string;
556562 FileList: TStringList;
557- TmpFileList: TStringList;
558563 Index: Integer;
559564 sl: TStringList;
560565 i: Integer;
561566 Rec: TIndexRec;
562567 UnRead: Integer;
563- ini: TMemIniFile;
564568 ResRec: TResRec;
565-// RoundItem: TRoundItem;
566-// idx: Integer;
567569 usePlugIn : Boolean;
568- tmpStr: string;
569570 BoardPath : String;
570571 server : String;
571572 islog : Boolean;
572573 urlHead: String;
573- //protocol, host, path, document, port, bookmark : string;
574- //is2ch : Boolean;
575574 {*
576575 FavoThreadItem : TFavoriteThreadItem;
577576 Node: TTreeNode;
@@ -581,25 +580,17 @@ begin
581580 Exit;
582581 Board.Clear;
583582 UnRead := 0;
584- //is2ch := false;
585583 usePlugIn := Board.IsBoardPlugInAvailable;
586584 server := UrlToServer( Board.URL );
587- //is2ch := Is2chHost(server);
588585
589586 FileName := Board.GetFolderIndexFileName;
590587
591588 FileList := TStringList.Create;
592589 FileList.Sorted := True;
593590 FileList.BeginUpdate;
594- TmpFileList := TStringList.Create;
595- TmpFileList.Sorted := True;
596- TmpFileList.BeginUpdate;
597591 //IsLogFile—pDATƒtƒ@ƒCƒ‹ƒŠƒXƒg
598592 GetFileList(ExtractFileDir(Board.GetFolderIndexFileName), '*.dat', FileList, False);
599593 FileList.EndUpdate;
600- //‘O‰ñˆÙíI—¹Žž—pTmpƒtƒ@ƒCƒ‹ƒŠƒXƒg
601- GetFileList(ExtractFileDir(Board.GetFolderIndexFileName), '*.tmp', TmpFileList, False);
602- TmpFileList.EndUpdate;
603594
604595 // d•¡‚ð–h‚®
605596 Board.BeginUpdate;
@@ -650,8 +641,7 @@ begin
650641
651642 ThreadItem.No := Rec.FNo;
652643 ThreadItem.FileName := Rec.FFileName;
653- ThreadItem.Title := Rec.FTitle;
654- //ThreadItem.ShortTitle := CustomStringReplace(ZenToHan(ThreadItem.Title), ' ', '');
644+ ThreadItem.Title := MojuUtils.UnSanitize(Rec.FTitle);
655645 ThreadItem.Count := Rec.FCount;
656646 ThreadItem.Size := Rec.FSize;
657647 ThreadItem.RoundDate := Rec.FRoundDate;
@@ -724,50 +714,12 @@ begin
724714 Board.Add(ThreadItem);
725715 end;
726716 Board.EndUpdate;
727-
728- //‘O‰ñˆÙíI—¹Žžƒ`ƒFƒbƒN
729- for i := TmpFileList.Count - 1 downto 0 do begin
730- //if TmpFileList.Count <> 0 then begin
731- ThreadItem := Board.FindThreadFromFileName(ChangeFileExt(TmpFileList[i], '.dat'));
732- if ThreadItem <> nil then begin
733- //if TmpFileList.Find(ChangeFileExt(ThreadItem.FileName, '.tmp'), Index) then begin
734- ini := TMemIniFile.Create(Boardpath + TmpFileList[i]);
735- try
736- tmpStr := ini.ReadString('Setting', 'RoundDate', DateTimeToStr(ZERO_DATE));
737- ThreadItem.RoundDate := ConvertDateTimeString(tmpStr);
738-
739- tmpStr := ini.ReadString('Setting', 'LastModified', DateTimeToStr(ZERO_DATE));
740- ThreadItem.LastModified := ConvertDateTimeString(tmpStr);
741- ThreadItem.Count := ini.ReadInteger('Setting', 'Count', 0);
742- ThreadItem.NewReceive := ini.ReadInteger('Setting', 'NewReceive', 0);
743-
744- ThreadItem.Size := ini.ReadInteger('Setting', 'Size', 0);
745- if(ThreadItem.Size = 0) and (FileExists(ThreadItem.GetThreadFileName)) then begin
746- try
747- ThreadItem.Size := GetFileSize(ThreadItem.GetThreadFileName) - ThreadItem.Count;
748- except
749- end;
750- end;
751-
752- //„‰ñ‚̐ݒè‚ÍRoundData‚Ì•û‚ª‚â‚é‚©‚珟Žè‚ɐݒ肵‚Ă̓_ƒI@by ‚à‚¶‚ã
753- //ThreadItem.Round := ini.ReadBool('Setting', 'Round', False);
754- //ThreadItem.RoundName := ini.ReadString('Setting', 'RoundName', ThreadItem.RoundName);
755- ThreadItem.UnRead := False;//ini.ReadBool('Setting', 'UnRead', False);
756- ThreadItem.ScrollTop := ini.ReadInteger('Setting', 'ScrollTop', 0);
757- ThreadItem.AllResCount := ini.ReadInteger('Setting', 'AllResCount', ThreadItem.Count);
758- ThreadItem.NewResCount := ini.ReadInteger('Setting', 'NewResCount', 0);
759- ThreadItem.AgeSage := TGikoAgeSage(ini.ReadInteger('Setting', 'AgeSage', Ord(gasNone)));
760- finally
761- ini.Free;
762- end;
763- DeleteFile(Boardpath + TmpFileList[i]);
764- end;
765- end;
766-
717+
718+ //‘O‰ñˆÙíI—¹Žžƒ`ƒFƒbƒN
719+ RestoreThreadData( Board );
767720 finally
768721 sl.Free;
769722 FileList.Free;
770- TmpFileList.Free;
771723 Board.Sorted := False;
772724 end;
773725 Board.IsThreadDatRead := True;
@@ -824,7 +776,7 @@ begin
824776 '%s'#1'%x'#1'%x'#1'%x'#1'%x'#1'%x',
825777 [cnt, //”ԍ†
826778 Rec.FFileName, //ƒtƒ@ƒCƒ‹–¼
827- Rec.FTitle, //ƒ^ƒCƒgƒ‹
779+ MojuUtils.Sanitize(Rec.FTitle), //ƒ^ƒCƒgƒ‹
828780 Rec.FCount, //ƒJƒEƒ“ƒg
829781 0, //size
830782 0, //RoundDate
@@ -894,7 +846,7 @@ begin
894846 '%s'#1'%x'#1'%x'#1'%x'#1'%x'#1'%x',
895847 [Board.Items[i].No, //”ԍ†
896848 Board.Items[i].FileName, //ƒtƒ@ƒCƒ‹–¼
897- Board.Items[i].Title, //ƒ^ƒCƒgƒ‹
849+ MojuUtils.Sanitize(Board.Items[i].Title), //ƒ^ƒCƒgƒ‹
898850 Board.Items[i].Count, //ƒJƒEƒ“ƒg
899851 Board.Items[i].Size, //size
900852 DateTimeToInt(Board.Items[i].RoundDate), //RoundDate
@@ -933,7 +885,7 @@ function TGikoSys.ParseIndexLine(Line: string): TIndexRec;
933885 begin
934886 Result.FNo := StrToIntDef('$' + RemoveToken(Line, #1), 0);
935887 Result.FFileName := RemoveToken(Line, #1);
936- Result.FTitle := RemoveToken(Line, #1);
888+ Result.FTitle := MojuUtils.UnSanitize(RemoveToken(Line, #1));
937889 Result.FCount := StrToIntDef('$' + RemoveToken(Line, #1), 0);
938890 Result.FSize := StrToIntDef('$' + RemoveToken(Line, #1), 0);
939891 Result.FRoundDate := IntToDateTime(StrToIntDef('$' + RemoveToken(Line, #1), ZERO_DATE));
@@ -3306,6 +3258,126 @@ begin
33063258 p := AnsiPos(Separator, S);
33073259 if (p > 0) then Result := Copy(S, 1, p - 1) else Result := S;
33083260 end;
3261+//! ˆêŽžƒtƒ@ƒCƒ‹‚©‚ç‚Ì•œ‹Œ
3262+procedure TGikoSys.RestoreThreadData(Board : TBoard);
3263+const
3264+ SECTION = 'Setting';
3265+var
3266+ TmpFileList : TStringList;
3267+ i : Integer;
3268+ ini : TMemIniFile;
3269+ ThreadItem : TThreadItem;
3270+ Boardpath, tmpStr : string;
3271+begin
3272+ Boardpath := ExtractFilePath(Board.GetFolderIndexFileName);
3273+
3274+ TmpFileList := TStringList.Create;
3275+ TmpFileList.Sorted := True;
3276+ TmpFileList.BeginUpdate;
3277+ try
3278+ //‘O‰ñˆÙíI—¹Žž—pTmpƒtƒ@ƒCƒ‹ƒŠƒXƒg
3279+ GetFileList(Boardpath, '*.tmp', TmpFileList, False);
3280+ TmpFileList.EndUpdate;
3281+ //‘O‰ñˆÙíI—¹Žžƒ`ƒFƒbƒN
3282+ for i := TmpFileList.Count - 1 downto 0 do begin
3283+ ThreadItem := Board.FindThreadFromFileName(ChangeFileExt(TmpFileList[i], '.dat'));
3284+ if ThreadItem <> nil then begin
3285+ ini := TMemIniFile.Create(Boardpath + TmpFileList[i]);
3286+ try
3287+ tmpStr := ini.ReadString(SECTION, 'RoundDate', DateTimeToStr(ZERO_DATE));
3288+ ThreadItem.RoundDate := ConvertDateTimeString(tmpStr);
3289+
3290+ tmpStr := ini.ReadString(SECTION, 'LastModified', DateTimeToStr(ZERO_DATE));
3291+ ThreadItem.LastModified := ConvertDateTimeString(tmpStr);
3292+ ThreadItem.Count := ini.ReadInteger(SECTION, 'Count', 0);
3293+ ThreadItem.NewReceive := ini.ReadInteger(SECTION, 'NewReceive', 0);
3294+
3295+ ThreadItem.Size := ini.ReadInteger(SECTION, 'Size', 0);
3296+ if(ThreadItem.Size = 0) and (FileExists(ThreadItem.GetThreadFileName)) then begin
3297+ try
3298+ ThreadItem.Size := GetFileSize(ThreadItem.GetThreadFileName) - ThreadItem.Count;
3299+ except
3300+ end;
3301+ end;
3302+
3303+ //„‰ñ‚̐ݒè‚ÍRoundData‚Ì•û‚ª‚â‚é‚©‚珟Žè‚ɐݒ肵‚Ă̓_ƒI@by ‚à‚¶‚ã
3304+ //ThreadItem.Round := ini.ReadBool('Setting', 'Round', False);
3305+ //ThreadItem.RoundName := ini.ReadString('Setting', 'RoundName', ThreadItem.RoundName);
3306+ ThreadItem.UnRead := False;//ini.ReadBool('Setting', 'UnRead', False);
3307+ ThreadItem.ScrollTop := ini.ReadInteger(SECTION, 'ScrollTop', 0);
3308+ ThreadItem.AllResCount := ini.ReadInteger(SECTION, 'AllResCount', ThreadItem.Count);
3309+ ThreadItem.NewResCount := ini.ReadInteger(SECTION, 'NewResCount', 0);
3310+ ThreadItem.AgeSage := TGikoAgeSage(ini.ReadInteger(SECTION, 'AgeSage', Ord(gasNone)));
3311+ finally
3312+ ini.Free;
3313+ end;
3314+ DeleteFile(Boardpath + TmpFileList[i]);
3315+ end;
3316+ end;
3317+ finally
3318+ TmpFileList.Clear;
3319+ TmpFileList.Free;
3320+ end;
3321+end;
3322+{
3323+\brief User32.dll‚ª—˜—p‚Å‚«‚é‚©
3324+\return Boolean —˜—p‚Å‚«‚éê‡‚ÍTrue
3325+}
3326+function TGikoSys.CanUser32DLL: Boolean;
3327+var
3328+ hUser32 : HINST;
3329+begin
3330+ Result := False;
3331+ hUser32 := 0;
3332+ try
3333+ try
3334+ hUser32 := LoadLibrary('User32.dll');
3335+ if hUser32 <> 0 then begin
3336+ Result := True;
3337+ end;
3338+ except
3339+ Result := false;
3340+ end;
3341+ finally
3342+ FreeLibrary(hUser32);
3343+ end;
3344+end;
3345+{
3346+\brief OEˆø—p•„Žæ“¾
3347+\return OE‚̈ø—p•„iÝ’肳‚ê‚Ä‚¢‚È‚¢ê‡‚Í'>')
3348+}
3349+function TGikoSys.GetOEIndentChar : string;
3350+var
3351+ regKey : TRegistry;
3352+ Identities : string;
3353+ IndentChar : DWORD;
3354+const
3355+ DEFAULT_CHAR = '> ';
3356+ OE_MAIL_PATH = '\Software\Microsoft\Outlook Express\5.0\Mail';
3357+ INDENT_CHAR = 'Indent Char';
3358+begin
3359+
3360+ Result := DEFAULT_CHAR;
3361+ regKey := TRegistry.Create;
3362+ try
3363+ try
3364+ regKey.RootKey := HKEY_CURRENT_USER;
3365+ if not regKey.OpenKey( 'Identities', False ) then
3366+ Exit;
3367+ Identities := regKey.ReadString( 'Default User ID' );
3368+ if Identities = '' then
3369+ Exit;
3370+ if not regKey.OpenKey( Identities + OE_MAIL_PATH, False ) then
3371+ Exit;
3372+ IndentChar := regKey.ReadInteger( INDENT_CHAR );
3373+ Result := Char( IndentChar ) + ' ';
3374+ except
3375+ end;
3376+ finally
3377+ regKey.Free;
3378+ end;
3379+
3380+end;
33093381
33103382 initialization
33113383 GikoSys := TGikoSys.Create;
--- a/HTMLCreate.pas
+++ b/HTMLCreate.pas
@@ -67,7 +67,7 @@ type
6767 dat : boolean; var s : String) : string;
6868 function getNumberString(const str: String;var index :Integer; var dbCharlen: Boolean;
6969 sLen :Integer): String;
70-
70+ function isOutsideRange(item: TThreadItem; index: Integer ): Boolean;
7171 public
7272 { Public éŒ¾ }
7373 procedure AddAnchorTag(PRes: PResRec);
@@ -86,6 +86,11 @@ type
8686 class procedure DivideStrLine(Line: string; PRes: PResRec);
8787 //HTML‚©‚烊ƒ“ƒNƒ^ƒO‚ðíœ‚·‚é
8888 class function DeleteLink(const s: string): string;
89+ //HTML‚̃{ƒfƒB‚É‹–‚³‚ê‚镶Žš—ñ‚É’uŠ·‚·‚é
90+ class function RepHtml(const s: string): string;
91+ //ƒŒƒXƒGƒfƒBƒ^‚̃vƒŒƒrƒ…[—pHTML‚ðì¬‚·‚é
92+ class function CreatePreviewHTML(const Title: string; const No: string;
93+ const Mail: string; const Namae: string; const Body: string ) : string;
8994 end;
9095
9196 var
@@ -93,6 +98,9 @@ var
9398
9499 implementation
95100
101+uses
102+ Trip;
103+
96104 const
97105 URL_CHAR: string = '0123456789'
98106 + 'abcdefghijklmnopqrstuvwxyz'
@@ -629,7 +637,6 @@ begin
629637 PRes.FBody := PRes.FBody + res;
630638
631639 end;
632-
633640 //Plugin‚ð—˜—p‚·‚éBoard‚̃XƒŒƒbƒh‚ÌHTML‚ðì¬‚µ‚Ädoc‚ɏ‘‚«ž‚Þ
634641 procedure THTMLCreate.CreateUsePluginHTML(html:TBufferedWebBrowser; ThreadItem: TThreadItem; var sTitle: string);
635642 var
@@ -652,17 +659,9 @@ begin
652659 // 1 ‚Í•K‚¸•\Ž¦
653660 if i <> 0 then begin
654661 // •\Ž¦”͈͂ðŒÀ’è
655- case GikoSys.ResRange of
656- Ord( grrKoko ):
657- if ThreadItem.Kokomade > (i + 1) then
658- Continue;
659- Ord( grrNew ):
660- if NewReceiveNo > (i + 1) then
661- Continue;
662- 10..65535:
663- if (threadItem.Count - i) > GikoSys.ResRange then
664- Continue;
665- end;
662+ if (isOutsideRange(ThreadItem, i)) then begin
663+ Continue;
664+ end;
666665 end;
667666
668667 // V’…ƒ}[ƒN
@@ -757,17 +756,9 @@ begin
757756 // 1 ‚Í•K‚¸•\Ž¦
758757 if i <> 0 then begin
759758 // •\Ž¦”͈͂ðŒÀ’è
760- case GikoSys.ResRange of
761- Ord( grrKoko ):
762- if ThreadItem.Kokomade > (i + 1) then
763- Continue;
764- Ord( grrNew ):
765- if NewReceiveNo > (i + 1) then
766- Continue;
767- 10..65535:
768- if (threadItem.Count - i) > GikoSys.ResRange then
769- Continue;
770- end;
759+ if (isOutsideRange(ThreadItem, i)) then begin
760+ Continue;
761+ end;
771762 end;
772763
773764 // V’…ƒ}[ƒN
@@ -854,18 +845,10 @@ begin
854845 for i := 0 to ReadList.Count - 1 do begin
855846 // 1 ‚Í•K‚¸•\Ž¦
856847 if i <> 0 then begin
857- // •\Ž¦”͈͂ðŒÀ’è
858- case GikoSys.ResRange of
859- Ord( grrKoko ):
860- if ThreadItem.Kokomade > (i + 1) then
861- Continue;
862- Ord( grrNew ):
863- if NewReceiveNo > (i + 1) then
864- Continue;
865- 10..65535:
866- if (threadItem.Count - i) > GikoSys.ResRange then
867- Continue;
868- end;
848+ // •\Ž¦”͈͂ðŒÀ’è
849+ if (isOutsideRange(ThreadItem, i)) then begin
850+ Continue;
851+ end;
869852 end;
870853
871854 if (NewReceiveNo = (i + 1)) or ((NewReceiveNo = 0) and (i = 0)) then begin
@@ -924,17 +907,9 @@ begin
924907 // 1 ‚Í•K‚¸•\Ž¦
925908 if i <> 0 then begin
926909 // •\Ž¦”͈͂ðŒÀ’è
927- case GikoSys.ResRange of
928- Ord( grrKoko ):
929- if ThreadItem.Kokomade > (i + 1) then
930- Continue;
931- Ord( grrNew ):
932- if NewReceiveNo > (i + 1) then
933- Continue;
934- 10..65535:
935- if (threadItem.Count - i) > GikoSys.ResRange then
936- Continue;
937- end;
910+ if (isOutsideRange(ThreadItem, i)) then begin
911+ Continue;
912+ end;
938913 end;
939914
940915 if (NewReceiveNo = (i + 1)) or ((NewReceiveNo = 0) and (i = 0)) then begin
@@ -1426,7 +1401,9 @@ begin
14261401 end else if GikoSys.Setting.UseCSS then begin
14271402 current := ExtractFilePath(GikoSys.GetStyleSheetDir);
14281403 tmp := ExtractFilePath(GikoSys.GetStyleSheetDir + GikoSys.Setting.CSSFileName);
1429- end;
1404+ end else begin
1405+ Exit;
1406+ end;
14301407 dirs := TStringList.Create;
14311408 try
14321409 dirs.Add(tmp);
@@ -1544,7 +1521,94 @@ begin
15441521 inc(i, 2);
15451522 end;
15461523 end;
1524+{
1525+\brief HTML‰»‚Ì‚½‚ß‚Ì’uŠ·
1526+\param s Œ³‚ɂȂ镶Žš—ñ
1527+\return HTML‚ÌinnerText‚Æ‚µ‚Ä‚ä‚邳‚ê‚镶Žš—ñ
1528+}
1529+class function THTMLCreate.RepHtml(const s: string): string;
1530+begin
1531+// s := StringReplace(s, '&', '&amp;', [rfReplaceAll]);
1532+ Result := s;
1533+ Result := CustomStringReplace(Result, '<', '&lt;');
1534+ Result := CustomStringReplace(Result, '>', '&gt;');
1535+// s := StringReplace(s, ' ', '&nbsp;', [rfReplaceAll]); //Žd—l•ÏX‚É‚æ‚è&nbsp;Žg—p•s‰Â
1536+ Result := CustomStringReplace(Result, '"', '&quot;');
1537+end;
1538+{
1539+\brief ƒŒƒXƒGƒfƒBƒ^‚ł̃vƒŒƒrƒ…[—pHTMLì¬
1540+\param Title ƒXƒŒƒbƒhƒ^ƒCƒgƒ‹
1541+\param No ƒŒƒX”ԍ†
1542+\param Mail ƒ[ƒ‹—“
1543+\param Name –¼‘O—“
1544+\param Body –{•¶
1545+\return ƒvƒŒƒrƒ…[—pHTML
1546+}
1547+class function THTMLCreate.CreatePreviewHTML(
1548+ const Title: string;
1549+ const No: string;
1550+ const Mail: string;
1551+ const Namae: string;
1552+ const Body: string
1553+) : string;
1554+var
1555+ posTrip : Integer;
1556+ tripOrigin : string;
1557+ NameWithTrip: string;
1558+ DateTime: string;
1559+begin
1560+ Result := '<HTML><HEAD>'#13#10
1561+ + '<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">'#13#10
1562+ + '<TITLE>' + title + '</TITLE>'#13#10
1563+ + '</HEAD>'#13#10
1564+ + '<BODY text="#000000" bgcolor="#EFEFEF" link="#0000FF" alink="#FF0000" vlink="#660099">'#13#10
1565+ + '<FONT COLOR="#FF0000">' + title + '</FONT>'#13#10
1566+ + '<DL>'#13#10;
1567+
1568+ DateTime := FormatDateTime('yyyy/mm/dd(aaa) hh:nn', Now());
1569+
1570+ NameWithTrip := Namae;
1571+ posTrip := AnsiPos( '#', Namae );
1572+ if posTrip > 0 then begin
1573+ tripOrigin := Copy( Namae, posTrip + 1, Length( Namae ) );
1574+ NameWithTrip := Copy( Namae, 1, posTrip - 1 ) + '</B> Ÿ' +
1575+ get_2ch_trip( PChar( tripOrigin ) ) + '<B>';
1576+ end;
1577+ if Mail = '' then begin
1578+ Result := Result + '<DT>' + No + ' F <FONT color="forestgreen"><B>' + NameWithTrip
1579+ + '</B></FONT> F ' + DateTime+ '<BR><DD>' + Body + '<BR><BR><BR>' + #13#10
1580+ end else begin
1581+ Result := Result + '<DT>' + No + ' F <A href="mailto:' + Mail + '"><B>' + NameWithTrip
1582+ + '</B></A> [' + Mail + ']F ' + DateTime+ '<BR><DD>' + Body + '<BR><BR><BR>' + #13#10;
1583+ end;
1584+ Result := Result + '</BODY></HTML>';
15471585
1586+end;
1587+{
1588+\brief •\Ž¦”͈͊OƒŒƒX”ԍ†”»’菈—
1589+\param item •\Ž¦ƒXƒŒƒbƒh
1590+\param index ƒŒƒX”ԍ†
1591+\return ture:•\Ž¦”͈͊O false:•\Ž¦”͈͓à
1592+}
1593+function THTMLCreate.isOutsideRange( item: TThreadItem; index: Integer ): Boolean;
1594+begin
1595+ Result := False;
1596+ // •\Ž¦”͈͂ðŒÀ’è
1597+ case GikoSys.ResRange of
1598+ Ord( grrKoko ):
1599+ if item.Kokomade > (index + 1) then
1600+ Result := True;
1601+ Ord( grrNew ):
1602+ if item.NewReceive > (index + 1) then
1603+ Result := True;
1604+ 10..65535:
1605+ if (GikoSys.Setting.HeadResCount) < (index + 1) then begin
1606+ if (item.Count - index) > GikoSys.ResRange then begin
1607+ Result := True;
1608+ end;
1609+ end;
1610+ end;
1611+end;
15481612 constructor TBufferedWebBrowser.Create(Browser: TWebBrowser; BuffSize: Integer);
15491613 begin
15501614 inherited Create;
--- /dev/null
+++ b/HistoryList.pas
@@ -0,0 +1,261 @@
1+unit HistoryList;
2+
3+interface
4+
5+uses
6+ Windows, Messages, SysUtils, Classes, Graphics, Controls,
7+ BoardGroup, Favorite, ComCtrls, GikoXMLDoc;
8+
9+type
10+ TGikoTreeType = (gttNone, gtt2ch, gttHistory, gttFavorite);
11+
12+ THistoryList = class(TList)
13+ public
14+ function AddHistory( favItem : TFavoriteThreadItem; TreeView : TTreeView;
15+ TreeType: TGikoTreeType): Boolean;
16+ procedure DeleteHistory( threadItem: TThreadItem; TreeView : TTreeView;
17+ TreeType: TGikoTreeType );
18+ procedure Clear; override;
19+ procedure SaveToFile(const FileName: String);
20+ procedure LoadFromFile(const FileName: String;
21+ TreeView : TTreeView; TreeType: TGikoTreeType);
22+ procedure SetTreeNode( TreeView : TTreeView );
23+
24+ end;
25+
26+
27+implementation
28+
29+uses
30+ Giko, GikoSystem, Setting, YofUtils, MojuUtils;
31+
32+const
33+ ITEM_ICON_THREADLOG1 = 6; //ƒXƒŒƒAƒCƒRƒ“iƒƒO‚ ‚èj
34+ ITEM_ICON_THREADLOG2 = 7; //ƒXƒŒƒAƒCƒRƒ“iƒƒO‚ ‚èj
35+
36+
37+function THistoryList.AddHistory(
38+ favItem : TFavoriteThreadItem; TreeView : TTreeView;
39+ TreeType: TGikoTreeType ): Boolean;
40+var
41+ i: Integer;
42+ Item: TFavoriteThreadItem;
43+ Node: TTreeNode;
44+begin
45+ Result := True;
46+ if TreeType = gttHistory then
47+ TreeView.Selected := nil;
48+
49+ for i := 0 to Self.Count - 1 do begin
50+ if TObject(Self[i]) is TFavoriteThreadItem then begin
51+ Item := TFavoriteThreadItem(Self[i]);
52+ if Item.URL = favItem.URL then begin
53+ Self.Move(i, 0);
54+ if TreeType = gttHistory then
55+ if TreeView.Items.GetFirstNode <> TreeView.Items[ i ] then
56+ TreeView.Items[ i ].MoveTo( TreeView.Items.GetFirstNode, naInsert );
57+ Result := false;
58+ Exit;
59+ end;
60+ end;
61+ end;
62+
63+ if Self.Count > 0 then
64+ Self.Insert( 0, favItem )
65+ else
66+ Self.Add( favItem );
67+
68+ while GikoSys.Setting.MaxRecordCount < Self.Count do begin
69+ i := Self.Count - 1;
70+ TObject( Self.Items[ i ] ).Free;
71+ Self.Delete( i );
72+ end;
73+
74+ if TreeType = gttHistory then begin
75+ Node := TreeView.Items.Add( nil, favItem.Title );
76+ Node.MoveTo( TreeView.Items.GetFirstNode, naInsert );
77+ {
78+ if favItem.NewArrival then begin
79+ Node.ImageIndex := ITEM_ICON_THREADNEW1;
80+ Node.SelectedIndex := ITEM_ICON_THREADNEW2;
81+ end else begin
82+ Node.ImageIndex := ITEM_ICON_THREADLOG1;
83+ Node.SelectedIndex := ITEM_ICON_THREADLOG2;
84+ end;
85+ }
86+ // •‰‰×‚ð‚©‚¯‚½‚­‚È‚¢‚Ì‚Å NewArrival ‚̃`ƒFƒbƒN‚ðs‚í‚È‚¢
87+ // ¦favItem.Item ƒvƒƒpƒeƒB‚Í dat ‚̓ǂݍž‚Ý‚ð•K—v‚Æ‚·‚é
88+ Node.ImageIndex := ITEM_ICON_THREADLOG1;
89+ Node.SelectedIndex := ITEM_ICON_THREADLOG2;
90+ Node.Data := favItem;
91+ //while GikoSys.Setting.AddressHistoryCount < TreeView.Items.Count do begin
92+ while GikoSys.Setting.MaxRecordCount < TreeView.Items.Count do begin
93+ i := TreeView.Items.Count - 1;
94+ TreeView.Items.Item[ i ].Delete;
95+ end;
96+ end;
97+end;
98+
99+procedure THistoryList.DeleteHistory( threadItem: TThreadItem;
100+ TreeView : TTreeView; TreeType: TGikoTreeType );
101+var
102+ i: Integer;
103+ node: TTreeNode;
104+begin
105+ // ƒLƒƒƒrƒlƒbƒg‚É—š—ð‚ª•\Ž¦‚³‚ê‚Ä‚¢‚½‚çA
106+ // ƒLƒƒƒrƒlƒbƒg“à‚̃AƒCƒeƒ€‚àíœ‚·‚éB
107+ if (TreeType = gttHistory) then begin
108+ node := TreeView.Items.GetFirstNode;
109+ while (node <> nil) do begin
110+ if ( TFavoriteThreadItem(node.Data).Item = threadItem ) then begin
111+ TreeView.Items.Delete(node);
112+ TreeView.Refresh;
113+ node := nil;
114+ end else begin
115+ node := node.GetNext;
116+ end;
117+ end;
118+ end;
119+ for i := 0 to Self.Count - 1 do begin
120+ if threadItem = TFavoriteThreadItem( Self.Items[i] ).Item then begin
121+ TFavoriteThreadItem( Self.Items[ i ] ).Free;
122+ Self.Delete(i);
123+ Self.Capacity := Self.Count;
124+ Break;
125+ end;
126+ end;
127+end;
128+
129+procedure THistoryList.Clear;
130+var
131+ i : Integer;
132+begin
133+ try
134+ for i := Self.Count - 1 downto 0 do begin
135+ if TObject(Self[ i ]) is TFavoriteThreadItem then
136+ TFavoriteThreadItem(Self[ i ]).Free
137+ else if TObject(Self[ i ]) is TFavoriteBoardItem then
138+ TFavoriteBoardItem(Self[ i ]).Free;
139+ end;
140+ except
141+ end;
142+
143+ inherited Clear;
144+ Self.Capacity := Self.Count;
145+
146+end;
147+
148+procedure THistoryList.SaveToFile(const FileName: String);
149+var
150+ i, bound : Integer;
151+ saveList : TstringList;
152+begin
153+
154+ saveList := TStringList.Create;
155+ try
156+ Self.Pack;
157+ Self.Capacity := Self.Count;
158+ saveList.Add('<?xml version="1.0" encoding="Shift_JIS" standalone="yes"?>');
159+ saveList.Add('<address>');
160+ bound := Self.Count - 1;
161+ for i := bound downto 0 do begin
162+ // title ‚͍¡‚Ì‚Æ‚±‚ëŽg‚Á‚Ä‚¢‚È‚¢
163+ saveList.Add(
164+ '<history url="' + HtmlEncode( TFavoriteThreadItem( Self[ i ] ).URL ) + '"' +
165+ ' title="' + HtmlEncode( MojuUtils.Sanitize(TFavoriteThreadItem( Self[ i ] ).Title )) + '"/>');
166+ end;
167+ saveList.Add('</address>');
168+ saveList.SaveToFile( FileName );
169+ finally
170+ saveList.Free;
171+ end;
172+
173+end;
174+
175+procedure THistoryList.LoadFromFile(const FileName: String;
176+ TreeView : TTreeView; TreeType: TGikoTreeType);
177+var
178+ i, bound : Integer;
179+ XMLDoc : IXMLDocument;
180+ XMLNode : IXMLNode;
181+ HistoryNode : IXMLNode;
182+ s : string;
183+ favItem : TFavoriteThreadItem;
184+{$IFDEF DEBUG}
185+ st, rt : Cardinal;
186+{$ENDIF}
187+begin
188+{$IFDEF DEBUG}
189+ st := GetTickCount;
190+{$ENDIF}
191+ if FileExists( FileName ) then begin
192+ try
193+ XMLDoc := IXMLDocument.Create;
194+ //XMLDoc := LoadXMLDocument(FileName);
195+ LoadXMLDocument(FileName, XMLDoc);
196+ try
197+ XMLNode := XMLDoc.DocumentElement;
198+
199+ if XMLNode.NodeName = 'address' then begin
200+ bound := XMLNode.ChildNodes.Count - 1;
201+ for i := 0 to bound do begin
202+ HistoryNode := XMLNode.ChildNodes[i];
203+ if HistoryNode.NodeName = 'history' then begin
204+ //if FReadCount >= sl.Count then begin
205+ s := Trim(HistoryNode.Attributes['url']);
206+ if s <> '' then begin
207+ favItem := TFavoriteThreadItem.Create(
208+ s, MojuUtils.UnSanitize(HistoryNode.Attributes[ 'title' ]) );
209+ if not AddHistory( favItem, TreeView, TreeType ) then
210+ favItem.Free;
211+ end;
212+ //end;
213+ end;
214+ end;
215+ end;
216+ finally
217+ XMLDoc.Free;
218+ end;
219+ except
220+ end;
221+ end;
222+{$IFDEF DEBUG}
223+ rt := GetTickCount - st;
224+ Writeln('Runtime(Load Histroy) : ' + IntToStr(rt) + ' ms');
225+{$ENDIF}
226+
227+end;
228+procedure THistoryList.SetTreeNode(
229+ TreeView : TTreeView );
230+var
231+ i: Integer;
232+ Node: TTreeNode;
233+ Item: TFavoriteThreadItem;
234+begin
235+ TreeView.Items.BeginUpdate;
236+ try
237+ TreeView.Items.Clear;
238+ for i := 0 to Self.Count - 1 do begin
239+ Item := TFavoriteThreadItem(Self[i]);
240+ Node := TreeView.Items.Add(nil, Item.Title);
241+ {
242+ if Item.Item.NewArrival then begin
243+ Node.ImageIndex := ITEM_ICON_THREADNEW1;
244+ Node.SelectedIndex := ITEM_ICON_THREADNEW2;
245+ end else begin
246+ Node.ImageIndex := ITEM_ICON_THREADLOG1;
247+ Node.SelectedIndex := ITEM_ICON_THREADLOG2;
248+ end;
249+ }
250+ // •‰‰×‚ð‚©‚¯‚½‚­‚È‚¢‚Ì‚Å NewArrival ‚̃`ƒFƒbƒN‚ðs‚í‚È‚¢
251+ // ¦Item.Item ƒvƒƒpƒeƒB‚Í dat ‚̓ǂݍž‚Ý‚ð•K—v‚Æ‚·‚é
252+ Node.ImageIndex := ITEM_ICON_THREADLOG1;
253+ Node.SelectedIndex := ITEM_ICON_THREADLOG2;
254+ Node.Data := Item;
255+ end;
256+ finally
257+ TreeView.Items.EndUpdate;
258+ end;
259+end;
260+
261+end.
--- a/InputAssist.dfm
+++ b/InputAssist.dfm
@@ -1,7 +1,7 @@
11 object InputAssistForm: TInputAssistForm
2- Left = 589
3- Top = 279
4- Width = 397
2+ Left = 353
3+ Top = 196
4+ Width = 390
55 Height = 460
66 Caption = #20837#21147#12450#12471#12473#12488#35373#23450
77 Color = clBtnFace
@@ -18,14 +18,14 @@ object InputAssistForm: TInputAssistForm
1818 object Panel1: TPanel
1919 Left = 0
2020 Top = 0
21- Width = 389
21+ Width = 382
2222 Height = 200
2323 Align = alTop
2424 BevelOuter = bvLowered
2525 Caption = 'Panel1'
2626 TabOrder = 0
2727 object Panel5: TPanel
28- Left = 295
28+ Left = 288
2929 Top = 33
3030 Width = 93
3131 Height = 166
@@ -71,16 +71,15 @@ object InputAssistForm: TInputAssistForm
7171 object Panel6: TPanel
7272 Left = 1
7373 Top = 33
74- Width = 294
74+ Width = 287
7575 Height = 166
7676 Align = alClient
7777 BevelOuter = bvNone
78- Caption = 'Panel6'
7978 TabOrder = 1
8079 object GikoListView1: TGikoListView
8180 Left = 0
8281 Top = 0
83- Width = 294
82+ Width = 287
8483 Height = 166
8584 Align = alClient
8685 Columns = <>
@@ -97,10 +96,9 @@ object InputAssistForm: TInputAssistForm
9796 object Panel7: TPanel
9897 Left = 1
9998 Top = 1
100- Width = 387
99+ Width = 380
101100 Height = 32
102101 Align = alTop
103- Caption = 'Panel7'
104102 TabOrder = 2
105103 object CategoryComboLabel: TLabel
106104 Left = 12
@@ -134,7 +132,7 @@ object InputAssistForm: TInputAssistForm
134132 object Panel2: TPanel
135133 Left = 0
136134 Top = 200
137- Width = 389
135+ Width = 382
138136 Height = 233
139137 Align = alClient
140138 BevelOuter = bvNone
@@ -143,42 +141,76 @@ object InputAssistForm: TInputAssistForm
143141 object Panel3: TPanel
144142 Left = 0
145143 Top = 0
146- Width = 389
144+ Width = 382
147145 Height = 48
148146 Align = alTop
149147 BevelOuter = bvNone
150148 TabOrder = 0
151- object KeyNameEdit: TLabeledEdit
152- Left = 8
153- Top = 21
154- Width = 161
155- Height = 20
156- Hint = #20837#21147#12395#20351#12358#12461#12540#21517
157- EditLabel.Width = 36
158- EditLabel.Height = 12
159- EditLabel.Caption = #12461#12540#21517
160- LabelPosition = lpAbove
161- LabelSpacing = 3
149+ object Splitter: TSplitter
150+ Left = 185
151+ Top = 0
152+ Width = 8
153+ Height = 48
154+ Cursor = crHSplit
155+ Beveled = True
156+ end
157+ object KeyPanel: TPanel
158+ Left = 0
159+ Top = 0
160+ Width = 185
161+ Height = 48
162+ Align = alLeft
163+ BevelOuter = bvNone
162164 TabOrder = 0
165+ DesignSize = (
166+ 185
167+ 48)
168+ object KeyNameEdit: TLabeledEdit
169+ Left = 8
170+ Top = 21
171+ Width = 169
172+ Height = 20
173+ Hint = #20837#21147#12395#20351#12358#12461#12540#21517
174+ Anchors = [akLeft, akTop, akRight]
175+ EditLabel.Width = 36
176+ EditLabel.Height = 12
177+ EditLabel.Caption = #12461#12540#21517
178+ LabelPosition = lpAbove
179+ LabelSpacing = 3
180+ TabOrder = 0
181+ end
163182 end
164- object CategoryNameEdit: TLabeledEdit
165- Left = 176
166- Top = 21
167- Width = 121
168- Height = 20
169- Hint = #20837#21147#12395#20351#12358#12459#12486#12468#12522#21517
170- EditLabel.Width = 53
171- EditLabel.Height = 12
172- EditLabel.Caption = #12459#12486#12468#12522#21517
173- LabelPosition = lpAbove
174- LabelSpacing = 3
183+ object CategoryPanel: TPanel
184+ Left = 193
185+ Top = 0
186+ Width = 189
187+ Height = 48
188+ Align = alClient
189+ BevelOuter = bvNone
175190 TabOrder = 1
191+ DesignSize = (
192+ 189
193+ 48)
194+ object CategoryNameEdit: TLabeledEdit
195+ Left = 8
196+ Top = 21
197+ Width = 169
198+ Height = 20
199+ Hint = #20837#21147#12395#20351#12358#12459#12486#12468#12522#21517
200+ Anchors = [akLeft, akTop, akRight]
201+ EditLabel.Width = 53
202+ EditLabel.Height = 12
203+ EditLabel.Caption = #12459#12486#12468#12522#21517
204+ LabelPosition = lpAbove
205+ LabelSpacing = 3
206+ TabOrder = 0
207+ end
176208 end
177209 end
178210 object Panel4: TPanel
179211 Left = 0
180212 Top = 48
181- Width = 389
213+ Width = 382
182214 Height = 185
183215 Align = alClient
184216 BevelOuter = bvNone
@@ -186,7 +218,7 @@ object InputAssistForm: TInputAssistForm
186218 object GroupBox1: TGroupBox
187219 Left = 0
188220 Top = 0
189- Width = 389
221+ Width = 382
190222 Height = 185
191223 Align = alClient
192224 Caption = #25407#20837#25991#23383#21015
@@ -194,7 +226,7 @@ object InputAssistForm: TInputAssistForm
194226 object TextMemo: TMemo
195227 Left = 2
196228 Top = 14
197- Width = 385
229+ Width = 378
198230 Height = 169
199231 Hint = #25407#20837#12377#12427#25991#23383#21015
200232 Align = alClient
@@ -209,92 +241,7 @@ object InputAssistForm: TInputAssistForm
209241 Top = 192
210242 Bitmap = {
211243 494C010102000400040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
212- 0000000000003600000028000000400000001000000001002000000000000010
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- 0000000000000000000000000000000000000000000000000000000000000000
245- 000000000000000000000000000000000000000000000000000000000000FFFF
246- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
247- 0000000000000000000000000000000000000000000000000000000000000000
248- 0000000000000000000080808000FFFFFF000000000000000000000000000000
249- 0000000000000000000000000000000000000000000000000000000000000000
250- 0000000000000000000000000000000000000000000000000000000000000000
251- 0000000000000000000000000000000000000000000000000000000000000000
252- 0000000000000000000000000000000000000000000000000000000000000000
253- 0000000000000000000000000000000000000000000000000000000000008080
254- 80008080800000000000000000000000000000000000FFFFFF00FFFFFF000000
255- 0000000000000000000000000000000000000000000000000000000000000000
256- 0000000000008080800080808000FFFFFF00FFFFFF0000000000000000000000
257- 0000000000000000000000000000000000000000000000000000000000000000
258- 0000000000000000000000000000000000000000000000000000000000000000
259- 0000000000000000000000000000000000000000000000000000000000000000
260- 0000000000000000000000000000000000000000000000000000000000000000
261- 0000000000000000000000000000000000000000000000000000000000000000
262- 00008080800000000000000000000000000000000000FFFFFF00000000000000
263- 0000000000000000000000000000000000000000000000000000000000000000
264- 000000000000808080000000000000000000FFFFFF0000000000000000000000
265- 0000000000000000000000000000000000000000000000000000000000000000
266- 0000000000000000000000000000000000000000000000000000000000000000
267- 0000000000000000000000000000000000000000000000000000000000000000
268- 0000000000000000000000000000000000000000000000000000000000000000
269- 0000000000000000000000000000000000000000000000000000000000000000
270- 000080808000808080000000000000000000FFFFFF00FFFFFF00000000000000
271- 0000000000000000000000000000000000000000000000000000000000000000
272- 000080808000808080000000000000000000FFFFFF00FFFFFF00000000000000
273- 0000000000000000000000000000000000000000000000000000000000000000
274- 0000000000000000000000000000000000000000000000000000000000000000
275- 0000000000000000000000000000000000000000000000000000000000000000
276- 0000000000000000000000000000000000000000000000000000000000000000
277- 0000000000000000000000000000000000000000000000000000000000000000
278- 000000000000808080000000000000000000FFFFFF0000000000000000000000
279- 0000000000000000000000000000000000000000000000000000000000000000
280- 00008080800000000000000000000000000000000000FFFFFF00000000000000
281- 0000000000000000000000000000000000000000000000000000000000000000
282- 0000000000000000000000000000000000000000000000000000000000000000
283- 0000000000000000000000000000000000000000000000000000000000000000
284- 0000000000000000000000000000000000000000000000000000000000000000
285- 0000000000000000000000000000000000000000000000000000000000000000
286- 0000000000008080800080808000FFFFFF00FFFFFF0000000000000000000000
287- 0000000000000000000000000000000000000000000000000000000000008080
288- 80008080800000000000000000000000000000000000FFFFFF00FFFFFF000000
289- 0000000000000000000000000000000000000000000000000000000000000000
290- 0000000000000000000000000000000000000000000000000000000000000000
291- 0000000000000000000000000000000000000000000000000000000000000000
292- 0000000000000000000000000000000000000000000000000000000000000000
293- 0000000000000000000000000000000000000000000000000000000000000000
294- 0000000000000000000080808000FFFFFF000000000000000000000000000000
295- 0000000000000000000000000000000000000000000000000000000000008080
296- 8000808080008080800080808000808080008080800080808000808080000000
297- 0000000000000000000000000000000000000000000000000000000000000000
244+ 0000000000003600000028000000400000001000000001001000000000000008
298245 0000000000000000000000000000000000000000000000000000000000000000
299246 0000000000000000000000000000000000000000000000000000000000000000
300247 0000000000000000000000000000000000000000000000000000000000000000
@@ -311,12 +258,33 @@ object InputAssistForm: TInputAssistForm
311258 0000000000000000000000000000000000000000000000000000000000000000
312259 0000000000000000000000000000000000000000000000000000000000000000
313260 0000000000000000000000000000000000000000000000000000000000000000
261+ 000000000000000000000000000000000000000000000000FF7FFF7FFF7FFF7F
262+ FF7FFF7FFF7FFF7F000000000000000000000000000000000000000000001042
263+ FF7F000000000000000000000000000000000000000000000000000000000000
314264 0000000000000000000000000000000000000000000000000000000000000000
265+ 0000000000000000000000000000000000000000000000001042104200000000
266+ 00000000FF7FFF7F000000000000000000000000000000000000000010421042
267+ FF7FFF7F00000000000000000000000000000000000000000000000000000000
315268 0000000000000000000000000000000000000000000000000000000000000000
269+ 0000000000000000000000000000000000000000000000000000104200000000
270+ 00000000FF7F0000000000000000000000000000000000000000000010420000
271+ 0000FF7F00000000000000000000000000000000000000000000000000000000
316272 0000000000000000000000000000000000000000000000000000000000000000
273+ 0000000000000000000000000000000000000000000000000000104210420000
274+ 0000FF7FFF7F0000000000000000000000000000000000000000104210420000
275+ 0000FF7FFF7F0000000000000000000000000000000000000000000000000000
317276 0000000000000000000000000000000000000000000000000000000000000000
277+ 0000000000000000000000000000000000000000000000000000000010420000
278+ 0000FF7F00000000000000000000000000000000000000000000104200000000
279+ 00000000FF7F0000000000000000000000000000000000000000000000000000
318280 0000000000000000000000000000000000000000000000000000000000000000
281+ 0000000000000000000000000000000000000000000000000000000010421042
282+ FF7FFF7F00000000000000000000000000000000000000001042104200000000
283+ 00000000FF7FFF7F000000000000000000000000000000000000000000000000
319284 0000000000000000000000000000000000000000000000000000000000000000
285+ 0000000000000000000000000000000000000000000000000000000000001042
286+ FF7F000000000000000000000000000000000000000000001042104210421042
287+ 1042104210421042000000000000000000000000000000000000000000000000
320288 0000000000000000000000000000000000000000000000000000000000000000
321289 0000000000000000000000000000000000000000000000000000000000000000
322290 0000000000000000000000000000000000000000000000000000000000000000
--- a/InputAssist.pas
+++ b/InputAssist.pas
@@ -13,8 +13,6 @@ type
1313 Panel2: TPanel;
1414 GikoListView1: TGikoListView;
1515 Panel3: TPanel;
16- KeyNameEdit: TLabeledEdit;
17- CategoryNameEdit: TLabeledEdit;
1816 Panel4: TPanel;
1917 TextMemo: TMemo;
2018 ColumnImageList: TImageList;
@@ -38,6 +36,11 @@ type
3836 InsertButton: TButton;
3937 InsertButtonAction: TAction;
4038 CloseAction: TAction;
39+ KeyPanel: TPanel;
40+ KeyNameEdit: TLabeledEdit;
41+ Splitter: TSplitter;
42+ CategoryPanel: TPanel;
43+ CategoryNameEdit: TLabeledEdit;
4144 procedure FormCreate(Sender: TObject);
4245 procedure GikoListView1SelectItem(Sender: TObject; Item: TListItem;
4346 Selected: Boolean);
--- a/ItemDownload.pas
+++ b/ItemDownload.pas
@@ -1089,6 +1089,7 @@ begin
10891089 end;
10901090 //ƒŠƒXƒg(subject.txt)‚ð•Û‘¶
10911091 GikoSys.ForceDirectoriesEx(ExtractFilePath(Board.GetSubjectFileName));
1092+ Body.Text := MojuUtils.Sanitize(Body.Text);
10921093 Body.SaveToFile(Board.GetSubjectFileName);
10931094 end;
10941095 finally
--- a/KeySetting.pas
+++ b/KeySetting.pas
@@ -358,6 +358,7 @@ end;
358358 procedure TKeySettingForm.OnGestureEnd(Sender: TObject);
359359 begin
360360 GestureEdit.Text := MouseGesture.GetGestureStr;
361+ MouseGesture.Clear;
361362 end;
362363
363364 procedure TKeySettingForm.GestureCheckBoxClick(Sender: TObject);
--- a/KuroutSetting.dfm
+++ b/KuroutSetting.dfm
@@ -1,6 +1,6 @@
11 object KuroutOption: TKuroutOption
2- Left = 285
3- Top = 132
2+ Left = 319
3+ Top = 169
44 Width = 525
55 Height = 457
66 Caption = #35443#32048#35373#23450
@@ -21,8 +21,8 @@ object KuroutOption: TKuroutOption
2121 Top = 0
2222 Width = 517
2323 Height = 393
24- ActivePage = TabSheet1
25- TabIndex = 0
24+ ActivePage = KakikomiTabSheet
25+ TabIndex = 2
2626 TabOrder = 0
2727 object TabSheet1: TTabSheet
2828 Caption = #35443#32048#35373#23450#65297
@@ -395,6 +395,69 @@ object KuroutOption: TKuroutOption
395395 TabOrder = 0
396396 end
397397 end
398+ object GroupBox3: TGroupBox
399+ Left = 16
400+ Top = 126
401+ Width = 473
402+ Height = 51
403+ Caption = #12522#12531#12463#31227#21205#23653#27508
404+ TabOrder = 1
405+ object Label10: TLabel
406+ Left = 8
407+ Top = 20
408+ Width = 84
409+ Height = 12
410+ Caption = #23653#27508#26368#22823#20445#25345#25968
411+ end
412+ object Label11: TLabel
413+ Left = 227
414+ Top = 20
415+ Width = 158
416+ Height = 12
417+ Caption = #65288#12487#12501#12457#12523#12488'=20 '#20877#36215#21205#24460#26377#21177#65289
418+ end
419+ object MoveHistoryMaxEdit: TEdit
420+ Left = 112
421+ Top = 16
422+ Width = 105
423+ Height = 20
424+ TabOrder = 0
425+ OnExit = MoveHistoryMaxEditExit
426+ end
427+ end
428+ object AHandredGroupBox: TGroupBox
429+ Left = 16
430+ Top = 192
431+ Width = 465
432+ Height = 65
433+ Caption = '100'#12524#12473#34920#31034#35373#23450
434+ TabOrder = 2
435+ object AHandredLabeledEdit: TLabeledEdit
436+ Left = 96
437+ Top = 24
438+ Width = 73
439+ Height = 20
440+ EditLabel.Width = 81
441+ EditLabel.Height = 12
442+ EditLabel.Caption = #20808#38957#34920#31034#12524#12473#25968
443+ LabelPosition = lpLeft
444+ LabelSpacing = 3
445+ TabOrder = 0
446+ Text = '1'
447+ OnExit = AHandredLabeledEditExit
448+ end
449+ object UpDown1: TUpDown
450+ Left = 169
451+ Top = 24
452+ Width = 15
453+ Height = 20
454+ Associate = AHandredLabeledEdit
455+ Min = 1
456+ Position = 1
457+ TabOrder = 1
458+ Wrap = False
459+ end
460+ end
398461 end
399462 end
400463 object OkBotton: TButton
--- a/KuroutSetting.pas
+++ b/KuroutSetting.pas
@@ -4,7 +4,7 @@ interface
44
55 uses
66 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7- Dialogs, StdCtrls, ComCtrls, GikoSystem, GikoUtil;
7+ Dialogs, StdCtrls, ComCtrls, GikoSystem, GikoUtil, ExtCtrls;
88
99 type
1010 TKuroutOption = class(TForm)
@@ -61,6 +61,13 @@ type
6161 Label8: TLabel;
6262 FixedCookieEdit: TEdit;
6363 Label9: TLabel;
64+ GroupBox3: TGroupBox;
65+ Label10: TLabel;
66+ MoveHistoryMaxEdit: TEdit;
67+ Label11: TLabel;
68+ AHandredGroupBox: TGroupBox;
69+ AHandredLabeledEdit: TLabeledEdit;
70+ UpDown1: TUpDown;
6471 procedure OkBottonClick(Sender: TObject);
6572 procedure FormCreate(Sender: TObject);
6673 procedure CDeleteButtonClick(Sender: TObject);
@@ -71,6 +78,8 @@ type
7178 procedure CDownButtonClick(Sender: TObject);
7279 procedure BUpButtonClick(Sender: TObject);
7380 procedure BDownButtonClick(Sender: TObject);
81+ procedure MoveHistoryMaxEditExit(Sender: TObject);
82+ procedure AHandredLabeledEditExit(Sender: TObject);
7483 private
7584 { Private éŒ¾ }
7685 procedure SetValue;
@@ -123,6 +132,10 @@ begin
123132 RemoteTrapAtt.Checked := GikoSys.Setting.RemoteTrapAtt;
124133 // Cookie
125134 FixedCookieEdit.Text := GikoSys.Setting.FixedCookie;
135+ // ƒŠƒ“ƒNˆÚ“®—š—ð
136+ MoveHistoryMaxEdit.Text := IntToStr( GikoSys.Setting.MoveHistorySize );
137+ //@æ“ª•\Ž¦ƒŒƒX”
138+ AHandredLabeledEdit.Text := IntToStr( GikoSys.Setting.HeadResCount );
126139 end;
127140
128141 procedure TKuroutOption.SaveSetting;
@@ -150,6 +163,13 @@ begin
150163 // Cookie
151164 GikoSys.Setting.FixedCookie := FixedCookieEdit.Text;
152165
166+ // ƒŠƒ“ƒNˆÚ“®—š—ð
167+ GikoSys.Setting.MoveHistorySize :=
168+ StrToIntDef( MoveHistoryMaxEdit.Text, 20 );
169+
170+ //@æ“ª•\Ž¦ƒŒƒX”
171+ GikoSys.Setting.HeadResCount :=
172+ StrToIntDef( AHandredLabeledEdit.Text , 1);
153173
154174 GikoSys.Setting.KuroutSettingTabIndex := PageControl1.ActivePageIndex;
155175 end;
@@ -180,7 +200,9 @@ procedure TKuroutOption.OkBottonClick(Sender: TObject);
180200 begin
181201 RecvBufferSizeExit(Sender);
182202 PostTimeEditExit(Sender);
183- PostColumnData();
203+ MoveHistoryMaxEditExit(Sender);
204+ AHandredLabeledEditExit(Sender);
205+ PostColumnData();
184206 SaveSetting;
185207 end;
186208
@@ -376,5 +398,22 @@ begin
376398 //ƒXƒŒˆê——‚Ì•`‰æ‚̍XV
377399 GikoForm.SetActiveList(GikoForm.ActiveList);
378400 end;
401+// ƒŠƒ“ƒNˆÚ“®—š—ð‚̕ҏWŒã‚̐ݒ蕶Žš—ñƒ`ƒFƒbƒN
402+procedure TKuroutOption.MoveHistoryMaxEditExit(Sender: TObject);
403+begin
404+ if not GikoSys.IsNumeric(MoveHistoryMaxEdit.Text) then
405+ MoveHistoryMaxEdit.Text := '20';
406+ if StrToInt(MoveHistoryMaxEdit.Text) < 1 then
407+ MoveHistoryMaxEdit.Text := '1';
408+end;
409+// æ“ª•\Ž¦ƒŒƒX”‚̕ҏWŒã‚̐ݒ蕶Žš—ñƒ`ƒFƒbƒN
410+procedure TKuroutOption.AHandredLabeledEditExit(Sender: TObject);
411+begin
412+ if not GikoSys.IsNumeric(AHandredLabeledEdit.Text) then
413+ AHandredLabeledEdit.Text := '1';
414+ if StrToInt(AHandredLabeledEdit.Text) < 1 then
415+ AHandredLabeledEdit.Text := '1';
416+
417+end;
379418
380419 end.
--- /dev/null
+++ b/MoveHistoryItem.pas
@@ -0,0 +1,182 @@
1+unit MoveHistoryItem;
2+
3+interface
4+
5+uses
6+ SysUtils, Classes, BoardGroup, BrowserRecord,
7+{$IF Defined(DELPRO) }
8+ SHDocVw,
9+ MSHTML,
10+{$ELSE}
11+ SHDocVw_TLB,
12+ MSHTML_TLB,
13+{$IFEND}
14+ OleCtrls, ActiveX;
15+type
16+
17+ TMoveHistoryItem = class(TObject)
18+ private
19+ FThreadItem : TThreadItem;
20+ FScrollTop : Integer;
21+ public
22+ property ThreadItem : TThreadItem read FThreadItem write FThreadItem;
23+ property ScrollTop : Integer read FScrollTop write FScrollTop;
24+ end;
25+
26+ TMoveHistory = class(TList)
27+ private
28+ FHistoryMax : Integer;
29+ FIndex : Integer;
30+ {
31+ \brief ƒŠƒ“ƒNˆÚ“®—š—ðÅ‘å•ÛŽ”‚ðÝ’è‚·‚éB
32+ \param AVal •ÛŽ”
33+ }
34+ procedure SetHistoryMax(AVal: Integer);
35+ {
36+ \brief ƒŠƒ“ƒNˆÚ“®—š—ðÅ‘å•ÛŽ”‚ðŽæ“¾‚·‚éB
37+ \return •ÛŽ”( > 0 )
38+ }
39+ function GetHistoryMax: Integer;
40+ public
41+ constructor Create( max : Integer ); overload;
42+ function pushItem( item: TMoveHistoryItem): Integer; overload;
43+ function pushItem( item: TBrowserRecord): Integer; overload;
44+ function getPrevItem( item: TBrowserRecord): TMoveHistoryItem;
45+ function getNextItem: TMoveHistoryItem;
46+ procedure clear; override;
47+ property HistoryMax : Integer read GetHistoryMax write SetHistoryMax;
48+ property HisotryIndex: Integer read FIndex;
49+ end;
50+
51+var
52+ MoveHisotryManager : TMoveHistory;
53+
54+implementation
55+
56+uses
57+ GikoSystem;
58+
59+
60+//! ƒRƒ“ƒXƒgƒ‰ƒNƒ^
61+constructor TMoveHistory.Create( max : Integer );
62+begin
63+ inherited Create;
64+
65+ FIndex := 0;
66+
67+ SetHistoryMax( GikoSys.Setting.MoveHistorySize );
68+end;
69+//! ˆÚ“®—š—ð‚̃AƒCƒeƒ€’ljÁ
70+function TMoveHistory.pushItem( item: TMoveHistoryItem): Integer;
71+var
72+ i : Integer;
73+ top: TMoveHistoryItem;
74+begin
75+ Result := -1;
76+ if (Self.Count > 0) then begin
77+ top := TMoveHistoryItem( Self.Items[Self.Count - 1] );
78+ if (top.FThreadItem = item.FThreadItem) and
79+ (top.FScrollTop = item.FScrollTop) then begin
80+ Exit;
81+ end;
82+ end;
83+ // •ÛŽ”‚̍őå’l‚ð’´‚¦‚éê‡æ“ª‚ðíœ
84+ if (FIndex + 1 > FHistoryMax) then begin
85+ if ( Self.Items[0] <> nil ) then begin
86+ TMoveHistoryItem( Self.Items[0] ).Free;
87+ end;
88+ Self.Delete(0);
89+ Dec(Findex);
90+ end;
91+ // FIndex‚æ‚èŒã‚ë‚̃AƒCƒeƒ€‚ðíœ‚·‚é
92+ for i := Self.Count - 1 downto Findex do begin
93+ if (Self.Items [i] <> nil) then begin
94+ TMoveHistoryItem( Self.Items[i] ).Free;
95+ end;
96+ Self.Delete(i);
97+ end;
98+ Inc(FIndex);
99+ Result := Self.Add( item );
100+end;
101+//! ˆÚ“®—š—ð‚̃AƒCƒeƒ€’ljÁ
102+function TMoveHistory.pushItem( item: TBrowserRecord): Integer;
103+var
104+ history : TMoveHistoryItem;
105+ doc : OleVariant;
106+begin
107+ Result := -1;
108+ if ( item <> nil ) and ( item.Thread <> nil )
109+ and ( item.Browser <> nil) then begin
110+ history := TMoveHistoryItem.Create;
111+ history.FThreadItem := item.Thread;
112+ doc := Idispatch( olevariant(item.Browser.ControlInterface).Document) as IHTMLDocument2;
113+ history.ScrollTop := doc.Body.ScrollTop;
114+
115+ Result := pushItem( history );
116+ end;
117+end;
118+//! ˆê‚‘O‚Ì—š—ðƒAƒCƒeƒ€Žæ“¾
119+function TMoveHistory.getPrevItem(item: TBrowserRecord): TMoveHistoryItem;
120+begin
121+ Result := nil;
122+ if (FIndex = Self.Count) and (item <> nil) then begin
123+ pushItem( item );
124+ Dec(FIndex);
125+ end;
126+ if ( FIndex > 0 ) then begin
127+ Dec( FIndex );
128+ Result := TMoveHistoryItem( Self.items[ FIndex ] );
129+ end;
130+end;
131+//! ˆê‚ÂŒã‚ë‚Ì—š—ðƒAƒCƒeƒ€Žæ“¾
132+function TMoveHistory.getNextItem: TMoveHistoryItem;
133+begin
134+ Result := nil;
135+ if ( FIndex < Self.Count - 1 ) then begin
136+ Inc( FIndex );
137+ Result := TMoveHistoryItem( Self.items[ FIndex ] );
138+ end;
139+end;
140+//! —š—ð‚Ì‘SÁ‹Ž
141+procedure TMoveHistory.clear;
142+var
143+ i : Integer;
144+begin
145+ // ƒAƒCƒeƒ€‚ðíœ‚·‚é
146+ for i := Self.Count - 1 downto 0 do begin
147+ if (Self.Items [i] <> nil) then begin
148+ TMoveHistoryItem( Self.Items[i] ).Free;
149+ end;
150+ Self.Delete(i);
151+ end;
152+ Self.Capacity := 0;
153+ FIndex := 0;
154+ inherited;
155+end;
156+
157+procedure TMoveHistory.SetHistoryMax(AVal: Integer);
158+begin
159+ // —š—ð‚̃TƒCƒY‚Í0‚æ‚è‘å‚«‚­‚È‚¢‚Æ‚¢‚¯‚È‚¢
160+ if ( AVal > 0 ) then begin
161+ if ((AVal + 1) <> FHistoryMax) then begin
162+ Self.clear;
163+ // ˆÚ“®‚µ‚½Û‚ɁA–߂郊ƒ“ƒN‚ð1‚‘«‚·‚Ì‚Å
164+ FHistoryMax := AVal + 1;
165+ end;
166+ end;
167+end;
168+function TMoveHistory.GetHistoryMax: Integer;
169+begin
170+ // ˆÚ“®‚µ‚½Û‚ɁA–߂郊ƒ“ƒN‚ð1‚‘«‚·‚Ì‚Å
171+ Result := FHistoryMax - 1;
172+end;
173+initialization
174+ MoveHisotryManager := TMoveHistory.Create( 20 );
175+
176+finalization
177+ if MoveHisotryManager <> nil then begin
178+ MoveHisotryManager.clear;
179+ MoveHisotryManager.Free;
180+ MoveHisotryManager := nil;
181+ end;
182+end.
--- a/NewBoard.dfm
+++ b/NewBoard.dfm
@@ -1,6 +1,6 @@
11 object NewBoardDialog: TNewBoardDialog
2- Left = 276
3- Top = 325
2+ Left = 337
3+ Top = 197
44 BorderStyle = bsDialog
55 Caption = #26495#19968#35239#26356#26032
66 ClientHeight = 329
--- a/NewBoard.pas
+++ b/NewBoard.pas
@@ -44,6 +44,7 @@ type
4444 procedure UpdateIgnoreList(Sender: TObject);
4545 public
4646 { Public éŒ¾ }
47+ class procedure InitHTTPClient(client : TIdHTTP);
4748 end;
4849
4950 var
@@ -119,32 +120,8 @@ var
119120 s: string;
120121 i: Integer;
121122 begin
122- Indy.Request.Clear;
123- Indy.RecvBufferSize := Gikosys.Setting.RecvBufferSize;
124- Indy.ProxyParams.BasicAuthentication := False;
125- if GikoSys.Setting.ReadProxy then begin
126- if GikoSys.Setting.ProxyProtocol then
127- Indy.ProtocolVersion := pv1_1
128- else
129- Indy.ProtocolVersion := pv1_0;
130- Indy.ProxyParams.ProxyServer := GikoSys.Setting.ReadProxyAddress;
131- Indy.ProxyParams.ProxyPort := GikoSys.Setting.ReadProxyPort;
132- Indy.ProxyParams.ProxyUsername := GikoSys.Setting.ReadProxyUserID;
133- Indy.ProxyParams.ProxyPassword := GikoSys.Setting.ReadProxyPassword;
134- if GikoSys.Setting.ReadProxyUserID <> '' then
135- Indy.ProxyParams.BasicAuthentication := True;
136- end else begin
137- if GikoSys.Setting.Protocol then
138- Indy.ProtocolVersion := pv1_1
139- else
140- Indy.ProtocolVersion := pv1_0;
141- Indy.ProxyParams.ProxyServer := '';
142- Indy.ProxyParams.ProxyPort := 80;
143- Indy.ProxyParams.ProxyUsername := '';
144- Indy.ProxyParams.ProxyPassword := '';
145- end;
146- //URL := GikoSys.Setting.BoardURL2ch;
147- //URL := BoardURLComboBox.Text;
123+ InitHTTPClient( Indy );
124+
148125 Indy.Request.UserAgent := GikoSys.GetUserAgent;
149126 Indy.Request.Referer := '';
150127 Indy.Request.AcceptEncoding := 'gzip';
@@ -433,4 +410,33 @@ begin
433410 end;
434411 end;
435412 end;
413+
414+class procedure TNewBoardDialog.InitHTTPClient(client : TIdHTTP);
415+begin
416+ client.Request.Clear;
417+ client.Request.CustomHeaders.Clear;
418+ client.RecvBufferSize := Gikosys.Setting.RecvBufferSize;
419+ client.ProxyParams.BasicAuthentication := False;
420+ if GikoSys.Setting.ReadProxy then begin
421+ if GikoSys.Setting.ProxyProtocol then
422+ client.ProtocolVersion := pv1_1
423+ else
424+ client.ProtocolVersion := pv1_0;
425+ client.ProxyParams.ProxyServer := GikoSys.Setting.ReadProxyAddress;
426+ client.ProxyParams.ProxyPort := GikoSys.Setting.ReadProxyPort;
427+ client.ProxyParams.ProxyUsername := GikoSys.Setting.ReadProxyUserID;
428+ client.ProxyParams.ProxyPassword := GikoSys.Setting.ReadProxyPassword;
429+ if GikoSys.Setting.ReadProxyUserID <> '' then
430+ client.ProxyParams.BasicAuthentication := True;
431+ end else begin
432+ if GikoSys.Setting.Protocol then
433+ client.ProtocolVersion := pv1_1
434+ else
435+ client.ProtocolVersion := pv1_0;
436+ client.ProxyParams.ProxyServer := '';
437+ client.ProxyParams.ProxyPort := 80;
438+ client.ProxyParams.ProxyUsername := '';
439+ client.ProxyParams.ProxyPassword := '';
440+ end;
441+end;
436442 end.
--- /dev/null
+++ b/NewBoardURL.dfm
@@ -0,0 +1,84 @@
1+object NewBoardURLForm: TNewBoardURLForm
2+ Left = 380
3+ Top = 187
4+ Width = 495
5+ Height = 313
6+ Caption = #26495#31227#36578#20808#26908#32034
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+ FormStyle = fsStayOnTop
14+ OldCreateOrder = False
15+ OnCreate = FormCreate
16+ PixelsPerInch = 96
17+ TextHeight = 12
18+ object CategoryLabel: TLabel
19+ Left = 24
20+ Top = 16
21+ Width = 53
22+ Height = 12
23+ Caption = #12459#12486#12468#12522#21517
24+ end
25+ object CategoryComboBox: TComboBox
26+ Left = 88
27+ Top = 13
28+ Width = 145
29+ Height = 20
30+ ItemHeight = 12
31+ TabOrder = 0
32+ Text = 'CategoryComboBox'
33+ end
34+ object SearchButton: TButton
35+ Left = 256
36+ Top = 8
37+ Width = 75
38+ Height = 25
39+ Caption = #26908#32034'(&s)'
40+ TabOrder = 1
41+ OnClick = SearchButtonClick
42+ end
43+ object ResultMemo: TMemo
44+ Left = 24
45+ Top = 48
46+ Width = 457
47+ Height = 225
48+ Lines.Strings = (
49+ 'ResultMemo')
50+ ScrollBars = ssVertical
51+ TabOrder = 2
52+ end
53+ object CloseButton: TButton
54+ Left = 352
55+ Top = 8
56+ Width = 75
57+ Height = 25
58+ Caption = #38281#12376#12427
59+ ModalResult = 1
60+ TabOrder = 3
61+ end
62+ object IdHTTP: TIdHTTP
63+ MaxLineAction = maException
64+ AllowCookies = True
65+ HandleRedirects = True
66+ ProxyParams.BasicAuthentication = False
67+ ProxyParams.ProxyPort = 0
68+ Request.ContentLength = -1
69+ Request.ContentRangeEnd = 0
70+ Request.ContentRangeStart = 0
71+ Request.Accept = 'text/html, */*'
72+ Request.BasicAuthentication = False
73+ Request.UserAgent = 'Mozilla/3.0 (compatible; Indy Library)'
74+ HTTPOptions = [hoForceEncodeParams]
75+ OnRedirect = IdHTTPRedirect
76+ Left = 408
77+ Top = 16
78+ end
79+ object IdAntiFreeze: TIdAntiFreeze
80+ Active = False
81+ Left = 448
82+ Top = 16
83+ end
84+end
--- /dev/null
+++ b/NewBoardURL.pas
@@ -0,0 +1,226 @@
1+unit NewBoardURL;
2+
3+interface
4+
5+uses
6+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7+ Dialogs, IdAntiFreezeBase, IdAntiFreeze, IdBaseComponent, IdComponent,
8+ IdTCPConnection, IdTCPClient, IdHTTP, StdCtrls,
9+ BoardGroup;
10+
11+type
12+ TNewBoardURLForm = class(TForm)
13+ CategoryComboBox: TComboBox;
14+ CategoryLabel: TLabel;
15+ IdHTTP: TIdHTTP;
16+ IdAntiFreeze: TIdAntiFreeze;
17+ SearchButton: TButton;
18+ ResultMemo: TMemo;
19+ CloseButton: TButton;
20+ procedure FormCreate(Sender: TObject);
21+ procedure SearchButtonClick(Sender: TObject);
22+ procedure IdHTTPRedirect(Sender: TObject; var dest: String;
23+ var NumRedirect: Integer; var Handled: Boolean;
24+ var VMethod: TIdHTTPMethod);
25+ private
26+ { Private éŒ¾ }
27+ function GetRedirectURL(const html: string): string;
28+ procedure GetBoardURLs(urls : TStringList);
29+ procedure ReplaceURLs(oldurls, newurls: TStringList);
30+ public
31+ { Public éŒ¾ }
32+ end;
33+
34+var
35+ NewBoardURLForm: TNewBoardURLForm;
36+
37+implementation
38+
39+uses
40+ GikoSystem, NewBoard, Giko, IniFiles, MojuUtils, GikoDataModule;
41+{$R *.dfm}
42+//! ƒRƒ“ƒXƒgƒ‰ƒNƒ^
43+procedure TNewBoardURLForm.FormCreate(Sender: TObject);
44+var
45+ i : Integer;
46+ ini : TMemIniFile;
47+ sec : TStringList;
48+begin
49+ sec := TStringList.Create;
50+ ini := TMemIniFile.Create(GikoSys.GetBoardFileName);
51+ ini.ReadSections(sec);
52+
53+ CategoryComboBox.Clear;
54+ CategoryComboBox.Items.BeginUpdate;
55+ for i := 0 to sec.Count - 1 do begin
56+ CategoryComboBox.Items.Add(sec[i]);
57+ end;
58+ CategoryComboBox.Items.EndUpdate;
59+ CategoryComboBox.ItemIndex := 0;
60+
61+ ResultMemo.Lines.Clear;
62+end;
63+
64+procedure TNewBoardURLForm.SearchButtonClick(Sender: TObject);
65+var
66+ i : Integer;
67+ value : string;
68+ ResStream: TMemoryStream;
69+ URLs : TStringList;
70+ oldURLs : TStringList;
71+ newURLs : TStringList;
72+ oldURL, newURL : string;
73+ TabURLs : TStringList;
74+begin
75+ ResultMemo.Lines.Clear;
76+ URLs := TStringList.Create;
77+ Screen.Cursor := crHourGlass;
78+ SearchButton.Enabled := False;
79+ try
80+ GetBoardURLs( URLs );
81+ if URLs.Count > 0 then begin
82+ ResStream := TMemoryStream.Create;
83+ oldURLs := TStringList.Create;
84+ newURLs := TStringList.Create;
85+
86+ try
87+ TNewBoardDialog.InitHTTPClient(IdHTTP);
88+ IdHTTP.Request.Referer := '';
89+ IdHTTP.Request.AcceptEncoding := 'gzip';
90+
91+ IdHTTP.Request.CacheControl := 'no-cache';
92+ IdHTTP.Request.CustomHeaders.Add('Pragma: no-cache');
93+ IdHTTP.HandleRedirects := false;
94+ for i := 0 to URLs.Count - 1 do begin
95+ IdAntiFreeze.Active := true;
96+ try
97+ ResStream.Clear;
98+ IdHTTP.Get(URLs[i], ResStream);
99+ value := GikoSys.GzipDecompress(ResStream,
100+ IdHTTP.Response.ContentEncoding);
101+ newURL := GetRedirectURL(value);
102+ if (newURL = '') then begin
103+ newURL := IdHTTP.Response.Location;
104+ end;
105+ if (newURL <> '') then begin
106+ oldURL := URLs[i];
107+ ResultMemo.Lines.Add('URL:' + oldURL + ' -> ' + newURL);
108+ if (newURL <> '') then begin
109+ oldURLs.Add( oldURL );
110+ newURLs.Add( newURL );
111+ end;
112+ end;
113+ except
114+ on E: Exception do begin
115+ {$IFDEF DEBUG}
116+ Writeln(IdHTTP.ResponseText);
117+ {$ENDIF}
118+ end;
119+ end;
120+ IdAntiFreeze.Active := false;
121+ end;
122+
123+ if (newURLs.Count > 0) and (oldURLs.Count > 0) then begin
124+ ReplaceURLs(oldURLs, newURLs);
125+ GikoForm.FavoritesURLReplace(oldURLs, newURLs);
126+ GikoForm.RoundListURLReplace(oldURLs, newURLs);
127+ GikoForm.TabFileURLReplace(oldURLs, newURLs);
128+ ResultMemo.Lines.Add('”ˆړ]æŒŸõ‚ªŠ®—¹‚µ‚Ü‚µ‚½');
129+
130+ TabURLs := TStringList.Create;
131+ try
132+ GikoDM.GetTabURLs(TabURLs);
133+ GikoForm.ReloadBBS;
134+ GikoDM.OpenURLs(TabURLs);
135+ finally
136+ TabURLs.Free;
137+ end;
138+
139+ end else begin
140+ ResultMemo.Lines.Add('ˆÚ“]‚µ‚Ä‚¢‚é”Â‚Í ‚ ‚è‚Ü‚¹‚ñ‚Å‚µ‚½');
141+ end;
142+ finally
143+ ResStream.Clear;
144+ ResStream.Free;
145+ newURLs.Free;
146+ oldURLs.Free;
147+ end;
148+ end;
149+ finally
150+ URLs.Free;
151+ SearchButton.Enabled := True;
152+ Screen.Cursor := crDefault;
153+ end;
154+end;
155+function TNewBoardURLForm.GetRedirectURL(const html: string): string;
156+const
157+ HEADS = '<head>';
158+ HEADE = '</head>';
159+ SCRIPT = 'window.location.href="';
160+begin
161+ Result := Copy(html, 1,
162+ AnsiPos(HEADE, AnsiLowerCase(html)));
163+ Result := Copy(Result,
164+ AnsiPos(HEADS, AnsiLowerCase(Result)),
165+ Length(Result));
166+ if AnsiPos(SCRIPT, Result) > 0 then begin
167+ Result := Copy(Result, AnsiPos(SCRIPT, Result) + Length(SCRIPT),
168+ Length(Result));
169+ Result := Copy(Result, 1, AnsiPos('"', Result) - 1);
170+ end else begin
171+ Result := '';
172+ end;
173+
174+end;
175+procedure TNewBoardURLForm.GetBoardURLs(urls : TStringList);
176+var
177+ ini : TMemIniFile;
178+ sec : string;
179+ keys : TStringList;
180+ i : Integer;
181+begin
182+ urls.Clear;
183+ urls.BeginUpdate;
184+ if CategoryComboBox.ItemIndex <> -1 then begin
185+ sec := CategoryComboBox.Items[CategoryComboBox.itemIndex];
186+ keys := TStringList.Create;
187+ try
188+ ini := TMemIniFile.Create(GikoSys.GetBoardFileName);
189+ ini.ReadSection(sec, keys);
190+ for i := 0 to keys.Count - 1 do begin
191+ urls.Add(ini.ReadString(sec, keys[i], ''));
192+ end;
193+ finally
194+ keys.Free;
195+ end;
196+ end;
197+end;
198+procedure TNewBoardURLForm.ReplaceURLs(oldurls, newurls: TStringList);
199+var
200+ txt : TStringList;
201+ i : Integer;
202+begin
203+ if oldurls.Count > 0 then begin
204+ txt := TStringList.Create;
205+ txt.LoadFromFile( GikoSys.GetBoardFileName );
206+ try
207+ for i := 0 to oldurls.Count - 1 do begin
208+ MojuUtils.CustomStringReplace(txt, oldurls[i], newurls[i]);
209+ end;
210+ txt.SaveToFile( GikoSys.GetBoardFileName );
211+ finally
212+ txt.Free;
213+ end;
214+ end;
215+end;
216+
217+procedure TNewBoardURLForm.IdHTTPRedirect(Sender: TObject;
218+ var dest: String; var NumRedirect: Integer; var Handled: Boolean;
219+ var VMethod: TIdHTTPMethod);
220+begin
221+ {$IFDEF DEBUG}
222+ ShowMessage(dest);
223+ {$ENDIF}
224+end;
225+
226+end.
--- a/Option.dfm
+++ b/Option.dfm
@@ -61,9 +61,9 @@ object OptionDialog: TOptionDialog
6161 Top = 4
6262 Width = 509
6363 Height = 389
64- ActivePage = TabSheet3
64+ ActivePage = TabSheet4
6565 MultiLine = True
66- TabIndex = 3
66+ TabIndex = 7
6767 TabOrder = 3
6868 OnChange = OptionTabChange
6969 object ConnectSheet: TTabSheet
@@ -253,7 +253,7 @@ object OptionDialog: TOptionDialog
253253 Top = 43
254254 Width = 417
255255 Height = 20
256- ItemHeight = 12
256+ ItemHeight = 0
257257 TabOrder = 0
258258 Text = 'BoardURLComboBox'
259259 end
@@ -1207,9 +1207,9 @@ object OptionDialog: TOptionDialog
12071207 end
12081208 end
12091209 object GroupBox19: TGroupBox
1210- Left = 11
1211- Top = 74
1212- Width = 465
1210+ Left = 12
1211+ Top = 66
1212+ Width = 473
12131213 Height = 49
12141214 Caption = #23653#27508
12151215 TabOrder = 1
@@ -1238,6 +1238,54 @@ object OptionDialog: TOptionDialog
12381238 OnExit = MaxRecordCountEditExit
12391239 end
12401240 end
1241+ object GroupBox21: TGroupBox
1242+ Left = 12
1243+ Top = 125
1244+ Width = 473
1245+ Height = 52
1246+ Caption = #26368#23567#21270#26178#12479#12473#12463#12488#12524#12452
1247+ TabOrder = 2
1248+ object StoredTaskTrayCB: TCheckBox
1249+ Left = 11
1250+ Top = 24
1251+ Width = 118
1252+ Height = 17
1253+ Caption = #26377#21177#12395#12377#12427
1254+ TabOrder = 0
1255+ end
1256+ end
1257+ object GroupBox22: TGroupBox
1258+ Left = 12
1259+ Top = 184
1260+ Width = 473
1261+ Height = 52
1262+ Caption = #12502#12521#12454#12470#12479#12502
1263+ TabOrder = 3
1264+ object LoopBrowserTabsCB: TCheckBox
1265+ Left = 11
1266+ Top = 24
1267+ Width = 134
1268+ Height = 17
1269+ Caption = #12523#12540#12503#12375#12390#31227#21205#12377#12427
1270+ TabOrder = 0
1271+ end
1272+ end
1273+ object GroupBox23: TGroupBox
1274+ Left = 12
1275+ Top = 246
1276+ Width = 473
1277+ Height = 52
1278+ Caption = #12510#12454#12473#12472#12455#12473#12481#12515#12540
1279+ TabOrder = 4
1280+ object IgnoreContextCheckBox: TCheckBox
1281+ Left = 11
1282+ Top = 24
1283+ Width = 294
1284+ Height = 17
1285+ Caption = #12467#12531#12486#12461#12473#12488#19978#12391#12510#12454#12473#12472#12455#12473#12481#12515#12540#12434#28961#21177#12395#12377#12427
1286+ TabOrder = 0
1287+ end
1288+ end
12411289 end
12421290 object SoundSheet: TTabSheet
12431291 Caption = #12469#12454#12531#12489
--- a/Option.pas
+++ b/Option.pas
@@ -205,6 +205,12 @@ type
205205 GroupBox20: TGroupBox;
206206 AutoSortCheckBox: TCheckBox;
207207 Label24: TLabel;
208+ GroupBox21: TGroupBox;
209+ StoredTaskTrayCB: TCheckBox;
210+ GroupBox22: TGroupBox;
211+ LoopBrowserTabsCB: TCheckBox;
212+ GroupBox23: TGroupBox;
213+ IgnoreContextCheckBox: TCheckBox;
208214 procedure FormCreate(Sender: TObject);
209215 procedure FormDestroy(Sender: TObject);
210216 procedure ApplyButtonClick(Sender: TObject);
@@ -864,6 +870,12 @@ begin
864870 BeAutoLoginCheckBox.Checked := GikoSys.Setting.BeAutoLogin;
865871 //—š—ð‚̍őå•Û‘¶”
866872 MaxRecordCountEdit.Text := IntToStr(GikoSys.Setting.MaxRecordCount);
873+ // Å¬‰»Žž‚Ƀ^ƒXƒNƒgƒŒƒC‚ÉŠi”[‚·‚é‚©
874+ StoredTaskTrayCB.Checked := GikoSys.Setting.StoredTaskTray;
875+ // ƒuƒ‰ƒEƒUƒ^ƒu‚̈ړ®‚Ń‹[ƒv‚ð‹–‰Â‚·‚é‚©
876+ LoopBrowserTabsCB.Checked := GikoSys.Setting.LoopBrowserTabs;
877+ //
878+ IgnoreContextCheckBox.Checked := GikoSys.Setting.GestureIgnoreContext;
867879 end;
868880
869881 procedure TOptionDialog.SaveSetting;
@@ -1151,6 +1163,10 @@ begin
11511163 GikoSys.Setting.BeAutoLogin := BeAutoLoginCheckBox.Checked;
11521164 //—š—ð‚̍őå•Û‘¶”
11531165 GikoSys.Setting.MaxRecordCount := Max(StrToInt64Def(MaxRecordCountEdit.Text,100),1);
1166+ GikoSys.Setting.StoredTaskTray := StoredTaskTrayCB.Checked;
1167+ GikoSys.Setting.LoopBrowserTabs := LoopBrowserTabsCB.Checked;
1168+
1169+ GikoSys.Setting.GestureIgnoreContext := IgnoreContextCheckBox.Checked;
11541170 end;
11551171
11561172 procedure TOptionDialog.SettingApply;
--- a/Preview.pas
+++ b/Preview.pas
@@ -19,19 +19,20 @@ type
1919 public
2020 constructor Create(AOwner: TComponent); override;
2121 destructor Destroy; override;
22+ procedure PreviewImage(URL : String);
23+ function GetWindowRect(Point: TPoint) : TRect;
2224 end;
2325
2426 implementation
27+uses MojuUtils, GikoSystem, Setting;
28+
29+const
30+ //ƒvƒŒƒrƒ…[ƒtƒ@ƒCƒ‹–¼
31+ HTML_FILE_NAME = 'temp_preview.html';
2532
2633 constructor TPreviewBrowser.Create(AOwner: TComponent);
27-{
28-var
29-// Style: Longint;
30-}
3134 begin
3235 inherited Create(AOwner);
33-// Style := GetWindowLong(Self.Handle, GWL_EXSTYLE);
34-// SetWindowLong(Self.Handle, GWL_EXSTYLE, Style or WS_EX_APPWINDOW);
3536 end;
3637
3738 destructor TPreviewBrowser.Destroy;
@@ -42,10 +43,132 @@ end;
4243 procedure TPreviewBrowser.CreateParams(var Params: TCreateParams);
4344 begin
4445 inherited;
45-// Params.Style := WS_POPUP or {or WS_BORDER};
46-// Params.WindowClass.Style := Params.WindowClass.Style or CS_SAVEBITS;
47-// Params.ExStyle := WS_EX_TOOLWINDOW;
48-// AddBiDiModeExStyle(Params.ExStyle);
4946 end;
47+{
48+\brief Žw’肳‚ꂽURL‚̃vƒŒƒrƒ…[
49+\param URL ƒvƒŒƒrƒ…[‚·‚éƒCƒ[ƒW‚ÌURL
50+}
51+procedure TPreviewBrowser.PreviewImage(URL : String);
52+var
53+ html : string;
54+ HtmlFileName : string;
55+ sl : TStringList;
56+ Protocol, Host, Path, Document, Port, Bookmark : string;
57+ Referer : string;
58+ Flags: OleVariant;
59+ TargetFrameName: OleVariant;
60+ PostData: OleVariant;
61+ Headers: OleVariant;
62+begin
63+ html := '<html><head>'#13#10
64+ + '<SCRIPT>'#13#10
65+ + 'function init() {'#13#10
66+ + ' if ((document.body.clientHeight >= Image1.height) && (document.body.clientWidth >= Image1.width)) {'#13#10
67+ + ' } else {'#13#10
68+ + ' var dh, ih;'#13#10
69+ + ' dh = document.body.clientWidth / document.body.clientHeight;'#13#10
70+ + ' ih = Image1.width / Image1.height;'#13#10
71+ + ' if (document.body.clientWidth < document.body.clientHeight) {'#13#10
72+ + ' if (ih > dh)'#13#10
73+ + ' Image1.width = document.body.clientWidth;'#13#10
74+ + ' else'#13#10
75+ + ' Image1.height = document.body.clientHeight;'#13#10
76+ + ' } else {'#13#10
77+ + ' if (ih < dh)'#13#10
78+ + ' Image1.height = document.body.clientHeight;'#13#10
79+ + ' else'#13#10
80+ + ' Image1.width = document.body.clientWidth;'#13#10
81+ + ' }'#13#10
82+ + ' }'#13#10
83+ + ' Message.style.display = "none";'#13#10
84+ + '}'#13#10
85+ + '</SCRIPT>'#13#10
86+ + '</head>'#13#10
87+ + '<body topmargin="0" leftmargin="0" style="border-width: 1px; overflow:hidden; border-style: solid;" onLoad="init()">'#13#10
88+ + '<div align="center" id="Message">ƒvƒŒƒrƒ…[ì¬’†</div>'#13#10
89+ + '<div align="center"><img name="Image1" border="0" src="%ImageURL%"></div>'#13#10
90+ + '</body></html>';
91+
92+ HtmlFileName := GikoSys.GetAppDir + HTML_FILE_NAME;
93+ sl := TStringList.Create;
94+ try
95+ try
96+ sl.Text := MojuUtils.
97+ CustomStringReplace(html, '%ImageURL%', URL, False);
98+ sl.SaveToFile(HtmlFileName);
99+ finally
100+ sl.Free;
101+ end;
102+ except
103+ end;
104+
105+ GikoSys.ParseURI(URL, Protocol, Host, Path, Document, Port, Bookmark);
106+ Referer := Protocol + '://' + Host;
107+ if Port <> '' then
108+ Referer := Referer + ':' + Port;
109+ Referer := Referer + Path;
110+ Headers := 'Referer: ' + Referer;
111+ Flags := 0;
112+ TargetFrameName := '';
113+ PostData := '';
114+
115+ Navigate(HtmlFileName,Flags, TargetFrameName, PostData, Headers);
116+
117+end;
118+{
119+\breif •\Ž¦‚·‚éƒEƒBƒ“ƒhƒEƒTƒCƒY‚ðŽæ“¾‚·‚é
120+\param Point ƒ}ƒEƒXƒJ[ƒ\ƒ‹‚̍À•W
121+}
122+function TPreviewBrowser.GetWindowRect(Point: TPoint) : TRect;
123+var
124+ WindowWidth, WindowHeight : Integer;
125+begin
126+ // Ý’è‚É‚æ‚éê‡‚킯
127+ case GikoSys.Setting.PreviewSize of
128+ gpsXSmall: begin
129+ WindowWidth := 128;
130+ WindowHeight := 96;
131+ end;
132+ gpsSmall: begin
133+ WindowWidth := 256;
134+ WindowHeight := 192;
135+ end;
136+ gpsLarge: begin
137+ WindowWidth := 512;
138+ WindowHeight := 384;
139+ end;
140+ gpsXLarge: begin
141+ WindowWidth := 640;
142+ WindowHeight := 480;
143+ end;
144+ else begin //gpsMedium
145+ WindowWidth := 384;
146+ WindowHeight := 288;
147+ end;
148+ end;
149+
150+ Result := Rect(0, 0, WindowWidth, WindowHeight);
50151
152+ // o‚µˆÊ’u‚É‚æ‚é•â³
153+ case GikoSys.Setting.PopupPosition of
154+ gppRightTop: OffsetRect(Result,
155+ Point.x - WindowWidth - 15, Point.y - WindowHeight - 15);
156+ gppRight: OffsetRect(Result,
157+ Point.x - WindowWidth - 15, Point.y - (WindowHeight div 2));
158+ gppRightBottom: OffsetRect(Result,
159+ Point.x - WindowWidth - 15, Point.y + 15);
160+ gppTop: OffsetRect(Result,
161+ Point.x - (WindowWidth div 2), Point.y - WindowHeight - 15);
162+ gppCenter: OffsetRect(Result,
163+ Point.x - (WindowWidth div 2), Point.y - (WindowHeight div 2));
164+ gppBottom: OffsetRect(Result,
165+ Point.x - (WindowWidth div 2), Point.y + 15);
166+ gppLeftTop: OffsetRect(Result,
167+ Point.x + 15, Point.y - WindowHeight - 15);
168+ gppLeft: OffsetRect(Result,
169+ Point.x + 15, Point.y - (WindowHeight div 2));
170+ gppLeftBottom: OffsetRect(Result, Point.x + 15, Point.y + 15); //ƒMƒRƒiƒrƒXƒŒ ƒp[ƒg‚P‚Ì453Ž‚ÉŠ´ŽÓ
171+ end;
172+
173+end;
51174 end.
--- /dev/null
+++ b/SambaTimer.pas
@@ -0,0 +1,163 @@
1+unit SambaTimer;
2+
3+interface
4+
5+uses
6+ Windows, SysUtils, Classes, ExtCtrls,
7+ BoardGroup, GikoSystem;
8+
9+type
10+ {
11+ \brief Samba24‘΍ôƒ^ƒCƒ}[ƒNƒ‰ƒX
12+ }
13+ TSambaTimer = class(TTimer)
14+ private
15+ FKey : string;
16+ FWriteDeta : TDateTime;
17+ FSambaInterval : Integer;
18+ procedure ReadSambaTime;
19+ procedure ReadSettingTime(Board: TBoard);
20+ public
21+ function SetBoard(Board : TBoard): integer;
22+ function CheckSambaTime(ATime: TDateTime): Boolean;
23+ procedure WriteSambaTime(ATime: TDateTime);
24+ procedure UpdateSambaSetting(Interval : Integer);
25+ function Update : TDateTime;
26+ property WriteDeta : TDateTime read FWriteDeta;
27+ property SambaInterval : Integer read FSambaInterval;
28+ end;
29+
30+implementation
31+
32+uses
33+ IniFiles, DateUtils;
34+{
35+\brief ƒTƒ“ƒoƒ^ƒCƒ}[”î•ñÝ’è
36+\param Board ƒŒƒXƒGƒfƒBƒ^‚Ì”Â
37+\return Samba‚̐ݒè’l
38+}
39+function TSambaTimer.SetBoard(Board : TBoard): Integer;
40+begin
41+ Result := -1;
42+ Enabled := False;
43+ if (GikoSys.Setting.UseSamba) and (Board <> nil) then begin
44+ // ”‚ª2ch‚É‘®‚µ‚Ä‚¢‚éê‡Cƒ^ƒCƒ}[‚ð—LŒø‚É‚·‚é
45+ if (Board.Is2ch) then begin
46+ ReadSettingTime(Board);
47+ ReadSambaTime;
48+ Interval := 500;
49+ Result := FSambaInterval;
50+ end;
51+ end;
52+end;
53+{
54+\brief Samba‚Ì‹K’è’l‚ð“ǂݍž‚Þ
55+}
56+procedure TSambaTimer.ReadSettingTime(Board: TBoard);
57+var
58+ ini :TMemIniFile;
59+ Protocol, Host, Path, Document, Port, Bookmark : string;
60+begin
61+ Enabled := false; //Œo‰ß•b”•\Ž¦Timer‚ðOff‚É‚·‚é
62+ ini := TMemIniFile.Create(GikoSys.GetSambaFileName);
63+ try
64+ if (Board <> nil) then begin
65+ // ‚Ü‚¸BBSID‚Ō•ʂɐݒ肳‚ê‚Ä‚¢‚È‚¢‚©Šm”F‚·‚é
66+ FKey := '@' + Board.BBSID;
67+ FSambaInterval := ini.ReadInteger('Setting', FKey, -1);
68+ if (FSambaInterval = -1) then begin
69+ // Ý’肳‚ê‚Ä‚¢‚È‚¢‚̂ŃzƒXƒg–¼‚̐ݒè‚ðŽæ‚Á‚Ä‚­‚é
70+ GikoSys.ParseURI( Board.URL, Protocol, Host, Path, Document, Port, Bookmark );
71+ FKey := Copy(Host, 1, AnsiPos('.', Host) - 1);
72+ FSambaInterval := ini.ReadInteger('Setting', FKey, -1);
73+ //Ý’肳‚ê‚Ä‚¢‚È‚¢‚Æ‚«‚́Aƒtƒ@ƒCƒ‹‚ɏ‘‚«‚½‚·B
74+ if FSambaInterval = -1 then begin
75+ FSambaInterval := 0;
76+ ini.WriteInteger('Setting', FKey, 0);
77+ ini.UpdateFile;
78+ end;
79+ end;
80+ end else begin
81+ FSambaInterval := ini.ReadInteger('Setting', FKey, -1);
82+ end;
83+ finally
84+ ini.Free;
85+ end;
86+ Enabled := true; //Œo‰ß•b”•\Ž¦Timer‚ðOn‚É‚·‚é
87+end;
88+
89+{
90+\brief Samba.ini‚̏‘‚«ž‚ÝŽžŠÔ‚ð“ǂݍž‚Þ
91+}
92+procedure TSambaTimer.ReadSambaTime;
93+var
94+ ini :TMemIniFile;
95+begin
96+ Enabled := false; //Œo‰ß•b”•\Ž¦Timer‚ðOff‚É‚·‚é
97+ ini := TMemIniFile.Create(GikoSys.GetSambaFileName);
98+ try
99+ //•¶Žš—ñ‚Å“Ç‚ÝŽæ‚Á‚āA•ÏŠ·ŠÖ”‚ÅTDateTime‚Ö
100+ FWriteDeta := ConvertDateTimeString(
101+ ini.ReadString('Send', FKey, ''));
102+ finally
103+ ini.Free;
104+ end;
105+ Enabled := true; //Œo‰ß•b”•\Ž¦Timer‚ðOn‚É‚·‚é
106+end;
107+{
108+\brief Samba.ini‚ɍŏI‘‚«ž‚ÝŽžŠÔ‚ð‘‚«ž‚Þ
109+}
110+procedure TSambaTimer.WriteSambaTime(ATime: TDateTime);
111+var
112+ ini :TMemIniFile;
113+begin
114+ ini := TMemIniFile.Create(GikoSys.GetSambaFileName);
115+ try
116+ ini.WriteDateTime('Send', FKey, ATime);
117+ ini.UpdateFile;
118+ finally
119+ ini.Free;
120+ end;
121+end;
122+
123+{
124+\brief ÅI‘‚«ž‚ÝŽžŠÔ‚ÆŒ»ÝŽž‚ð”äŠr‚·‚é
125+\return ^F‹K’è’lˆÈã@‹UF‹K’è’l–¢–ž
126+}
127+function TSambaTimer.CheckSambaTime(ATime: TDateTime): Boolean;
128+var
129+ pastsec: double;
130+begin
131+ pastsec := SecondSpan(ATime, FWriteDeta);
132+ Result := (pastsec > FSambaInterval);
133+end;
134+{
135+\breif ƒ^ƒCƒ}[î•ñXV
136+}
137+function TSambaTimer.Update : TDateTime;
138+begin
139+ ReadSettingTime( nil );
140+ ReadSambaTime;
141+ Result := Now();
142+end;
143+{
144+\biref SambaÝ’è’lXV
145+\param Interval Ý’è’l
146+}
147+procedure TSambaTimer.UpdateSambaSetting(Interval : Integer);
148+var
149+ ini :TMemIniFile;
150+begin
151+ Enabled := false; //Œo‰ß•b”•\Ž¦Timer‚ðOff‚É‚·‚é
152+ ini := TMemIniFile.Create(GikoSys.GetSambaFileName);
153+ try
154+ FSambaInterval := Interval;
155+ ini.WriteInteger('Setting', FKey, FSambaInterval);
156+ ini.UpdateFile;
157+ finally
158+ ini.Free;
159+ end;
160+ Enabled := true; //Œo‰ß•b”•\Ž¦Timer‚ðOn‚É‚·‚é
161+end;
162+
163+end.
--- a/Setting.pas
+++ b/Setting.pas
@@ -5,7 +5,7 @@ interface
55
66 uses
77 SysUtils, Classes, Graphics, Forms, {Math, IniFiles, UCryptAuto, UBase64,}
8- ComCtrls, GestureModel;
8+ ComCtrls, GestureModel, IniFiles;
99
1010 const
1111 MAIN_COOLBAND_COUNT = 4; //ƒƒCƒ“CoolBand‚̐”
@@ -398,7 +398,8 @@ type
398398 FGestures : TGestureModel;
399399 //! ƒ}ƒEƒXƒWƒFƒXƒ`ƒƒ[‚ðŽg—p‚·‚é‚©‚Ç‚¤‚©
400400 FGestureEnabled : Boolean;
401-
401+ //! ƒ}ƒEƒXƒWƒFƒXƒ`ƒƒ[‚ðƒRƒ“ƒeƒLƒXƒg“™‚̏ã‚Å–³Œø
402+ FGestureIgnoreContext : Boolean;
402403 //ƒtƒVƒAƒiƒgƒ‰ƒbƒvÝ’è
403404 FLocalTrapAtt : Boolean;
404405 FRemoteTrapAtt : Boolean;
@@ -430,9 +431,16 @@ type
430431 FInputAssistFormWidth: Integer;
431432 FInputAssistFormHeight: Integer;
432433
433- // Cookie‚É•t‰Á‚·‚éŒÅ’èƒR[ƒh
434+ //! Cookie‚É•t‰Á‚·‚éŒÅ’èƒR[ƒh
434435 FFixedCookie: String;
435-
436+ //! ƒŠƒ“ƒNˆÚ“®—š—ð‚Ì•ÛŽ”
437+ FMoveHistorySize : Integer;
438+ //! Å¬‰»‚µ‚½‚Æ‚«‚Ƀ^ƒXƒNƒgƒŒƒC‚ÉŠi”[‚·‚é‚©
439+ FStoredTaskTray : Boolean;
440+ //! ƒ^ƒu‚̈ړ®‚Ń‹[ƒv‚ð‹–‰Â‚·‚é
441+ FLoopBrowserTabs : Boolean;
442+ //! 100ƒŒƒX•\Ž¦‚̐擪•\Ž¦ƒŒƒX”
443+ FHeadResCount : Integer;
436444 function GetMainCoolSet(Index: Integer): TCoolSet;
437445 function GetBoardCoolSet(Index: Integer): TCoolSet;
438446 function GetBrowserCoolSet(Index: Integer): TCoolSet;
@@ -458,6 +466,16 @@ type
458466
459467 procedure SetUseCSS( value: Boolean );
460468 procedure SetCSSFileName( fileName: string );
469+ //! ƒvƒƒLƒVÝ’è“ǂݍž‚Ý
470+ procedure ReadProxySettings(memIni: TMemIniFile);
471+ //! ŠeŽíƒEƒBƒ“ƒhƒEÝ’è“ǂݍž‚Ý
472+ procedure ReadWindowSettings(memIni: TMemIniFile);
473+ //! “ü—Í—š—ð“ǂݍž‚݁iŒŸõ{ƒ[ƒ‹—“{–¼‘Oj
474+ procedure ReadInputHisotrys(memIni: TMemIniFile);
475+ //! ƒŠƒXƒgƒJƒ‰ƒ€•“ǂݍž‚Ý
476+ procedure ReadListColumnWidth(memIni: TMemIniFile);
477+ //! ƒJƒeƒSƒŠƒŠƒXƒgƒJƒ‰ƒ€‡˜“ǂݍž‚Ý
478+ procedure ReadOrdColumn(memIni: TMemIniFile);
461479 protected
462480
463481 public
@@ -503,6 +521,11 @@ type
503521 function GetEditorKeyFileName: String;
504522 procedure WriteLogFolder(AVal : String);
505523 function GetInputAssistFileName : String;
524+ {
525+ \brief ƒŠƒ“ƒN—š—ð‚Ì•ÛŽƒTƒCƒY‚Ìsetter
526+ \param AVal Ý’è‚·‚éƒTƒCƒY( >0)
527+ }
528+ procedure SetMoveHistorySize(AVal : Integer);
506529 //ŽóMƒoƒbƒtƒ@ƒTƒCƒY
507530 property RecvBufferSize: Integer read FRecvBufferSize write FRecvBufferSize;
508531 //HTTP1.1Žg—p
@@ -733,6 +756,7 @@ type
733756 property Gestures : TGestureModel read FGestures write FGestures;
734757 //! ƒ}ƒEƒXƒWƒFƒXƒ`ƒƒ[‚ðŽg—p‚·‚é‚©‚Ç‚¤‚©
735758 property GestureEnabled : Boolean read FGestureEnabled write FGestureEnabled;
759+ property GestureIgnoreContext : Boolean read FGestureIgnoreContext write FGestureIgnoreContext;
736760 //ƒtƒVƒAƒiƒgƒ‰ƒbƒvÝ’è
737761 property LocalTrapAtt : Boolean read FLocalTrapAtt write FLocalTrapAtt;
738762 property RemoteTrapAtt : Boolean read FRemoteTrapAtt write FRemoteTrapAtt;
@@ -758,7 +782,14 @@ type
758782 property InputAssistFormHeight: Integer read FInputAssistFormHeight write FInputAssistFormHeight;
759783 //! Cookie‚É•t‰Á‚·‚éŒÅ’èƒR[ƒh
760784 property FixedCookie: String read FFixedCookie write FFixedCookie;
761-
785+ //! ƒŠƒ“ƒNˆÚ“®—š—ð‚Ì•ÛŽ”
786+ property MoveHistorySize : Integer read FMoveHistorySize write SetMoveHistorySize;
787+ //! Å¬‰»Žž‚Ƀ^ƒXƒNƒgƒŒƒC‚ÉŠi”[‚·‚é‚©
788+ property StoredTaskTray : Boolean read FStoredTaskTray write FStoredTaskTray;
789+ //! ƒuƒ‰ƒEƒUƒ^ƒu‚̃‹[ƒv‚ð‹–‰Â‚·‚é
790+ property LoopBrowserTabs : Boolean read FLoopBrowserTabs write FLoopBrowserTabs;
791+ //! 100ƒŒƒX•\Ž¦‚̐擪•\Ž¦ƒŒƒX”
792+ property HeadResCount : Integer read FHeadResCount write FHeadResCount;
762793 end;
763794
764795
@@ -800,7 +831,7 @@ const
800831 implementation
801832
802833 uses
803- Math, IniFiles, UCryptAuto, UBase64;
834+ Math, UCryptAuto, UBase64;
804835
805836 type
806837 TSoundName = record
@@ -953,20 +984,11 @@ end;
953984
954985 //Ý’èƒtƒ@ƒCƒ‹“Ǎž
955986 procedure TSetting.ReadSettingFile();
956-const
957- DEFAULT_BBS_WIDTH: array[0..0] of Integer = (140);
958- DEFAULT_CATEGORY_WIDTH: array[0..2] of Integer = (150, 80, 130);
959- DEFAULT_BOARD_WIDTH: array[0..10] of Integer = (350, 60, 60, 60, 60, 60, 80, 130, 130, 130, 60);
960- MAX_WIDTH: Integer = 2000;
961987 var
962988 ini: TMemIniFile;
963989 i: Integer;
964- id, code : Integer;
965- wkList: TStringList;
966- wkStr: string;
967990 Exists: Boolean;
968991 s: string;
969-// id: Integer;
970992 CoolSet: TCoolSet;
971993 begin
972994 Exists := FileExists(GetFileName);
@@ -979,60 +1001,11 @@ begin
9791001 //ƒvƒƒLƒVÚ‘±HTTP1.1Žg—p
9801002 FProxyProtocol := ini.ReadBool('HTTP', 'ProxyProtocol', False);
9811003
982- FReadProxy := ini.ReadBool('ReadProxy', 'Proxy', false);
983- FReadProxyAddress := ini.ReadString('ReadProxy', 'Address', '');
984- FReadProxyPort := ini.ReadInteger('ReadProxy', 'Port', 0);
985- FReadProxyUserID := ini.ReadString('ReadProxy', 'UserID', '');
986- FReadProxyPassword := ini.ReadString('ReadProxy', 'Password', '');
987-
988- FWriteProxy := ini.ReadBool('WriteProxy', 'Proxy', false);
989- FWriteProxyAddress := ini.ReadString('WriteProxy', 'Address', '');
990- FWriteProxyPort := ini.ReadInteger('WriteProxy', 'Port', 0);
991- FWriteProxyUserID := ini.ReadString('WriteProxy', 'UserID', '');
992- FWriteProxyPassword := ini.ReadString('WriteProxy', 'Password', '');
993-
994- FBrowserFontName := ini.ReadString('Window', 'BrowserFontName', '');
995- FBrowserFontSize := ini.ReadInteger('Window', 'BrowserFontSize', 0);
996- FBrowserFontBold := ini.ReadInteger('Window', 'BrowserFontBold', 0);
997- FBrowserFontItalic := ini.ReadInteger('Window', 'BrowserFontItalic', 0);
998- FBrowserFontColor := ini.ReadInteger('Window', 'BrowserFontColor', -1);
999- FBrowserBackColor := ini.ReadInteger('Window', 'BrowserBackColor', -1);
1000-
1001- FCabinetFontName := ini.ReadString('Window', 'CabinetFontName', DEFAULT_FONT_NAME);
1002- FCabinetFontSize := ini.ReadInteger('Window', 'CabinetFontSize', DEFAULT_FONT_SIZE);
1003- FCabinetFontBold := ini.ReadBool('Window', 'CabinetFontBold', False);
1004- FCabinetFontItalic := ini.ReadBool('Window', 'CabinetFontItalic', False);
1005- FCabinetFontColor := StringToColor(ini.ReadString('Window', 'CabinetFontColor', DEFAULT_FONT_COLOR));
1006- FCabinetBackColor := StringToColor(ini.ReadString('Window', 'CabinetBackColor', DEFAULT_WINDOW_COLOR));
1007-
1008- FListFontName := ini.ReadString('Window', 'ListFontName', DEFAULT_FONT_NAME);
1009- FListFontSize := ini.ReadInteger('Window', 'ListFontSize', DEFAULT_FONT_SIZE);
1010- FListFontBold := ini.ReadBool('Window', 'ListFontBold', False);
1011- FListFontItalic := ini.ReadBool('Window', 'ListFontItalic', False);
1012- FListFontColor := StringToColor(ini.ReadString('Window', 'ListFontColor', DEFAULT_FONT_COLOR));
1013- FListBackColor := StringToColor(ini.ReadString('Window', 'ListBackColor', DEFAULT_WINDOW_COLOR));
1014- FUseOddColorOddResNum := ini.ReadBool('Window','UseOddColor', False);
1015- FOddColor := StringToColor(ini.ReadString('Window', 'OddColor', DEFAULT_WINDOW_COLOR));
1016- FUnFocusedBold := ini.ReadBool('Window','UnFocusedBold', False);
1017-
1018- FEditorFontName := ini.ReadString('Window', 'EditorFontName', DEFAULT_FONT_NAME);
1019- FEditorFontSize := ini.ReadInteger('Window', 'EditorFontSize', DEFAULT_FONT_SIZE);
1020- FEditorFontBold := ini.ReadBool('Window', 'EditorFontBold', False);
1021- FEditorFontItalic := ini.ReadBool('Window', 'EditorFontItalic', False);
1022- FEditorFontColor := StringToColor(ini.ReadString('Window', 'EditorFontColor', DEFAULT_FONT_COLOR));
1023- FEditorBackColor := StringToColor(ini.ReadString('Window', 'EditorBackColor', DEFAULT_WINDOW_COLOR));
1024-
1025- FBrowserTabFontName := ini.ReadString('Window', 'BrowserTabFontName', DEFAULT_TAB_FONT_NAME);
1026- FBrowserTabFontSize := ini.ReadInteger('Window', 'BrowserTabFontSize', DEFAULT_TAB_FONT_SIZE);
1027- FBrowserTabFontBold := ini.ReadBool('Window', 'BrowserTabFontBold', False);
1028- FBrowserTabFontItalic := ini.ReadBool('Window', 'BrowserTabFontItalic', False);
1029-
1030- FHintFontName := ini.ReadString('Window', 'HintFontName', Screen.HintFont.Name);
1031- FHintFontSize := ini.ReadInteger('Window', 'HintFontSize', Screen.HintFont.Size);
1032- //FHintFontBold := ini.ReadBool('Window', 'HintFontBold', False);
1033- //FHintFontItalic := ini.ReadBool('Window', 'HintFontItalic', False);
1034- FHintFontColor := StringToColor(ini.ReadString('Window', 'HintFontColor', DEFAULT_FONT_COLOR));
1035- FHintBackColor := StringToColor(ini.ReadString('Window', 'HintBackColor', 'clInfoBk'));
1004+ // ƒvƒƒLƒVÝ’è“ǂݍž‚Ý
1005+ ReadProxySettings( ini );
1006+
1007+ // ŠeŽíƒEƒBƒ“ƒhƒE‚̐ݒè“ǂݍž‚Ý
1008+ ReadWindowSettings( ini );
10361009
10371010 FWindowTop := ini.ReadInteger('WindowSize', 'Top', -1);
10381011 FWindowLeft := ini.ReadInteger('WindowSize', 'Left', -1);
@@ -1089,112 +1062,14 @@ begin
10891062 // FListHeightMax := ini.ReadBool('List', 'HeightMax', False);
10901063 // FListWidthMax := ini.ReadBool('List', 'WidthMax', False);
10911064
1092- wkList := TStringList.Create;
1093- try
1094- ini.ReadSection('Name', wkList);
1095- for i := 0 to wkList.Count - 1 do begin
1096- wkStr := ini.ReadString('Name', wkList[i], '');
1097- if (wkStr <> '') and (FNameList.IndexOf(wkStr) = -1) then
1098- FNameList.Add(wkStr);
1099- end;
1100- ini.ReadSection('Mail', wkList);
1101- for i := 0 to wkList.Count - 1 do begin
1102- wkStr := ini.ReadString('Mail', wkList[i], '');
1103- if (wkStr <> '') and (FMailList.IndexOf(wkStr) = -1) then
1104- FMailList.Add(wkStr);
1105- end;
1106- ini.ReadSection('SelectText', wkList);
1107- for i := 0 to wkList.Count - 1 do begin
1108- wkStr := ini.ReadString('SelectText', wkList[i], '');
1109- if (wkStr <> '') and (FSelectTextList.IndexOf(wkStr) = -1) then
1110- FSelectTextList.Add(wkStr);
1111- end;
1112- finally
1113- wkList.Free;
1114- end;
1065+ // “ü—͍€–Ú‚Ì—š—ð‚ð“ǂݍž‚Þ
1066+ ReadInputHisotrys( ini );
11151067
11161068 // ƒŠƒXƒgƒJƒ‰ƒ€•
1117- wkList := TStringList.Create;
1118- try
1119- ini.ReadSection('BBSColumnWidth', wkList);
1120- if Length(FBBSColumnWidth) <> wkList.Count then begin
1121- ini.EraseSection('BBSColumnWidth');
1122- end;
1123- for i := 0 to Length(FBBSColumnWidth) - 1 do begin
1124- BBSColumnWidth[i] := ini.ReadInteger('BBSColumnWidth', 'ID' + IntToStr(i), DEFAULT_BBS_WIDTH[i]);
1125- if BBSColumnWidth[i] > MAX_WIDTH then
1126- BBSColumnWidth[i] := DEFAULT_BBS_WIDTH[i];
1127- end;
1128- ini.ReadSection('CategoryColumnWidth', wkList);
1129- if Length(FCategoryColumnWidth) <> wkList.Count then begin
1130- ini.EraseSection('CategoryColumnWidth');
1131- end;
1132- for i := 0 to Length(FCategoryColumnWidth) - 1 do begin
1133- CategoryColumnWidth[i] := ini.ReadInteger('CategoryColumnWidth', 'ID' + IntToStr(i), DEFAULT_CATEGORY_WIDTH[i]);
1134- if CategoryColumnWidth[i] > MAX_WIDTH then
1135- CategoryColumnWidth[i] := DEFAULT_CATEGORY_WIDTH[i];
1136- end;
1137- ini.ReadSection('BoardColumnWidth', wkList);
1138- if Length(FBoardColumnWidth) <> wkList.Count then begin
1139- ini.EraseSection('BoardColumnWidth');
1140- end;
1141- for i := 0 to Length(FBoardColumnWidth) - 1 do begin
1142- BoardColumnWidth[i] := ini.ReadInteger('BoardColumnWidth', 'ID' + IntToStr(i), DEFAULT_BOARD_WIDTH[i]);
1143- if BoardColumnWidth[i] > MAX_WIDTH then
1144- BoardColumnWidth[i] := DEFAULT_BOARD_WIDTH[i];
1145- end;
1146- finally
1147- wkList.Free;
1148- end;
1069+ ReadListColumnWidth( ini );
11491070
11501071 // ƒJƒeƒSƒŠƒŠƒXƒgƒJƒ‰ƒ€‡˜
1151- wkList := TStringList.Create;
1152- try
1153- ini.ReadSection( 'BBSColumnOrder', wkList );
1154- for i := 0 to wkList.Count - 1 do begin
1155- wkStr := ini.ReadString( 'BBSColumnOrder', 'ID' + IntToStr( i ), '' );
1156- Val( wkStr, id, code );
1157- if code = 0 then
1158- FBBSColumnOrder.Add( TGikoBBSColumnID( id ) );
1159- end;
1160- if FBBSColumnOrder.Count = 0 then begin
1161- // Ý’肪–³‚¢‚̂ō쐬
1162- for i := 0 to Integer( High( TGikoBBSColumnID ) ) do
1163- FBBSColumnOrder.Add( TGikoBBSColumnID( i ) );
1164- end;
1165-
1166- ini.ReadSection( 'CategoryColumnOrder', wkList );
1167- for i := 0 to wkList.Count - 1 do begin
1168- wkStr := ini.ReadString( 'CategoryColumnOrder', 'ID' + IntToStr( i ), '' );
1169- Val( wkStr, id, code );
1170- if code = 0 then
1171- FCategoryColumnOrder.Add( TGikoCategoryColumnID( id ) );
1172- end;
1173- if FCategoryColumnOrder.Count = 0 then begin
1174- // Ý’肪–³‚¢‚̂ō쐬
1175- for i := 0 to Integer( High( TGikoCategoryColumnID ) ) do
1176- FCategoryColumnOrder.Add( TGikoCategoryColumnID( i ) );
1177- end;
1178-
1179- ini.ReadSection( 'BoardColumnOrder', wkList );
1180- for i := 0 to wkList.Count - 1 do begin
1181- wkStr := ini.ReadString( 'BoardColumnOrder', 'ID' + IntToStr( i ), '' );
1182- Val( wkStr, id, code );
1183- if code = 0 then
1184- FBoardColumnOrder.Add( TGikoBoardColumnID( id ) );
1185- end;
1186- if FBoardColumnOrder.Count = 0 then begin
1187- // Ý’肪–³‚¢‚̂ō쐬
1188- for i := 0 to Integer( High( TGikoBoardColumnID ) ) do begin
1189- // ¨‚¢‚̃Jƒ‰ƒ€‚̓fƒtƒHƒ‹ƒg‚Å”ñ•\Ž¦‚É‚·‚é
1190- if ( i <> Ord(gbcVigor) ) then begin
1191- FBoardColumnOrder.Add( TGikoBoardColumnID( i ) );
1192- end;
1193- end;
1194- end;
1195- finally
1196- wkList.Free;
1197- end;
1072+ ReadOrdColumn( ini );
11981073
11991074 //ƒŠƒXƒg”ԍ†
12001075 FListViewNo := ini.ReadBool('Function', 'ListViewNo', True);
@@ -1213,6 +1088,7 @@ begin
12131088 else
12141089 FResRange := ini.ReadInteger( 'Thread', 'ResRange', Ord( grrAll ) );
12151090 FResRangeHold := ini.ReadBool( 'Thread', 'ResRangeHold', False );
1091+ FHeadResCount := ini.ReadInteger('Thread', 'HeadResCount', 1);
12161092 // ƒXƒŒƒbƒhˆê——•\Ž¦”͈Í
12171093 FThreadRange := TGikoThreadRange( ini.ReadInteger('ThreadList', 'ThreadRange', Ord( gtrAll )) );
12181094 //”ñƒAƒNƒeƒBƒuŽžƒŒƒXƒ|ƒbƒvƒAƒbƒv•\Ž¦
@@ -1349,7 +1225,7 @@ begin
13491225
13501226 // ƒ}ƒEƒXƒWƒFƒXƒ`ƒƒ[
13511227 FGestureEnabled := ini.ReadBool( 'Guesture', 'Enabled', False );
1352-
1228+ FGestureIgnoreContext := ini.ReadBool( 'Guesture', 'IgnoreContext', False );
13531229 //2chŒ¾ŒêƒTƒ|
13541230 F2chSupport := ini.ReadBool('2chSupport', 'Support', False);
13551231
@@ -1381,6 +1257,12 @@ begin
13811257 // Cookie‚É•t‰Á‚·‚éŒÅ’èƒR[ƒh
13821258 FFixedCookie := ini.ReadString('Cookie', 'fixedString', FIXED_COOKIE);
13831259
1260+ // ƒŠƒ“ƒNˆÚ“®—š—ð‚̍őå•ÛŽ”
1261+ FMoveHistorySize := ini.ReadInteger('MoveHisotry', 'Max', 20);
1262+
1263+ FStoredTaskTray := ini.ReadBool('Function', 'StroedTaskTray', false);
1264+ FLoopBrowserTabs := ini.ReadBool('Function', 'LoopBrowserTabs', false);
1265+
13841266 ini.UpdateFile;
13851267 finally
13861268 ini.Free;
@@ -1569,6 +1451,7 @@ begin
15691451 ini.DeleteKey( 'Thread', 'OnlyAHundredRes' ); // ŒÃ‚¢Ý’è‚̍폜
15701452 ini.WriteInteger('Thread', 'ResRange', FResRange);
15711453 ini.WriteBool('Thread', 'ResRangeHold', FResRangeHold);
1454+ ini.WriteInteger('Thread', 'HeadResCount', FHeadResCount);
15721455 // ƒXƒŒƒbƒhˆê——•\Ž¦”͈Í
15731456 ini.WriteInteger('ThreadList', 'ThreadRange', Ord( FThreadRange ));
15741457 //ƒƒOíœŠm”F
@@ -1731,7 +1614,7 @@ begin
17311614
17321615 // ƒ}ƒEƒXƒWƒFƒXƒ`ƒƒ[‚ðŽg—p‚·‚é‚©‚Ç‚¤‚©
17331616 ini.WriteBool( 'Guesture', 'Enabled', FGestureEnabled );
1734-
1617+ ini.WriteBool( 'Guesture', 'IgnoreContext', FGestureIgnoreContext );
17351618 //FusianaTrap
17361619 ini.WriteBool('Trap', 'LocalTrap', FLocalTrapAtt);
17371620 ini.WriteBool('Trap', 'RemoteTrap', FRemoteTrapAtt);
@@ -1752,6 +1635,11 @@ begin
17521635 // ŒÅ’è‚ÌCookie•¶Žš—ñ
17531636 ini.WriteString('Cookie', 'fixedString', FFixedCookie);
17541637
1638+ // ƒŠƒ“ƒNˆÚ“®—š—ð‚̍őå•ÛŽ”
1639+ ini.WriteInteger('MoveHisotry', 'Max', FMoveHistorySize);
1640+
1641+ ini.WriteBool('Function', 'StroedTaskTray', FStoredTaskTray);
1642+ ini.WriteBool('Function', 'LoopBrowserTabs', FLoopBrowserTabs);
17551643 ini.UpdateFile;
17561644 finally
17571645 ini.Free;
@@ -2225,7 +2113,238 @@ function TSetting.GetInputAssistFileName : String;
22252113 begin
22262114 Result := GetConfigDir + INPUTASSIST_FILE_NAME;
22272115 end;
2116+procedure TSetting.SetMoveHistorySize(AVal : Integer);
2117+begin
2118+ if (AVal > 0) then begin
2119+ FMoveHistorySize := AVal;
2120+ end;
2121+end;
2122+{
2123+\brief ƒvƒƒLƒVÝ’è“ǂݍž‚Ý
2124+\param memIni iniƒtƒ@ƒCƒ‹
2125+}
2126+procedure TSetting.ReadProxySettings(memIni: TMemIniFile);
2127+const
2128+ READ_SECTION = 'ReadProxy';
2129+ WRITE_SECTION= 'WriteProxy';
2130+ PROXY_KEY = 'Proxy';
2131+ ADDRE_KEY = 'Address';
2132+ PORT_KEY = 'Port';
2133+ UID_KEY = 'UserID';
2134+ PASS_KEY = 'Password';
2135+begin
2136+ if (memIni <> nil) then begin
2137+ FReadProxy := memIni.ReadBool(READ_SECTION, PROXY_KEY, false);
2138+ FReadProxyAddress := memIni.ReadString(READ_SECTION, ADDRE_KEY, '');
2139+ FReadProxyPort := memIni.ReadInteger(READ_SECTION, PORT_KEY, 0);
2140+ FReadProxyUserID := memIni.ReadString(READ_SECTION, UID_KEY, '');
2141+ FReadProxyPassword := memIni.ReadString(READ_SECTION, PASS_KEY, '');
2142+
2143+ FWriteProxy := memIni.ReadBool(WRITE_SECTION, PROXY_KEY, false);
2144+ FWriteProxyAddress := memIni.ReadString(WRITE_SECTION, ADDRE_KEY, '');
2145+ FWriteProxyPort := memIni.ReadInteger(WRITE_SECTION, PORT_KEY, 0);
2146+ FWriteProxyUserID := memIni.ReadString(WRITE_SECTION, UID_KEY, '');
2147+ FWriteProxyPassword := memIni.ReadString(WRITE_SECTION, PASS_KEY, '');
2148+ end;
2149+end;
2150+{
2151+\brief ŠeŽíƒEƒBƒ“ƒhƒEÝ’è“ǂݍž‚Ý
2152+\param menIni iniƒtƒ@ƒCƒ‹
2153+}
2154+procedure TSetting.ReadWindowSettings(memIni: TMemIniFile);
2155+const
2156+ WINDOW_SECTION = 'Window';
2157+begin
2158+ if (memIni <> nil) then begin
2159+ FBrowserFontName := memIni.ReadString(WINDOW_SECTION, 'BrowserFontName', '');
2160+ FBrowserFontSize := memIni.ReadInteger(WINDOW_SECTION, 'BrowserFontSize', 0);
2161+ FBrowserFontBold := memIni.ReadInteger(WINDOW_SECTION, 'BrowserFontBold', 0);
2162+ FBrowserFontItalic := memIni.ReadInteger(WINDOW_SECTION, 'BrowserFontItalic', 0);
2163+ FBrowserFontColor := memIni.ReadInteger(WINDOW_SECTION, 'BrowserFontColor', -1);
2164+ FBrowserBackColor := memIni.ReadInteger(WINDOW_SECTION, 'BrowserBackColor', -1);
2165+
2166+ FCabinetFontName := memIni.ReadString(WINDOW_SECTION, 'CabinetFontName', DEFAULT_FONT_NAME);
2167+ FCabinetFontSize := memIni.ReadInteger(WINDOW_SECTION, 'CabinetFontSize', DEFAULT_FONT_SIZE);
2168+ FCabinetFontBold := memIni.ReadBool(WINDOW_SECTION, 'CabinetFontBold', False);
2169+ FCabinetFontItalic := memIni.ReadBool(WINDOW_SECTION, 'CabinetFontItalic', False);
2170+ FCabinetFontColor := StringToColor(memIni.ReadString(WINDOW_SECTION, 'CabinetFontColor', DEFAULT_FONT_COLOR));
2171+ FCabinetBackColor := StringToColor(memIni.ReadString(WINDOW_SECTION, 'CabinetBackColor', DEFAULT_WINDOW_COLOR));
2172+
2173+ FListFontName := memIni.ReadString(WINDOW_SECTION, 'ListFontName', DEFAULT_FONT_NAME);
2174+ FListFontSize := memIni.ReadInteger(WINDOW_SECTION, 'ListFontSize', DEFAULT_FONT_SIZE);
2175+ FListFontBold := memIni.ReadBool(WINDOW_SECTION, 'ListFontBold', False);
2176+ FListFontItalic := memIni.ReadBool(WINDOW_SECTION, 'ListFontItalic', False);
2177+ FListFontColor := StringToColor(memIni.ReadString(WINDOW_SECTION, 'ListFontColor', DEFAULT_FONT_COLOR));
2178+ FListBackColor := StringToColor(memIni.ReadString(WINDOW_SECTION, 'ListBackColor', DEFAULT_WINDOW_COLOR));
2179+ FUseOddColorOddResNum := memIni.ReadBool(WINDOW_SECTION,'UseOddColor', False);
2180+ FOddColor := StringToColor(memIni.ReadString(WINDOW_SECTION, 'OddColor', DEFAULT_WINDOW_COLOR));
2181+ FUnFocusedBold := memIni.ReadBool(WINDOW_SECTION,'UnFocusedBold', False);
2182+
2183+ FEditorFontName := memIni.ReadString(WINDOW_SECTION, 'EditorFontName', DEFAULT_FONT_NAME);
2184+ FEditorFontSize := memIni.ReadInteger(WINDOW_SECTION, 'EditorFontSize', DEFAULT_FONT_SIZE);
2185+ FEditorFontBold := memIni.ReadBool(WINDOW_SECTION, 'EditorFontBold', False);
2186+ FEditorFontItalic := memIni.ReadBool(WINDOW_SECTION, 'EditorFontItalic', False);
2187+ FEditorFontColor := StringToColor(memIni.ReadString(WINDOW_SECTION, 'EditorFontColor', DEFAULT_FONT_COLOR));
2188+ FEditorBackColor := StringToColor(memIni.ReadString(WINDOW_SECTION, 'EditorBackColor', DEFAULT_WINDOW_COLOR));
2189+
2190+ FBrowserTabFontName := memIni.ReadString(WINDOW_SECTION, 'BrowserTabFontName', DEFAULT_TAB_FONT_NAME);
2191+ FBrowserTabFontSize := memIni.ReadInteger(WINDOW_SECTION, 'BrowserTabFontSize', DEFAULT_TAB_FONT_SIZE);
2192+ FBrowserTabFontBold := memIni.ReadBool(WINDOW_SECTION, 'BrowserTabFontBold', False);
2193+ FBrowserTabFontItalic := memIni.ReadBool(WINDOW_SECTION, 'BrowserTabFontItalic', False);
2194+
2195+ FHintFontName := memIni.ReadString(WINDOW_SECTION, 'HintFontName', Screen.HintFont.Name);
2196+ FHintFontSize := memIni.ReadInteger(WINDOW_SECTION, 'HintFontSize', Screen.HintFont.Size);
2197+ //FHintFontBold := memIni.ReadBool(WINDOW_SECTION, 'HintFontBold', False);
2198+ //FHintFontItalic := memIni.ReadBool(WINDOW_SECTION, 'HintFontItalic', False);
2199+ FHintFontColor := StringToColor(memIni.ReadString(WINDOW_SECTION, 'HintFontColor', DEFAULT_FONT_COLOR));
2200+ FHintBackColor := StringToColor(memIni.ReadString(WINDOW_SECTION, 'HintBackColor', 'clInfoBk'));
2201+ end;
2202+end;
2203+{
2204+\brief “ü—Í—š—ð“ǂݍž‚݁iŒŸõ{ƒ[ƒ‹—“{–¼‘Oj
2205+\param memIni iniƒtƒ@ƒCƒ‹
2206+}
2207+procedure TSetting.ReadInputHisotrys(memIni: TMemIniFile);
2208+const
2209+ SECTIONS : array[0..2] of string = ('Name', 'Mail', 'SelectText');
2210+var
2211+ wkList : TStringList;
2212+ wkStr : string;
2213+ i, j : Integer;
2214+ listArray : array[0..2] of TStringList;
2215+begin
2216+ if (memIni <> nil) then begin
2217+ listArray[0] := FNameList;
2218+ listArray[1] := FMailList;
2219+ listArray[2] := FSelectTextList;
2220+ wkList := TStringList.Create;
2221+ try
2222+ for i := 0 to High(listArray) do begin
2223+ memIni.ReadSection(SECTIONS[i], wkList);
2224+ for j := 0 to wkList.Count -1 do begin
2225+ wkStr := memIni.ReadString(SECTIONS[i], wkList[j], '');
2226+ if (wkStr <> '') and
2227+ (listArray[i].IndexOf(wkStr) = -1) then begin
2228+ listArray[i].Add(wkStr);
2229+ end;
2230+ end;
2231+ end;
2232+ finally
2233+ wkList.Free;
2234+ end;
2235+ end;
2236+end;
2237+{
2238+\breif ƒŠƒXƒgƒJƒ‰ƒ€•“ǂݍž‚Ý
2239+\param memIni iniƒtƒ@ƒCƒ‹
2240+}
2241+procedure TSetting.ReadListColumnWidth(memIni: TMemIniFile);
2242+const
2243+ SECTIONS : array[0..2] of string =
2244+ ('BBSColumnWidth', 'CategoryColumnWidth', 'BoardColumnWidth');
2245+ DEFAULT_BBS_WIDTH: array[0..0] of Integer = (140);
2246+ DEFAULT_CATEGORY_WIDTH: array[0..2] of Integer = (150, 80, 130);
2247+ DEFAULT_BOARD_WIDTH: array[0..10] of Integer = (350, 60, 60, 60, 60, 60, 80, 130, 130, 130, 60);
2248+ MAX_WIDTH: Integer = 2000;
2249+var
2250+ wkList : TStringList;
2251+ i : Integer;
2252+begin
2253+ if (memIni <> nil) then begin
2254+ // ƒŠƒXƒgƒJƒ‰ƒ€•
2255+ wkList := TStringList.Create;
2256+ try
2257+ memIni.ReadSection(SECTIONS[0], wkList);
2258+ if Length(FBBSColumnWidth) <> wkList.Count then begin
2259+ memIni.EraseSection(SECTIONS[0]);
2260+ end;
2261+ for i := 0 to High(FBBSColumnWidth) do begin
2262+ BBSColumnWidth[i] := memIni.ReadInteger(SECTIONS[0],
2263+ 'ID' + IntToStr(i), DEFAULT_BBS_WIDTH[i]);
2264+ if BBSColumnWidth[i] > MAX_WIDTH then
2265+ BBSColumnWidth[i] := DEFAULT_BBS_WIDTH[i];
2266+ end;
2267+ memIni.ReadSection(SECTIONS[1], wkList);
2268+ if Length(FCategoryColumnWidth) <> wkList.Count then begin
2269+ memIni.EraseSection(SECTIONS[1]);
2270+ end;
2271+ for i := 0 to High(FCategoryColumnWidth) do begin
2272+ CategoryColumnWidth[i] := memIni.ReadInteger(SECTIONS[1],
2273+ 'ID' + IntToStr(i), DEFAULT_CATEGORY_WIDTH[i]);
2274+ if CategoryColumnWidth[i] > MAX_WIDTH then
2275+ CategoryColumnWidth[i] := DEFAULT_CATEGORY_WIDTH[i];
2276+ end;
2277+ memIni.ReadSection(SECTIONS[2], wkList);
2278+ if Length(FBoardColumnWidth) <> wkList.Count then begin
2279+ memIni.EraseSection(SECTIONS[2]);
2280+ end;
2281+ for i := 0 to High(FBoardColumnWidth) do begin
2282+ BoardColumnWidth[i] := memIni.ReadInteger(SECTIONS[2],
2283+ 'ID' + IntToStr(i), DEFAULT_BOARD_WIDTH[i]);
2284+ if BoardColumnWidth[i] > MAX_WIDTH then
2285+ BoardColumnWidth[i] := DEFAULT_BOARD_WIDTH[i];
2286+ end;
2287+ finally
2288+ wkList.Free;
2289+ end;
2290+ end;
2291+end;
2292+//! ƒJƒeƒSƒŠƒŠƒXƒgƒJƒ‰ƒ€‡˜“ǂݍž‚Ý
2293+procedure TSetting.ReadOrdColumn(memIni: TMemIniFile);
2294+var
2295+ wkList : TStringList;
2296+ wkStr : string;
2297+ i, id, code : Integer;
2298+begin
2299+ if (memIni <> nil) then begin
2300+ wkList := TStringList.Create;
2301+ try
2302+ memIni.ReadSection( 'BBSColumnOrder', wkList );
2303+ for i := 0 to wkList.Count - 1 do begin
2304+ wkStr := memIni.ReadString( 'BBSColumnOrder', 'ID' + IntToStr( i ), '' );
2305+ Val( wkStr, id, code );
2306+ if code = 0 then
2307+ FBBSColumnOrder.Add( TGikoBBSColumnID( id ) );
2308+ end;
2309+ if FBBSColumnOrder.Count = 0 then begin
2310+ // Ý’肪–³‚¢‚̂ō쐬
2311+ for i := 0 to Integer( High( TGikoBBSColumnID ) ) do
2312+ FBBSColumnOrder.Add( TGikoBBSColumnID( i ) );
2313+ end;
22282314
2229-end.
2315+ memIni.ReadSection( 'CategoryColumnOrder', wkList );
2316+ for i := 0 to wkList.Count - 1 do begin
2317+ wkStr := memIni.ReadString( 'CategoryColumnOrder', 'ID' + IntToStr( i ), '' );
2318+ Val( wkStr, id, code );
2319+ if code = 0 then
2320+ FCategoryColumnOrder.Add( TGikoCategoryColumnID( id ) );
2321+ end;
2322+ if FCategoryColumnOrder.Count = 0 then begin
2323+ // Ý’肪–³‚¢‚̂ō쐬
2324+ for i := 0 to Integer( High( TGikoCategoryColumnID ) ) do
2325+ FCategoryColumnOrder.Add( TGikoCategoryColumnID( i ) );
2326+ end;
22302327
2328+ memIni.ReadSection( 'BoardColumnOrder', wkList );
2329+ for i := 0 to wkList.Count - 1 do begin
2330+ wkStr := memIni.ReadString( 'BoardColumnOrder', 'ID' + IntToStr( i ), '' );
2331+ Val( wkStr, id, code );
2332+ if code = 0 then
2333+ FBoardColumnOrder.Add( TGikoBoardColumnID( id ) );
2334+ end;
2335+ if FBoardColumnOrder.Count = 0 then begin
2336+ // Ý’肪–³‚¢‚̂ō쐬
2337+ for i := 0 to Integer( High( TGikoBoardColumnID ) ) do begin
2338+ // ¨‚¢‚̃Jƒ‰ƒ€‚̓fƒtƒHƒ‹ƒg‚Å”ñ•\Ž¦‚É‚·‚é
2339+ if ( i <> Ord(gbcVigor) ) then begin
2340+ FBoardColumnOrder.Add( TGikoBoardColumnID( i ) );
2341+ end;
2342+ end;
2343+ end;
2344+ finally
2345+ wkList.Free;
2346+ end;
2347+ end;
2348+end;
2349+end.
22312350
--- a/Trip.pas
+++ b/Trip.pas
@@ -33,6 +33,16 @@ function get_2ch_trip(
3333 const pw : PChar
3434 ) : string;
3535
36+{!
37+\brief ƒgƒŠƒbƒv‚̐¶¬‚É•K—v‚Èsalt‚̐¶¬
38+\parm pw salt‚ÌŒ³‚É‚È‚éƒpƒXƒ[ƒh
39+\param salt ¶¬‚µ‚½salt‚ªŠi”[‚³‚ê‚é (array[0..2] of char)
40+}
41+procedure get_salt(
42+ const pw : PChar;
43+ salt : PChar
44+);
45+
3646 const
3747 kCryptInitialTr : CryptOrdering = ( o_data: (
3848 #58,#50,#42,#34,#26,#18,#10, #2,#60,#52,#44,#36,#28,#20,#12, #4,
@@ -413,18 +423,30 @@ function get_2ch_trip(
413423 var
414424 s : CryptData;
415425 salt : array [0..2] of char;
416-
417- i : Integer;
418- len : Integer;
419426 begin
420427
421- salt[ 0 ] := #0;
422428 if pw[ 0 ] = #0 then
423429 begin
424430 Result := '';
425431 Exit;
426432 end;
427433
434+ get_salt( pw, salt );
435+
436+
437+ Result := Copy( crypt_r( pw, salt, s ), 4, 100 );
438+
439+end;
440+
441+procedure get_salt(
442+ const pw : PChar;
443+ salt : PChar
444+);
445+var
446+ i, len : Integer;
447+begin
448+ salt[ 0 ] := #0;
449+
428450 if pw[ 1 ] <> #0 then
429451 begin
430452 if pw[ 2 ] <> #0 then
@@ -438,8 +460,11 @@ begin
438460 else
439461 salt[ i ] := '.';
440462
441- if Pos( salt[ i ], ':;<=>?@[\\]^_`' ) > 0 then
442- salt[ i ] := Char( Integer( salt[ i ] ) + 7 );
463+ if Pos ( salt[ i ], ':;<=>?@' ) > 0 then begin
464+ salt[ i ] := Char( Integer( salt[ i ] ) + 7 );
465+ end else if Pos( salt[ i ], '[\\]^_`' ) > 0 then begin
466+ salt[ i ] := Char( Integer( salt[ i ] ) + 6 );
467+ end;
443468 end;
444469 if len = 1 then
445470 salt[ 1 ] := 'H';
@@ -448,9 +473,6 @@ begin
448473 salt[ 0 ] := 'H';
449474 salt[ 1 ] := '.';
450475 end;
451-
452- Result := Copy( crypt_r( pw, salt, s ), 4, 100 );
453-
454476 end;
455477
456478 end.
--- a/gikoNavi.dpr
+++ b/gikoNavi.dpr
@@ -72,7 +72,11 @@ uses
7272 GikoMessage in 'GikoMessage.pas',
7373 InputAssist in 'InputAssist.pas' {InputAssistForm},
7474 InputAssistDataModule in 'InputAssistDataModule.pas' {InputAssistDM: TDataModule},
75- DefaultFileManager in 'DefaultFileManager.pas';
75+ DefaultFileManager in 'DefaultFileManager.pas',
76+ MoveHistoryItem in 'MoveHistoryItem.pas',
77+ SambaTimer in 'SambaTimer.pas',
78+ HistoryList in 'HistoryList.pas',
79+ NewBoardURL in 'NewBoardURL.pas' {NewBoardURLForm};
7680
7781 {$R *.RES}
7882 {$R gikoResource.res}
Binary files a/gikoNavi.res and b/gikoNavi.res differ
--- a/readme/readme.txt
+++ b/readme/readme.txt
@@ -1,4 +1,4 @@
1-¡ƒMƒRƒiƒr Version1.00 ÊÞÀ53 Readme.txt
1+¡ƒMƒRƒiƒr Version1.00 ÊÞÀ54 Readme.txt
22
33
44 ------------------------------
@@ -50,7 +50,7 @@
5050 ------------------------------
5151 ƒoƒO‚â—v–]‚́AƒMƒRƒiƒrƒXƒŒƒbƒh‚Ŏ󂯕t‚¯‚Ä‚¨‚è‚Ü‚·B
5252 ƒMƒRƒiƒrƒTƒCƒgFhttp://gikonavi.sourceforge.jp/
53-ƒMƒRƒiƒrƒXƒŒFhttp://pc7.2ch.net/test/read.cgi/software/1149268313/l50
53+ƒMƒRƒiƒrƒXƒŒFhttp://pc7.2ch.net/test/read.cgi/software/1151728347/l50
5454
5555 ------------------------------
5656 “]Ú‚ɂ‚¢‚Ä
@@ -107,7 +107,15 @@ LICENSE
107107 ------------------------------
108108 —š—ð
109109 ------------------------------
110-2006/XX/XX
110+2007/01/28
111+ Version ÊÞÀ54
112+@ƒXƒŒƒbƒh“à‚ł̃Šƒ“ƒN‚ňړ®‚µ‚½‚Æ‚«‚Ì—š—ð‚ð’H‚ê‚é‹@”\‚ð’ljÁ
113+@ƒ^ƒXƒNƒgƒŒƒC‚ÉŠi”[‚·‚é‹@”\‚ð’ljÁiƒIƒvƒVƒ‡ƒ“‚ōŏ¬‰»Žž‚àj
114+@Samba24‘΍ô‚Ŕ‚²‚Ƃɐݒè‰Â”\‚ÉŠg’£
115+@‰EƒNƒŠƒbƒN‚̃Rƒ“ƒeƒLƒXƒgƒƒjƒ…[‚ł̃}ƒEƒXƒWƒFƒXƒ`ƒƒ[‚Ńnƒ“ƒO‚·‚é•s‹ï‡‚̉ñ”ðƒIƒvƒVƒ‡ƒ“‚ð’ljÁ
116+@iWin9xŒn—pj
117+
118+2006/08/07
111119 Version ÊÞÀ53
112120 @IE7(beta)‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚é‚ƃŒƒXƒAƒ“ƒJ[‚̃|ƒbƒvƒAƒbƒv‚Å•\Ž¦‚³‚ê‚È‚¢•s‹ï‡‚̏C³
113121 @‚µ‚½‚ç‚ÎJBBS”XV‚ªA“®ì‚µ‚È‚¢•s‹ï‡‚̏C³
@@ -116,8 +124,8 @@ LICENSE
116124 @„‰ñ—\–ñ–¼‚̕ύX‚ª”½‰f‚³‚ê‚È‚¢•s‹ï‡‚̏C³
117125 @—š—ðíœ‚É”º‚¤•s‹ï‡‚̏C³
118126 @ƒJƒ“ƒ}‚ŘA‘±‚·‚郌ƒXƒAƒ“ƒJ[‚ɃŠƒ“ƒN‚ªÝ’肳‚ê‚È‚¢•s‹ï‡‚̏C³
119-@
120-
127+@ƒfƒtƒHƒ‹ƒg‚̐ݒèƒtƒ@ƒCƒ‹‚̈µ‚¢‚𓝈ê
128+@ƒŒƒXƒGƒfƒBƒ^‚̃vƒŒƒrƒ…[‚Å•\Ž¦‚³‚ê‚éƒgƒŠƒbƒvƒL[‚ÆŽÀÛ‚̃gƒŠƒbƒvƒL[‚ªˆÙ‚È‚é•s‹ï‡‚̏C³
121129
122130 2006/06/18
123131 Version ÊÞÀ52
--- a/res/default/Samba.default
+++ b/res/default/Samba.default
@@ -1,20 +1,25 @@
11 [Setting]
2+@ascii2d=120
3+@chiri=120
4+@gline=120
5+@newsplus=120
6+@operate=120
7+@tv=120
28 aa5=30
39 academy4=30
410 anime=45
511 book3=30
6-bubble4=120
12+bubble4=30
713 comic6=30
814 etc3=30
915 etc4=30
10-ex9=15
1116 ex11=15
12-ex12=15
1317 ex13=15
14-ex14=15
18+ex16=15
19+ex9=15
1520 food6=30
16-game9=30
1721 game10=30
22+game9=30
1823 hobby7=30
1924 hobby8=30
2025 human5=30
@@ -22,12 +27,14 @@ life7=30
2227 live14=10
2328 live19=10
2429 live22x=10
30+live23=10
2531 love3=30
2632 money4=30
27-music4=30
2833 music5=30
34+music6=30
2935 news18=30
30-news19=120
36+news19=30
37+news20=120
3138 off3=30
3239 pc7=30
3340 pc8=30
@@ -39,12 +46,13 @@ science4=30
3946 society3=30
4047 sports9=60
4148 that4=30
42-tmp5=45
49+tmp6=45
4350 travel2=30
4451 tv7=30
4552 tv8=60
46-pie=30
53+
4754 idol=30
55+pie=30
4856 sakura01=30
4957 sakura02=30
5058 sakura03=30