OSDN Git Service

・スレタイの特定ワードを非表示にする機能に「©bbspink.com」も追加
[gikonavigoeson/gikonavi.git] / Option.pas
index 7d2fb05..dd70f62 100644 (file)
@@ -13,7 +13,7 @@ uses
        SHDocVw_TLB,
        MSHTML_TLB,
 {$IFEND}
-       BoardGroup;
+       BoardGroup, BrowserRecord;
 
 type
        TOptionDialog = class(TForm)
@@ -44,13 +44,13 @@ type
                 WriteProxyCheck: TCheckBox;
                 WriteProxyAddressEdit: TEdit;
                 WritePortEdit: TEdit;
-                WriteProxyUserIDEdit: TEdit;
-                WriteProxyPasswordEdit: TEdit;
+                               WriteProxyUserIDEdit: TEdit;
+                               WriteProxyPasswordEdit: TEdit;
                 Font1Sheet: TTabSheet;
                 Bevel1: TBevel;
                 Bevel2: TBevel;
                 Label19: TLabel;
-                Bevel5: TBevel;
+                               Bevel5: TBevel;
                 Label20: TLabel;
                 Label21: TLabel;
                 Label22: TLabel;
@@ -116,10 +116,7 @@ type
                 OpenMailerCheckBox: TCheckBox;
                 GroupBox6: TGroupBox;
                 LogDeleteMessageCheckBox: TCheckBox;
-                ResAnchorGroupBox: TGroupBox;
-                ResAnchorCheckBox: TCheckBox;
                 TabSheet1: TTabSheet;
-                PopupPositionRadioGroup: TRadioGroup;
                TabAddRadioGroup: TRadioGroup;
                 GroupBox8: TGroupBox;
                 Label14: TLabel;
@@ -195,6 +192,45 @@ type
                 Label8: TLabel;
     BeCodeEdit: TEdit;
                 BeAutoLoginCheckBox: TCheckBox;
+    GroupBox19: TGroupBox;
+    Label17: TLabel;
+    MaxRecordCountEdit: TEdit;
+    Label18: TLabel;
+    UnFocusedBoldCheckBox: TCheckBox;
+    IgnoreKanaCheckBox: TCheckBox;
+    UseKatjuTypeSkinCheckBox: TCheckBox;
+    GroupBox20: TGroupBox;
+    AutoSortCheckBox: TCheckBox;
+    Label24: TLabel;
+    GroupBox21: TGroupBox;
+    StoredTaskTrayCB: TCheckBox;
+    GroupBox22: TGroupBox;
+    LoopBrowserTabsCB: TCheckBox;
+    GroupBox23: TGroupBox;
+    IgnoreContextCheckBox: TCheckBox;
+    GroupBox24: TGroupBox;
+    gppRightTopRB: TRadioButton;
+    gppTopRB: TRadioButton;
+    gppLeftTopRB: TRadioButton;
+    gppLeftRB: TRadioButton;
+    gppRightRB: TRadioButton;
+    gppLeftBottomRB: TRadioButton;
+    gppBottomRB: TRadioButton;
+    gppRighBottomRB: TRadioButton;
+    ResAnchorCheckBox: TCheckBox;
+    IgnoreLimitResCountCheckBox: TCheckBox;
+    GroupBox25: TGroupBox;
+    Label25: TLabel;
+    BoukenComboBox: TComboBox;
+    BoukenModButton: TButton;
+    BoukenDelButton: TButton;
+    BoukenEdit: TEdit;
+    GroupBox26: TGroupBox;
+    UseUnicodeCB: TCheckBox;
+    Label27: TLabel;
+    DispImageCheckBox: TCheckBox;
+    GroupBox27: TGroupBox;
+    ThreadTitleTrimCheckBox: TCheckBox;
                procedure FormCreate(Sender: TObject);
                procedure FormDestroy(Sender: TObject);
                procedure ApplyButtonClick(Sender: TObject);
@@ -243,6 +279,10 @@ type
                 procedure OddResNumCheckBoxClick(Sender: TObject);
                 procedure ResRangeHoldCheckBoxClick(Sender: TObject);
                 procedure CroutOptionClick(Sender: TObject);
+    procedure MaxRecordCountEditExit(Sender: TObject);
+    procedure BoukenDelButtonClick(Sender: TObject);
+    procedure BoukenComboBoxChange(Sender: TObject);
+    procedure BoukenModButtonClick(Sender: TObject);
        private
                { Private \90é\8c¾ }
                FClose: Boolean;
@@ -260,6 +300,10 @@ type
                procedure SetAbonpropertys;
                procedure CSSSetContent(Content: string);
                procedure CSSPreview;
+               //! CSS\83v\83\8c\83r\83\85\81[\97pHTMLBody\90\90¬
+               function CreatePreviewBody(Res: array of TResRec): string;
+               //! CSS/SKIN\83v\83\8c\83r\83\85\81[\97pStyle\95\8e\9a\97ñ\8eæ\93¾
+               function GetPreviewUserStyle(): string;
        public
                { Public \90é\8c¾ }
        end;
@@ -270,7 +314,7 @@ var
 implementation
 
 uses
-       Giko, Editor, Setting, ActnList, KuroutSetting;
+       Giko, Editor, Setting, ActnList, KuroutSetting, Math, HTMLCreate;
 
 const
        FONT_TEXT: string = '%s %d pt';
@@ -283,12 +327,24 @@ const
        DEFAULT_FONT_SIZE: Integer = 9;
        DEFAULT_TABFONT_NAME: string = '\82l\82\82o\83S\83V\83b\83N';
        DEFAULT_TABFONT_SIZE: Integer = 9;
