OSDN Git Service

スレッド一覧の更新日の表示の修正。スレッド一覧でのマウスホイールでブラウザタブが
[gikonavigoeson/gikonavi.git] / Editor.pas
index d4f5f94..36a6824 100644 (file)
@@ -7,8 +7,10 @@ uses
        Dialogs, StdCtrls, ComCtrls, ExtCtrls, ToolWin, Menus, OleCtrls, Registry,
 {$IF Defined(DELPRO) }
        SHDocVw,
+       MSHTML,
 {$ELSE}
        SHDocVw_TLB,
+       MSHTML_TLB,
 {$IFEND}
        ActiveX, {HTTPApp,} YofUtils, Trip, IniFiles, StrUtils,
        GikoSystem, GikoUtil, ImgList, Clipbrd, BoardGroup,
@@ -29,7 +31,7 @@ type
                CloseMenu: TMenuItem;
                N01: TMenuItem;
                StatusBar: TStatusBar;
-               EditorPage: TPageControl;
+       EditorPage: TPageControl;
                EditorTab: TTabSheet;
                PreviewTab: TTabSheet;
                Browser: TWebBrowser;
@@ -87,14 +89,27 @@ type
                SelectAllAction: TAction;
                N2: TMenuItem;
                SelectAll1: TMenuItem;
