X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=Editor.pas;h=96058ffc062f1a41bf80c14377826c9976bc6ddc;hb=refs%2Fheads%2Fmaster;hp=83d1194f6d16e6f26910dfb3aba8469b52280173;hpb=21b5adc39ba262c88c77bdc5dd129ceb4a08f579;p=gikonavigoeson%2Fgikonavi.git diff --git a/Editor.pas b/Editor.pas index 83d1194..96058ff 100644 --- a/Editor.pas +++ b/Editor.pas @@ -12,17 +12,17 @@ uses SHDocVw_TLB, MSHTML_TLB, {$IFEND} - ActiveX, {HTTPApp,} YofUtils, Trip, IniFiles, StrUtils, + ActiveX, {HTTPApp,} YofUtils, IniFiles, StrUtils, GikoSystem, GikoUtil, ImgList, Clipbrd, BoardGroup, IdAntiFreezeBase, IdAntiFreeze, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, ActnList, StdActns, IdIntercept, IdLogBase, IdLogDebug, IdException, DateUtils, bmRegExp, - Gesture; + Gesture, AppEvnts, SambaTimer, IdCookieManager, WideMemo; type // TSetLayeredWindowAttributes = function(wnd: HWND; crKey: DWORD; bAlpha: BYTE; dwFlag: DWORD): Boolean; stdcall; //‘‚«ž‚Ý–ß‚è’lƒ^ƒCƒv - TGikoResultType = (grtOK, grtCookie, grtCheck, grtError); + TGikoResultType = (grtOK, grtCookie, grtCheck, grtError, grtNinpou, grtNinpouErr, grtSuiton); TEditorForm = class(TForm) MainMenu: TMainMenu; @@ -44,7 +44,6 @@ type N02: TMenuItem; ToolBarImageList: TImageList; HotToobarImageList: TImageList; - BodyEdit: TMemo; NameBasePanel: TPanel; NameLabel: TLabel; MailLabel: TLabel; @@ -90,7 +89,6 @@ type SelectAllAction: TAction; N2: TMenuItem; SelectAll1: TMenuItem; - Timer1: TTimer; QuotePasteAction: TAction; QuotePasteMenuItem: TMenuItem; C1: TMenuItem; @@ -119,11 +117,32 @@ type LocalEdit: TMemo; N6: TMenuItem; LocalRuleBrowse: TMenuItem; - ToolButton4: TToolButton; + ToolButton4: TToolButton; ToolButton6: TToolButton; SaveNameMailAction: TAction; ToolButton7: TToolButton; BeLogInOutEAction: TAction; + UpdateSambaAction: TAction; + Samba241: TMenuItem; + N7: TMenuItem; + InputAssistAction: TAction; + InputAssistPopupMenu: TPopupMenu; + ApplicationEvents1: TApplicationEvents; + ToolButton8: TToolButton; + ToolButton9: TToolButton; + ShowInputAssistForm: TAction; + ReleaseCookieAction: TAction; + Cookie1: TMenuItem; + ContinueModeAction: TAction; + ToolButton10: TToolButton; + ToolButton11: TToolButton; + OpenSendTargetAction: TAction; + ReloadTargetAction: TAction; + N8: TMenuItem; + N9: TMenuItem; + N10: TMenuItem; + UCInfoPanel: TPanel; + BodyEdit: TMemo; procedure EditorPageChange(Sender: TObject); procedure FormCreate(Sender: TObject); @@ -158,7 +177,6 @@ type 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 QuotePasteActionExecute(Sender: TObject); @@ -176,6 +194,19 @@ type procedure SaveNameMailActionExecute(Sender: TObject); procedure BeLogInOutEActionExecute(Sender: TObject); procedure BeLogInOutEActionUpdate(Sender: TObject); + procedure UpdateSambaActionUpdate(Sender: TObject); + procedure UpdateSambaActionExecute(Sender: TObject); + procedure InputAssistActionExecute(Sender: TObject); + procedure ApplicationEvents1Message(var Msg: tagMSG; + var Handled: Boolean); + procedure ShowInputAssistFormExecute(Sender: TObject); + procedure ReleaseCookieActionExecute(Sender: TObject); + procedure GetSETTINGTXTActionUpdate(Sender: TObject); + procedure GetHeadTXTActionUpdate(Sender: TObject); + procedure ContinueModeActionExecute(Sender: TObject); + procedure ContinueModeActionUpdate(Sender: TObject); + procedure OpenSendTargetActionExecute(Sender: TObject); + procedure ReloadTargetActionExecute(Sender: TObject); private FThreadItem: TThreadItem; FBoard: TBoard; @@ -186,45 +217,22 @@ type FStatusCode: Integer; FDebugStrReceive: string; FDebugStrSend: string; - FSambaTime: TDateTime; - FHost: string; FNow: TDateTime; - FGestures : TMouseGesture; + FInputAssistKey: String; ///< “ü—̓AƒVƒXƒg‚̃L[ + FResistWords: TStringList; ///< “ü—̓AƒVƒXƒg‚ÌŽ«‘‚©‚ç‚ÌŒŸõŒ‹‰Ê + FSambaTimer: TSambaTimer; ///< Samba‘΍ô‚̃^ƒCƒ}[ + FCookieDomain: string; ///< ”E–@’ŸƒhƒƒCƒ“ + FUseUC: Boolean; + BodyEditUC: TWideMemo; procedure Preview; - function RepHtml(s: string): string; function Check: Boolean; procedure SetNameList(sName, sMail: string); -// procedure Send(SendType: TGikoSendType; SPID: string; PON: string; FirstWriting: Boolean); -// procedure Send(SPID: string; PON: string; FirstWriting: Boolean); - procedure Send(ACOOKIE: string; SPID: string; PON: string; FirstWriting: Boolean); - + procedure Send(const ACOOKIE: string; const SPID: string; const PON: string; FirstWriting: Boolean); function GetActiveControlHandle: THandle; -// function GetSendData: string; -// procedure GetSendData(Source: TStringStream); procedure GetSendData(Source: TStringStream); procedure SaveSendFile; procedure SetContent(Content: string; ABrowser: TWebBrowser); function GetResultType(ResponseText: string): TGikoResultType; - - procedure ReadSambaTime(const AHost: string); overload; - procedure WriteSambaTime(const AHost: string; ATime: TDateTime); overload; - function ReadSettingTime(const AHost: string): Integer; overload; - function CheckSambaTime(const AHost: string; ATime: TDateTime): Boolean; overload; - procedure SetSamba24(AURL: string); overload; - - //Samba‚ÌŽžŠÔ‚ð“ǂݍž‚Þ - procedure ReadSambaTime(); overload; - //Samba‚ÉŽžŠÔ‚ð‘‚«ž‚Þ - procedure WriteSambaTime(ATime: TDateTime); overload; - //Samba‚̐ݒè’l‚ð“ǂݍž‚Þ - function ReadSettingTime(): Integer ; overload; - //Samba‚Ɉø‚Á‚©‚©‚é‚©ŒŸ¸‚·‚é - function CheckSambaTime(ATime: TDateTime): Boolean; overload; - //Samba‚̐ݒè’l‚ð‘‚«ž‚Þ - procedure SetSamba24(); overload; - - /// ˆø—p•„‚̎擾 - function GetOEIndentChar : string; /// –{•¶‚̎擾 function GetBody : string; //IdHttp‚̏‰Šú‰» @@ -242,24 +250,62 @@ type //HEAD.TXTŽ©“®•\Ž¦ procedure ShowBoardHead(ABoard: TBoard; AMemo: TMemo); //LocalFusianaTrapAlart - function LFusianaGet(s: String): Boolean; + function LFusianaGet(const s: String): Boolean; // Cookie‚̎擾 - procedure GetCookie(Rawtext: String; ABoard: TBoard); + procedure GetCookie(CookieMng: TIdCookieManager; ABoard: TBoard); + // hiddenƒf[ƒ^Žæ“¾ + procedure GetHiddenParameter(Rawtext: String; ABoard: TBoard); + //! “ü—̓AƒVƒXƒg‚̃|ƒbƒvƒAƒbƒvƒƒjƒ…[‚̃NƒŠƒbƒNƒCƒxƒ“ƒg + procedure InputAssistMenuClick(Sender: TObject); + //! TMemo‚̃J[ƒ\ƒ‹ˆÊ’u‚É•¶Žš—ñ‘}“ü + procedure InsertText(Memo: TMemo; Text: String); + //! ‘—M’†Ž~ + procedure CancelSend(ABoard: TBoard; ASysMenu: HMENU); + //! Sambaƒ^ƒCƒ}[ƒCƒxƒ“ƒg + procedure SambaTimer(Sender: TObject); + //! ƒEƒBƒ“ƒhƒE‚̈ʒu‚ƃTƒCƒY‚̐ݒè + procedure SetWindowRect; + //! Šg’£ƒ^ƒuÝ’è + procedure SetExtraTab; + //! ”Ž擾 + function GetBoard : TBoard; + //! URL‚̃f[ƒ^‚ðstream‚ÉŽæ‚荞‚Þ + procedure GetWebData(const URL: string; const RefURL: string; + Modified: TDateTime; stream: TStream); + //! GikoForm‚ɐV’…ƒƒbƒZ[ƒW‚ð’ljÁ‚·‚é + procedure AddFormMessageNew(icon: TGikoMessageIcon); + //! ƒ[ƒJƒ‹fusianaƒgƒ‰ƒbƒv + function isLocalFusianaTrap: Boolean; + //! ƒ[ƒJƒ‹fusianaƒgƒ‰ƒbƒv + function isRemoteFusianaTrap: Boolean; + //! Header•¶Žš—ñŽæ“¾ + function getHeaderStr(const ACOOKIE: string; const SPID : string; + const PON : string; const HAP : string; Board : TBoard) : string; + //! fusianaŒxƒ_ƒCƒAƒƒO + function FusianaMsgBox: Integer; + //! sent.iniƒtƒ@ƒCƒ‹‚̐¶¬ + function CreateSentIniFile: TMemIniFile; + //! Œë”šƒ`ƒFƒbƒN + function isGobaku: Boolean; protected procedure CreateParams(var Params: TCreateParams); override; public - FBBSID: String; + FBBSID: String; procedure SetFont; procedure SetThreadItem(Item: TThreadItem); procedure SetBoard(Item: TBoard); - property BBSID: string read FBBSID write FBBSID; - + procedure UpdateSambaStatus; + procedure SetFocusEdit; + procedure SetTextEdit(TextSrc: String); + property BBSID: string read FBBSID write FBBSID; end; implementation uses - Giko, ItemDownload, MojuUtils, IdGlobal, GikoMessage; + Giko, ItemDownload, MojuUtils, IdGlobal, GikoMessage, Imm, + InputAssistDataModule, InputAssist, HTMLCreate, IdCookie, GikoDataModule, + Belib; const CAPTION_NAME_NEW: string = 'ƒMƒRƒiƒr ƒXƒŒ—§‚ăGƒfƒBƒ^'; CAPTION_NAME_RES: string = 'ƒMƒRƒiƒr ƒŒƒXƒGƒfƒBƒ^'; @@ -285,17 +331,6 @@ const RES2CH_CHECK = ''; RES2CH_COOKIE = ''; - - BBS2CH_NAME: string = '‚Q‚¿‚á‚ñ‚Ë‚é'; - 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; @@ -325,50 +360,36 @@ begin end;} procedure TEditorForm.FormCreate(Sender: TObject); -var - wp: TWindowPlacement; - hUser32 : HINST; - ini: TIniFile; begin + FUseUC := GikoSys.Setting.UseUnicode; + + BodyEditUC := TWideMemo.Create(Self); + BodyEditUC.Parent := EditorTab; + BodyEditUC.Align := alClient; + BodyEditUC.ScrollBars := ssBoth; + + if (FUseUC = True) then begin + BodyEditUC.Visible := True; + BodyEdit.Visible := False; + EditorTab.Caption := EditorTab.Caption + '(Unicodeƒ‚[ƒh)'; + end else begin + BodyEditUC.Visible := False; + BodyEdit.Visible := True; + EditorTab.Caption := EditorTab.Caption + '(Shift-JISƒ‚[ƒh)'; + end; + FWork := False; + FSambaTimer := TSambaTimer.Create(Self); + FSambaTimer.Interval := 0; Browser.Navigate('about:blank'); TitlePictureBrowser.Navigate('about:blank'); + WebBrowser1.Navigate('about:blank'); FBoard := nil; FThreadItem := nil; - //ƒEƒBƒ“ƒhƒE‚̈ʒuÝ’è - wp.length := sizeof(wp); - wp.rcNormalPosition.Top := GikoSys.Setting.EditWindowTop; - wp.rcNormalPosition.Left := GikoSys.Setting.EditWindowLeft; - - wp.rcNormalPosition.Bottom := GikoSys.Setting.EditWindowTop + GikoSys.Setting.EditWindowHeight; - wp.rcNormalPosition.Right := GikoSys.Setting.EditWindowLeft + GikoSys.Setting.EditWindowWidth; - wp.showCmd := SW_HIDE; - SetWindowPlacement(Handle, @wp); - - if GikoSys.Setting.EditWindowMax then - WindowState := wsMaximized; - - //ƒEƒBƒ“ƒhƒE‚ª‰æ–ÊŠO‚È‚ç‰æ–Ê“à‚Ɉړ®‚·‚é - if (Left + Width) > Screen.Width then -// Left := Screen.Width - Width; - Left := 0; - if (Top + Height) > Screen.Height then -// Top := Screen.Height - Height; - Top := 0; - if Left < 0 then - Left := 0; - if Top < 0 then - Top := 0; - - //Œ»Ý‚̃EƒBƒ“ƒhƒE‚̈ʒu‚ð•Û‘¶ - GikoSys.Setting.EditWindowTop := Top + WINDOWMOVE_V; // ŽŸ‚ÉŠJ‚­ƒEƒBƒ“ƒhƒE‚Í - GikoSys.Setting.EditWindowLeft := Left + WINDOWMOVE_H; // @@@‰EŽÎ‚߉º‚É‚¸‚ç‚· - //ƒEƒBƒ“ƒhƒE‚Ì•‚ƍ‚‚³‚ª¬‚³‚·‚¬‚¢‚ê‚ÎŒ³‚É–ß‚· - if GikoSys.Setting.EditWindowHeight < 144 then - Height := 400; - if GikoSys.Setting.EditWindowWidth < 144 then - Width := 640; + if (Owner <> nil) and (Owner.ClassNameIs('TKeySettingForm') = False) then + //ƒEƒBƒ“ƒhƒE‚̈ʒuÝ’è + SetWindowRect; EditorPage.ActivePage := EditorTab; FNameComboEdit := GetWindow(NameComboBox.Handle, GW_CHILD); @@ -376,20 +397,8 @@ begin NameComboBox.Items.Assign(GikoSys.Setting.NameList); MailComboBox.Items.Assign(GikoSys.Setting.MailList); SetFont; - hUser32 := 0; - try - try - hUser32 := LoadLibrary('User32.dll'); - if hUser32 <> 0 then - TransAction.Enabled := true - else - TransAction.Enabled := false; - except - TransAction.Enabled := false; - end; - finally - FreeLibrary(hUser32); - end; + // ”¼“§–¾—˜—p‰Â”\Ý’è + TransAction.Enabled := GikoSys.CanUser32DLL; // ƒEƒBƒ“ƒhƒE‚̃XƒeƒCó‘Ô if GikoSys.Setting.EditWindowStay then begin // ƒXƒeƒCó‘Ô @@ -417,34 +426,13 @@ begin SpaceToNBSPAction.Checked := GikoSys.Setting.SpaceToNBSP; AmpToCharRefAction.Checked := GikoSys.Setting.AmpToCharRef; + // ƒ[ƒJƒ‹ƒ‹[ƒ‹{”ƒgƒbƒv‰æ‘œ‚̃^ƒu‚̐ݒè + SetExtraTab; - ini := TIniFile.Create(GikoSys.Setting.GetFileName); - - try - BoardtopTab.TabVisible := ini.Readbool('EditorForm', 'BoardTopTab', False); - BoardTop.Checked := BoardtopTab.TabVisible; - RocalRuleTab.TabVisible := ini.ReadBool('EditorForm', 'LocalRuleTab', False); - LocalRule.Checked := RocalRuleTab.TabVisible; - finally - ini.Free; - end; - - // ƒ}ƒEƒXƒWƒFƒXƒ`ƒƒ[‚̃Cƒ“ƒXƒg[ƒ‹ - if GikoSys.Setting.GestureEnabled then begin - MouseGesture.UnHook; - FGestures := TMouseGesture.Create; - GikoSys.Setting.Gestures.ClearGesture; - - GikoSys.Setting.Gestures.LoadGesture( - GikoSys.Setting.GetGestureFileName, ActionList ); - MouseGesture.OnGestureStart := OnGestureStart; - MouseGesture.OnGestureMove := OnGestureMove; - MouseGesture.OnGestureEnd := OnGestureEnd; - MouseGesture.SetHook( Handle ); - end; + // ƒL[Ý’è‚̓ǂݍž‚Ý + GikoSys.LoadKeySetting(ActionList, GikoSys.GetEditorKeyFileName); SaveNameMailAction.Checked := True; end; - procedure TEditorForm.SetBoard(Item: TBoard); begin FBoard := Item; @@ -453,7 +441,13 @@ begin MailComboBox.Text := FBoard.KotehanMail; SageCheckBox.Checked := AnsiPos('sage', MailComboBox.Text) <> 0; TitlePanel.Visible := True; - SetSamba24(FBoard.URL); + + if (FSambaTimer.SetBoard(FBoard) >= 0) then begin + UpdateSambaStatus; + FNow := Now(); + FSambaTimer.OnTimer := SambaTimer; + end; + ShowBoardInformation(FBoard, BoardInformationMemo); ShowTitlePicture(); end; @@ -466,7 +460,13 @@ begin MailComboBox.Text := FThreadItem.ParentBoard.KotehanMail; SageCheckBox.Checked := AnsiPos('sage', MailComboBox.Text) <> 0; TitlePanel.Visible := False; - SetSamba24(FThreadItem.ParentBoard.URL); + + if (FSambaTimer.SetBoard(FThreadItem.ParentBoard) >= 0) then begin + UpdateSambaStatus; + FNow := Now(); + FSambaTimer.OnTimer := SambaTimer; + end; + ShowBoardInformation(FThreadItem.ParentBoard, BoardInformationMemo); ShowTitlePicture(); end; @@ -480,7 +480,11 @@ const TAB_LENGTH = 4; begin - body := BodyEdit.Text; + if (FUseUC = True) then + body := BodyEditUC.EncodeText + else + body := BodyEdit.Text; + if AmpToCharRefAction.Checked then // & ‚Ì’uŠ·‚͈ê”ԍŏ‰‚É‚â‚邱‚Æ body := CustomStringReplace( body, '&', '&' ); @@ -552,10 +556,17 @@ end; procedure TEditorForm.SetFont; begin - BodyEdit.Font.Name := GikoSys.Setting.EditorFontName; - BodyEdit.Font.Size := GikoSys.Setting.EditorFontSize; - BodyEdit.Font.Color := GikoSys.Setting.EditorFontColor; - BodyEdit.Color := GikoSys.Setting.EditorBackColor; + if (FUseUC = True) then begin + BodyEditUC.Font.Name := GikoSys.Setting.EditorFontName; + BodyEditUC.Font.Size := GikoSys.Setting.EditorFontSize; + BodyEditUC.Font.Color := GikoSys.Setting.EditorFontColor; + BodyEditUC.Color := GikoSys.Setting.EditorBackColor; + end else begin + BodyEdit.Font.Name := GikoSys.Setting.EditorFontName; + BodyEdit.Font.Size := GikoSys.Setting.EditorFontSize; + BodyEdit.Font.Color := GikoSys.Setting.EditorFontColor; + BodyEdit.Color := GikoSys.Setting.EditorBackColor; + end; end; procedure TEditorForm.Preview; @@ -564,73 +575,38 @@ var No: string; Mail: string; Namae: string; - DateTime: string; Body: string; s: string; - - posTrip : Integer; - tripOrigin : string; begin if FThreadItem = nil then begin No := '1'; - Title := RepHtml(TitleEdit.Text); + Title := THTMLCreate.RepHtml(TitleEdit.Text); end else begin No := IntToStr(FThreadItem.Count + 1); - Title := RepHtml(FThreadItem.Title); + Title := THTMLCreate.RepHtml(FThreadItem.Title); end; - body := GetBody; - Namae := RepHtml(NameComboBox.Text); - Mail := RepHtml(MailComboBox.Text); - Body := RepHtml(body); - Body := StringReplace(Body, #13#10, '
', [rfReplaceAll]); - DateTime := FormatDateTime('yyyy/mm/dd(aaa) hh:nn', now); + Body := GetBody; + Namae := THTMLCreate.RepHtml(NameComboBox.Text); + Mail := THTMLCreate.RepHtml(MailComboBox.Text); + Body := THTMLCreate.RepHtml(Body); + Body := CustomStringReplace(Body, #13#10, '
', False); + if Trim(Namae) = '' then Namae := '–¼–³‚µ‚³‚ñ'; - s := '' + #13#10 - + '' + #13#10 - + '' + title + '' + #13#10 -// + '' + #13#10 - + '' + #13#10 - + '' + #13#10 - + '' + title + '' + #13#10 - + '
' + #13#10; - posTrip := AnsiPos( '#', Namae ); - if posTrip > 0 then - begin - tripOrigin := Copy( Namae, posTrip + 1, Length( Namae ) ); - Namae := - Copy( Namae, 1, posTrip - 1 ) + ' Ÿ' + - get_2ch_trip( PChar( tripOrigin ) ) + ''; - end; - if Mail = '' then - s := s + '
' + No + ' F ' + Namae + ' F ' + DateTime+ '
' + Body + '