-       URL_TORA3: WideString = 'http://2ch.tora3.net/';
+//     URL_TORA3: WideString = 'http://2ch.tora3.net/';
+       URL_TORA3: WideString = 'http://ronin.bbspink.com/';
+       DEFAULT_CSS_FILENAME = 'default.css';
 
 {$R *.DFM}
 
 procedure TOptionDialog.FormCreate(Sender: TObject);
+var
+    CenterForm: TCustomForm;
 begin
+    CenterForm := TCustomForm(Owner);
+    if Assigned(CenterForm) then begin
+        Left := ((CenterForm.Width - Width) div 2) + CenterForm.Left;
+        Top := ((CenterForm.Height - Height) div 2) + CenterForm.Top;
+    end else begin
+        Left := (Screen.Width - Width) div 2;
+        Top := (Screen.Height - Height) div 2;
+    end;
 
        CSSBrowser.Navigate('about:blank');
        FClose := True;
@@ -338,13 +394,14 @@ begin
        ReadPortEditExit(Sender);
        WritePortEditExit(Sender);
        AddressHistoryCountEditExit(Sender);
+    MaxRecordCountEditExit(Sender);
        PreviewWaitEditExit(Sender);
 
        if not CheckFolder then begin
                FClose := False;
                Exit;
        end;
-        SetAbonpropertys;
+               SetAbonpropertys;
        SaveSetting;
        SettingApply;
 
@@ -355,6 +412,7 @@ begin
        ReadPortEditExit(Sender);
        WritePortEditExit(Sender);
        AddressHistoryCountEditExit(Sender);
+       MaxRecordCountEditExit(Sender);
        PreviewWaitEditExit(Sender);
 
        if not CheckFolder then begin
@@ -540,7 +598,8 @@ var
        Item: TListItem;
 //     s: string;
        idx: Integer;
-       FileList: TStringList;
+       FileList : TStringList;
+    DomainList : TStringList;
 begin
 
        //\93Ç\82Ý\8d\9e\82Ý\97p\83v\83\8d\83L\83V
@@ -583,6 +642,8 @@ begin
        OddResNumCheckBox.Checked := GikoSys.Setting.UseOddColorOddResNum;
        OddResNumColorBox.Selected := GikoSys.Setting.OddColor;
        OddResNumColorBox.Enabled := OddResNumCheckBox.Checked;
+       UnFocusedBoldCheckBox.Checked := GikoSys.Setting.UnFocusedBold;
+       UnFocusedBoldCheckBox.Enabled := OddResNumCheckBox.Checked;
 
        //\83u\83\89\83E\83U\83|\83b\83v\83A\83b\83v\83t\83H\83\93\83g
        HintMemo.Font.Name := GikoSys.Setting.HintFontName;
@@ -604,6 +665,8 @@ begin
        EditorMemo.Color := GikoSys.Setting.EditorBackColor;
        //CSS\95\\8e¦
        CSSCheckBox.Checked := GikoSys.Setting.UseCSS;
+       //\82©\82¿\82ã\83X\83L\83\93\8eg\97p
+       UseKatjuTypeSkinCheckBox.Checked := GikoSys.Setting.UseKatjushaType;
        if FCSSFont <> nil then
                FCSSFont.Free;
        FCSSFont := TFont.Create;
@@ -644,7 +707,7 @@ begin
                FileList.Sort;
                for i := 0 to FileList.Count - 1 do begin
                        //s := ExtractFileName(FileList[i]);
-                       if LowerCase(FileList[i]) = 'default.css' then
+                       if LowerCase(FileList[i]) = DEFAULT_CSS_FILENAME then
                                Item := CSSListView.Items.Insert(0)
                        else
                                Item := CSSListView.Items.Add;
@@ -661,29 +724,18 @@ begin
                FCSSStrings.Clear;
        FCSSStrings := TStringList.Create;
        try
-               //GikoSys.GetDirectoryList(GikoSys.GetSkinDir, '*', FileList, False);
                GikoSys.GetDirectoryList(GikoSys.GetSkinDir, '*', FCSSStrings, False);
 
                Idx := Length(GikoSys.GetSkinDir);
-               //FileList.Sort;
                FCSSStrings.Sort;
-               //for i := 0 to FileList.Count - 1 do begin
                for i := 0 to FCSSStrings.Count - 1 do begin
-                       //s := ExtractFileName(FileList[i]);
                        Item := CSSListView.Items.Add;
-                       {Item.Data := PChar( FileList[i] );
-                       Item.Caption := Copy( FileList[i], Idx + 1, Length(FileList[i]) );
-                       if LowerCase(FileList[i]) = LowerCase(GikoSys.Setting.CSSFileName) then
-                               Item.Selected := True;
-                       }
                        Item.Data := PChar( FCSSStrings[i] );
                        Item.Caption := Copy( FCSSStrings[i], Idx + 1, Length(FCSSStrings[i]) );
                        if LowerCase(FCSSStrings[i]) = LowerCase(GikoSys.Setting.CSSFileName) then
                                Item.Selected := True;
                end;
        finally
-               // Item.Data \82É\83|\83C\83\93\83^\93Ë\82Á\8d\9e\82ñ\82Å\82é\82©\82ç\8aJ\95ú\82Å\82«\82È\82¢\82æ\82§\81`
-               //FileList.Free;
        end;
 
        if (CSSListView.ItemIndex = -1) and (CSSListView.Items.Count > 0) then
@@ -691,6 +743,8 @@ begin
 
        //Mail\97\93\95\\8e¦
        ShowMailCheckBox.Checked := GikoSys.Setting.ShowMail;
+    //BE2.0\83A\83C\83R\83\93\81EEmoticons\82ð\89æ\91\9c\95\\8e¦\82·\82é
+    DispImageCheckBox.Checked := GikoSys.Setting.IconImageDisplay;
 
        // \8bN\93®\8e\9e\83\8c\83X\95\\8e¦\94Í\88Í\82Ì\8cÅ\92è
        ResRangeHoldCheckBox.Checked := GikoSys.Setting.ResRangeHold;