-    Timer1: TTimer;
-    QuotePasteAction: TAction;
-    QuotePasteMenuItem: TMenuItem;
-    C1: TMenuItem;
-    SpaceToNBSPAction: TAction;
-    AmpToCharRefAction: TAction;
-    SpaceTabnbsp1: TMenuItem;
-    amp1: TMenuItem;
+       Timer1: TTimer;
+       QuotePasteAction: TAction;
+       QuotePasteMenuItem: TMenuItem;
+       C1: TMenuItem;
+       SpaceToNBSPAction: TAction;
+       AmpToCharRefAction: TAction;
+       SpaceTabnbsp1: TMenuItem;
+       amp1: TMenuItem;
+       BoardInformationTab: TTabSheet;
+                               BoardtopTab: TTabSheet;
+       TitlePictureBrowser: TWebBrowser;
+       BoardTop: TMenuItem;
+       BoardInformationMemo: TMemo;
+       GetSETTINGTXTAction: TAction;
+       N3: TMenuItem;
+       SETTINGTXT2: TMenuItem;
+       GetTitlePictureAction: TAction;
+       OP1: TMenuItem;
+    GetHeadTXTAction: TAction;
+    HeadTXT1: TMenuItem;
+
                procedure EditorPageChange(Sender: TObject);
                procedure FormCreate(Sender: TObject);
                procedure BrowserStatusTextChange(Sender: TObject;
@@ -127,13 +142,18 @@ type
                procedure IdLogDebugSend(ASender: TIdConnectionIntercept;
                        AStream: TStream);
                procedure SelectAllActionExecute(Sender: TObject);
-    procedure StatusBarResize(Sender: TObject);
-    procedure Timer1Timer(Sender: TObject);
-    procedure FormActivate(Sender: TObject);
-    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
+       procedure StatusBarResize(Sender: TObject);
+       procedure Timer1Timer(Sender: TObject);
+       procedure FormActivate(Sender: TObject);
+       procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
                procedure QuotePasteActionExecute(Sender: TObject);
-    procedure SpaceToNBSPActionExecute(Sender: TObject);
-    procedure AmpToCharRefActionExecute(Sender: TObject);
+       procedure SpaceToNBSPActionExecute(Sender: TObject);
+       procedure AmpToCharRefActionExecute(Sender: TObject);
+       procedure BoardTopClick(Sender: TObject);
+       procedure GetSETTINGTXTActionExecute(Sender: TObject);
+       procedure GetTitlePictureActionUpdate(Sender: TObject);
+       procedure GetTitlePictureActionExecute(Sender: TObject);
+    procedure GetHeadTXTActionExecute(Sender: TObject);
        private
                FThreadItem: TThreadItem;
                FBoard: TBoard;
@@ -144,8 +164,8 @@ type
                FStatusCode: Integer;
                FDebugStrReceive: string;
                FDebugStrSend: string;
-        FSambaTime: TDateTime;
-        FHost: string;
+               FSambaTime: TDateTime;
+               FHost: string;
                FNow: TDateTime;
                procedure Preview;
                function RepHtml(s: string): string;
@@ -159,25 +179,34 @@ type
 //             procedure GetSendData(Source: TStringStream);
                procedure GetSendData(Source: TStringStream);
                procedure SaveSendFile;
-               procedure SetContent(Content: string);
+               procedure SetContent(Content: string; ABrowser: TWebBrowser);
                function GetSPID(CookieLine: string): string;
                function GetPON(CookieLine: string): string;
                function GetResultType(ResponseText: string): TGikoResultType;
-        procedure ReadSambaTime(const AHost: string);
-        procedure WriteSambaTime(const AHost: string; ATime: TDateTime);
-        function ReadSettingTime(const AHost: string): Integer;
-        function CheckSambaTime(const AHost: string; ATime: TDateTime): Boolean;
+               procedure ReadSambaTime(const AHost: string);
+               procedure WriteSambaTime(const AHost: string; ATime: TDateTime);
+               function ReadSettingTime(const AHost: string): Integer;
+               function CheckSambaTime(const AHost: string; ATime: TDateTime): Boolean;
                                procedure SetSamba24(AURL: string);
                /// \88ø\97p\95\84\82Ì\8eæ\93¾
                function GetOEIndentChar : string;
                /// \96{\95\82Ì\8eæ\93¾
                function GetBody : string;
+               //IdHttp\82Ì\8f\89\8aú\89»
+               procedure InitIdHTTP(http: TIdHTTP);
+               procedure ShowBoardInformation(ABoard: TBoard; AMemo: TMemo);
+               function GetTitlePictureURL(body: TStringList; ABoard: TBoard): string;
+               procedure ShowTitlePicture();
+                               function GetFusianaName(body: TStringList; ABoard: TBoard): String;
        protected
                procedure CreateParams(var Params: TCreateParams); override;
        public
+                               FBBSID: String;
                procedure SetFont;
                procedure SetThreadItem(Item: TThreadItem);
                procedure SetBoard(Item: TBoard);
+                               property BBSID: string read FBBSID write FBBSID;
+
        end;
 
 implementation
@@ -210,6 +239,16 @@ const
        RES2CH_COOKIE                   = '<!-- 2ch_X:cookie -->';
 
 
+        BBS2CH_NAME:                                    string = '\82Q\82¿\82á\82ñ\82Ë\82é';
+       BBS2CH_LOG_FOLDER:               string = '2ch';
+       EXTERNAL_LOG_FOLDER:            string  = 'exboard';
+
+       FOLDER_INI_FILENAME:     string = 'Folder.ini';
+       FOLDER_INDEX_FILENAME: string   = 'Folder.idx';
+       SUBJECT_FILENAME:                       string  = 'subject.txt';
+       PATH_DELIM:                                             string  = '\';
+
+
 type
        TSelection = record
                StartPos, EndPos: Integer;
@@ -242,10 +281,11 @@ procedure TEditorForm.FormCreate(Sender: TObject);
 var
        wp: TWindowPlacement;
                hUser32 : HINST;
+        ini: TIniFile;
 begin
        FWork := False;
        Browser.Navigate('about:blank');
-
+       TitlePictureBrowser.Navigate('about:blank');
        FBoard := nil;
        FThreadItem := nil;
 
@@ -330,6 +370,16 @@ begin
 
        SpaceToNBSPAction.Checked               := GikoSys.Setting.SpaceToNBSP;
        AmpToCharRefAction.Checked      := GikoSys.Setting.AmpToCharRef;
+
+               ini := TIniFile.Create(GikoSys.Setting.GetFileName);
+
+               try
+                       BoardtopTab.TabVisible := ini.Readbool('EditorForm', 'BoardTopTab', False);
+                       BoardTop.Checked := BoardtopTab.TabVisible;
+               finally
+                       ini.Free;
+               end;
+
 end;
 
 procedure TEditorForm.SetBoard(Item: TBoard);
@@ -340,7 +390,9 @@ begin
        MailComboBox.Text := FBoard.KotehanMail;
        SageCheckBox.Checked := AnsiPos('sage', MailComboBox.Text) <> 0;
        TitlePanel.Visible := True;
-    SetSamba24('');
+       SetSamba24(FBoard.URL);
+       ShowBoardInformation(FBoard, BoardInformationMemo);
+       ShowTitlePicture();
 end;
 
 procedure TEditorForm.SetThreadItem(Item: TThreadItem);
@@ -351,7 +403,9 @@ begin
        MailComboBox.Text := FThreadItem.ParentBoard.KotehanMail;
        SageCheckBox.Checked := AnsiPos('sage', MailComboBox.Text) <> 0;
        TitlePanel.Visible := False;
-    SetSamba24(FThreadItem.ParentBoard.URL);
+       SetSamba24(FThreadItem.ParentBoard.URL);
+       ShowBoardInformation(FThreadItem.ParentBoard, BoardInformationMemo);
+       ShowTitlePicture();
 end;
 
 function TEditorForm.GetBody : string;
@@ -411,7 +465,6 @@ begin
        end;
 
        body := GetBody;
-
        Namae := RepHtml(NameComboBox.Text);
        Mail := RepHtml(MailComboBox.Text);
        Body := RepHtml(body);
@@ -442,7 +495,7 @@ begin
        else
                s := s + '<DT>' + No + ' \81F <A href="mailto:' + Mail + '"><B>' + Namae + '</B></A> [' + Mail + ']\81F ' + DateTime+ '<BR><DD>' + Body + '<BR><BR><BR>' + #13#10;
        s := s + '</BODY></HTML>';
-       SetContent(s);
+       SetContent(s, Browser);
 end;
 
 function TEditorForm.RepHtml(s: string): string;
@@ -559,16 +612,21 @@ begin
                        Result := TitleEdit.Handle
                else
                        Result := 0;
+       end else if Editorpage.ActivePage = BoardInformationTab then begin
+               if ActiveControl = BoardInformationMemo then
+                       Result := BoardInformationMemo.Handle
+               else
+                       Result := 0;
        end else
                Result := 0;
 end;
 
-procedure TEditorForm.SetContent(Content: string);
+procedure TEditorForm.SetContent(Content: string; ABrowser: TWebBrowser);
 var
-       doc : Variant;
+       doc: Variant;
 begin
-       if Browser.Document <> nil then begin
-               doc := Browser.Document;
+       if ABrowser.Document <> nil then begin
+               doc := Idispatch( olevariant(ABrowser.ControlInterface).Document) as IHTMLDocument2;
                doc.Clear;
                doc.open;
                doc.charset := 'Shift_JIS';
@@ -576,6 +634,26 @@ begin
                doc.Close;
        end;
 end;
+procedure TEditorForm.InitIdHTTP(http: TIdHTTP);
+begin
+       http.Request.Clear;
+       http.ProxyParams.BasicAuthentication := False;
+       if GikoSys.Setting.WriteProxy then begin
+               http.ProxyParams.ProxyServer := GikoSys.Setting.WriteProxyAddress;
+               http.ProxyParams.ProxyPort := GikoSys.Setting.WriteProxyPort;
+               http.ProxyParams.ProxyUsername := GikoSys.Setting.WriteProxyUserID;
+               http.ProxyParams.ProxyPassword := GikoSys.Setting.WriteProxyPassword;
+               if GikoSys.Setting.ReadProxyUserID <> '' then
+                       http.ProxyParams.BasicAuthentication := True;
+       end else begin
+               http.ProxyParams.ProxyServer := '';
+               http.ProxyParams.ProxyPort := 80;
+               http.ProxyParams.ProxyUsername := '';
+               http.ProxyParams.ProxyPassword := '';
+       end;
+       Indy.Request.UserAgent := GikoSys.GetUserAgent;
+       Indy.Request.AcceptEncoding := '';
+end;
 
 procedure TEditorForm.Send(SPID: string; PON: string; FirstWriting: Boolean);
 var
@@ -592,8 +670,13 @@ var
        sysMenu : HMENU;
        //fusianasan\83g\83\89\83b\83v by\92è\8aú\95Ö
        Namae: String;
-       SettingTxt: String;
-        RefeURL: string;
+//     SettingTxt: String;
+//        RefeURL: string;
+//        RuleURL: String;
+//        RuleTxt: String;
+//        Name: String;
+//        SettingBody: TStringList;
+//        tmpBoard: TBoard;
 begin
        FAbort := False;
        State := gdsError;
@@ -603,21 +686,8 @@ begin
        else
                Board := FThreadItem.ParentBoard;
 
-       Indy.Request.Clear;
-       Indy.ProxyParams.BasicAuthentication := False;
-       if GikoSys.Setting.WriteProxy then begin
-               Indy.ProxyParams.ProxyServer := GikoSys.Setting.WriteProxyAddress;
-               Indy.ProxyParams.ProxyPort := GikoSys.Setting.WriteProxyPort;
-               Indy.ProxyParams.ProxyUsername := GikoSys.Setting.WriteProxyUserID;
-               Indy.ProxyParams.ProxyPassword := GikoSys.Setting.WriteProxyPassword;
-               if GikoSys.Setting.ReadProxyUserID <> '' then
-                       Indy.ProxyParams.BasicAuthentication := True;
-       end else begin
-               Indy.ProxyParams.ProxyServer := '';
-               Indy.ProxyParams.ProxyPort := 80;
-               Indy.ProxyParams.ProxyUsername := '';
-               Indy.ProxyParams.ProxyPassword := '';
-       end;
+
+       InitIdHTTP(Indy);
        if FThreadItem = nil then begin
                URL := FBoard.GetSendURL;
                RefURL := GikoSys.UrlToServer(FBoard.URL) + 'test/bbs.cgi';
@@ -625,9 +695,9 @@ begin
                URL := FThreadItem.GetSendURL;
                RefURL := FThreadItem.URL;
        end;
-       Indy.Request.UserAgent := GikoSys.GetUserAgent;
+//     Indy.Request.UserAgent := GikoSys.GetUserAgent;
        Indy.Request.Referer := RefURL;
-       Indy.Request.AcceptEncoding := '';
+//     Indy.Request.AcceptEncoding := '';
 
        Cookie := '';
        if SPID <> '' then
@@ -661,25 +731,10 @@ begin
 
                        ResultType := GetResultType(ResponseText);
 
-                        //MsgResult\8f\89\8aú\89»
-                        MsgResult := IDNO;
+                       //MsgResult\8f\89\8aú\89»
+                       MsgResult := IDNO;
                        //\83t\83V\83A\83i\83g\83\89\83b\83v\8cx\8d\90(LocalMode) by \92è\8aú\95Ö
-                        if Namae = '\8eR\8dè\8fÂ' then begin
-                               MsgResult := MsgBox(
-                                               Handle,
-                                       '\83\8a\83\82\81[\83g\83z\83X\83g\82ð\95\\8e¦\82·\82é\8b@\94\\82ª\8eg\82í\82ê\82Ä\82¢\82Ü\82·' + #13#10 +
-                                       '\82à\82µ\82à\8aÔ\88á\82Á\82Ä\82±\82Ì\95û\96@\82Å\83z\83X\83g\82ª\95\\8e¦\82³\82ê\82½\82Æ\82µ\82Ä\82à\81A\8e©\8cÈ\90Ó\94C\82È\82Ì\82Å\8dí\8f\9c\88Ë\97\8a\82É\82Í\89\9e\82\82Ü\82¹\82ñ\81B' + #13#10#13#10 +
-                                       '\90Ó\94C\82ð\95\89\82¤\82±\82Æ\82ð\8f³\91ø\82µ\82Ä\8f\91\82«\8d\9e\82Ý\82Ü\82·\82©\81H',
-                                       '\8fî\95ñ',
-                                       MB_YESNO or MB_ICONQUESTION);
-                               if MsgResult = IDYES then begin
-                                end
-                        end else
-                       if MsgResult = IDNO  then begin
-                               Exit;
-                               Close;
-                       end else
-                       if Namae = 'fusianasan' then begin
+                       if ((Namae = '\8eR\8dè\8fÂ') or (Namae = 'fusianasan')) and (FirstWriting) then begin
                                MsgResult := MsgBox(
                                                Handle,
                                        '\83\8a\83\82\81[\83g\83z\83X\83g\82ð\95\\8e¦\82·\82é\8b@\94\\82ª\8eg\82í\82ê\82Ä\82¢\82Ü\82·' + #13#10 +
@@ -687,34 +742,18 @@ begin
                                        '\90Ó\94C\82ð\95\89\82¤\82±\82Æ\82ð\8f³\91ø\82µ\82Ä\8f\91\82«\8d\9e\82Ý\82Ü\82·\82©\81H',
                                        '\8fî\95ñ',
                                        MB_YESNO or MB_ICONQUESTION);
-                               if MsgResult = IDYES then begin
-                                end
-                        end else
-                       if MsgResult = IDNO  then begin
-                               Exit;
-                               Close;
+                               if MsgResult = IDNO  then begin
+                                       Board.SPID := '';
+                                       Board.PON := '';
+                                       FWork := false;
+                                       EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
+                                       DrawMenuBar(Handle);
+                                       Exit;
+                               end;
                        end;
-                       //\83t\83V\83A\83i\83g\83\89\83b\83v\8cx\8d\90(SETTING.TXT Mode) by \92è\8aú\95Ö
-                       RefURL := GikoSys.UrlToServer(FBoard.URL) 
-                               + GikoSys.UrlToID(FBoard.URL) 
-                               + '/'; 
-                       //RefURL\82ð\8c³\82ÉSETTING.TXT\83A\83h\83\8c\83X\8ew\92è
-                       RefeURL := RefURL 
-                               + 'SETTING.TXT';
-
-                       Settingtxt := Indy.Get(RefeURL);
-
-                        //DebugOnly
-                       { if Settingtxt = '' then begin
-                                ShowMessage(Settingtxt);
-                                Exit;
-                        end else begin
-                                ShowMessage(Settingtxt);
-                                Exit;
-                        end;    }
 
                        if ResultType = grtOK then begin
-                WriteSambaTime(FHost, Now());
+                               WriteSambaTime(FHost, Now());
                                State := gdsComplete;
                        end else if ResultType = grtCookie then begin
                                //\83\8b\81[\83v\96h\8e~
@@ -831,6 +870,7 @@ begin
                else
                        GikoForm.AddMessageList(FThreadItem.Title + ' [\83\8c\83X\91\97\90M\8fI\97¹]', nil, gmiOK);
                Close;
+                Exit;
         end;
        if State = gdsComplete then begin
                GikoForm.PlaySound('ResEnd');
@@ -846,7 +886,7 @@ begin
                else
                        GikoForm.AddMessageList(FThreadItem.Title + ' [\83\8c\83X\91\97\90M\8e¸\94s]', nil, gmiNG);
                EditorPage.ActivePage := PreviewTab;
-               SetContent(ResponseText);
+               SetContent(ResponseText, Browser);
        end else if State = gdsAbort then begin
                GikoForm.AddMessageList(FThreadItem.Title + ' [\92\86\92f]', nil, gmiSAD);
        end;
@@ -1447,5 +1487,256 @@ begin
                Preview;
 end;
 
-end.
+procedure TEditorForm.BoardTopClick(Sender: TObject);
+var
+       ini: TIniFile;
+begin
+       ini := TIniFile.Create(GikoSys.Setting.GetFileName);
+       try
+               BoardtopTab.TabVisible := BoardTop.Checked;
+               ini.WriteBool('EditorForm', 'BoardTopTab', BoardtopTab.TabVisible);
+       finally
+               ini.Free;
+       end;
+end;
+
+
+procedure TEditorForm.GetSETTINGTXTActionExecute(Sender: TObject);
+var
+       URL, RefURL: string;
+       settingBody: TStringList;
+       tmpBoard: TBoard;
+begin
+       InitIdHTTP(Indy);
+       if FThreadItem = nil then
+               tmpBoard := FBoard
+       else
+               tmpBoard := FThreadItem.ParentBoard;
+
+       if tmpBoard = nil then Exit;
+
+       RefURL  := tmpBoard.URL;
+       if RefURL[Length(RefURL)] <> '/' then
+               URL     := RefURL + '/' + 'SETTING.TXT'
+       else
+               URL     := RefURL + 'SETTING.TXT';
+
+       Indy.Request.LastModified := tmpBoard.SETTINGTXTTime;
+       Indy.Request.Referer := RefURL;
+       Screen.Cursor := crHourGlass;
+       settingBody := TStringList.Create;
+       try
+               StatusBar.Panels[0].Text := 'SETTING.TXT\83_\83E\83\93\83\8d\81[\83h\92\86';
+               try
+                       settingBody.Text := Indy.Get(URL);
+                       if( Indy.ResponseCode = 200 ) then begin
+                               settingBody.SaveToFile(tmpBoard.GetSETTINGTXTFileName);
+                               tmpBoard.SETTINGTXTTime := Indy.Response.LastModified;
+                               tmpBoard.IsSETTINGTXT := true;
+                               tmpBoard.TitlePictureURL := GetTitlePictureURL(settingBody, tmpBoard);
+                               tmpBoard.Modified := true;
+                               StatusBar.Panels[0].Text := 'SETTING.TXT\8eæ\93¾\8a®\97¹(' + IntToStr(Indy.ResponseCode) + ')';
+                       end;
+               except
+                       on E: EIdException do begin
+                               if( AnsiPos('304', E.Message) > 0 ) then
+                                       StatusBar.Panels[0].Text := 'SETTING.TXT\8dX\90V\96³\82µ(' + IntToStr(Indy.ResponseCode) + ')'
+                               else
+                                       StatusBar.Panels[0].Text := 'SETTING.TXT\8eæ\93¾\83G\83\89\81[(' + IntToStr(Indy.ResponseCode) + ')';
+                       end;
+               end;
+       finally
+               settingBody.Free;
+               Screen.Cursor := crDefault;
+       end;
+       ShowBoardInformation(tmpBoard, BoardInformationMemo);
+end;
 
+procedure TEditorForm.ShowBoardInformation(ABoard: TBoard; AMemo: TMemo);
+var
+       body: TStringList;
+begin
+       AMemo.Clear;
+       AMemo.Lines.Add('[SETTING.TXT]');
+       if ABoard.IsSETTINGTXT then begin
+               if FileExists(ABoard.GetSETTINGTXTFileName)  then begin
+                       AMemo.Lines.Add(DateTimeToStr(ABoard.SETTINGTXTTime) + ' \8dX\90V');
+                       body := TStringList.Create;
+                       try
+                               body.LoadFromFile(ABoard.GetSETTINGTXTFileName);
+                               AMemo.Lines.AddStrings(body);
+                       finally
+                               body.Free;
+                       end;
+               end else begin
+                       ABoard.IsSETTINGTXT := false;
+                       ABoard.SETTINGTXTTime := ZERO_DATE;
+                       AMemo.Lines.Add('Local\82É\95Û\91\82³\82ê\82½SETTING.TXT\82ª\8c©\82Â\82©\82è\82Ü\82¹\82ñ');
+                       AMemo.Lines.Add('\83\81\83j\83\85\81[\82æ\82è\8dÄ\8eæ\93¾\82µ\82Ä\82­\82¾\82³\82¢\81B');
+               end;
+       end else begin
+               AMemo.Lines.Add('SETTING.TXT\82ð\8eæ\93¾\82µ\82Ä\82¢\82Ü\82¹\82ñ\81B');
+               AMemo.Lines.Add('\83\81\83j\83\85\81[\82æ\82è\8eæ\93¾\82µ\82Ä\82­\82¾\82³\82¢\81B');
+       end;
+end;
+function TEditorForm.GetTitlePictureURL(body: TStringList; ABoard: TBoard): string;
+//BBS_TITLE_PICTURE=
+//BBS_FIGUREHEAD=
+var
+       i: Integer;
+       tmp: string;
+begin
+       Result := '';
+       for i := 0 to body.Count - 1 do begin
+               if (AnsiPos('BBS_TITLE_PICTURE=', body[i]) > 0) or
+                  (AnsiPos('BBS_FIGUREHEAD=', body[i]) > 0) then begin
+                       tmp := body[i];
+                       Delete(tmp, 1, AnsiPos('=', tmp));
+                       if AnsiPos('../', tmp) > 0 then begin
+                               tmp := CustomStringReplace(tmp, '../', GikoSys.UrlToServer(ABoard.URL));
+                       end;
+                       Result := tmp;
+                       Exit;
+               end;
+       end;
+end;
+
+procedure TEditorForm.GetTitlePictureActionUpdate(Sender: TObject);
+begin
+       if FThreadItem = nil then
+               GetTitlePictureAction.Enabled :=  FBoard.IsSETTINGTXT
+       else
+               GetTitlePictureAction.Enabled :=  FThreadItem.ParentBoard.IsSETTINGTXT;
+
+end;
+
+procedure TEditorForm.GetTitlePictureActionExecute(Sender: TObject);
+var
+       memStream: TMemoryStream;
+       tmpBoard: TBoard;
+       tmp : string;
+begin
+       InitIdHTTP(Indy);
+       memStream := TMemoryStream.Create;
+       try
+               if FThreadItem = nil then
+                       tmpBoard := FBoard
+               else
+                       tmpBoard := FThreadItem.ParentBoard;
+
+               Indy.Request.Referer := tmpBoard.URL;
+               if      tmpBoard.TitlePictureURL <> '' then begin
+                       StatusBar.Panels[0].Text := '\94Â\83g\83b\83v\89æ\91\9c\83_\83E\83\93\83\8d\81[\83h\92\86';
+                       Screen.Cursor := crHourGlass;
+                       try
+                               Indy.Get(tmpBoard.TitlePictureURL, memStream);
+                               if Indy.ResponseCode = 200 then begin
+                                       memStream.SaveToFile(tmpBoard.GetTitlePictureFileName);
+                                       ShowTitlePicture();
+                                       tmpBoard.Modified := true;
+                               end;
+                       except
+                       end;
+               end;
+       finally
+               Screen.Cursor := crDefault;
+               StatusBar.Panels[0].Text := '\94Â\83g\83b\83v\89æ\91\9c (' + IntToStr(Indy.ResponseCode) + ')';
+               memStream.Free;
+       end;
+
+end;
+procedure TEditorForm.ShowTitlePicture();
+var
+       tmpBoard: TBoard;
+       s: String;
+begin
+       if FThreadItem = nil then
+               tmpBoard := FBoard
+       else
+               tmpBoard := FThreadItem.ParentBoard;
+
+       if FileExists(tmpBoard.GetTitlePictureFileName) then begin
+               TitlePictureBrowser.Navigate(tmpBoard.GetTitlePictureFileName);
+       end else begin
+               s := '\94Â\83g\83b\83v\89æ\91\9c\96¢\8eæ\93¾\82Å\82·\81B<br>\83\81\83j\83\85\81[\82æ\82è\8eæ\93¾\82µ\82Ä\82­\82¾\82³\82¢\81B';
+               SetContent(s, TitlePictureBrowser);
+       end;
+end;
+
+function TEditorForm.GetFusianaName(body: TStringList; ABoard: TBoard): String;
+var
+       i: Integer;
+       tmp: string;
+begin
+       for i := 0 to body.Count - 1 do begin
+               if (AnsiPos('BBS_NONAME_NAME=', body[i]) > 0) then begin
+                       tmp := body[i];
+                       Delete(tmp, 1, AnsiPos('=', tmp));
+                       Result := tmp;
+                       Exit;
+               end;
+       end;
+end;
+
+procedure TEditorForm.GetHeadTXTActionExecute(Sender: TObject);
+var
+       URL, RefURL: string;
+       settingBody: TStringList;
+       tmpBoard: TBoard;
+
+begin
+       InitIdHTTP(Indy);
+       if FThreadItem = nil then
+               tmpBoard := FBoard
+       else
+               tmpBoard := FThreadItem.ParentBoard;
+
+       if tmpBoard = nil then Exit;
+
+       RefURL  := tmpBoard.URL;
+       if RefURL[Length(RefURL)] <> '/' then
+               URL     := RefURL + '/' + 'head.txt'
+       else
+               URL     := RefURL + 'head.txt';
+
+       if FileExists(tmpBoard.GETHEADTXTFileName) then
+               Indy.Request.LastModified := tmpBoard.HEADTXTTime
+       else
+               Indy.Request.LastModified := ZERO_DATE;
+
+       Indy.Request.Referer := RefURL;
+       Screen.Cursor := crHourGlass;
+       settingBody := TStringList.Create;
+       try
+               StatusBar.Panels[0].Text := 'head.txt\83_\83E\83\93\83\8d\81[\83h\92\86';
+               try
+                       settingBody.Text := Indy.Get(URL);
+                       if( Indy.ResponseCode = 200 ) then begin
+                               settingBody.Insert(0, '<HTML lang="ja"><HEAD>');
+                               settingBody.Insert(1, '<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">');
+                               settingBody.Insert(2, '<TITLE>' + tmpBoard.Title + '</TITLE>');
+                               settingBody.Insert(3, '<base href="' + RefURL + '"></HEAD><BODY>');
+                               settingBody.Add('</BODY></HTML>');
+                               settingBody.SaveToFile(tmpBoard.GETHEADTXTFileName);
+                               tmpBoard.HEADTXTTime := Indy.Response.LastModified;
+                               tmpBoard.IsHEADTXT := true;
+                               tmpBoard.Modified := true;
+                               StatusBar.Panels[0].Text := 'head.txt\8eæ\93¾\8a®\97¹(' + IntToStr(Indy.ResponseCode) + ')';
+                       end;
+               except
+                       on E: EIdException do begin
+                               if( AnsiPos('304', E.Message) > 0 ) then
+                                       StatusBar.Panels[0].Text := 'head.txt\8dX\90V\96³\82µ(' + IntToStr(Indy.ResponseCode) + ')'
+                               else
+                                       StatusBar.Panels[0].Text := 'head.txt\8eæ\93¾\83G\83\89\81[(' + IntToStr(Indy.ResponseCode) + ')';
+                       end;
+               end;
+       finally
+               settingBody.Free;
+               Screen.Cursor := crDefault;
+       end;
+       if tmpBoard.IsHEADTXT then
+               GikoSys.OpenBrowser(tmpBoard.GETHEADTXTFileName, gbtUserApp);
+end;
+
+end.