' + #13#10 - else - s := s + '
' + No + ' F ' + Namae + ' [' + Mail + ']F ' + DateTime+ '
' + Body + '


' + #13#10; - s := s + ''; + s := THTMLCreate.CreatePreviewHTML(Title, No, Mail, Namae, Body); + SetContent(s, Browser); end; -function TEditorForm.RepHtml(s: string): string; -begin -// s := StringReplace(s, '&', '&', [rfReplaceAll]); - s := CustomStringReplace(s, '<', '<'); - s := CustomStringReplace(s, '>', '>'); -// s := StringReplace(s, ' ', ' ', [rfReplaceAll]); //Žd—l•ÏX‚É‚æ‚è Žg—p•s‰Â - s := CustomStringReplace(s, '"', '"'); - Result := s; -end; - procedure TEditorForm.EditorPageChange(Sender: TObject); var tmpBoard: TBoard; begin - if FThreadItem = nil then - tmpBoard := FBoard - else - tmpBoard := FThreadItem.ParentBoard; + + tmpBoard := GetBoard; if tmpBoard = nil then Exit; @@ -658,31 +634,38 @@ begin end; function TEditorForm.Check: Boolean; +const + REQUIRED: string = '‚ª“ü—Í‚³‚ê‚Ä‚¢‚Ü‚¹‚ñB'; + ERROR: string = 'ƒGƒ‰['; var Msg: string; rc: Integer; Board: TBoard; + BodyLen: Integer; begin Result := True; - if FThreadItem = nil then - Board := FBoard - else - Board := FThreadItem.ParentBoard; + + Board := GetBoard; + + if (FUseUC = True) then + BodyLen := Length(BodyEditUC.EncodeText) + else + BodyLen := Length(BodyEdit.Text); if (not GikoSys.Setting.UseMachineTime) and ((Board.LastGetTime = 0) or (Board.LastGetTime = ZERO_DATE)) then begin Msg := 'ƒT[ƒo‚ÌŽž‚ª•ª‚©‚ç‚È‚¢‚½‚߁A‘—Mo—ˆ‚Ü‚¹‚ñ'#13#10 + 'ƒXƒŒƒbƒh‚ðXViŽæ“¾jŒãA15•b‘Ò‚Á‚Ä‚©‚ç‘—M‚µ‚Ä‚­‚¾‚³‚¢'; - MsgBox(Handle, Msg, 'ƒGƒ‰[', MB_OK or MB_ICONSTOP); + MsgBox(Handle, Msg, ERROR, MB_OK or MB_ICONSTOP); Result := False; - end else if BodyEdit.Text = '' then begin - Msg := '–{•¶‚ª“ü—Í‚³‚ê‚Ä‚¢‚Ü‚¹‚ñB'; - MsgBox(Handle, Msg, 'ƒGƒ‰[', MB_OK or MB_ICONSTOP); + end else if BodyLen = 0 then begin + Msg := '–{•¶' + REQUIRED; + MsgBox(Handle, Msg, ERROR, MB_OK or MB_ICONSTOP); Result := False; end else if (FBoard <> nil) and (Trim(TitleEdit.Text) = '') then begin - Msg := 'ƒ^ƒCƒgƒ‹‚ª“ü—Í‚³‚ê‚Ä‚¢‚Ü‚¹‚ñB'; - MsgBox(Handle, Msg, 'ƒGƒ‰[', MB_OK or MB_ICONSTOP); + Msg := 'ƒ^ƒCƒgƒ‹' + REQUIRED; + MsgBox(Handle, Msg, ERROR, MB_OK or MB_ICONSTOP); Result := False; end else begin if (not GikoSys.Dolib.Connected) and (AnsiPos('œ', NameComboBox.Text) <> 0) then begin @@ -703,20 +686,23 @@ procedure TEditorForm.FormDestroy(Sender: TObject); var wp: TWindowPlacement; begin - //Å‘剻EƒEƒBƒ“ƒhƒEˆÊ’u•Û‘¶ - wp.length := sizeof(wp); - GetWindowPlacement(Handle, @wp); + FSambaTimer.Free; - GikoSys.Setting.EditWindowTop := wp.rcNormalPosition.Top; - GikoSys.Setting.EditWindowLeft := wp.rcNormalPosition.Left; - GikoSys.Setting.EditWindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top; - GikoSys.Setting.EditWindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left; - GikoSys.Setting.EditWindowMax := WindowState = wsMaximized; - //GikoSys.Setting.EditWindowStay := FormStyle = fsStayOnTop; // ƒXƒeƒCó‘Ô‚Ì•Û‘¶ - GikoSys.Setting.EditWindowTranslucent := TransAction.Checked; // ”¼“§–¾ó‘Ô‚Ì•Û‘¶ + if (Owner <> nil) and (Owner.ClassNameIs('TKeySettingForm') = False) then begin + //Å‘剻EƒEƒBƒ“ƒhƒEˆÊ’u•Û‘¶ + wp.length := sizeof(wp); + GetWindowPlacement(Handle, @wp); - FGestures.Free; + GikoSys.Setting.EditWindowTop := wp.rcNormalPosition.Top; + GikoSys.Setting.EditWindowLeft := wp.rcNormalPosition.Left; + GikoSys.Setting.EditWindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top; + GikoSys.Setting.EditWindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left; + GikoSys.Setting.EditWindowMax := WindowState = wsMaximized; + //GikoSys.Setting.EditWindowStay := FormStyle = fsStayOnTop; // ƒXƒeƒCó‘Ô‚Ì•Û‘¶ + GikoSys.Setting.EditWindowTranslucent := TransAction.Checked; // ”¼“§–¾ó‘Ô‚Ì•Û‘¶ + end; + BodyEditUC.Free; end; procedure TEditorForm.SetNameList(sName, sMail: string); @@ -740,6 +726,8 @@ begin Result := FNameComboEdit else if ActiveControl = MailComboBox then Result := FMailComboEdit + else if ActiveControl = BodyEditUC then + Result := BodyEditUC.Handle else if ActiveControl = BodyEdit then Result := BodyEdit.Handle else if ActiveControl = TitleEdit then @@ -762,10 +750,10 @@ end; procedure TEditorForm.SetContent(Content: string; ABrowser: TWebBrowser); var - doc: Variant; + doc: OleVariant; begin - if ABrowser.Document <> nil then begin - doc := Idispatch( olevariant(ABrowser.ControlInterface).Document) as IHTMLDocument2; + if Assigned(ABrowser.ControlInterface.Document) then begin + doc := OleVariant(ABrowser.Document); doc.Clear; doc.open; doc.charset := 'Shift_JIS'; @@ -790,69 +778,49 @@ begin http.ProxyParams.ProxyUsername := ''; http.ProxyParams.ProxyPassword := ''; end; - Indy.Request.UserAgent := GikoSys.GetUserAgent; - Indy.Request.AcceptEncoding := ''; + http.Request.UserAgent := GikoSys.GetUserAgent; + http.Request.AcceptEncoding := ''; + http.AllowCookies := True; + http.ReadTimeout := GikoSys.Setting.ReadTimeOut; + http.ConnectTimeout := GikoSys.Setting.ReadTimeOut; +end; +//! ‘—M’†Ž~‚Ì‚½‚߂̃ƒjƒ…[‚̍ж +procedure TEditorForm.CancelSend(ABoard: TBoard; ASysMenu: HMENU); +begin + ABoard.SPID := ''; + ABoard.PON := ''; + FWork := false; + EnableMenuItem(ASysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED); + DrawMenuBar(Handle); end; -procedure TEditorForm.Send(ACOOKIE: string; SPID: string; PON: string; FirstWriting: Boolean); +procedure TEditorForm.Send( const ACOOKIE: string; const SPID: string; + const PON: string; FirstWriting: Boolean); var TextStream: TStringStream; Source: TStringStream; ResponseText: string; URL: string; - RefURL: string; State: TGikoDownloadState; ResultType: TGikoResultType; MsgResult: Integer; - Cookie: string; Board: TBoard; sysMenu : HMENU; - //fusianasanƒgƒ‰ƒbƒv by’èŠú•Ö - Namae : String; - body : TStringList; - Remote : String; - ABoard : TBoard; - tmpRawheader: string; + ExpMsg: String; {Protocol,Host, Path, Document, Port, Bookmark : String;} begin FAbort := False; State := gdsError; - Namae := RepHtml(NameComboBox.Text); - if FThreadItem = nil then - Board := FBoard - else - Board := FThreadItem.ParentBoard; - + Board := GetBoard; - tmpRawheader := ''; InitIdHTTP(Indy); if FThreadItem = nil then begin URL := FBoard.GetSendURL; - RefURL := GikoSys.UrlToServer(FBoard.URL) + 'test/bbs.cgi'; + Indy.Request.Referer := GikoSys.UrlToServer(FBoard.URL) + 'test/bbs.cgi'; end else begin URL := FThreadItem.GetSendURL; - RefURL := FThreadItem.URL; + Indy.Request.Referer := FThreadItem.URL; end; -// Indy.Request.UserAgent := GikoSys.GetUserAgent; - Indy.Request.Referer := RefURL; -// Indy.Request.AcceptEncoding := ''; - - Cookie := ''; - if ACOOKIE <> '' then - Cookie := ACOOKIE; - if SPID <> '' then - Cookie := Cookie + 'SPID=' + SPID + '; '; - if PON <> '' then - Cookie := Cookie + 'PON=' + PON + '; '; - - //ƒzƒXƒg‚ª2ch‚ŁABe‚ÉLogin‚µ‚Ä‚¢‚ê‚ÎBE‚̃f[ƒ^‚ð‘—‚é - //GikoSys.ParseURI( URL, Protocol,Host, Path, Document, Port, Bookmark ); - //if GikoSys.Is2chHost(Host) and GikoSys.Setting.BeLogin then - if (Board.Is2ch) and (GikoSys.Setting.BeLogin) then - Cookie := Cookie + 'MDMD=' + GikoSys.Setting.BeCode + '; ' - + 'DMDM=' + GikoSys.Setting.BeUserID + '; '; - Cookie := 'Cookie: ' + Cookie + 'NAME=' + NameComboBox.Text + '; MAIL=' + MailComboBox.Text; - sysMenu := GetSystemMenu( Handle, false ); EnableMenuItem( sysMenu, SC_CLOSE, MF_GRAYED ); { @@ -865,13 +833,32 @@ begin Indy.Request.AcceptLanguage := 'ja'; Indy.Request.Accept := 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*'; Indy.Request.ContentType := 'application/x-www-form-urlencoded'; - Indy.Request.CustomHeaders.Add(Cookie); + Indy.Request.CustomHeaders.Add(getHeaderStr(ACOOKIE, SPID, PON, GikoSys.GetBouken(URL, FCookieDomain), Board)); TextStream := TStringStream.Create(''); Source := TStringStream.Create(''); try try FDebugStrReceive := ''; FDebugStrSend := ''; + + if (FirstWriting) then begin + //ƒtƒVƒAƒiƒgƒ‰ƒbƒvŒx(LocalMode) by ’èŠú•Ö + if (isLocalFusianaTrap) then begin + CancelSend( Board, SysMenu ); + Exit; + end; + //ƒtƒVƒAƒiƒgƒ‰ƒbƒvŒx(Remote) + if (isRemoteFusianaTrap) then begin + CancelSend( Board, SysMenu ); + Exit; + end; + // Œë”šƒ`ƒFƒbƒN + if (isGobaku) then begin + CancelSend( Board, SysMenu ); + Exit; + end; + end; + GetSendData(Source); IdAntiFreeze.Active := True; try @@ -883,176 +870,120 @@ begin ResultType := GetResultType(ResponseText); - //MsgResult‰Šú‰» - MsgResult := IDNO; - //ƒtƒVƒAƒiƒgƒ‰ƒbƒvŒx(LocalMode) by ’èŠú•Ö - if GikoSys.Setting.LocalTrapAtt then begin - if LFusianaGet(Namae) then begin - MsgResult := MsgBox( - Handle, - 'ƒŠƒ‚[ƒgƒzƒXƒg‚ð•\Ž¦‚·‚é‹@”\‚ªŽg‚í‚ê‚Ä‚¢‚Ü‚·' + #13#10 + - '‚à‚µ‚àŠÔˆá‚Á‚Ä‚±‚Ì•û–@‚ŃzƒXƒg‚ª•\Ž¦‚³‚ꂽ‚Æ‚µ‚Ä‚àAŽ©ŒÈÓ”C‚Ȃ̂ō폜ˆË—Š‚ɂ͉ž‚¶‚Ü‚¹‚ñB' + #13#10#13#10 + - 'Ó”C‚𕉂¤‚±‚Æ‚ð³‘ø‚µ‚ď‘‚«ž‚Ý‚Ü‚·‚©H', - 'î•ñ', - MB_YESNO or MB_ICONQUESTION); - 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; - if ((Namae = 'ŽRèÂ') or (Namae = 'fusianasan')) then begin - MsgResult := MsgBox( - Handle, - 'ƒŠƒ‚[ƒgƒzƒXƒg‚ð•\Ž¦‚·‚é‹@”\‚ªŽg‚í‚ê‚Ä‚¢‚Ü‚·' + #13#10 + - '‚à‚µ‚àŠÔˆá‚Á‚Ä‚±‚Ì•û–@‚ŃzƒXƒg‚ª•\Ž¦‚³‚ꂽ‚Æ‚µ‚Ä‚àAŽ©ŒÈÓ”C‚Ȃ̂ō폜ˆË—Š‚ɂ͉ž‚¶‚Ü‚¹‚ñB' + #13#10#13#10 + - 'Ó”C‚𕉂¤‚±‚Æ‚ð³‘ø‚µ‚ď‘‚«ž‚Ý‚Ü‚·‚©H', - 'î•ñ', - MB_YESNO or MB_ICONQUESTION); - 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; - end; - - if GikoSys.Setting.RemoteTrapAtt then begin - if FThreadItem = nil then - ABoard := FBoard - else - ABoard := FThreadItem.ParentBoard; - - if ABoard = nil then Exit; - - if FileExists(ABoard.GetSETTINGTXTFileName) then begin - body := TStringList.Create; - try - body.LoadFromFile(ABoard.GetSETTINGTXTFileName); - Remote := GetFusianaName(body, ABoard); - finally - body.Free; - end; - end; - - //Setting.txt‚ª‚È‚©‚Á‚½‚çŽæ“¾ - //ŽI‚É•‰‰×‚ª‚©‚©‚è‚»‚¤‚Å•|‚¢EEE - if not FileExists(ABoard.GetSETTINGTXTFileName) then begin - //GetSETTINGTXTAction‚ðŒÄ‚яo‚·‚ÆIndy‚ª‰Šú‰»‚³‚ê‚é‚̂ŁA - //‚±‚±‚ÅCookie‚ð•Û‘¶‚µ‚È‚­‚Ä‚Í‚¢‚¯‚È‚¢ - tmpRawheader := Indy.Response.RawHeaders.Text; - GetSETTINGTXTAction.Execute; - body := TStringList.Create; - try - body.LoadFromFile(ABoard.GetSETTINGTXTFileName); - Remote := GetFusianaName(body, ABoard); - finally - body.Free; - end; - end; - - if Remote = 'fusianasan' then begin - MsgResult := MsgBox( - Handle, - 'ƒŠƒ‚[ƒgƒzƒXƒg‚ð•\Ž¦‚·‚é‹@”\‚ªŽg‚í‚ê‚Ä‚¢‚Ü‚·' + #13#10 + - '‚à‚µ‚àŠÔˆá‚Á‚Ä‚±‚Ì•û–@‚ŃzƒXƒg‚ª•\Ž¦‚³‚ꂽ‚Æ‚µ‚Ä‚àAŽ©ŒÈÓ”C‚Ȃ̂ō폜ˆË—Š‚ɂ͉ž‚¶‚Ü‚¹‚ñB' + #13#10#13#10 + - 'Ó”C‚𕉂¤‚±‚Æ‚ð³‘ø‚µ‚ď‘‚«ž‚Ý‚Ü‚·‚©H', - 'î•ñ', - MB_YESNO or MB_ICONQUESTION); - 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; - end; if ResultType = grtOK then begin - if GikoSys.Setting.UseSamba then - WriteSambaTime(FHost, Now()); + if (GikoSys.Setting.UseSamba) and (FSambaTimer.Enabled) then + begin + FSambaTimer.WriteSambaTime(Now()); + end; + GetCookie(Indy.CookieManager, Board); State := gdsComplete; end else if ResultType = grtCookie then begin //ƒ‹[ƒv–hŽ~ if not FirstWriting then raise Exception.Create(''); - MsgResult := MsgBox( - Handle, - 'E“Še‚³‚ꂽ“à—e‚̓Rƒs[A•Û‘¶Aˆø—pA“]Ú“™‚³‚ê‚éê‡‚ª‚ ‚è‚Ü‚·B' + #13#10 + - 'E“Še‚ÉŠÖ‚µ‚Ä”­¶‚·‚éÓ”C‚Í‘S‚Ä“ŠeŽÒ‚É‹A‚µ‚Ü‚·B' + #13#10#13#10 + - '‘SÓ”C‚𕉂¤‚±‚Æ‚ð³‘ø‚µ‚ď‘‚«ž‚Ý‚Ü‚·‚©H', - 'î•ñ', - MB_YESNO or MB_ICONQUESTION); + + MsgResult := MsgBox( Handle, + 'E“Še‚³‚ꂽ“à—e‚̓Rƒs[A•Û‘¶Aˆø—pA“]Ú“™‚³‚ê‚éê‡‚ª‚ ‚è‚Ü‚·B' + #13#10 + + 'E“Še‚ÉŠÖ‚µ‚Ä”­¶‚·‚éÓ”C‚Í‘S‚Ä“ŠeŽÒ‚É‹A‚µ‚Ü‚·B' + #13#10#13#10 + + '‘SÓ”C‚𕉂¤‚±‚Æ‚ð³‘ø‚µ‚ď‘‚«ž‚Ý‚Ü‚·‚©H', + 'î•ñ', + MB_YESNO or MB_ICONQUESTION); + if MsgResult = IDYES then begin - if (GikoSys.Setting.RemoteTrapAtt) and (tmpRawheader <> '') then begin - GetCookie(tmpRawheader, Board); - end else begin - GetCookie(Indy.Response.RawHeaders.Text, Board); - end; + GetCookie(Indy.CookieManager, Board); + if (Board.Is2ch) then begin + GetHiddenParameter(ResponseText, Board); + end; + if (Board.SPID = '') and (Board.PON = '') and (Board.Cookie = '') then raise Exception.Create(''); //‚à‚¤ˆê‰ñ‚±‚̃ƒ\ƒbƒh Send(Board.Cookie, Board.SPID, Board.PON, False); Exit; end else begin - Board.SPID := ''; - Board.PON := ''; - FWork := false; - EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED); - DrawMenuBar(Handle); + CancelSend( Board, SysMenu ); Exit; end; end else if ResultType = grtCheck then begin - // //ƒ‹[ƒv–hŽ~ if not FirstWriting then raise Exception.Create(''); - MsgResult := MsgBox( - Handle, - '‘‚«ž‚Ý‚ÉŠÖ‚µ‚Ä‚Í—lX‚ȃƒOî•ñ‚ª‹L˜^‚³‚ê‚Ä‚¢‚Ü‚·B' + #13#10 + - '“Še‚ÉŠÖ‚µ‚Ä”­¶‚·‚éÓ”C‚Í‘S‚Ä“ŠeŽÒ‚É‹A‚µ‚Ü‚·B' + #13#10 + - 'Œö˜—Ç‘­‚É”½‚µ‚½‚èA‘¼l‚É–À˜f‚ð‚©‚¯‚鏑‚«ž‚݂͍T‚¦‚ĉº‚³‚¢B' + #13#10 + - '“Še‚³‚ꂽ“à—e‚̓Rƒs[E•Û‘¶Eˆø—pE“]Ú“™‚³‚ê‚éê‡‚ª‚ ‚è‚Ü‚·B' + #13#10 + - #13#10 + - '‘SÓ”C‚𕉂¤‚±‚Æ‚ð³‘ø‚µ‚ď‘‚«ž‚Ý‚Ü‚·‚©H', - 'Šm”F', - MB_YESNO or MB_ICONQUESTION); + MsgResult := MsgBox( Handle, + '‘‚«ž‚Ý‚ÉŠÖ‚µ‚Ä‚Í—lX‚ȃƒOî•ñ‚ª‹L˜^‚³‚ê‚Ä‚¢‚Ü‚·B' + #13#10 + + '“Še‚ÉŠÖ‚µ‚Ä”­¶‚·‚éÓ”C‚Í‘S‚Ä“ŠeŽÒ‚É‹A‚µ‚Ü‚·B' + #13#10 + + 'Œö˜—Ç‘­‚É”½‚µ‚½‚èA‘¼l‚É–À˜f‚ð‚©‚¯‚鏑‚«ž‚݂͍T‚¦‚ĉº‚³‚¢B' + #13#10 + + '“Še‚³‚ꂽ“à—e‚̓Rƒs[E•Û‘¶Eˆø—pE“]Ú“™‚³‚ê‚éê‡‚ª‚ ‚è‚Ü‚·B' + #13#10 + + #13#10 + + '‘SÓ”C‚𕉂¤‚±‚Æ‚ð³‘ø‚µ‚ď‘‚«ž‚Ý‚Ü‚·‚©H', + 'Šm”F', + MB_YESNO or MB_ICONQUESTION); if MsgResult = IDYES then begin - if (GikoSys.Setting.RemoteTrapAtt) and (tmpRawheader <> '') then begin - GetCookie(tmpRawheader, Board); - end else begin - GetCookie(Indy.Response.RawHeaders.Text, Board); + GetCookie(Indy.CookieManager, Board); + if (Board.Is2ch) then begin + GetHiddenParameter(ResponseText, Board); end; + if (Board.SPID = '') and (Board.PON = '') and (Board.Cookie = '') then raise Exception.Create(''); + + Send(Board.Cookie, Board.SPID, Board.PON, False); Exit; end else begin - EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED); - DrawMenuBar(Handle); - Board.SPID := ''; - Board.PON := ''; - FWork := false; + CancelSend( Board, SysMenu ); Exit; - end; - end else begin - if GikoSys.Setting.UseSamba then - WriteSambaTime(FHost, Now()); - State := gdsError; - raise Exception.Create(''); - end; - + end; + end else if ResultType = grtNinpou then begin + MsgBox( Handle, + '‹M•û‚Ì”E–@’Ÿ‚ðì¬’†‚Å‚·Bˆø‚«•Ô‚·‚È‚ç‚¢‚Ü‚¾B(‚Q•ª‚Ù‚Ç‚©‚©‚è‚Ü‚·)' + #13#10 + , 'Šm”F', + MB_OK or MB_ICONINFORMATION); + if (GikoSys.Setting.UseSamba) and (FSambaTimer.Enabled) then + begin + FSambaTimer.WriteSambaTime(Now()); + end; + Board.PON := ''; + Board.SPID := ''; + Board.Cookie := ''; + GetCookie(Indy.CookieManager, Board); + Exit; + end else if ResultType = grtSuiton then begin + MsgBox( Handle, + '‹M•û‚Ì”E–@’Ÿ‚͏Ă©‚ê‚Ü‚µ‚½B' + #13#10 + + '”E–@’Ÿ‚ðíœ‚µ‚Ü‚µ‚½AÄ‘—M‚µ‚Ä‚­‚¾‚³‚¢B' + , 'Šm”F', + MB_OK or MB_ICONINFORMATION); + // ”E–@’ŸŠª•¨‚ðÁ‚· + GikoSys.DelBoukenCookie(FCookieDomain); + GikoSys.Setting.WriteBoukenSettingFile; + Board.PON := ''; + Board.SPID := ''; + Board.Cookie := ''; + Exit; + end else begin + if (GikoSys.Setting.UseSamba) and (FSambaTimer.Enabled) then + begin + FSambaTimer.WriteSambaTime(Now()); + end; + // ”E–@’ŸŠª•¨ƒGƒ‰[‚ÍCookie‚ðXV‚·‚é + if ResultType = grtNinpouErr then begin + GetCookie(Indy.CookieManager, Board); + end; + State := gdsError; + raise Exception.Create(''); + end; except + on E: EIdSocketError do begin + State := gdsError; + ResponseText := '' + + '
Ú‘±‚ªŽ¸”s‚µ‚Ü‚µ‚½
' + + '‰ñü‚̏ó‘Ԃ𒲂ׂĂ­‚¾‚³‚¢
' + + '

' + E.Message + '
' + + ''; + end; on E: EIdConnectException do begin State := gdsError; ResponseText := '' @@ -1068,12 +999,16 @@ begin FDebugStrReceive := AnsiReplaceText(FDebugStrReceive, '>', '>'); FDebugStrSend := AnsiReplaceText(FDebugStrSend, '<', '<'); FDebugStrSend := AnsiReplaceText(FDebugStrSend, '>', '>'); + ExpMsg := AnsiReplaceText(E.Message, '<', '<'); + ExpMsg := AnsiReplaceText(ExpMsg, '>', '>'); ResponseText := '' + TextStream.DataString; ResponseText := AnsiReplaceText(ResponseText, '', ''); ResponseText := AnsiReplaceText(ResponseText, '', ''); ResponseText := ResponseText + '
';
 				ResponseText := ResponseText + '‚±‚±‚©‚çƒMƒRƒiƒr‚̏î•ñ'#13#10;
+				ResponseText := ResponseText + #13#10'œ—áŠO'#13#10;
+				ResponseText := ResponseText + ExpMsg;
 				ResponseText := ResponseText + #13#10'œ‘—M'#13#10;
 				ResponseText := ResponseText + FDebugStrSend;
 				ResponseText := ResponseText + #13#10'œŽóM'#13#10;
@@ -1087,53 +1022,61 @@ begin
 	finally
 		Source.Free;
 		TextStream.Free;
+        if ( Indy.CookieManager <> nil ) then begin
+            Indy.CookieManager.CookieCollection.Clear;
+        end;
 		//sysMenu := GetSystemMenu( Handle, true );
 		EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
 		DrawMenuBar(Handle);
 	end;
 	FWork := false;
-    //”ñŒöŽ®ƒMƒRƒiƒr”‚Ȃǂ̃XƒNƒŠƒvƒg—p
-    //ResponceCode‚ª302Found‚ŏ‘‚«ž‚ÝŠ®—¹
+    //”ñŒöŽ®ƒMƒRƒiƒr”‚ȂǂÌ2chŒÝŠ·ƒXƒNƒŠƒvƒg—p
+    //2chˆÈŠO‚Å‚©‚ÂResponceCode‚ª302Found‚ŏ‘‚«ž‚ÝŠ®—¹
+    //if (not Board.Is2ch) and (FStatusCode = 302) then begin
     if FStatusCode = 302 then begin
         GikoForm.PlaySound('ResEnd');
         SaveSendFile;
-		if FThreadItem = nil then
-			GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, gmiOK)
-		else
-			GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, gmiOK);
-        Close;
-        Exit;
+        AddFormMessageNew( gmiOK );
+        if (not ContinueModeAction.Enabled) or (not ContinueModeAction.Checked) then begin
+            Close;
+            Exit;
+        end;
     end;
 	if State = gdsComplete then begin
 		GikoForm.PlaySound('ResEnd');
 		SaveSendFile;
-		if FThreadItem = nil then
-			GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, gmiOK)
-		else
-			GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, gmiOK);
-		Close;
+        AddFormMessageNew( gmiOK );
+        if (not ContinueModeAction.Enabled) or (not ContinueModeAction.Checked) then begin
+    		Close;
+        end;
 	end else if State = gdsError then begin
-		if FThreadItem = nil then
-			GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, gmiOK)
-		else
-			GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, gmiOK);
-
+        AddFormMessageNew( gmiOK );
 		EditorPage.ActivePage := PreviewTab;
 		SetContent(ResponseText, Browser);
 	end else if State = gdsAbort then begin
 		GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiSAD);
 	end;
 end;