@@ -698,7 +752,7 @@ begin
        Ord( grrAll ):  ResRangeHoldComboBox.ItemIndex := 0;
        Ord( grrKoko ): ResRangeHoldComboBox.ItemIndex := 2;
        Ord( grrNew ):  ResRangeHoldComboBox.ItemIndex := 3;
-       100:                                            ResRangeHoldComboBox.ItemIndex := 1;
+       10..65535:                                              ResRangeHoldComboBox.ItemIndex := 1;
        end;
        ResRangeHoldComboBox.Enabled := GikoSys.Setting.ResRangeHold;
        //\83^\83u\92Ç\89Á\88Ê\92u
@@ -741,6 +795,8 @@ begin
 
        //\83\8d\83O\8dí\8f\9c\8e\9e\83\81\83b\83Z\81[\83W
        LogDeleteMessageCheckBox.Checked := GikoSys.Setting.DeleteMsg;
+    //\93¯ID\83\8c\83X\83A\83\93\83J\81[\95\\8e¦\82Ì\90§\8cÀ\90\94\89z\82¦\83\81\83b\83Z\81[\83W
+    IgnoreLimitResCountCheckBox.Checked := GikoSys.Setting.LimitResCountMessage;
 
        //\8fI\97¹\8e\9e\8am\94F\83_\83C\83A\83\8d\83O
        ShowDialogForEndCheckBox.Checked := GikoSys.Setting.ShowDialogForEnd;
@@ -753,15 +809,15 @@ begin
        BrowserMaxCombo.ItemIndex := Ord( GikoSys.Setting.BrowserAutoMaximize );
        //\83|\83b\83v\83A\83b\83v\88Ê\92u
        case GikoSys.Setting.PopupPosition of
-               gppRightTop:            PopupPositionRadioGroup.ItemIndex := 0;
-               gppRight:                       PopupPositionRadioGroup.ItemIndex := 1;
-               gppRightBottom: PopupPositionRadioGroup.ItemIndex := 2;
-               gppTop:                                 PopupPositionRadioGroup.ItemIndex := 3;
-               gppCenter:                      PopupPositionRadioGroup.ItemIndex := 4;
-               gppBottom:                      PopupPositionRadioGroup.ItemIndex := 5;
-               gppLeftTop:             PopupPositionRadioGroup.ItemIndex := 6;
-               gppLeft:                                PopupPositionRadioGroup.ItemIndex := 7;
-               gppLeftBottom:  PopupPositionRadioGroup.ItemIndex := 8;
+               gppRightTop:            gppRightTopRB.Checked := True;
+               gppRight:                       gppRightRB.Checked := True;
+               gppRightBottom:     gppRighBottomRB.Checked := True;
+               gppTop:                         gppTopRB.Checked := True;
+               gppCenter:                      gppTopRB.Checked := True; // \93Ç\82Ý\8d\9e\82Ý\82Å\95Ï\8a·\82µ\82Ä\82é\82Í\82¸
+               gppBottom:                      gppBottomRB.Checked := True;
+               gppLeftTop:             gppLeftTopRB.Checked := True;
+               gppLeft:                        gppLeftRB.Checked := True;
+               gppLeftBottom:      gppLeftBottomRB.Checked := True;
        end;
 
        //\94ñ\83A\83N\83e\83B\83u\8e\9e\83|\83b\83v\83A\83b\83v\95\\8e¦
@@ -818,14 +874,16 @@ begin
        else
                DatOchiSortCombo.ItemIndex := 0;
        end;
-
-        //\82 \82Ú\81`\82ñ
-        RloCheckBox.Checked := GikoSys.Setting.AbonDeleterlo;
-        ReplaceulCheckBox.Checked := GikoSys.Setting.AbonReplaceul;
-                               PopUpAbonCheckBox.Checked := GikoSys.Setting.PopUpAbon;
-                               ShowNGLineCheckBox.Checked := GikoSys.Setting.ShowNGLinesNum;
-                               AddResAnchorCheckBox.Checked := GikoSys.Setting.AddResAnchor;
+       AutoSortCheckBox.Checked := GikoSys.Setting.AutoSortThreadList;
+       
+       //\82 \82Ú\81`\82ñ
+       RloCheckBox.Checked := GikoSys.Setting.AbonDeleterlo;
+       ReplaceulCheckBox.Checked := GikoSys.Setting.AbonReplaceul;
+       PopUpAbonCheckBox.Checked := GikoSys.Setting.PopUpAbon;
+       ShowNGLineCheckBox.Checked := GikoSys.Setting.ShowNGLinesNum;
+       AddResAnchorCheckBox.Checked := GikoSys.Setting.AddResAnchor;
        DeleteSyriaCheckBox.Checked := GikoSys.Setting.DeleteSyria;
+       IgnoreKanaCheckBox.Checked := GikoSys.Setting.IgnoreKana;
 {$IFDEF SPAM_FILTER_ENABLED}
        // \83X\83p\83\80\83t\83B\83\8b\83^\82Ì\90Ý\92è\82ð\95\\8e¦\82·\82é
        SpamFilterGroupBox.Visible := True;
@@ -845,10 +903,35 @@ begin
        TabLoadSave.Checked := Gikosys.Setting.TabAutoLoadSave;
        UseUndecidedCheckBox.Checked := GikoSys.Setting.UseUndecided;
 
+    // \83\8c\83X\83G\83f\83B\83^Unicode\93ü\97Í
+    UseUnicodeCB.Checked := Gikosys.Setting.UseUnicode;
+    // \83X\83\8c\83^\83C\93Á\92è\95\8e\9a\97ñ\8f\9c\8b\8e
+    ThreadTitleTrimCheckBox.Checked := GikoSys.Setting.ThreadTitleTrim;
+
        //Be2ch\94F\8fØ
        BeUserIDEdit.Text := GikoSys.Setting.BeUserID;
-       BeCodeEdit.Text := GikoSys.Setting.BeCode;
+       BeCodeEdit.Text := GikoSys.Setting.BePassword;
        BeAutoLoginCheckBox.Checked := GikoSys.Setting.BeAutoLogin;
+       //\97\9a\97ð\82Ì\8dÅ\91å\95Û\91\90\94
+       MaxRecordCountEdit.Text := IntToStr(GikoSys.Setting.MaxRecordCount);
+    // \8dÅ\8f¬\89»\8e\9e\82É\83^\83X\83N\83g\83\8c\83C\82É\8ai\94[\82·\82é\82©
+    StoredTaskTrayCB.Checked := GikoSys.Setting.StoredTaskTray;
+    // \83u\83\89\83E\83U\83^\83u\82Ì\88Ú\93®\82Å\83\8b\81[\83v\82ð\8b\96\89Â\82·\82é\82©
+    LoopBrowserTabsCB.Checked := GikoSys.Setting.LoopBrowserTabs;
+    //
+    IgnoreContextCheckBox.Checked := GikoSys.Setting.GestureIgnoreContext;
+
+    // \96`\8c¯\82Ì\8f\91\83h\83\81\83C\83\93\88ê\97\97\8eæ\93¾
+    BoukenComboBox.Text := '';
+    BoukenComboBox.Items.Clear;
+    DomainList := TStringList.Create;
+    GikoSys.GetBoukenDomain(DomainList);
+    for i := 0 to DomainList.Count - 1 do begin
+        BoukenComboBox.Items.Add( DomainList[i] ) ;
+    end;
+    DomainList.Free;
+    BoukenComboBox.ItemIndex := 0;
+    BoukenComboBox.OnChange(nil);
 end;
 
 procedure TOptionDialog.SaveSetting;
@@ -886,6 +969,8 @@ begin
        GikoSys.Setting.ListBackColor := ListMemo.Color;
        GikoSys.Setting.UseOddColorOddResNum := OddResNumCheckBox.Checked;
        GikoSys.Setting.OddColor := OddResNumColorBox.Selected;
+       GikoSys.Setting.UnFocusedBold := (UnFocusedBoldCheckBox.Enabled) and
+                                                                               (UnFocusedBoldCheckBox.Checked);
 
        GikoSys.Setting.HintFontName := HintMemo.Font.Name;
        GikoSys.Setting.HintFontSize := HintMemo.Font.Size;
@@ -907,9 +992,10 @@ begin
        //CSS\95\\8e¦
        if GikoSys.Setting.UseCSS <> CSSCheckBox.Checked then FRepaintThread := true;
        GikoSys.Setting.UseCSS := CSSCheckBox.Checked;
+       GikoSys.Setting.UseKatjushaType := UseKatjuTypeSkinCheckBox.Checked;
        //CSS\83t\83@\83C\83\8b\96¼
        tmp := GikoSys.Setting.CSSFileName;
-       GikoSys.Setting.CSSFileName := 'default.css';
+       GikoSys.Setting.CSSFileName := DEFAULT_CSS_FILENAME;
        if CSSListView.Items.Count > 0 then begin
                try
                        if CSSListView.Items[CSSListView.ItemIndex].Data <> nil then
@@ -969,11 +1055,13 @@ begin
        //Mail\97\93\95\\8e¦
        if GikoSys.Setting.ShowMail <> ShowMailCheckBox.Checked then FRepaintThread := true;
        GikoSys.Setting.ShowMail := ShowMailCheckBox.Checked;
+    //BE2.0\83A\83C\83R\83\93\81EEmoticons\82ð\89æ\91\9c\95\\8e¦\82·\82é
+    GikoSys.Setting.IconImageDisplay := DispImageCheckBox.Checked;
        // \8bN\93®\8e\9e\83\8c\83X\95\\8e¦\94Í\88Í\82Ì\8cÅ\92è
        GikoSys.Setting.ResRangeHold := ResRangeHoldCheckBox.Checked;
        case ResRangeHoldComboBox.ItemIndex of
                0: GikoSys.Setting.ResRange := Ord( grrAll );
-               1: GikoSys.Setting.ResRange := 100;
+               1: GikoSys.Setting.ResRange := GikoSys.Setting.ResRangeExCount;
                2: GikoSys.Setting.ResRange := Ord( grrKoko );
                3: GikoSys.Setting.ResRange := Ord( grrNew );
        end;
@@ -993,6 +1081,8 @@ begin
 
        GikoSys.Setting.OpenMailer := OpenMailerCheckBox.Checked;
        GikoSys.Setting.DeleteMsg := LogDeleteMessageCheckBox.Checked;
+    GikoSys.Setting.LimitResCountMessage := IgnoreLimitResCountCheckBox.Checked;
+
        //\8fI\97¹\8e\9e\8am\94F\83_\83C\83A\83\8d\83O
        GikoSys.Setting.ShowDialogForEnd := ShowDialogForEndCheckBox.Checked;
        //AllTabClose
@@ -1003,18 +1093,14 @@ begin
        // \83u\83\89\83E\83U\8dÅ\91å\89»
        GikoSys.Setting.BrowserAutoMaximize := TGikoBrowserAutoMaximize( BrowserMaxCombo.ItemIndex );
        //\83|\83b\83v\83A\83b\83v\88Ê\92u