-
 function TEditorForm.GetResultType(ResponseText: string): TGikoResultType;
 begin
 	if AnsiPos('‘‚«‚±‚Ý‚ªI‚í‚è‚Ü‚µ‚½', ResponseText) <> 0 then
 		Result := grtOK
-	else if (AnsiPos('ƒNƒbƒL[‚ª‚È‚¢‚©ŠúŒÀØ‚ê‚Å‚·', ResponseText) > 0) or
+    else if ( (AnsiPos('‚悤‚±‚»F‹M•û‚Ì”E–@’Ÿ‚ðì¬‚µ‚Ü‚·B‚Q•ªŒã‚ɍēx‘‚«ž‚Þ‚©A‚¨‹A‚è‚­‚¾‚³‚¢', ResponseText) > 0) or
+              (AnsiPos('‚d‚q‚q‚n‚qF‹M•û‚Ì–`Œ¯‚̏‘‚ðì¬’†‚Å‚·', ResponseText) > 0) )
+                and (AnsiPos(RES2CH_COOKIE, ResponseText) > 0) 	then
+        Result := grtNinpou
+    else if ( (AnsiPos('‚d‚q‚q‚n‚qFCs‚ª‘«‚è‚Ü‚¹‚ñ', ResponseText) > 0) or   // ƒGƒ‰[ˆµ‚¢
+              (AnsiPos('‚d‚q‚q‚n‚qFLv‚ª‘«‚è‚È‚­‚ăXƒŒƒbƒh—§‚Ä', ResponseText) > 0) ) // ƒGƒ‰[ˆµ‚¢
+              and (AnsiPos(RES2CH_COOKIE, ResponseText) > 0) 	then
+        Result := grtNinpouErr
+    else if( AnsiPos('‚â‚ç‚ꂽ‚Å‚²‚´‚éFLv=0 
‚³‚ÄŽ©—Í‚Å•œŠˆ‚Å‚«‚é‚©‚È?', ResponseText) > 0) + and (AnsiPos(RES2CH_COOKIE, ResponseText) > 0) then + Result := grtSuiton + else if ( AnsiPos('ƒNƒbƒL[‚ª‚È‚¢‚©ŠúŒÀØ‚ê‚Å‚·', ResponseText) > 0) or (AnsiPos('ƒNƒbƒL[Šm”FI', ResponseText) > 0) or - (AnsiPos('¡ƒNƒbƒL[Šm”FI¡', ResponseText) > 0) or - //(AnsiPos('ƒNƒbƒL[Šm”F', ResponseText) > 0) or - (AnsiPos(RES2CH_COOKIE, ResponseText) > 0) then + (AnsiPos('¡ƒNƒbƒL[Šm”FI¡', ResponseText) > 0) or + (AnsiPos('(cookie‚ðÝ’è‚·‚é‚Æ‚±‚̉æ–Ê‚Í‚Å‚È‚­‚È‚è‚Ü‚·B)', ResponseText) > 0) or + (AnsiPos(RES2CH_COOKIE, ResponseText) > 0) then Result := grtCookie else if (AnsiPos('‘‚«ž‚݃`ƒFƒbƒNI ', ResponseText) > 0) or (AnsiPos('¡ ‘‚«ž‚ÝŠm”F‚µ‚Ü‚· ¡', ResponseText) > 0) or @@ -1145,8 +1088,8 @@ begin else if (AnsiPos('E“ŠeŽÒ‚́AŒfŽ¦”‰^‰cŽÒ‚ɑ΂µ‚āA’˜ìŽÒlŠiŒ ‚ðˆêØsŽg‚µ‚È‚¢‚±‚Æ‚ð³‘ø‚µ‚Ü‚·B
', ResponseText) > 0) or (AnsiPos('i’˜ìŒ –@‘æ21ð‚È‚¢‚µ‘æ28ð‚É‹K’肳‚ê‚錠—˜‚àŠÜ‚ށj‚»‚Ì‘¼‚ÌŒ —˜‚ɂ‚«A', ResponseText) > 0) then Result := grtCookie - else - Result := grtError; + else + Result := grtError; end; @@ -1159,10 +1102,7 @@ var Board: TBoard; body : string; begin - if FThreadItem = nil then - Board := FBoard - else - Board := FThreadItem.ParentBoard; + Board := GetBoard; if GikoSys.Setting.UseMachineTime then begin if GikoSys.Setting.TimeAdjust then @@ -1184,12 +1124,13 @@ begin s := 'sid=' + HttpEncode(SessionID) + '&' else s := ''; - s := s + 'subject=&' - + 'FROM=' + HttpEncode(NameComboBox.Text) + '&' - + 'mail=' + HttpEncode(MailComboBox.Text) + '&' - + 'MESSAGE=' + HttpEncode(body) + '&' - + 'bbs=' + Board.BBSID + '&' - + 'time=' + IntToStr(SendTime) + '&'; + s := s + 'subject=&' + + 'FROM=' + HttpEncode(NameComboBox.Text) + '&' + + 'mail=' + HttpEncode(MailComboBox.Text) + '&' + + 'MESSAGE=' + HttpEncode(body) + '&' + + 'bbs=' + Board.BBSID + '&' + + 'time=' + IntToStr(SendTime) + '&'; + if FThreadItem = nil then begin s := s + 'subject=' + HttpEncode(TitleEdit.Text) + '&'; s := s + 'submit=' + HttpEncode('‘SÓ”C‚𕉂¤‚±‚Æ‚ð³‘ø‚µ‚ď‘‚«ž‚Þ') + #13#10; @@ -1204,33 +1145,69 @@ procedure TEditorForm.SaveSendFile; var sDate: string; ini: TMemIniFile; -begin - ini := TMemIniFile.Create(GikoSys.GetSentFileName); - try - sDate := IntToStr(GikoSys.DateTimeToInt(Now)); - - ini.WriteString(sDate, 'Name', NameComboBox.Text); - ini.WriteString(sDate, 'EMail', MailComboBox.Text); - ini.WriteString(sDate, 'Body', HttpEncode(BodyEdit.Text)); - ini.WriteInteger(sDate, 'Status', FStatusCode); - ini.WriteDateTime(sDate, 'Date', Now); - if FThreadItem = nil then begin - ini.WriteString(sDate, 'Title', TitleEdit.Text); - ini.WriteString(sDate, 'BBS', FBoard.BBSID); - ini.WriteInteger(sDate, 'NewThread', 1); - end else begin - ini.WriteString(sDate, 'Title', FThreadItem.Title); - ini.WriteString(sDate, 'BBS', FThreadItem.ParentBoard.BBSID); - ini.WriteString(sDate, 'Key', ChangeFileExt(FThreadItem.FileName, '')); - end; - - ini.UpdateFile; - finally - ini.Free; - end; + Body: String; +begin + ini := CreateSentIniFile; + if (ini <> nil) then begin + try + sDate := IntToStr(GikoSys.DateTimeToInt(Now)); + if (FUseUC = True) then + Body := BodyEditUC.EncodeText + else + Body := BodyEdit.Text; + + ini.WriteString(sDate, 'Name', NameComboBox.Text); + ini.WriteString(sDate, 'EMail', MailComboBox.Text); + ini.WriteString(sDate, 'Body', HttpEncode(Body)); + ini.WriteInteger(sDate, 'Status', FStatusCode); + ini.WriteDateTime(sDate, 'Date', Now); + if FThreadItem = nil then begin + ini.WriteString(sDate, 'Title', MojuUtils.Sanitize(TitleEdit.Text)); + //ini.WriteString(sDate, 'BBS', FBoard.BBSID); + ini.WriteString(sDate, 'URL', FBoard.URL); + ini.WriteInteger(sDate, 'NewThread', 1); + end else begin + ini.WriteString(sDate, 'Title', FThreadItem.Title); + //ini.WriteString(sDate, 'BBS', FThreadItem.ParentBoard.BBSID); + ini.WriteString(sDate, 'URL', FThreadItem.URL); + ini.WriteString(sDate, 'Key', ChangeFileExt(FThreadItem.FileName, '')); + end; + + ini.UpdateFile; + finally + ini.Free; + end; + end; +end; +function TEditorForm.CreateSentIniFile: TMemIniFile; +var + maxSize, fileSize, i: Integer; + newName: String; +begin + Result := nil; + // MB -> bytes + maxSize := GikoSys.Setting.SentIniFileSize * 1024 * 1024; + // ƒtƒ@ƒCƒ‹ƒTƒCƒY‚ª0‚̏ꍇ‚́Asent.ini‚ɏ‘‚«ž‚Ü‚È‚¢‚Ì‚Ånil‚ð•Ô‚· + if (maxSize > 0) then begin + fileSize := GikoSys.GetFileSize(GikoSys.Setting.GetSentFileName); + // Å‘åƒTƒCƒY‚ð’´‚¦‚Ä‚¢‚½ê‡‚̓Šƒl[ƒ€‚·‚é + if (fileSize >= maxSize) then begin + i := 0; + // ¡‚ÌŽž‚ðƒtƒ@ƒCƒ‹–¼‚ÌŒã‚ë‚ɂ‚¯‚é + repeat + // 10‰ñˆÈãŽ¸”s‚µ‚½‚ç‚ ‚«‚ç‚ß‚é + if (i > 10) then break; + DateTimeToString(newName, 'yyhhnnsszzz', Now()); + Inc(i); + until RenameFile(GikoSys.Setting.GetSentFileName, + GikoSys.Setting.GetSentFileName + '.' + newName); + end; + Result := TMemIniFile.Create(GikoSys.Setting.GetSentFileName); + end; end; - procedure TEditorForm.SendActionExecute(Sender: TObject); +const + TITLE_SAMBA : string = 'Samba24Œx'; var Board: TBoard; rc: Integer; @@ -1246,10 +1223,7 @@ begin Application.ProcessMessages; if not Check then Exit; - if FThreadItem = nil then - Board := FBoard - else - Board := FThreadItem.ParentBoard; + Board := GetBoard; if FThreadItem = nil then begin rc := GikoUtil.MsgBox(Handle, @@ -1282,7 +1256,8 @@ begin SaveSendFile; GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, gmiOK); FWork := False; - Close; + if (not ContinueModeAction.Enabled) or (not ContinueModeAction.Checked) then + Close; end else if State = gdsError then begin GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmSureError), nil, gmiNG); end else if State = gdsAbort then begin @@ -1298,7 +1273,8 @@ begin SaveSendFile; GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, gmiOK); FWork := False; - Close; + if (not ContinueModeAction.Enabled) or (not ContinueModeAction.Checked) then + Close; end else if State = gdsError then begin GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmResError), nil, gmiOK); end else if State = gdsAbort then begin @@ -1306,19 +1282,23 @@ begin end; end; end else begin - if not Timer1.Enabled then begin + if not FSambaTimer.Enabled then begin if CompareDateTime(Board.Expires ,Now) <= 0 then begin Board.Cookie := ''; Board.SPID := ''; Board.PON := ''; end; + // –`Œ¯‚̏‘ƒŒƒxƒ‹–ß‚é–â‘è‘Ήž + if (Board.Is2ch) and (AnsiPos('HAP=', Board.Cookie)>0) then begin + Board.Cookie := ''; + end; Send(Board.Cookie, Board.SPID, Board.PON, True); end else begin - if not CheckSambaTime(FHost, Now()) then begin + if not FSambaTimer.CheckSambaTime(Now()) then begin rc := GikoUtil.MsgBox(Handle, 'Samba24‚Ì‹K’è’l–¢–ž‚Ì•b”‚µ‚©Œo‰ß‚µ‚Ä‚¢‚Ü‚¹‚ñB'#13#10 + '‘—M‚𒆎~‚µ‚Ü‚·‚©H' + #13#10 - + '(u‚¢‚¢‚¦v‚¾‚Æ‘—M‚µ‚Ü‚·)', 'Samba24Œx', + + '(u‚¢‚¢‚¦v‚¾‚Æ‘—M‚µ‚Ü‚·)', TITLE_SAMBA, MB_YESNO or MB_ICONQUESTION); if rc = IDYES then begin FWork := false; @@ -1327,7 +1307,7 @@ begin if rc = IDNO then begin rc2 := GikoUtil.MsgBox(Handle, '–{“–‚É‘—M‚µ‚Ü‚·‚©H', - 'Sumba24Œx', + TITLE_SAMBA, MB_YESNO or MB_ICONQUESTION); if rc2 = IDNO then begin FWork := False; @@ -1340,13 +1320,18 @@ begin Board.SPID := ''; Board.PON := ''; end; + // –`Œ¯‚̏‘ƒŒƒxƒ‹–ß‚é–â‘è‘Ήž + if (Board.Is2ch) and (AnsiPos('HAP=', Board.Cookie)>0) then begin + Board.Cookie := ''; + end; Send(Board.Cookie, Board.SPID, Board.PON, True); end; end; finally FWork := False; - if Timer1.Enabled then - ReadSambaTime(FHost); + if FSambaTimer.Enabled then begin + FNow := FSambaTimer.Update; + end; end; end; @@ -1529,83 +1514,13 @@ begin end; -procedure TEditorForm.Timer1Timer(Sender: TObject); -begin - if FSambaTime = ZERO_DATE then - StatusBar.Panels[1].Text := '‰‘' - else begin - FNow := IncMilliSecond(FNow, 500); - StatusBar.Panels[1].Text := Format('%8.0f•bŒo‰ß', [SecondSpan(FNow, FSambaTime)]); - end; - -end; -//Samba.ini‚̏‘‚«ž‚ÝŽžŠÔ‚ð“ǂݍž‚Þ -procedure TEditorForm.ReadSambaTime(const AHost: string); -var - ini :TMemIniFile; - tmp: string; -begin - Timer1.Enabled := false; //Œo‰ß•b”•\Ž¦Timer‚ðOff‚É‚·‚éi‚±‚ꂪON‚Ì‚Æ‚«Samba24‘΍ôOnj - ini := TMemIniFile.Create(GikoSys.GetSambaFileName); - try - //•¶Žš—ñ‚Å“Ç‚ÝŽæ‚Á‚āA•ÏŠ·ŠÖ”‚ÅTDateTime‚Ö - tmp := ini.ReadString('Send', AHost, DateTimeToStr(ZERO_DATE)); - FSambaTime := ConvertDateTimeString(tmp); - finally - ini.Free; - end; - FNow := Now(); //Œ»ÝŽžŠÔ‚ðŽæ“¾iTimer•\Ž¦—p‚ŁACheck‚·‚é‚Æ‚«‚͍ĂÑNow()‚ðŒÄ‚ԁj - Timer1.Enabled := true; //Œo‰ß•b”•\Ž¦Timer‚ðOn‚É‚·‚éi‚±‚ꂪON‚Ì‚Æ‚«Samba24‘΍ôOnj -end; -//Samba.ini‚ɍŏI‘‚«ž‚ÝŽžŠÔ‚ð‘‚«ž‚Þ -procedure TEditorForm.WriteSambaTime(const AHost: string; ATime: TDateTime); -var - ini :TMemIniFile; -begin - ini := TMemIniFile.Create(GikoSys.GetSambaFileName); - try - ini.WriteDateTime('Send', AHost, ATime); - ini.UpdateFile; - finally - ini.Free; - end; -end; -//ÅI‘‚«ž‚ÝŽžŠÔ‚ÆŒ»ÝŽž‚ð”äŠr‚·‚éi^F‹K’è’lˆÈã@‹UF‹K’è’l–¢–žj -function TEditorForm.CheckSambaTime(const AHost: string; ATime: TDateTime): Boolean; -var - pastsec: double; - SettingTime: Integer; -begin - SettingTime := ReadSettingTime(AHost); - ReadSambaTime(AHost); - pastsec := SecondSpan(ATime, FSambaTime); - if pastsec > SettingTime then - Result := true - else - Result := false; -end; -//AHostiŽI–¼j‚ÌSamba‚Ì‹K’è’l‚ð“ǂݍž‚Þ -function TEditorForm.ReadSettingTime(const AHost: string): Integer; -var - ini :TMemIniFile; -begin - ini := TMemIniFile.Create(GikoSys.GetSambaFileName); - try - Result := ini.ReadInteger('Setting', AHost, 0); - //‹K’è’l‚ª‚O‚Ì‚Æ‚«A‚à‚µ‚­‚͐ݒ肳‚ê‚Ä‚¢‚È‚¢‚Æ‚«‚́Aƒtƒ@ƒCƒ‹‚ɏ‘‚«‚½‚·B - if Result = 0 then begin - ini.WriteInteger('Setting', AHost, 0); - ini.UpdateFile; - end; - finally - ini.Free; - end; -end; //Form‚ªActive‚É‚È‚Á‚½‚çÅI‘‚«ž‚ÝŽžŠÔ‚ð“ǂݍž‚Þ procedure TEditorForm.FormActivate(Sender: TObject); begin - if ( Timer1.Enabled ) and ( FThreadItem <> nil )then - ReadSambaTime(FHost); + if ( FSambaTimer.Enabled ) and ( FThreadItem <> nil ) then + begin + FNow := FSambaTimer.Update; + end; if GikoSys.Setting.GestureEnabled then begin GikoSys.Setting.Gestures.ClearGesture; GikoSys.Setting.Gestures.LoadGesture( @@ -1617,64 +1532,12 @@ begin MouseGesture.SetHook( Handle ); end; end; -//Samba24‘΍ô‚ðŽg‚¤‚©‚Ç‚¤‚©Œˆ‚ß‚éŠÖ” -//ReadSambaTime ‚ðŒÄ‚яo‚·‚ÆTimer‚ªOn‚É‚È‚é -procedure TEditorForm.SetSamba24(AURL: string); -var - Protocol, Host, Path, Document, Port, Bookmark : string; -begin - //Samba24‘΍ô‚ð‚µ‚È‚¢‚È‚çI—¹ - if not GikoSys.Setting.UseSamba then - Exit; - //Host‚ÌURL‚É'.2ch.'‚©'.bbspink.'‚ªŠÜ‚Ü‚ê‚Ä‚¢‚½‚çSamba24‘΍ô‚ð‚·‚é - GikoSys.ParseURI( AURL, Protocol,Host, Path, Document, Port, Bookmark ); - if GikoSys.Is2chHost(Host) then begin - Host := Copy(Host, 1, AnsiPos('.', Host) - 1); - FHost := Host; //FHost=ŽI–¼ - ReadSambaTime(FHost); //ˆÈ‘O‚̏‘‚«ž‚ÝŽžŠÔ‚ð“ǂݍž‚Þ - //StatusBar‚É‚±‚ÌŽI‚Ì‹K’è’l‚ð•\Ž¦‚·‚é - StatusBar.Panels[2].Text := 'Samba24‹K’è’l' + IntToStr(ReadSettingTime(FHost)); - end; -end; procedure TEditorForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose := not FWork; end; -function TEditorForm.GetOEIndentChar : string; -var - regKey : TRegistry; - Identities : string; - IndentChar : DWORD; -const - DEFAULT_CHAR = '> '; - OE_MAIL_PATH = '\Software\Microsoft\Outlook Express\5.0\Mail'; - INDENT_CHAR = 'Indent Char'; -begin - - Result := DEFAULT_CHAR; - regKey := TRegistry.Create; - try - try - regKey.RootKey := HKEY_CURRENT_USER; - if not regKey.OpenKey( 'Identities', False ) then - Exit; - Identities := regKey.ReadString( 'Default User ID' ); - if Identities = '' then - Exit; - if not regKey.OpenKey( Identities + OE_MAIL_PATH, False ) then - Exit; - IndentChar := regKey.ReadInteger( INDENT_CHAR ); - Result := Char( IndentChar ) + ' '; - except - end; - finally - regKey.Free; - end; - -end; - procedure TEditorForm.QuotePasteActionExecute(Sender: TObject); var s : TStringList; @@ -1682,19 +1545,23 @@ var quote : string; begin - quote := GetOEIndentChar; - s := TStringList.Create; - try - s.Text := Clipboard.AsText; + quote := GikoSys.GetOEIndentChar; - for i := s.Count - 1 downto 0 do - s[ i ] := quote + s[ i ]; + if (FUseUC = True) then begin + BodyEditUC.QuotePaste(quote); + end else begin + s := TStringList.Create; + try + s.Text := Clipboard.AsText; - BodyEdit.SelText := s.Text; - finally - s.Free; - end; + for i := s.Count - 1 downto 0 do + s[ i ] := quote + s[ i ]; + BodyEdit.SelText := s.Text; + finally + s.Free; + end; + end; end; procedure TEditorForm.SpaceToNBSPActionExecute(Sender: TObject); @@ -1713,12 +1580,13 @@ end; procedure TEditorForm.BoardTopClick(Sender: TObject); var - ini: TIniFile; + ini: TMemIniFile; begin - ini := TIniFile.Create(GikoSys.Setting.GetFileName); + ini := TMemIniFile.Create(GikoSys.Setting.GetFileName); try BoardtopTab.TabVisible := BoardTop.Checked; ini.WriteBool('EditorForm', 'BoardTopTab', BoardtopTab.TabVisible); + ini.UpdateFile; finally ini.Free; end; @@ -1727,70 +1595,67 @@ end; procedure TEditorForm.GetSETTINGTXTActionExecute(Sender: TObject); var + memStream: TMemoryStream; URL, RefURL: string; settingBody: TStringList; tmpBoard: TBoard; begin - if FWork then - Exit; - FWork := True; - - 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ƒ_ƒEƒ“ƒ[ƒh’†'; - try - IdAntiFreeze.Active := True; - try - settingBody.Text := Indy.Get(URL); - finally - IdAntiFreeze.Active := False; - end; - 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Žæ“¾Š®—¹(' + IntToStr(Indy.ResponseCode) + ')'; - end; - except - on E: EIdException do begin - if( AnsiPos('304', E.Message) > 0 ) then - StatusBar.Panels[0].Text := 'SETTING.TXTXV–³‚µ(' + IntToStr(Indy.ResponseCode) + ')' - else - StatusBar.Panels[0].Text := 'SETTING.TXTŽæ“¾ƒGƒ‰[(' + IntToStr(Indy.ResponseCode) + ')'; - end; - end; - finally - settingBody.Free; - Screen.Cursor := crDefault; - end; - ShowBoardInformation(tmpBoard, BoardInformationMemo); - + if not FWork then begin + FWork := True; + + tmpBoard := GetBoard; + if tmpBoard <> nil then begin + + RefURL := tmpBoard.URL; + if RefURL[Length(RefURL)] <> '/' then + URL := RefURL + '/' + 'SETTING.TXT' + else + URL := RefURL + 'SETTING.TXT'; + Screen.Cursor := crHourGlass; + memStream := TMemoryStream.Create; + try + try + StatusBar.Panels[0].Text := 'SETTING.TXTƒ_ƒEƒ“ƒ[ƒh’†'; + GetWebData(URL, RefURL, tmpBoard.SETTINGTXTTime, memStream); + if( Indy.ResponseCode = 200 ) then begin + settingBody := TStringList.Create; + try + memStream.Seek(0, soFromBeginning); + settingBody.LoadFromStream(memStream); + settingBody.SaveToFile(tmpBoard.GetSETTINGTXTFileName); + tmpBoard.SETTINGTXTTime := Indy.Response.LastModified; + tmpBoard.IsSETTINGTXT := true; + tmpBoard.TitlePictureURL := GetTitlePictureURL(settingBody, tmpBoard); + tmpBoard.Modified := true; + finally + settingBody.Free; + end; + StatusBar.Panels[0].Text := 'SETTING.TXTŽæ“¾Š®—¹(' + IntToStr(Indy.ResponseCode) + ')'; + end; + except + on E: EIdException do begin + if( AnsiPos('304', E.Message) > 0 ) then + StatusBar.Panels[0].Text := 'SETTING.TXTXV–³‚µ(' + IntToStr(Indy.ResponseCode) + ')' + else + StatusBar.Panels[0].Text := 'SETTING.TXTŽæ“¾ƒGƒ‰[(' + IntToStr(Indy.ResponseCode) + ')'; + end; + end; + finally + memStream.Free; + Screen.Cursor := crDefault; + end; + ShowBoardInformation(tmpBoard, BoardInformationMemo); + end; FWork := False; + end; end; procedure TEditorForm.ShowBoardInformation(ABoard: TBoard; AMemo: TMemo); var body: TStringList; + UCType: Integer; // 0:•s–¾A1:‘ΉžA-1:”ñ‘Ήž begin + UCType := 0; AMemo.Clear; AMemo.Lines.Add('[SETTING.TXT]'); if ABoard.IsSETTINGTXT then begin @@ -1803,6 +1668,10 @@ begin finally body.Free; end; + if (Pos('BBS_UNICODE=pass', AMemo.Text) > 0) then + UCType := 1 + else if (Pos('BBS_UNICODE=', AMemo.Text) > 0) then + UCType := -1; end else begin ABoard.IsSETTINGTXT := false; ABoard.SETTINGTXTTime := ZERO_DATE; @@ -1813,6 +1682,24 @@ begin AMemo.Lines.Add('SETTING.TXT‚ðŽæ“¾‚µ‚Ä‚¢‚Ü‚¹‚ñB'); AMemo.Lines.Add('ƒƒjƒ…[‚æ‚èŽæ“¾‚µ‚Ä‚­‚¾‚³‚¢B'); end; + + case UCType of + -1: begin + UCInfoPanel.Caption := 'Unicode”ñ‘Ήž”Â'; + UCInfoPanel.Color := clRed; + UCInfoPanel.Hint := '‚±‚̔‚ÍUnicode‚ł̃ŒƒX‚ɑΉž‚µ‚Ä‚¢‚Ü‚¹‚ñB'; + end; + 0: begin + UCInfoPanel.Caption := 'Unicode‘Ήž•s–¾'; + UCInfoPanel.Color := clBtnFace; + UCInfoPanel.Hint := '”î•ñ‚ðŽæ“¾‚µ‚Ä‚­‚¾‚³‚¢B'; + end; + 1: begin + UCInfoPanel.Caption := 'Unicode‘Ήž”Â'; + UCInfoPanel.Color := clLime; + UCInfoPanel.Hint := '‚±‚̔‚ÍUnicode‚ł̃ŒƒX‚ɑΉž‚µ‚Ä‚¢‚Ü‚·B'; + end; + end; end; function TEditorForm.GetTitlePictureURL(body: TStringList; ABoard: TBoard): string; //BBS_TITLE_PICTURE= @@ -1843,6 +1730,10 @@ begin else GetTitlePictureAction.Enabled := FThreadItem.ParentBoard.IsSETTINGTXT; + if GetTitlePictureAction.Enabled Then begin + // ŽÀs’†‚ÍŽÀs•s‰Â + GetTitlePictureAction.Enabled := not FWork; + end; end; procedure TEditorForm.GetTitlePictureActionExecute(Sender: TObject); @@ -1850,54 +1741,64 @@ var memStream: TMemoryStream; tmpBoard: TBoard; begin - if FWork then + if FWork then Exit; - FWork := True; - InitIdHTTP(Indy); + FWork := True; memStream := TMemoryStream.Create; try - if FThreadItem = nil then - tmpBoard := FBoard - else - tmpBoard := FThreadItem.ParentBoard; + tmpBoard := GetBoard; - Indy.Request.Referer := tmpBoard.URL; - if tmpBoard.TitlePictureURL <> '' then begin + if (tmpBoard <> nil) and (tmpBoard.TitlePictureURL <> '') then begin StatusBar.Panels[0].Text := '”ƒgƒbƒv‰æ‘œƒ_ƒEƒ“ƒ[ƒh’†'; Screen.Cursor := crHourGlass; try - IdAntiFreeze.Active := True; - try - Indy.Get(tmpBoard.TitlePictureURL, memStream); - finally - IdAntiFreeze.Active := False; - end; + // URL‚ðŽw’肵‚ăƒ‚ƒŠ‚ɓǂݍž‚Þ + GetWebData(tmpBoard.TitlePictureURL, tmpBoard.URL, + ZERO_DATE, memStream); if Indy.ResponseCode = 200 then begin memStream.SaveToFile(tmpBoard.GetTitlePictureFileName); ShowTitlePicture(); tmpBoard.Modified := true; end; + StatusBar.Panels[0].Text := '”ƒgƒbƒv‰æ‘œ (' + IntToStr(Indy.ResponseCode) + ')'; except end; end; finally - Screen.Cursor := crDefault; - StatusBar.Panels[0].Text := '”ƒgƒbƒv‰æ‘œ (' + IntToStr(Indy.ResponseCode) + ')'; memStream.Free; + FWork := False; + Screen.Cursor := crDefault; end; +end; +{ +\brief URL‚̃f[ƒ^‚ðstream‚ɓǂݍž‚Þ +\param URL “ǂݍž‚ސæ +\param RefURL referer‚ɐݒ肷‚é +\param Modified Modified‚ɐݒ肷‚é +\param stream “ǂݍž‚ñ‚¾ƒf[ƒ^‚Ì•Û‘¶æ +} +procedure TEditorForm.GetWebData(const URL: string; const RefURL: string; + Modified: TDateTime; stream: TStream); +begin + InitIdHTTP(Indy); + Indy.Request.Referer := RefURL; + Indy.Request.LastModified := Modified; + + IdAntiFreeze.Active := True; + try + Indy.Get(URL, stream); + finally + IdAntiFreeze.Active := False; + end; - FWork := False; end; procedure TEditorForm.ShowTitlePicture(); var tmpBoard: TBoard; s: String; begin - if FThreadItem = nil then - tmpBoard := FBoard - else - tmpBoard := FThreadItem.ParentBoard; + tmpBoard := GetBoard; if FileExists(tmpBoard.GetTitlePictureFileName) then begin TitlePictureBrowser.Navigate(tmpBoard.GetTitlePictureFileName); @@ -1927,71 +1828,64 @@ var URL, RefURL: string; settingBody: TStringList; tmpBoard: TBoard; + memStream: TMemoryStream; begin - if FWork then - Exit; + if not FWork then begin FWork := True; - 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 := 'ƒ[ƒJƒ‹ƒ‹[ƒ‹(head.txt)ƒ_ƒEƒ“ƒ[ƒh’†'; - try - IdAntiFreeze.Active := True; - try - settingBody.Text := Indy.Get(URL); - finally - IdAntiFreeze.Active := False; - end; - if( Indy.ResponseCode = 200 ) then begin - settingBody.Insert(0, ''); - settingBody.Insert(1, ''); - settingBody.Insert(2, '' + tmpBoard.Title + ''); - settingBody.Insert(3, ''); - settingBody.Add(''); - settingBody.SaveToFile(tmpBoard.GETHEADTXTFileName); - tmpBoard.HEADTXTTime := Indy.Response.LastModified; - tmpBoard.IsHEADTXT := true; - tmpBoard.Modified := true; - StatusBar.Panels[0].Text := 'ƒ[ƒJƒ‹ƒ‹[ƒ‹Žæ“¾Š®—¹(' + IntToStr(Indy.ResponseCode) + ')'; - end; - except - on E: EIdException do begin - if( AnsiPos('304', E.Message) > 0 ) then - StatusBar.Panels[0].Text := 'ƒ[ƒJƒ‹ƒ‹[ƒ‹XV–³‚µ(' + IntToStr(Indy.ResponseCode) + ')' - else - StatusBar.Panels[0].Text := 'ƒ[ƒJƒ‹ƒ‹[ƒ‹Žæ“¾ƒGƒ‰[(' + IntToStr(Indy.ResponseCode) + ')'; - end; - end; - finally - settingBody.Free; - Screen.Cursor := crDefault; - end; - if tmpBoard.IsHEADTXT then begin + tmpBoard := GetBoard; + if (tmpBoard <> nil) then begin + + RefURL := tmpBoard.URL; + if RefURL[Length(RefURL)] <> '/' then + URL := RefURL + '/' + 'head.txt' + else + URL := RefURL + 'head.txt'; + + Screen.Cursor := crHourGlass; + memStream := TMemoryStream.Create; + try + StatusBar.Panels[0].Text := 'ƒ[ƒJƒ‹ƒ‹[ƒ‹(head.txt)ƒ_ƒEƒ“ƒ[ƒh’†'; + try + GetWebData(URL, RefURL, tmpBoard.HEADTXTTime, memStream); + if( Indy.ResponseCode = 200 ) then begin + settingBody := TStringList.Create; + try + memStream.Seek(0, soFromBeginning); + settingBody.LoadFromStream(memStream); + settingBody.Insert(0, ''); + settingBody.Insert(1, ''); + settingBody.Insert(2, '' + tmpBoard.Title + ''); + settingBody.Insert(3, ''); + settingBody.Add(''); + settingBody.SaveToFile(tmpBoard.GETHEADTXTFileName); + tmpBoard.HEADTXTTime := Indy.Response.LastModified; + tmpBoard.IsHEADTXT := true; + tmpBoard.Modified := true; + finally + settingBody.Free; + end; + StatusBar.Panels[0].Text := 'ƒ[ƒJƒ‹ƒ‹[ƒ‹Žæ“¾Š®—¹(' + IntToStr(Indy.ResponseCode) + ')'; + end; + except + on E: EIdException do begin + if( AnsiPos('304', E.Message) > 0 ) then + StatusBar.Panels[0].Text := 'ƒ[ƒJƒ‹ƒ‹[ƒ‹XV–³‚µ(' + IntToStr(Indy.ResponseCode) + ')' + else + StatusBar.Panels[0].Text := 'ƒ[ƒJƒ‹ƒ‹[ƒ‹Žæ“¾ƒGƒ‰[(' + IntToStr(Indy.ResponseCode) + ')'; + end; + end; + finally + memStream.Free; + Screen.Cursor := crDefault; + end; + if tmpBoard.IsHEADTXT then begin ShowBoardHead(tmpboard, LocalEdit); - end; - + end; + end; FWork := False; + end; + end; procedure TEditorForm.CalcCapacityActionExecute(Sender: TObject); @@ -2001,10 +1895,7 @@ var begin body := GetBody; //‚Ç‚¤‚àA‰üs•ª‚¸‚ê‚Ä‚½‚Á‚Û‚¢‚¯‚ǁA–{“–‚©‚æ‚­•ª‚©‚ç‚È‚¢B - if FThreadItem = nil then - Board := FBoard - else - Board := FThreadItem.ParentBoard; + Board := GetBoard; if Board.BoardPlugIn <> nil then body := CustomStringReplace(body, #13#10, '
') @@ -2015,12 +1906,13 @@ end; procedure TEditorForm.LocalRuleClick(Sender: TObject); var - ini: TIniFile; + ini: TMemIniFile; begin - ini := TIniFile.Create(GikoSys.Setting.GetFileName); + ini := TMemIniFile.Create(GikoSys.Setting.GetFileName); try RocalRuleTab.TabVisible := LocalRule.Checked; ini.WriteBool('EditorForm', 'LocalRuleTab', RocalRuleTab.TabVisible); + ini.UpdateFile; finally ini.Free; end; @@ -2028,11 +1920,13 @@ end; procedure TEditorForm.FormDeactivate(Sender: TObject); begin - if GikoSys.Setting.GestureEnabled then begin - MouseGesture.UnHook; - //MouseGesture.SetHook( GikoForm.Handle ); - end; - + if GikoSys.Setting.GestureEnabled then begin + GikoSys.Setting.Gestures.ClearGesture; + MouseGesture.UnHook; + MouseGesture.OnGestureStart := nil; + MouseGesture.OnGestureMove := nil; + MouseGesture.OnGestureEnd := nil; + end; end; procedure TEditorForm.OnGestureStart(Sender: TObject); @@ -2061,6 +1955,7 @@ var Action: TAction; begin s := MouseGesture.GetGestureStr; + MouseGesture.Clear; Action := GikoSys.Setting.Gestures.GetGestureAction(s); if Action <> nil then Action.Execute; @@ -2069,37 +1964,39 @@ end; procedure TEditorForm.ShowBoardHead(ABoard: TBoard; AMemo: TMemo); var - wDoc, WTex, le: OLEVariant; -begin - //ŽQlŒ³ - //http://www.campus.ne.jp/~ishigami/CREATION/TECHNIC/WEBAP-2.htm - WebBrowser1.Navigate(ABoard.GETHEADTXTFileName,le,le,le,le); - //ƒŒƒ^ƒŠƒ“ƒO‚ª’x‚·‚¬‚ÄTXT‚Ɉڂ¹‚È‚¢B‚Ê‚é‚Ûorz - //‰º‚̂悤‚É‚¿‚á‚ñ‚Ɠǂݍž‚Ý‚ªI‚í‚Á‚Ä‚¢‚é‚©Aƒ`ƒFƒbƒN‚·‚ê‚΂¢‚¢‚ñ‚¾‚æB - //‚±‚ê‚Å‚¢‚¯‚Ü‚µ‚½B‚ ‚肪‚Æ‚¤‚²‚´‚¢‚Ü‚µ‚½B - while (WebBrowser1.ReadyState <> READYSTATE_COMPLETE) and - (WebBrowser1.ReadyState <> READYSTATE_INTERACTIVE) do begin - Application.ProcessMessages; - end; - wDoc := WebBrowser1.Document; - wTex := wDoc.body.createTextRange; - LocalEdit.Text := wTex.text; + range: OleVariant; +begin + //ŽQlŒ³ + //http://www.campus.ne.jp/~ishigami/CREATION/TECHNIC/WEBAP-2.htm + WebBrowser1.Navigate(ABoard.GETHEADTXTFileName); + //ƒŒƒ^ƒŠƒ“ƒO‚ª’x‚·‚¬‚ÄTXT‚Ɉڂ¹‚È‚¢B‚Ê‚é‚Ûorz + //‰º‚̂悤‚É‚¿‚á‚ñ‚Ɠǂݍž‚Ý‚ªI‚í‚Á‚Ä‚¢‚é‚©Aƒ`ƒFƒbƒN‚·‚ê‚΂¢‚¢‚ñ‚¾‚æB + //‚±‚ê‚Å‚¢‚¯‚Ü‚µ‚½B‚ ‚肪‚Æ‚¤‚²‚´‚¢‚Ü‚µ‚½B + while (WebBrowser1.ReadyState <> READYSTATE_COMPLETE) and + (WebBrowser1.ReadyState <> READYSTATE_INTERACTIVE) do begin + Application.ProcessMessages; + end; + + try + ; + range := OleVariant(WebBrowser1.Document).body.createTextRange; + LocalEdit.Text := range.text; + except + end; end; procedure TEditorForm.LocalRuleBrowseClick(Sender: TObject); var - URL: String; - ABoard: TBoard; + URL: String; + ABoard: TBoard; begin - if FThreadItem = nil then - ABoard := FBoard - else - ABoard := FThreadItem.ParentBoard; + ABoard := GetBoard; - if ABoard = nil then Exit; + if ABoard = nil + then Exit; - URL := ABoard.GETHEADTXTFileName; - GikoSys.OpenBrowser(URL, gbtAuto); + URL := ABoard.GETHEADTXTFileName; + GikoSys.OpenBrowser(URL, gbtAuto); end; procedure TEditorForm.SaveNameMailActionExecute(Sender: TObject); @@ -2108,159 +2005,815 @@ begin KotehanCheckBox.Enabled := SaveNameMailAction.Checked; end; -function TEditorForm.LFusianaGet(s: String): Boolean; +function TEditorForm.LFusianaGet(const s: String): Boolean; +const + FUSIANA = 'fusianasan'; var i: Integer; begin - i := AnsiPos('fusianasan', s); - if (i > 0) then Result := True else Result := False; + i := AnsiPos(FUSIANA, s); + Result := (i > 0); end; procedure TEditorForm.BeLogInOutEActionExecute(Sender: TObject); begin - GikoSys.Setting.BeLogin := not GikoSys.Setting.BeLogin; + GikoDM.BeLogInOutAction.Execute; end; procedure TEditorForm.BeLogInOutEActionUpdate(Sender: TObject); begin - if (GikoSys.Setting.BeUserID <> '') and (GikoSys.Setting.BeCode <> '') then begin - if (GikoSys.Setting.BeLogin) then BeLogInOutEAction.Checked := true - else BeLogInOutEAction.Checked := false; - BeLogInOutEAction.Enabled := true - end else - BeLogInOutEAction.Enabled := false; - + BeLogInOutEAction.Checked := GikoDM.BeLogInOutAction.Checked; + BeLogInOutEAction.Enabled := GikoDM.BeLogInOutAction.Enabled; end; // Cookie‚̎擾 -procedure TEditorForm.GetCookie(Rawtext: String; ABoard: TBoard); +procedure TEditorForm.GetCookie(CookieMng: TIdCookieManager; ABoard: TBoard); const - COOKIE_MARK = 'Set-Cookie:'; - VAL_SPID = 'SPID='; - VAL_PON = 'PON='; - EXPIRES_MARK = 'expires='; + VAL_SPID = 'SPID'; + VAL_PON = 'PON'; + VAL_HAP = 'HAP'; var -// i: Integer; - tmp : string; - val : string; -begin + i : Integer; + Cookie : TIdCookieRFC2109; + curCookies : TStringList; +begin + // 2008.12.14 –³ðŒƒNƒŠƒA‚µ‚Ä‚Í‚¢‚¯‚È‚¢ by ‚à‚¶‚ã + curCookies := TStringList.Create; + curCookies.Delimiter := ';'; + curCookies.DelimitedText := ABoard.Cookie; + curCookies.Sort; + curCookies.Duplicates := dupIgnore; ABoard.Cookie := ''; - while (AnsiPos(COOKIE_MARK, Rawtext) > 0 ) do begin - //i := 0; - tmp := Copy(Rawtext, AnsiPos(COOKIE_MARK, Rawtext) + Length(COOKIE_MARK), Length(Rawtext)); - Delete(Rawtext, 1, AnsiPos('Set-Cookie', Rawtext)+ Length(COOKIE_MARK)); - //Cookie‚ðØ‚èo‚· - val := Trim(GikoSys.GetTokenIndex(tmp, ';', 0)); - if( AnsiPos(VAL_SPID, val) > 0 ) then begin - ABoard.SPID := Copy(val, AnsiPos(VAL_SPID, val) + Length(VAL_SPID), Length(val)); - end else if( AnsiPos(VAL_PON, val) > 0 ) then begin - ABoard.PON := Copy(val, AnsiPos(VAL_PON, val) + Length(VAL_PON), Length(val)); + try + for i := 0 to CookieMng.CookieCollection.Count - 1 do begin + Cookie := CookieMng.CookieCollection.Items[i]; + if ( Cookie.CookieName = VAL_PON ) then begin + ABoard.PON := Cookie.Value; + ABoard.Expires := GMTToLocalDateTime(Cookie.Expires); + end else if ( Cookie.CookieName = VAL_SPID ) then begin + ABoard.SPID := Cookie.Value; + ABoard.Expires := GMTToLocalDateTime(Cookie.Expires); + end else if ( Cookie.CookieName = VAL_HAP ) then begin + // HAPíœ—p‚ÌCookie‚ª”z•z‚³‚ê‚é‚̂ŁA—LŒøŠúŒÀ‚ðƒ`ƒFƒbƒN‚·‚é + if CompareDateTime(GMTToLocalDateTime(Cookie.Expires) ,Now) > 0 then begin + GikoSys.SetBoukenCookie(Cookie.Value, Cookie.Domain); + // –`Œ¯‚̏‘‚Ì•Û‘¶ + GikoSys.Setting.WriteBoukenSettingFile; + end; + end else begin + if Length( curCookies.Values[ Cookie.CookieName ] ) > 0 then begin + // Šù‘¶’l‚Ì•t‚¯‘Ö‚¦ + curCookies[curCookies.IndexOfName(Cookie.CookieName)] := + Cookie.ClientCookie; + end else begin + // ’ljÁ + curCookies.Add(Cookie.ClientCookie); + end; + end; + end; + for i := 0 to curCookies.Count - 1 do begin + if (curCookies[i] <> '') then begin + ABoard.Cookie := ABoard.Cookie + curCookies[i] + '; '; + end; + end; + finally + CookieMng.CookieCollection.Clear; + curCookies.Free; + end; +end; +//! hiddenƒf[ƒ^Žæ“¾ +procedure TEditorForm.GetHiddenParameter(Rawtext: String; ABoard: TBoard); +const + INPUT_MARK = ' 0 ) do begin + tmp := Copy(Rawtext, pos + Length(INPUT_MARK), Length(tmp)); + Delete(Rawtext, 1, pos+ Length(INPUT_MARK) - 1); + pose := AnsiPos('>', tmp); + // name=xxx value=yyy ‚ªØ‚èo‚³‚ê‚é + line := Copy(tmp, 1, pose - 1); + name := ''; + value := ''; + pos := AnsiPos(NAME_MARK, tmp); + if (pos > 0) then begin + name := Copy(Rawtext, pos + Length(NAME_MARK), Length(line)); + //”¼Šp"‚ÅŽn‚Ü‚Á‚Ä‚¢‚é‚© + if AnsiPos('"', name) = 1 then begin + // ”¼Šp"‚Ü‚Å‚ðƒRƒs[ + Delete(name, 1, 1); + pose := AnsiPos('"', name); + if (pose > 0) then begin + Delete(name, pose, Length(name)); + end else begin + pose := AnsiPos(' ', name); + if (pose > 0) then begin + Delete(name, pose, Length(name)); + end; + end; + end else begin + pose := AnsiPos(' ', name); + if (pose > 0) then begin + Delete(name, pose, Length(name)); + end; + end; + end; + lname := AnsiLowerCase(name); + for i := 0 to Length(IGNORE_NAMES) do begin + if lname = IGNORE_NAMES[i] then begin + name := ''; + break; + end; + end; + pos := AnsiPos(VALUE_MARK, tmp); + if (name <> '') and (pos > 0) then begin + value := Copy(Rawtext, pos + Length(VALUE_MARK), Length(line)); + //”¼Šp"‚ÅŽn‚Ü‚Á‚Ä‚¢‚é‚© + if AnsiPos('"', value) = 1 then begin + // ”¼Šp"‚Ü‚Å‚ðƒRƒs[ + Delete(value, 1, 1); + pose := AnsiPos('"', value); + if (pose > 0) then begin + Delete(value, pose, Length(value)); + end else begin + pose := AnsiPos(' ', value); + if (pose > 0) then begin + Delete(value, pose, Length(value)); + end; + end; + end else begin + pose := AnsiPos(' ', value); + if (pose > 0) then begin + Delete(value, pose, Length(name)); + end; + end; + end; + if (name <> '') then begin + ABoard.Cookie := ABoard.Cookie + name + '=' + value + '; '; + + end; + Delete(tmp, 1, Length(line)); + Delete(Rawtext, 1, Length(line)); + pos := AnsiPos(INPUT_MARK, tmp); + end; +end; + +//! ƒTƒ“ƒoXV‚̃AƒNƒVƒ‡ƒ“‚ÌUpdateƒCƒxƒ“ƒg@ŠÈ’P‚Ì‚½‚߃^ƒCƒ}[‚Æ“¯‚¶‚É‚µ‚Ä‚¨‚­ +procedure TEditorForm.UpdateSambaActionUpdate(Sender: TObject); +begin + UpdateSambaAction.Enabled := FSambaTimer.Enabled; +end; + +//! ƒTƒ“ƒoXVƒAƒNƒVƒ‡ƒ“ +procedure TEditorForm.UpdateSambaActionExecute(Sender: TObject); +var + input : String; + i : Integer; +begin + if InputQuery('Samba24Ý’è’lXV', 'V‚µ‚¢Ý’è’l‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢', input) then begin + input := ZenToHan(input); + if GikoSys.IsNumeric(input) then begin + FSambaTimer.UpdateSambaSetting(StrToInt(input)); + UpdateSambaStatus; + //‘S‚ẴtƒH[ƒ€‚©‚çASambaƒ^ƒCƒ}[‚ðXV‚·‚é + for i := 0 to Screen.FormCount - 1 do begin + if Screen.Forms[i] is TEditorForm then begin + TEditorForm(Screen.Forms[i]).FSambaTimer.Update; + TEditorForm(Screen.Forms[i]).UpdateSambaStatus; + end; + end; end else begin - ABoard.Cookie := val + '; '; - end; - //expires‚ðØ‚èo‚· - val := Trim(GikoSys.GetTokenIndex(tmp, ';', 1)); - if( AnsiPos(EXPIRES_MARK, val) > 0) then begin - Delete(val, 1, AnsiPos(EXPIRES_MARK, val) + Length(EXPIRES_MARK) - 1); - ABoard.Expires := GMTToLocalDateTime(val); + ShowMessage('”’l‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢'); + UpdateSambaActionExecute(Sender); end; end; end; -//Samba‚ÌŽžŠÔ‚ð“ǂݍž‚Þ -procedure TEditorForm.ReadSambaTime(); +procedure TEditorForm.UpdateSambaStatus; +begin + if (FSambaTimer.Enabled) then begin + StatusBar.Panels[2].Text + := 'Samba24‹K’è’l' + IntToStr(FSambaTimer.SambaInterval); + end; +end; + +procedure TEditorForm.InputAssistActionExecute(Sender: TObject); var - ini :TMemIniFile; - skey: String; - board: TBoard; - tmp: string; + count, i : Integer; + item : TMenuItem; + point: TPoint; + Bitmap : TBitmap; + TextWidth, ItemWidth, tmpWidth, EditW, EditT: Integer; begin - Timer1.Enabled := false; //Œo‰ß•b”•\Ž¦Timer‚ðOff‚É‚·‚éi‚±‚ꂪON‚Ì‚Æ‚«Samba24‘΍ôOnj - ini := TMemIniFile.Create(GikoSys.GetSambaFileName); - try - //•¶Žš—ñ‚Å“Ç‚ÝŽæ‚Á‚āA•ÏŠ·ŠÖ”‚ÅTDateTime‚Ö - if( FThreadItem <> nil ) then - board := FThreadItem.ParentBoard - else - board := FBoard; - - if (board <> nil) then begin - //BBSID‚ƃzƒXƒg–¼‚ªˆê’v‚µ‚Ä‚¢‚½‚ç BBSID@ƒzƒXƒg–¼ - if( board.BBSID = FHost ) then - skey := board.BBSID + '@' + FHost - else - skey := board.BBSID; + if FInputAssistKey = '' then Exit; + + InputAssistPopupMenu.Items.Clear; - tmp := ini.ReadString('Send', skey, DateTimeToStr(ZERO_DATE)); + if (FResistWords = nil) then begin + FResistWords := TStringList.Create; + end else begin + FResistWords.Clear; + end; - //BBSID‚̃L[‚ª–³‚¢‚È‚çFHost‚ɐ؂è‘Ö‚¦‚Ä‚Ý‚é - if (tmp = DateTimeToStr(ZERO_DATE)) then begin - tmp := ini.ReadString('Send', FHost, DateTimeToStr(ZERO_DATE)); + if (GetKeyState( VK_SHIFT ) < 0) then begin + // ƒVƒtƒg‚ª‰Ÿ‚³‚ê‚Ä‚¢‚ê‚΁AƒL[‚ÅŽn‚Ü‚éƒJƒeƒSƒŠ + count := + InputAssistDM.GetStartWithCategoryResistWords( + FInputAssistKey, FResistWords); + end else begin + // ƒVƒtƒg‚ª–³‚¢‚̂ŁAƒL[‚ÅŽn‚Ü‚éƒL[ + count := + InputAssistDM.GetStartWithKeyResistWords( + FInputAssistKey, FResistWords); + end; + Bitmap := TBitmap.Create; + try + if (FUseUC = True) then + Bitmap.Canvas.Font.Assign(BodyEditUC.Font) + else + Bitmap.Canvas.Font.Assign(BodyEdit.Font); + // ƒ}[ƒWƒ“5px + TextWidth := Bitmap.Canvas.TextWidth(FInputAssistKey) + 5; + ItemWidth := 0; + for i := 0 to count - 1 do begin + item := TMenuItem.Create(nil); + item.Break := mbNone; + item.Caption := FResistWords[i]; + item.Tag := i; + item.OnClick := InputAssistMenuClick; + InputAssistPopupMenu.Items.Add(item); + + tmpWidth := Bitmap.Canvas.TextWidth(Item.Caption); + if (tmpWidth > ItemWidth) then begin + ItemWidth := tmpWidth; end; - FSambaTime := ConvertDateTimeString(tmp); - end; + end; finally - ini.Free; + Bitmap.Free; + end; + + if (count > 0) then begin + if (FUseUC = True) then begin + EditW := BodyEditUC.Width; + EditT := BodyEditUC.Top; + end else begin + EditW := BodyEdit.Width; + EditT := BodyEdit.Top; + end; + GetCaretpos(point); + point.X := point.X + Self.Left + (Self.Width - EditW) div 2; + point.Y := point.Y + Self.Top + (Self.Height - Self.ClientHeight); + + if Screen.DesktopWidth > + (point.X + TextWidth + ItemWidth) then begin + InputAssistPopupMenu.Popup( + point.X + TextWidth, + point.Y + EditorPage.Top + EditorPage.TabHeight + EditT); + end else begin + InputAssistPopupMenu.Popup( + point.X - TextWidth - ItemWidth, + point.Y + EditorPage.Top + EditorPage.TabHeight + EditT); + end; end; - FNow := Now(); //Œ»ÝŽžŠÔ‚ðŽæ“¾iTimer•\Ž¦—p‚ŁACheck‚·‚é‚Æ‚«‚͍ĂÑNow()‚ðŒÄ‚ԁj - Timer1.Enabled := true; //Œo‰ß•b”•\Ž¦Timer‚ðOn‚É‚·‚éi‚±‚ꂪON‚Ì‚Æ‚«Samba24‘΍ôOnj end; -//Samba‚ÉŽžŠÔ‚ð‘‚«ž‚Þ -procedure TEditorForm.WriteSambaTime(ATime: TDateTime); +procedure TEditorForm.InputAssistMenuClick(Sender: TObject); var - ini :TMemIniFile; + text : String; + IMC: HIMC; + EditHandle: HWND; begin - ini := TMemIniFile.Create(GikoSys.GetSambaFileName); + if not (Sender is TMenuItem) then Exit; + + if (FResistWords <> nil) then begin + if (FUseUC = True) then + EditHandle := BodyEditUC.Handle + else + EditHandle := BodyEdit.Handle; + try + text := + TResistWord(FResistWords.Objects[TMenuItem(Sender).Tag]).GetText; + except + text := ''; + end; + IMC := ImmGetContext(EditHandle); //ƒRƒ“ƒeƒLƒXƒgŽæ“¾ + try + ImmNotifyIME(IMC, NI_COMPOSITIONSTR, CPS_CANCEL, 0); + finally + ImmReleaseContext(EditHandle, IMC); //ƒRƒ“ƒeƒLƒXƒg‰ð•ú + end; + + FResistWords.Clear; + FInputAssistKey := ''; + end; + if (FUseUC = True) then + BodyEditUC.InsertText(text) + else + InsertText(BodyEdit, text); +end; + +//! TMemo‚̃J[ƒ\ƒ‹ˆÊ’u‚É•¶Žš—ñ‘}“ü +procedure TEditorForm.InsertText(Memo: TMemo; Text: String); +var + line, sel, pos: Integer; + left, right : String; +begin + Memo.Lines.BeginUpdate; + line := SendMessage(Memo.Handle,EM_LINEFROMCHAR,-1,0); //s + sel := Memo.SelStart; + pos := sel - SendMessage(Memo.Handle, EM_LINEINDEX, -1, 0); //Œ… + if (pos > 0) then begin + left := Copy(Memo.Lines[line], 0, pos); + end else begin + left := ''; + end; + right := Copy(Memo.Lines[line], pos + 1, Length(Memo.Lines[line])); + Memo.Lines.Strings[line] := left + Text + right; + Memo.Lines.EndUpdate; + //@ƒLƒƒƒŒƒbƒg‚̈ʒu‚ðXV‚·‚é + Memo.SelStart := sel + Length(text); + // ƒLƒƒƒŒƒbƒg‚̈ʒu‚܂ŃXƒNƒ[ƒ‹ + Memo.Perform(EM_SCROLLCARET, 0, 0); + +end; + +procedure TEditorForm.ApplicationEvents1Message(var Msg: tagMSG; + var Handled: Boolean); +var + wmMsg: TWMKey; + IMC: HIMC; + Len: integer; + Str: string; + EditHandle: HWND; +begin + if (Self.Active) then begin + case Msg.message of + //ƒL[‰Ÿ‰º‚̂ݎ󂯎æ‚é + WM_KEYDOWN: + begin + // ƒ^ƒu‚ªh•ÒWh‚ÅCtrlƒL[‚ª‰Ÿ‚³‚ê‚Ä‚¢‚é‚Ì‚ðŠm”F‚·‚é + if (EditorPage.ActivePageIndex = 0) + and (GetKeyState( VK_CONTROL ) < 0) then begin + wmMsg.Msg := Msg.message; + wmMsg.CharCode := Word(Msg.wParam); + wmMsg.KeyData := Msg.lParam; + if (wmMsg.CharCode = 229) and (wmMsg.KeyData = 3735553) then begin + if (FUseUC = True) then + EditHandle := BodyEditUC.Handle + else + EditHandle := BodyEdit.Handle; + IMC := ImmGetContext(EditHandle); //ƒRƒ“ƒeƒLƒXƒgŽæ“¾ + Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //‚Ü‚¸’·‚³‚ðŽæ“¾ + if (Len > 0) then begin + SetLength(Str, Len + 1); //Buffer‚̃ƒ‚ƒŠ‚ðÝ’è + ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //‚Ü‚¸’·‚³‚ðŽæ“¾ + SetLength(Str, Len); + FInputAssistKey := Str; + InputAssistActionExecute(nil); + Handled := True; + end; + ImmReleaseContext(EditHandle, IMC); //ƒRƒ“ƒeƒLƒXƒg‰ð•ú + end; + end; + end; + end; + + end; +end; + +procedure TEditorForm.ShowInputAssistFormExecute(Sender: TObject); +var + form : TInputAssistForm; +begin + form := TInputAssistForm.Create(nil); try -// ini.WriteDateTime('Send', AHost, ATime); - ini.UpdateFile; + if TopAction.Checked then begin // ƒXƒeƒCó‘Ԃɐݒè + SetWindowPos(form.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE); + end; + form.SetUpFromEditor; + if (form.ShowModal = mrOk) then begin + if (FUseUC = True) then + BodyEditUC.InsertText(form.GetInsertText) + else + InsertText(BodyEdit, form.GetInsertText); + end; finally - ini.Free; + form.Release; end; end; -//Samba‚̐ݒè’l‚ð“ǂݍž‚Þ -function TEditorForm.ReadSettingTime(): Integer ; +//! Cookieî•ñíœ +procedure TEditorForm.ReleaseCookieActionExecute(Sender: TObject); var - ini :TMemIniFile; - skey: String; - board: TBoard; + Board : TBoard; begin - ini := TMemIniFile.Create(GikoSys.GetSambaFileName); - try - if( FThreadItem <> nil ) then - board := FThreadItem.ParentBoard - else - board := FBoard; - - if (board <> nil) then begin - //BBSID‚ƃzƒXƒg–¼‚ªˆê’v‚µ‚Ä‚¢‚½‚ç BBSID@ƒzƒXƒg–¼ - if( board.BBSID = FHost ) then - skey := board.BBSID + '@' + FHost - else - skey := board.BBSID; + // ƒXƒŒƒbƒh‚ª–³‚¢@ƒXƒŒ—§‚Ä‚Ì‚Æ‚«‚ÍFBoard‚𒼐ڎg‚¤ + Board := GetBoard; - Result := ini.ReadInteger('Setting', skey, -1); - //BBSID‚̃L[‚ª–³‚¢‚È‚çFHost‚ðŽg‚¤ - if( Result = -1 ) then - Result := ini.ReadInteger('Setting', FHost, -1); + // ƒNƒbƒL[‚̏î•ñ‚ðŽÌ‚Ä‚é + Board.Cookie := ''; + Board.SPID := ''; + Board.PON := ''; + // 0‚ÉŠª‚«–ß‚· + Board.Expires := 0; +end; +//! ”î•ñŽæ“¾UpdateƒCƒxƒ“ƒg +procedure TEditorForm.GetSETTINGTXTActionUpdate(Sender: TObject); +begin + // ŽÀs’†‚ÍŽÀs•s‰Â + GetSETTINGTXTAction.Enabled := not FWork; +end; +//! ƒ[ƒJƒ‹ƒ‹[ƒ‹Žæ“¾UpdateƒCƒxƒ“ƒg +procedure TEditorForm.GetHeadTXTActionUpdate(Sender: TObject); +begin + // ŽÀs’†‚ÍŽÀs•s‰Â + GetSETTINGTXTAction.Enabled := not FWork; +end; - //‹K’è’l‚ªÝ’肳‚ê‚Ä‚¢‚È‚¢‚Æ‚«‚́Aƒtƒ@ƒCƒ‹‚ɏ‘‚«‚½‚·B - if Result = -1 then begin - ini.WriteInteger('Setting', FHost, 0); - ini.UpdateFile; - end; - end; - finally - ini.Free; +//! Sambaƒ^ƒCƒ}[ƒCƒxƒ“ƒg +procedure TEditorForm.SambaTimer(Sender: TObject); +begin + + if FSambaTimer.WriteDeta = ZERO_DATE then + StatusBar.Panels[1].Text := '‰‘' + else begin + FNow := IncMilliSecond(FNow, 500); + StatusBar.Panels[1].Text := + Format('%8.0f•bŒo‰ß', [SecondSpan(FNow, FSambaTimer.WriteDeta)]); end; end; -//Samba‚Ɉø‚Á‚©‚©‚é‚©ŒŸ¸‚·‚é -function TEditorForm.CheckSambaTime(ATime: TDateTime): Boolean; +{ +\brief ƒEƒBƒ“ƒhƒE‚̈ʒu‚ƃTƒCƒY‚̐ݒè +} +procedure TEditorForm.SetWindowRect; +var + wp: TWindowPlacement; + MonCnt: Integer; + MonOk: Boolean; + MonR: Integer; + MonB: Integer; + Right: Integer; + Bottom: Integer; +begin + //ƒEƒBƒ“ƒhƒE‚̈ʒuÝ’è + wp.length := sizeof(wp); + wp.rcNormalPosition.Top := GikoSys.Setting.EditWindowTop; + wp.rcNormalPosition.Left := GikoSys.Setting.EditWindowLeft; + + wp.rcNormalPosition.Bottom := GikoSys.Setting.EditWindowTop + GikoSys.Setting.EditWindowHeight; + wp.rcNormalPosition.Right := GikoSys.Setting.EditWindowLeft + GikoSys.Setting.EditWindowWidth; + wp.showCmd := SW_HIDE; + SetWindowPlacement(Handle, @wp); + + if GikoSys.Setting.EditWindowMax then begin + WindowState := wsMaximized; + end; + + //ƒEƒBƒ“ƒhƒE‚ª‰æ–ÊŠO‚È‚ç‰æ–Ê“à‚Ɉړ®‚·‚é + Right := Left + Width; + Bottom := Top + Height; + MonOk := False; + MonCnt := 0; + while (MonCnt < Screen.MonitorCount) do begin + MonR := Screen.Monitors[MonCnt].Left + Screen.Monitors[MonCnt].Width; + MonB := Screen.Monitors[MonCnt].Top + Screen.Monitors[MonCnt].Height; + + if ((Left >= Screen.Monitors[MonCnt].Left) and (Left < MonR) and + (Top >= Screen.Monitors[MonCnt].Top) and (Top < MonB) and + (Right > Screen.Monitors[MonCnt].Left) and (Right <= MonR) and + (Bottom > Screen.Monitors[MonCnt].Top) and (Bottom <= MonB)) then begin + MonOk := True; + Break; + end; + + MonCnt := MonCnt + 1; + end; + + if (MonOk = False) then begin + Left := 0; + Top := 0; + end; + + //Œ»Ý‚̃EƒBƒ“ƒhƒE‚̈ʒu‚ð•Û‘¶ + GikoSys.Setting.EditWindowTop := Top + WINDOWMOVE_V; // ŽŸ‚ÉŠJ‚­ƒEƒBƒ“ƒhƒE‚Í + GikoSys.Setting.EditWindowLeft := Left + WINDOWMOVE_H; // @@@‰EŽÎ‚߉º‚É‚¸‚ç‚· + //ƒEƒBƒ“ƒhƒE‚Ì•‚ƍ‚‚³‚ª¬‚³‚·‚¬‚¢‚ê‚ÎŒ³‚É–ß‚· + if GikoSys.Setting.EditWindowHeight < 144 then begin + Height := 400; + end; + if GikoSys.Setting.EditWindowWidth < 144 then begin + Width := 640; + end; +end; +{ +\brief Šg’£ƒ^ƒuÝ’è +} +procedure TEditorForm.SetExtraTab; +const + SECTION = 'EditorForm'; +var + ini: TMemIniFile; +begin + ini := TMemIniFile.Create(GikoSys.Setting.GetFileName); + try + BoardtopTab.TabVisible := ini.Readbool(SECTION, 'BoardTopTab', False); + BoardTop.Checked := BoardtopTab.TabVisible; + RocalRuleTab.TabVisible := ini.ReadBool(SECTION, 'LocalRuleTab', False); + LocalRule.Checked := RocalRuleTab.TabVisible; + finally + ini.Free; + end; +end; +{ +\brief ”Ž擾 +\return ƒŒƒXƒGƒfƒBƒ^‚ª“Še‚µ‚悤‚Æ‚µ‚Ä‚¢‚é” +} +function TEditorForm.GetBoard : TBoard; +begin + // ƒXƒŒƒbƒhƒAƒCƒeƒ€‚ªnull‚ÌŽž‚ÍFBoard + if FThreadItem = nil then begin + Result := FBoard; + end else begin + Result := FThreadItem.ParentBoard; + end; +end; +{ +\brief GikoForm‚ɃƒbƒZ[ƒW‚ð’ljÁ‚·‚é +\param icon ƒƒbƒZ[ƒW‚ɂ‚­ƒAƒCƒRƒ“ +} +procedure TEditorForm.AddFormMessageNew(icon: TGikoMessageIcon); +begin + if FThreadItem = nil then begin + GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, icon) + end else begin + GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, icon); + end; + +end; +{ +\brief ƒ[ƒJƒ‹fusianaƒgƒ‰ƒbƒv +\return true:‘—M’†Ž~ false:‘—M +} +function TEditorForm.isLocalFusianaTrap: Boolean; +var + Namae : string; +begin + Result := False; + if GikoSys.Setting.LocalTrapAtt then begin + Namae := THTMLCreate.RepHtml(NameComboBox.Text); + if (LFusianaGet(Namae)) or (Namae = 'ŽRèÂ') then begin + if FusianaMsgBox = IDNO then begin + Result := True; + end; + end; + end; +end; +{ +\brief ƒŠƒ‚[ƒgfusianaƒgƒ‰ƒbƒv +\return true:‘—M’†Ž~ false:‘—M +} +function TEditorForm.isRemoteFusianaTrap: Boolean; +var + Namae : string; + Board : TBoard; + Remote: string; + body : TStringList; +begin + Result := False; + Namae := THTMLCreate.RepHtml(NameComboBox.Text); + if (GikoSys.Setting.RemoteTrapAtt) and (Length(Namae) = 0) then begin + Board := GetBoard; + + if Board = nil then Exit; + + if not FileExists(Board.GetSETTINGTXTFileName) then begin + //Setting.txt‚ª‚È‚©‚Á‚½‚çŽæ“¾ + //ŽI‚É•‰‰×‚ª‚©‚©‚è‚»‚¤... + try + GetSETTINGTXTAction.Execute; + except + end; + end; + + Remote := ''; + if FileExists(Board.GetSETTINGTXTFileName) then begin + body := TStringList.Create; + try + body.LoadFromFile(Board.GetSETTINGTXTFileName); + Remote := GetFusianaName(body, Board); + finally + body.Free; + end; + end; + + if LFusianaGet(Remote) then begin + if FusianaMsgBox = IDNO then begin + Result := True; + end; + end; + end; +end; +{ +\brief Header•¶Žš—ñŽæ“¾ +\param ACOOKIE Cookie +\param SPID SPID +\param PON PON +\param HAP HAP +\param Board ” +\return Header•¶Žš—ñ +} +function TEditorForm.getHeaderStr(const ACOOKIE: string; const SPID : string; + const PON : string; const HAP : string; Board : TBoard) : string; +begin + Result := ACOOKIE; + + if SPID <> '' then + Result := Result + 'SPID=' + SPID + '; '; + if PON <> '' then + Result := Result + 'PON=' + PON + '; '; + + //ƒzƒXƒg‚ª2ch‚ŁABe‚ÉLogin‚µ‚Ä‚¢‚ê‚ÎBE‚̃f[ƒ^‚ð‘—‚é + //GikoSys.ParseURI( URL, Protocol,Host, Path, Document, Port, Bookmark ); + //if GikoSys.Is2chHost(Host) and GikoSys.Setting.BeLogin then + if (Board.Is2ch) then begin + // ŒÅ’è‚̃NƒbƒL[‚ª‚ ‚ê‚ΐH‚킹‚é + if Length(GikoSys.Setting.FixedCookie) > 0 then begin + // ƒzƒXƒg‚ª2ch‚̏ꍇCŒÅ’è‚̃NƒbƒL[‚ðH‚킹‚é + Result := Result + GikoSys.Setting.FixedCookie + '; '; + end; + if (GikoSys.Belib.Connected) then begin + Result := Result + 'MDMD=' + GikoSys.Belib.MDMD + '; ' + + 'DMDM=' + GikoSys.Belib.DMDM + '; '; + end; + end; + + Result := 'Cookie: ' + Result + 'NAME=' + NameComboBox.Text + '; MAIL=' + MailComboBox.Text; + + if HAP <> '' then + Result := Result + '; HAP=' + HAP + '; '; + +end; + +{ +\brief fusianaŒxƒ_ƒCƒAƒƒO +\return IDYES ‘‚«ž‚Þ IDNO ’†Ž~ +} +function TEditorForm.FusianaMsgBox: Integer; +const + MSG_FUSIANA : string = 'ƒŠƒ‚[ƒgƒzƒXƒg‚ð•\Ž¦‚·‚é‹@”\‚ªŽg‚í‚ê‚Ä‚¢‚Ü‚·'#13#10 + + '‚à‚µ‚àŠÔˆá‚Á‚Ä‚±‚Ì•û–@‚ŃzƒXƒg‚ª•\Ž¦‚³‚ꂽ‚Æ‚µ‚Ä‚àAŽ©ŒÈÓ”C‚Ȃ̂ō폜ˆË—Š‚ɂ͉ž‚¶‚Ü‚¹‚ñB' + + #13#10#13#10'Ó”C‚𕉂¤‚±‚Æ‚ð³‘ø‚µ‚ď‘‚«ž‚Ý‚Ü‚·‚©H'; +begin + Result := MsgBox(Handle, MSG_FUSIANA, 'î•ñ', + MB_YESNO or MB_ICONQUESTION); +end; +{ +\brief ˜A“Šƒ‚[ƒhON/OFFØ‚è‘Ö‚¦ +} +procedure TEditorForm.ContinueModeActionExecute(Sender: TObject); begin + ContinueModeAction.Checked := not ContinueModeAction.Checked; end; -//Samba‚̐ݒè’l‚ð‘‚«ž‚Þ -procedure TEditorForm.SetSamba24(); +{ +\brief ˜A“Šƒ‚[ƒhXVˆ— +} +procedure TEditorForm.ContinueModeActionUpdate(Sender: TObject); +begin + // ƒXƒŒ‚½‚Ä‚Ì‚Æ‚«‚Í–³Œø + ContinueModeAction.Enabled := FThreadItem <> nil; +end; +{ +\brief ‘‚«ž‚Þ”Â/ƒXƒŒƒbƒh‚ð•\Ž¦‚·‚é +} +procedure TEditorForm.OpenSendTargetActionExecute(Sender: TObject); +begin + if (FThreadItem <> nil) then begin + // ƒƒCƒ“‚ðXV‚µ‚Ä‚µ‚Ü‚¤‚̂ʼnæ–Ê‚ªƒpƒ^ƒpƒ^Ø‚è‘Ö‚í‚é‚Ì‚ð–h‚®‚½‚ß‚É + // ‘O–ʂŌŒ肷‚é + if not (fsShowing in Self.FormState) then begin + // ƒXƒeƒCó‘Ԃɐݒè + SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE); + end; + try + // ƒXƒŒƒbƒh + GikoForm.InsertBrowserTab(FThreadItem, True); + finally + if not TopAction.Checked then begin // ƒXƒeƒCó‘Ô‰ðœ + SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE); + end; + end; + Self.SetFocus; + end else begin + // ” + GikoForm.SelectTreeNode( + GetBoard, True ); + end; +end; +procedure TEditorForm.ReloadTargetActionExecute(Sender: TObject); +begin + if (FThreadItem <> nil) then begin + // ƒXƒŒƒbƒh + // ƒƒCƒ“‚ðXV‚µ‚Ä‚µ‚Ü‚¤‚̂ʼnæ–Ê‚ªƒpƒ^ƒpƒ^Ø‚è‘Ö‚í‚é‚Ì‚ð–h‚®‚½‚ß‚É + // ‘O–ʂŌŒ肷‚é(ƒ_ƒEƒ“ƒ[ƒh‚ª”­¶‚·‚é‚Ɛ؂è‘Ö‚í‚Á‚Ä‚µ‚Ü‚¤‚ª‚ ‚«‚ç‚ß‚é) + if not (fsShowing in Self.FormState) then begin + // ƒXƒeƒCó‘Ԃɐݒè + SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE); + end; + try + GikoForm.DownloadContent(FThreadItem); + finally + if not TopAction.Checked then begin // ƒXƒeƒCó‘Ô‰ðœ + SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE); + end; + end; + Self.SetFocus; + end else begin + // ” + GikoForm.DownloadList(GetBoard); + end; +end; +//! Œë”šƒ`ƒFƒbƒN +function TEditorForm.isGobaku: Boolean; +const + MSG_GOBAKU : string = + '•\Ž¦‚µ‚Ä‚¢‚é%s‚Æ“Šeæ‚Ì%s‚ªˆÙ‚È‚è‚Ü‚·B'#13#10 + + '‚±‚̂܂܏‘‚«ž‚Ý‚Ü‚·‚©H'; +var + ThreadItem : TThreadItem; + msg : String; + +begin + Result := False; + // ƒIƒvƒVƒ‡ƒ“—LŒø‚©‚ƒŒƒX‘—M‚Å‚Ì‚Ý—LŒø + if (GikoSys.Setting.UseGobakuCheck) then begin + // ƒŒƒX‘—M + if (FThreadItem <> nil) then begin + ThreadItem := GikoForm.GetActiveContent(False); + if (ThreadItem <> nil) then begin + if (FThreadItem <> ThreadItem) then begin + msg := Format(MSG_GOBAKU, ['ƒXƒŒƒbƒh', 'ƒXƒŒƒbƒh']); + Result := MsgBox(Handle, msg, 'î•ñ', MB_YESNO or MB_ICONQUESTION) = IDNO; + end; + end else begin + if GikoForm.ActiveList is TBBS then begin + if TBBS(GikoForm.ActiveList) <> FThreadItem.ParentBoard.ParentCategory.ParenTBBS then begin + msg := Format(MSG_GOBAKU, ['BBS', 'ƒXƒŒƒbƒh‚̏Š‘®‚·‚éBBS']); + Result := MsgBox(Handle, msg, 'î•ñ', MB_YESNO or MB_ICONQUESTION) = IDNO; + end; + end else if GikoForm.ActiveList is TCategory then begin + if TCategory(GikoForm.ActiveList).FindThreadFromURL(FThreadItem.URL) = nil then begin + msg := Format(MSG_GOBAKU, ['ƒJƒeƒSƒŠ', 'ƒXƒŒƒbƒh‚̏Š‘®‚·‚éƒJƒeƒSƒŠ']); + Result := MsgBox(Handle, msg, 'î•ñ', MB_YESNO or MB_ICONQUESTION) = IDNO; + end; + end else if GikoForm.ActiveList is TBoard then begin + if TBoard(GikoForm.ActiveList) <> FThreadItem.ParentBoard then begin + msg := Format(MSG_GOBAKU, ['”Â', 'ƒXƒŒƒbƒh‚̏Š‘®‚·‚é”Â']); + Result := MsgBox(Handle, msg, 'î•ñ', MB_YESNO or MB_ICONQUESTION) = IDNO; + end; + end; + end; + end else begin + // ƒXƒŒ‚½‚Ä + if GikoForm.ActiveList is TBBS then begin + if TBBS(GikoForm.ActiveList) <> FBoard.ParentCategory.ParenTBBS then begin + msg := Format(MSG_GOBAKU, ['BBS', '”‚̏Š‘®‚·‚éBBS']); + Result := MsgBox(Handle, msg, 'î•ñ', MB_YESNO or MB_ICONQUESTION) = IDNO; + end; + end else if GikoForm.ActiveList is TCategory then begin + if TCategory(GikoForm.ActiveList).FindBoardFromURL(FBoard.URL) = nil then begin + msg := Format(MSG_GOBAKU, ['ƒJƒeƒSƒŠ', '”‚̏Š‘®‚·‚éƒJƒeƒSƒŠ']); + Result := MsgBox(Handle, msg, 'î•ñ', MB_YESNO or MB_ICONQUESTION) = IDNO; + end; + end else if GikoForm.ActiveList is TBoard then begin + if TBoard(GikoForm.ActiveList) <> FBoard then begin + msg := Format(MSG_GOBAKU, ['”Â', '”Â']); + Result := MsgBox(Handle, msg, 'î•ñ', MB_YESNO or MB_ICONQUESTION) = IDNO; + end; + end; + end; + end; +end; + +procedure TEditorForm.SetFocusEdit; +begin + if (FUseUC = True) then + BodyEditUC.SetFocus + else + BodyEdit.SetFocus; +end; + +procedure TEditorForm.SetTextEdit(TextSrc: String); begin + if (FUseUC = True) then + BodyEditUC.Text := TextSrc + else + BodyEdit.Text := TextSrc; end; end.