-       case PopupPositionRadioGroup.ItemIndex of
-               0: GikoSys.Setting.PopupPosition := gppRightTop;
-               1: GikoSys.Setting.PopupPosition := gppRight;
-               2: GikoSys.Setting.PopupPosition := gppRightBottom;
-               3: GikoSys.Setting.PopupPosition := gppTop;
-               4: GikoSys.Setting.PopupPosition := gppCenter;
-               5: GikoSys.Setting.PopupPosition := gppBottom;
-               6: GikoSys.Setting.PopupPosition := gppLeftTop;
-               7: GikoSys.Setting.PopupPosition := gppLeft;
-               8: GikoSys.Setting.PopupPosition := gppLeftBottom;
-       end;
-
+    if (gppRightTopRB.Checked) then GikoSys.Setting.PopupPosition := gppRightTop;
+    if (gppRightRB.Checked) then GikoSys.Setting.PopupPosition := gppRight;
+    if (gppRighBottomRB.Checked) then GikoSys.Setting.PopupPosition := gppRightBottom;
+    if (gppTopRB.Checked) then GikoSys.Setting.PopupPosition := gppTop;
+    if (gppBottomRB.Checked) then GikoSys.Setting.PopupPosition := gppBottom;
+    if (gppLeftTopRB.Checked) then GikoSys.Setting.PopupPosition := gppLeftTop;
+    if (gppLeftRB.Checked) then GikoSys.Setting.PopupPosition := gppLeft;
+    if (gppLeftBottomRB.Checked) then GikoSys.Setting.PopupPosition := gppLeftBottom;
        //\94ñ\83A\83N\83e\83B\83u\8e\9e\83|\83b\83v\83A\83b\83v\95\\8e¦
        GikoSys.Setting.UnActivePopup := UnActivePopupCheckBox.Checked;
        //\83\8c\83X\83|\83b\83v\83A\83b\83v\83{\81[\83\8b\83h\95\\8e¦
@@ -1089,6 +1175,7 @@ begin
                        GikoSys.Setting.DatOchiSortIndex := Ord( gbcLastModified );{gbcLastModified}
                        end;
        end;
+       GikoSys.Setting.AutoSortThreadList := AutoSortCheckBox.Checked;
 
        GikoSys.Setting.WriteSystemSettingFile;
        GikoSys.Setting.WriteBoardURLSettingFile;
@@ -1112,7 +1199,9 @@ begin
        GikoSys.Setting.PopUpAbon := PopUpAbonCheckBox.Checked;
        GikoSys.Setting.ShowNGLinesNum := ShowNGLineCheckBox.Checked;
        GikoSys.Setting.AddResAnchor := AddResAnchorCheckBox.Checked;
-                               GikoSys.Setting.DeleteSyria := DeleteSyriaCheckBox.Checked;
+       GikoSys.Setting.DeleteSyria := DeleteSyriaCheckBox.Checked;
+       GikoSys.Setting.IgnoreKana := IgnoreKanaCheckBox.Checked;
+       GikoSys.FAbon.IgnoreKana := GikoSys.Setting.IgnoreKana;
        // \8eg\97p\82·\82é\83X\83p\83\80\83t\83B\83\8b\83^
        if GikoSys.Setting.SpamFilterAlgorithm <> TGikoSpamFilterAlgorithm(
                SpamFilterAlgorithmComboBox.ItemIndex ) then begin
@@ -1126,8 +1215,20 @@ begin
        GikoSys.Setting.UseUndecided := UseUndecidedCheckBox.Checked;
         //Be2ch
         GikoSys.Setting.BeUserID := BeUserIDEdit.Text;
-        GikoSys.Setting.BeCode := BeCodeEdit.Text;
-        GikoSys.Setting.BeAutoLogin := BeAutoLoginCheckBox.Checked;
+        GikoSys.Setting.BePassword := BeCodeEdit.Text;
+               GikoSys.Setting.BeAutoLogin := BeAutoLoginCheckBox.Checked;
+       //\97\9a\97ð\82Ì\8dÅ\91å\95Û\91\90\94
+       GikoSys.Setting.MaxRecordCount := Max(StrToInt64Def(MaxRecordCountEdit.Text,100),1);
+    GikoSys.Setting.StoredTaskTray := StoredTaskTrayCB.Checked;
+    GikoSys.Setting.LoopBrowserTabs := LoopBrowserTabsCB.Checked;
+
+    GikoSys.Setting.GestureIgnoreContext := IgnoreContextCheckBox.Checked;
+
+    // \83\8c\83X\83G\83f\83B\83^Unicode\93ü\97Í
+    Gikosys.Setting.UseUnicode := UseUnicodeCB.Checked;
+    // \83X\83\8c\83^\83C\93Á\92è\95\8e\9a\97ñ\8f\9c\8b\8e
+    GikoSys.Setting.ThreadTitleTrim := ThreadTitleTrimCheckBox.Checked;
+
 end;
 
 procedure TOptionDialog.SettingApply;
@@ -1143,16 +1244,6 @@ begin
                GikoForm.TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
                GikoForm.TreeView.Color := GikoSys.Setting.CabinetBackColor;
 
-               {GikoForm.TreeView.Font.Style := [];
-               if GikoSys.Setting.CabinetFontBold then
-                       GikoForm.TreeView.Font.Style := [fsBold];
-               if GikoSys.Setting.CabinetFontItalic then
-                       GikoForm.TreeView.Font.Style := GikoForm.TreeView.Font.Style + [fsItalic];
-               }
-               {GikoForm.FavoriteTreeView.Font.Name := GikoSys.Setting.CabinetFontName;
-               GikoForm.FavoriteTreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
-               GikoForm.FavoriteTreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
-               }
                GikoForm.FavoriteTreeView.Font.Assign(GikoForm.TreeView.Font);
                GikoForm.FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
 
@@ -1167,8 +1258,10 @@ begin
 
                //GikoForm.ListView.Color := GikoSys.Setting.ListBackColor;
                GikoForm.ListViewBackGroundColor := GikoSys.Setting.ListBackColor;
-                GikoForm.UseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
-                GikoForm.OddColor := GikoSys.Setting.OddColor;
+               GikoForm.UseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
+               GikoForm.OddColor := GikoSys.Setting.OddColor;
+               GikoSys.Setting.UnFocusedBold := (UnFocusedBoldCheckBox.Enabled) and
+                                                                                       (UnFocusedBoldCheckBox.Checked);
 
                GikoForm.BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
                GikoForm.BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
@@ -1213,6 +1306,9 @@ begin
                end;
                GikoForm.BrowserTab.OnChange(nil);
        end;
+
+    // \83^\83u\82Ì\83X\83\8c\83^\83C\8dX\90V
+    GikoForm.UpdateThreadTitle;
 end;
 
 procedure TOptionDialog.ReadProxyCheckClick(Sender: TObject);
@@ -1248,7 +1344,7 @@ end;
 function TOptionDialog.CheckFolder: Boolean;
 begin
        if Trim(LogFolderEdit.Text) = '' then
-               LogFolderEdit.Text := ExtractFilePath(Application.ExeName) + 'Log';
+               LogFolderEdit.Text := GikoSys.GetAppDir + 'Log';
 
        if DirectoryExists(LogFolderEdit.Text) then begin
                Result := True;
@@ -1282,17 +1378,29 @@ begin
        sndPlaySound(nil, SND_ASYNC);
        if OpenDialog.Execute then begin
                SoundFileEdit.Text := OpenDialog.FileName;
+        // \83A\83v\83\8a\94z\89º\82Ì\83t\83@\83C\83\8b\82Ì\8fê\8d\87\91\8a\91Î\83p\83X\82É\95Ï\8a·\82·\82é\81B
+        if (AnsiPos(GikoSys.Setting.GetAppDir,SoundFileEdit.Text) = 1) then begin
+            // .\ \82ª\82Â\82©\82È\82¢\82Ì\82Å\81A.\\82ð\92Ç\89Á
+            SoundFileEdit.Text := '.\' + ExtractRelativePath(
+                                      GikoSys.Setting.GetAppDir,
+                                      SoundFileEdit.Text);
+
+        end;
        end;
 end;
 
 procedure TOptionDialog.SoundPlayButtonClick(Sender: TObject);
+var
+    s : String;
 begin
-       if not FileExists(SoundFileEdit.Text) then begin
+    SetCurrentDir(GikoSys.Setting.GetAppDir);
+    s := ExpandFileName(SoundFileEdit.Text);
+       if not FileExists(s) then begin
                MsgBox(Handle, '\91\8dÝ\82µ\82È\82¢\83t\83@\83C\83\8b\82Å\82·', '\83G\83\89\81[', MB_ICONSTOP or MB_OK);
                SoundFileEdit.Text := '';
                Exit;
        end;
-       if not sndPlaySound(PChar(SoundFileEdit.Text), SND_ASYNC or SND_NOSTOP) then begin
+       if not sndPlaySound(PChar(s), SND_ASYNC or SND_NOSTOP) then begin
                sndPlaySound(nil, SND_ASYNC);
        end;
 end;
@@ -1312,7 +1420,8 @@ begin
        Item := SoundListView.Selected;
        if Item = nil then Exit;
 
-       if FileExists(SoundFileEdit.Text) then
+    SetCurrentDir(GikoSys.Setting.GetAppDir);
+       if FileExists(ExpandFileName(SoundFileEdit.Text)) then
                Item.SubItems[0] := SoundFileEdit.Text;
        if Trim(SoundFileEdit.Text) = '' then
                Item.SubItems[0] := '';
@@ -1406,7 +1515,7 @@ begin
         GikoSys.FAbon.AbonPopupRes := PopUpAbonCheckBox.Checked;
        GikoSys.FAbon.ReturnNGwordLineNum := ShowNGLineCheckBox.Checked;
        GikoSys.FAbon.SetNGResAnchor := AddResAnchorCheckBox.Checked;
-        GikoSys.FAbon.DeleteSyria := DeleteSyriaCheckBox.Checked;
+               GikoSys.FAbon.DeleteSyria := DeleteSyriaCheckBox.Checked;
 end;
 procedure TOptionDialog.CSSFontButtonClick(Sender: TObject);
 begin
@@ -1453,12 +1562,12 @@ end;
 
 procedure TOptionDialog.CSSSetContent(Content: string);
 var
-       doc : Variant;
+       doc : OleVariant;
 begin
        if CSSBrowser.Document <> nil then begin
-               doc := CSSBrowser.Document;
+               doc := CSSBrowser.OleObject.Document;
                doc.open;
-                               doc.Clear;
+        doc.Clear;
                doc.charset := 'Shift_JIS';
                doc.Write(Content);
                doc.Close;
@@ -1471,14 +1580,12 @@ var
        ThreadItem: TThreadItem;
        html: string;
        Res: array [0..1] of TResRec;
-       UserOptionalStyle: string;
-       i: Integer;
        fileName: string;
 begin
 
        fileName := GikoSys.Setting.CSSFileName;
 
-       GikoSys.Setting.CSSFileName := 'default.css';
+       GikoSys.Setting.CSSFileName := DEFAULT_CSS_FILENAME;
        if CSSListView.Items.Count > 0 then begin
                try
                        if CSSListView.ItemIndex >= 0 then begin
@@ -1486,13 +1593,13 @@ begin
                                        GikoSys.Setting.CSSFileName := string( CSSListView.Items[CSSListView.ItemIndex].data )
                                else
                                        GikoSys.Setting.CSSFileName := CSSListView.Items[CSSListView.ItemIndex].Caption + '.css';
-                        end;
+                                               end;
                except
                end;
        end;
 
        Board := TBoard.Create( nil, 'about://sample/' );
-       ThreadItem := TThreadItem.Create( nil, 'about://sample/test/read.cgi/sample/' );
+       ThreadItem := TThreadItem.Create( nil, Board, 'about://sample/test/read.cgi/sample/' );
 
        try
                Board.Title := '\83T\83\93\83v\83\8b\94Â';
@@ -1511,66 +1618,27 @@ begin
                Res[1].FDateTime := 'ID:Sample';
                Res[1].FBody := '\83I\83}\83G\83\82\83i\81[';
 
-               // \83t\83H\83\93\83g\82â\83T\83C\83Y\82Ì\90Ý\92è
-               if CSSFontCheckBox.Checked then begin
-                       i := ColorToRGB( FCSSFont.Color );
-                       i := (i shr 16) or (i and $ff00) or ((i and $ff) shl 16);
-
-                       UserOptionalStyle := UserOptionalStyle +
-                               'font-family:"' + FCSSFont.Name + '";' +
-                               'font-size:' + IntToStr( FCSSFont.Size ) + 'pt;' +
-                               'color:#' + IntToHex( i, 6 ) + ';';
-                       if fsBold in FCSSFont.Style then
-                               UserOptionalStyle := UserOptionalStyle + 'font-weight:bold;'
-                       else
-                               UserOptionalStyle := UserOptionalStyle + 'font-weight:normal;';
-                       if fsItalic in FCSSFont.Style then
-                               UserOptionalStyle := UserOptionalStyle + 'font-style:italic;'
-                       else
-                               UserOptionalStyle := UserOptionalStyle + 'font-style:normal;';
-               end;
-               if CSSBackColorCheckBox.Checked then begin
-                       i := ColorToRGB( FCSSBackColor );
-                       i := (i shr 16) or (i and $ff00) or ((i and $ff) shl 16);
-
-                       UserOptionalStyle := UserOptionalStyle +
-                               'background-color:#' + IntToHex( i, 6 ) + ';';
-               end;
 
                if FileExists( GikoSys.GetSkinHeaderFileName ) then begin
                        html :=
-                               GikoSys.LoadFromSkin( GikoSys.GetSkinHeaderFileName, ThreadItem, 0 ) +
+                               HTMLCreater.LoadFromSkin( GikoSys.GetSkinHeaderFileName, ThreadItem, 0 ) +
                                '<a name="top"></a>' +
-                               GikoSys.SkinedRes( GikoSYs.LoadFromSkin( GikoSys.GetSkinResFileName, ThreadItem, 0 ), Res[0], '1' ) +
-                               GikoSys.SkinedRes( GikoSYs.LoadFromSkin( GikoSys.GetSkinNewResFileName, ThreadItem, 0 ), Res[1], '2' ) +
+                               HTMLCreater.SkinedRes( HTMLCreater.LoadFromSkin( GikoSys.GetSkinResFileName, ThreadItem, 0 ), @Res[0], '1' ) +
+                               HTMLCreater.SkinedRes( HTMLCreater.LoadFromSkin( GikoSys.GetSkinNewResFileName, ThreadItem, 0 ), @Res[1], '2' ) +
                                '<a name="bottom"></a>' +
-                               GikoSys.LoadFromSkin( GikoSys.GetSkinFooterFileName, ThreadItem, 0 );
+                               HTMLCreater.LoadFromSkin( GikoSys.GetSkinFooterFileName, ThreadItem, 0 );
 
                        html := StringReplace( html, '</head>',
-                               '<style type="text/css">body {' + UserOptionalStyle + '}</style></head>', [rfReplaceAll] );
+                               '<style type="text/css">body {' + GetPreviewUserStyle + '}</style></head>', [rfReplaceAll] );
                end else begin
                        html :=
-                               '<html><head>' +
-                               '<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">' +
+                               '<html><head><meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">' +
                                '<title>' + ThreadItem.Title + '</title>' +
                                '<link rel="stylesheet" href="' + GikoSys.GetStyleSheetDir + GikoSys.Setting.CSSFileName + '" type="text/css">' +
-                               '<style type="text/css">body {' + UserOptionalStyle + '}</style>' +
-                               '</head><body>' +
-                               '<div class="title">' + ThreadItem.Title + '</div>';
-
-                               for i := 0 to High( Res ) do
-                               begin
-                                       html := html +
-                                               '<div class="header"><span class="no">' + IntToStr( i + 1 ) + '</span>' +
-                                               '<span class="name_label"> \96¼\91O\81F </span>' +
-                                               '<a class="name_mail" href="mailto:' + Res[i].FMailTo + '">' +
-                                               '<b>' + Res[i].FName + '</b></a><span class="mail"> [' + Res[i].FMailTo + ']</span>' +
-                                               '<span class="date_label"> \93\8a\8de\93ú\81F</span>' +
-                                               '<span class="date"> ' + Res[i].FDateTime+ '</span></div>' +
-                                               '<div class="mes">' + Res[i].FBody + ' </div>';
-                               end;
-
-                               html := html + '</body></html>';
+                               '<style type="text/css">body {' + GetPreviewUserStyle + '}</style>' +
+                               '</head><body><div class="title">' + ThreadItem.Title + '</div>';
+
+                       html := html + CreatePreviewBody(Res) + '</body></html>';
                end;
 
                try
@@ -1585,7 +1653,57 @@ begin
        end;
 
 end;
+function TOptionDialog.CreatePreviewBody(Res: array of TResRec): string;
+var
+       i : Integer;
+begin
+       Result := '';
+       for i := 0 to High( Res ) do
+       begin
+               Result := Result +
+                       '<div class="header"><span class="no">' + IntToStr( i + 1 ) + '</span>' +
+                       '<span class="name_label"> \96¼\91O\81F </span>' +
+                       '<a class="name_mail" href="mailto:' + Res[i].FMailTo + '">' +
+                       '<b>' + Res[i].FName + '</b></a><span class="mail"> [' + Res[i].FMailTo + ']</span>' +
+                       '<span class="date_label"> \93\8a\8de\93ú\81F</span>' +
+                       '<span class="date"> ' + Res[i].FDateTime+ '</span></div>' +
+                       '<div class="mes">' + Res[i].FBody + ' </div>';
+       end;
+end;
 
+function TOptionDialog.GetPreviewUserStyle(): string;
+var
+       i : Integer;
+
+begin
+       Result := '';
+       // \83t\83H\83\93\83g\82â\83T\83C\83Y\82Ì\90Ý\92è
+       if CSSFontCheckBox.Checked then begin
+               i := ColorToRGB( FCSSFont.Color );
+               i := (i shr 16) or (i and $ff00) or ((i and $ff) shl 16);
+
+               Result := Result +
+                       'font-family:"' + FCSSFont.Name + '";' +
+                       'font-size:' + IntToStr( FCSSFont.Size ) + 'pt;' +
+                       'color:#' + IntToHex( i, 6 ) + ';';
+               if fsBold in FCSSFont.Style then
+                       Result := Result + 'font-weight:bold;'
+               else
+                       Result := Result + 'font-weight:normal;';
+               if fsItalic in FCSSFont.Style then
+                       Result := Result + 'font-style:italic;'
+               else
+                       Result := Result + 'font-style:normal;';
+       end;
+       if CSSBackColorCheckBox.Checked then begin
+               i := ColorToRGB( FCSSBackColor );
+               i := (i shr 16) or (i and $ff00) or ((i and $ff) shl 16);
+
+               Result := Result +
+                       'background-color:#' + IntToHex( i, 6 ) + ';';
+       end;
+
+end;
 procedure TOptionDialog.CSSListViewChange(Sender: TObject; Item: TListItem;
        Change: TItemChange);
 begin
@@ -1609,6 +1727,7 @@ end;
 procedure TOptionDialog.OddResNumCheckBoxClick(Sender: TObject);
 begin
        OddResNumColorBox.Enabled := OddResNumCheckBox.Checked;
+       UnFocusedBoldCheckBox.Enabled := OddResNumCheckBox.Checked;
 end;
 
 procedure TOptionDialog.ResRangeHoldCheckBoxClick(Sender: TObject);
@@ -1628,5 +1747,66 @@ begin
        end;
 end;
 
+procedure TOptionDialog.MaxRecordCountEditExit(Sender: TObject);
+begin
+       if not GikoSys.IsNumeric(MaxRecordCountEdit.Text) then
+               MaxRecordCountEdit.Text := '100'
+       else if StrToIntDef(MaxRecordCountEdit.Text, 100) <= 0 then
+        MaxRecordCountEdit.Text := '1';
+end;
+
+procedure TOptionDialog.BoukenDelButtonClick(Sender: TObject);
+begin
+    if ( BoukenComboBox.Items.IndexOf( BoukenComboBox.Text ) <> -1 ) then begin
+        if MsgBox(Self.Handle, BoukenComboBox.Text + ' \82ð\8dí\8f\9c\82µ\82Ü\82·\81B'#13#10 +
+            '\8dí\8f\9c\82·\82é\82Æ\95\9c\8c³\82Å\82«\82Ü\82¹\82ñ\81B\82æ\82ë\82µ\82¢\82Å\82·\82©\81H', '\94E\96@\92\9f\81@\83h\83\81\83C\83\93\8dí\8f\9c', MB_YESNO or MB_ICONQUESTION) = IDYES then begin
+            GikoSys.DelBoukenCookie(BoukenComboBox.Text);
+            GikoSys.Setting.WriteBoukenSettingFile;
+            BoukenComboBox.Items.Delete(BoukenComboBox.ItemIndex);
+            if ( BoukenComboBox.Items.Count = 0 ) then begin
+                 BoukenComboBox.Text := '';
+            end;
+            BoukenComboBox.OnChange(nil);
+        end
+    end else begin
+        BoukenComboBox.Text := '';
+    end;
+end;
+
+procedure TOptionDialog.BoukenComboBoxChange(Sender: TObject);
+begin
+    BoukenEdit.Text := GikoSys.GetBoukenCookie('http://*' +BoukenComboBox.Text);
+end;
+
+procedure TOptionDialog.BoukenModButtonClick(Sender: TObject);
+var
+    DomainList : TStringList;
+    i : Integer;
+    s : String;
+begin
+    if ( Length(BoukenComboBox.Text) > 0 ) then begin
+        s := BoukenComboBox.Text;
+        GikoSys.SetBoukenCookie(BoukenEdit.Text, s);
+        GikoSys.Setting.WriteBoukenSettingFile;
+        // \96`\8c¯\82Ì\8f\91\83h\83\81\83C\83\93\88ê\97\97\8eæ\93¾
+        BoukenComboBox.Text := '';
+        BoukenComboBox.Items.Clear;
+        DomainList := TStringList.Create;
+        GikoSys.GetBoukenDomain(DomainList);
+        for i := 0 to DomainList.Count - 1 do begin
+            BoukenComboBox.Items.Add( DomainList[i] ) ;
+        end;
+        DomainList.Free;
+        BoukenComboBox.ItemIndex := 0;
+        for i := 0 to BoukenComboBox.Items.Count - 1 do begin
+            if ( BoukenComboBox.Items[i] = s) then begin
+                BoukenComboBox.ItemIndex := i;
+                Break;
+            end;
+        end;
+        BoukenComboBox.OnChange(nil);
+    end;
+end;
+
 end.