6 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
7 Dialogs, StdCtrls, ComCtrls, ExtCtrls, ToolWin, Menus, OleCtrls, Registry,
15 ActiveX, {HTTPApp,} YofUtils, IniFiles, StrUtils,
16 GikoSystem, GikoUtil, ImgList, Clipbrd, BoardGroup,
17 IdAntiFreezeBase, IdAntiFreeze, IdBaseComponent, IdComponent,
18 IdTCPConnection, IdTCPClient, IdHTTP, ActnList, StdActns, IdIntercept,
19 IdLogBase, IdLogDebug, IdException, DateUtils, bmRegExp,
20 Gesture, AppEvnts, SambaTimer, IdCookieManager;
23 // TSetLayeredWindowAttributes = function(wnd: HWND; crKey: DWORD; bAlpha: BYTE; dwFlag: DWORD): Boolean; stdcall;
24 //
\8f\91\82«
\8d\9e\82Ý
\96ß
\82è
\92l
\83^
\83C
\83v
25 TGikoResultType = (grtOK, grtCookie, grtCheck, grtError, grtBouken);
27 TEditorForm = class(TForm)
30 PostMessage: TMenuItem;
31 SaveMessage: TMenuItem;
34 StatusBar: TStatusBar;
35 EditorPage: TPageControl;
37 PreviewTab: TTabSheet;
45 ToolBarImageList: TImageList;
46 HotToobarImageList: TImageList;
47 NameBasePanel: TPanel;
50 NameComboBox: TComboBox;
51 MailComboBox: TComboBox;
53 SendToolButton: TToolButton;
54 OutBoxToolButton: TToolButton;
55 ToolButton5: TToolButton;
56 UndoToolButton: TToolButton;
57 CutToolButton: TToolButton;
58 CopyToolButton: TToolButton;
59 PasteToolButton: TToolButton;
60 ToolButton3: TToolButton;
61 TransToolButton: TToolButton;
62 TopToolButton: TToolButton;
64 IdAntiFreeze: TIdAntiFreeze;
65 ToolButton1: TToolButton;
66 ToolButton2: TToolButton;
67 ActionList: TActionList;
81 SageCheckBox: TCheckBox;
82 IdLogDebug: TIdLogDebug;
85 KotehanCheckBox: TCheckBox;
89 SelectAllAction: TAction;
91 SelectAll1: TMenuItem;
92 QuotePasteAction: TAction;
93 QuotePasteMenuItem: TMenuItem;
95 SpaceToNBSPAction: TAction;
96 AmpToCharRefAction: TAction;
97 SpaceTabnbsp1: TMenuItem;
99 BoardInformationTab: TTabSheet;
100 BoardtopTab: TTabSheet;
101 TitlePictureBrowser: TWebBrowser;
103 BoardInformationMemo: TMemo;
104 GetSETTINGTXTAction: TAction;
106 SETTINGTXT2: TMenuItem;
107 GetTitlePictureAction: TAction;
109 GetHeadTXTAction: TAction;
111 RocalRuleTab: TTabSheet;
112 WebBrowser1: TWebBrowser;
113 CalcCapacityAction: TAction;
116 LocalRule: TMenuItem;
119 LocalRuleBrowse: TMenuItem;
120 ToolButton4: TToolButton;
121 ToolButton6: TToolButton;
122 SaveNameMailAction: TAction;
123 ToolButton7: TToolButton;
124 BeLogInOutEAction: TAction;
125 UpdateSambaAction: TAction;
128 InputAssistAction: TAction;
129 InputAssistPopupMenu: TPopupMenu;
131 ApplicationEvents1: TApplicationEvents;
132 ToolButton8: TToolButton;
133 ToolButton9: TToolButton;
134 ShowInputAssistForm: TAction;
135 ReleaseCookieAction: TAction;
137 ContinueModeAction: TAction;
138 ToolButton10: TToolButton;
139 ToolButton11: TToolButton;
140 OpenSendTargetAction: TAction;
141 ReloadTargetAction: TAction;
146 procedure EditorPageChange(Sender: TObject);
147 procedure FormCreate(Sender: TObject);
148 procedure BrowserStatusTextChange(Sender: TObject;
149 const Text: WideString);
150 procedure FormClose(Sender: TObject; var Action: TCloseAction);
151 procedure FormDestroy(Sender: TObject);
152 procedure SendActionExecute(Sender: TObject);
153 procedure SaveActionExecute(Sender: TObject);
154 procedure AbortActionExecute(Sender: TObject);
155 procedure CloseActionExecute(Sender: TObject);
156 procedure UndoActionExecute(Sender: TObject);
157 procedure CutActionExecute(Sender: TObject);
158 procedure CopyActionExecute(Sender: TObject);
159 procedure PasteActionExecute(Sender: TObject);
160 procedure SendActionUpdate(Sender: TObject);
161 procedure SaveActionUpdate(Sender: TObject);
162 procedure CloseActionUpdate(Sender: TObject);
163 procedure UndoActionUpdate(Sender: TObject);
164 procedure CutActionUpdate(Sender: TObject);
165 procedure CopyActionUpdate(Sender: TObject);
166 procedure PasteActionUpdate(Sender: TObject);
167 procedure TopActionExecute(Sender: TObject);
168 procedure TopActionUpdate(Sender: TObject);
169 procedure SageCheckBoxClick(Sender: TObject);
170 procedure MailComboBoxChange(Sender: TObject);
171 procedure TransActionExecute(Sender: TObject);
172 procedure TransActionUpdate(Sender: TObject);
173 procedure IdLogDebugReceive(ASender: TIdConnectionIntercept;
175 procedure IdLogDebugSend(ASender: TIdConnectionIntercept;
177 procedure SelectAllActionExecute(Sender: TObject);
178 procedure StatusBarResize(Sender: TObject);
179 procedure FormActivate(Sender: TObject);
180 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
181 procedure QuotePasteActionExecute(Sender: TObject);
182 procedure SpaceToNBSPActionExecute(Sender: TObject);
183 procedure AmpToCharRefActionExecute(Sender: TObject);
184 procedure BoardTopClick(Sender: TObject);
185 procedure GetSETTINGTXTActionExecute(Sender: TObject);
186 procedure GetTitlePictureActionUpdate(Sender: TObject);
187 procedure GetTitlePictureActionExecute(Sender: TObject);
188 procedure GetHeadTXTActionExecute(Sender: TObject);
189 procedure CalcCapacityActionExecute(Sender: TObject);
190 procedure LocalRuleClick(Sender: TObject);
191 procedure FormDeactivate(Sender: TObject);
192 procedure LocalRuleBrowseClick(Sender: TObject);
193 procedure SaveNameMailActionExecute(Sender: TObject);
194 procedure BeLogInOutEActionExecute(Sender: TObject);
195 procedure BeLogInOutEActionUpdate(Sender: TObject);
196 procedure UpdateSambaActionUpdate(Sender: TObject);
197 procedure UpdateSambaActionExecute(Sender: TObject);
198 procedure InputAssistActionExecute(Sender: TObject);
199 procedure ApplicationEvents1Message(var Msg: tagMSG;
200 var Handled: Boolean);
201 procedure ShowInputAssistFormExecute(Sender: TObject);
202 procedure ReleaseCookieActionExecute(Sender: TObject);
203 procedure GetSETTINGTXTActionUpdate(Sender: TObject);
204 procedure GetHeadTXTActionUpdate(Sender: TObject);
205 procedure ContinueModeActionExecute(Sender: TObject);
206 procedure ContinueModeActionUpdate(Sender: TObject);
207 procedure OpenSendTargetActionExecute(Sender: TObject);
208 procedure ReloadTargetActionExecute(Sender: TObject);
210 FThreadItem: TThreadItem;
212 FNameComboEdit: THandle;
213 FMailComboEdit: THandle;
216 FStatusCode: Integer;
217 FDebugStrReceive: string;
218 FDebugStrSend: string;
220 FInputAssistKey: String; ///<
\93ü
\97Í
\83A
\83V
\83X
\83g
\82Ì
\83L
\81[
221 FResistWords: TStringList; ///<
\93ü
\97Í
\83A
\83V
\83X
\83g
\82Ì
\8e«
\8f\91\82©
\82ç
\82Ì
\8c\9f\8dõ
\8c\8b\89Ê
222 FSambaTimer: TSambaTimer; ///< Samba
\91Î
\8dô
\82Ì
\83^
\83C
\83}
\81[
224 function Check: Boolean;
225 procedure SetNameList(sName, sMail: string);
226 procedure Send(const ACOOKIE: string; const SPID: string; const PON: string; FirstWriting: Boolean);
227 function GetActiveControlHandle: THandle;
228 procedure GetSendData(Source: TStringStream);
229 procedure SaveSendFile;
230 procedure SetContent(Content: string; ABrowser: TWebBrowser);
231 function GetResultType(ResponseText: string): TGikoResultType;
232 ///
\96{
\95¶
\82Ì
\8eæ
\93¾
233 function GetBody : string;
234 //IdHttp
\82Ì
\8f\89\8aú
\89»
235 procedure InitIdHTTP(http: TIdHTTP);
236 procedure ShowBoardInformation(ABoard: TBoard; AMemo: TMemo);
237 function GetTitlePictureURL(body: TStringList; ABoard: TBoard): string;
238 procedure ShowTitlePicture();
239 function GetFusianaName(body: TStringList; ABoard: TBoard): String;
240 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
241 procedure OnGestureStart(Sender: TObject);
242 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
243 procedure OnGestureMove(Sender: TObject);
244 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
245 procedure OnGestureEnd(Sender: TObject);
246 //HEAD.TXT
\8e©
\93®
\95\
\8e¦
247 procedure ShowBoardHead(ABoard: TBoard; AMemo: TMemo);
248 //LocalFusianaTrapAlart
249 function LFusianaGet(const s: String): Boolean;
250 // Cookie
\82Ì
\8eæ
\93¾
251 procedure GetCookie(CookieMng: TIdCookieManager; ABoard: TBoard);
252 // hidden
\83f
\81[
\83^
\8eæ
\93¾
253 procedure GetHiddenParameter(Rawtext: String; ABoard: TBoard);
254 //!
\93ü
\97Í
\83A
\83V
\83X
\83g
\82Ì
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
255 procedure InputAssistMenuClick(Sender: TObject);
256 //! TMemo
\82Ì
\83J
\81[
\83\
\83\8b\88Ê
\92u
\82É
\95¶
\8e\9a\97ñ
\91}
\93ü
257 procedure InsertText(Memo: TMemo; Text: String);
258 //!
\91\97\90M
\92\86\8e~
259 procedure CancelSend(ABoard: TBoard; ASysMenu: HMENU);
260 //! Samba
\83^
\83C
\83}
\81[
\83C
\83x
\83\93\83g
261 procedure SambaTimer(Sender: TObject);
262 //!
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82Æ
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
263 procedure SetWindowRect;
264 //!
\8ag
\92£
\83^
\83u
\90Ý
\92è
265 procedure SetExtraTab;
267 function GetBoard : TBoard;
268 //! URL
\82Ì
\83f
\81[
\83^
\82ðstream
\82É
\8eæ
\82è
\8d\9e\82Þ
269 procedure GetWebData(const URL: string; const RefURL: string;
270 Modified: TDateTime; stream: TStream);
271 //! GikoForm
\82É
\90V
\92\85\83\81\83b
\83Z
\81[
\83W
\82ð
\92Ç
\89Á
\82·
\82é
272 procedure AddFormMessageNew(icon: TGikoMessageIcon);
273 //!
\83\8d\81[
\83J
\83\8bfusiana
\83g
\83\89\83b
\83v
274 function isLocalFusianaTrap: Boolean;
275 //!
\83\8d\81[
\83J
\83\8bfusiana
\83g
\83\89\83b
\83v
276 function isRemoteFusianaTrap: Boolean;
277 //! Header
\95¶
\8e\9a\97ñ
\8eæ
\93¾
278 function getHeaderStr(const ACOOKIE: string; const SPID : string;
279 const PON : string; const HAP : string; Board : TBoard) : string;
280 //! fusiana
\8cx
\8d\90\83_
\83C
\83A
\83\8d\83O
281 function FusianaMsgBox: Integer;
282 //! sent.ini
\83t
\83@
\83C
\83\8b\82Ì
\90¶
\90¬
283 function CreateSentIniFile: TMemIniFile;
284 //!
\8cë
\94\9a\83`
\83F
\83b
\83N
285 function isGobaku: Boolean;
287 procedure CreateParams(var Params: TCreateParams); override;
291 procedure SetThreadItem(Item: TThreadItem);
292 procedure SetBoard(Item: TBoard);
293 procedure UpdateSambaStatus;
294 property BBSID: string read FBBSID write FBBSID;
300 Giko, ItemDownload, MojuUtils, IdGlobal, GikoMessage, Imm,
301 InputAssistDataModule, InputAssist, HTMLCreate, IdCookie;
303 CAPTION_NAME_NEW: string = '
\83M
\83R
\83i
\83r
\83X
\83\8c\97§
\82Ä
\83G
\83f
\83B
\83^';
304 CAPTION_NAME_RES: string = '
\83M
\83R
\83i
\83r
\83\8c\83X
\83G
\83f
\83B
\83^';
306 //
\83G
\83f
\83B
\83b
\83g
\83E
\83B
\83\93\83h
\83E
\82ð
\89E
\89º
\82É
\82¸
\82ç
\82µ
\82Ä
\8aJ
\82
\88Ú
\93®
\97Ê
310 //DAX
\82³
\82ñ±Ø¶ÞÄ!(
\81L
\81¤
\81M)
311 READCGI_ERR = '-ERR';
312 READCGI_INCR = '-INCR';
314 READCGI_PARTIAL = '+PARTIAL';
315 READCGI_ERR_FOUND_KAKO = '-ERR
\89ß
\8b\8e\83\8d\83O
\91q
\8cÉ
\82Å
\94
\8c©';
316 READCGI_ERR_NOT_HTML = '-ERR html
\89»
\91Ò
\82¿';
317 READCGI_ERR_NOT_FOUND = '-ERR
\82»
\82ñ
\82È
\94Âor
\83X
\83\8c\83b
\83h
\82È
\82¢
\82Å
\82·
\81B';
318 READCGI_ERR_ABONE = '-ERR
\82Ç
\82±
\82©
\82Å
\82 \82Ú
\81[
\82ñ
\82ª
\82 \82Á
\82½
\82Ý
\82½
\82¢
\82Å
\82·
\81B';
319 READCGI_ERR_TIMEOUT = '-ERR
\8ew
\92è
\8e\9e\8aÔ
\82ª
\89ß
\82¬
\82Ü
\82µ
\82½
\81B';
320 READCGI_ERR_CANTUSE = '-ERR
\82à
\82¤
\81@
\82Â
\82©
\82¦
\82Ü
\82¹
\82ñ';
321 RES2CH_TRUE = '<!-- 2ch_X:true -->';
322 RES2CH_FALSE = '<!-- 2ch_X:false -->';
323 RES2CH_ERROR = '<!-- 2ch_X:error -->';
324 RES2CH_CHECK = '<!-- 2ch_X:check -->';
325 RES2CH_COOKIE = '<!-- 2ch_X:cookie -->';
329 StartPos, EndPos: Integer;
334 {constructor TEditorForm.Create(AOwner: TComponent; Item: TBoard);
336 inherited Create(AOwner);
339 procedure TEditorForm.CreateParams(var Params: TCreateParams);
342 if FormStyle in [fsNormal, fsStayOnTop] then
343 if BorderStyle in [bsSingle, bsSizeable] then begin
344 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
345 Params.WndParent := 0;
349 {procedure TEditorForm.CreateParams(var Params: TCreateParams);
351 inherited CreateParams(Params);
352 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
355 procedure TEditorForm.FormCreate(Sender: TObject);
358 FSambaTimer := TSambaTimer.Create(Self);
359 FSambaTimer.Interval := 0;
360 Browser.Navigate('about:blank');
361 TitlePictureBrowser.Navigate('about:blank');
362 WebBrowser1.Navigate('about:blank');
366 //
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\90Ý
\92è
369 EditorPage.ActivePage := EditorTab;
370 FNameComboEdit := GetWindow(NameComboBox.Handle, GW_CHILD);
371 FMailComboEdit := GetWindow(MailComboBox.Handle, GW_CHILD);
372 NameComboBox.Items.Assign(GikoSys.Setting.NameList);
373 MailComboBox.Items.Assign(GikoSys.Setting.MailList);
375 //
\94¼
\93§
\96¾
\97\98\97p
\89Â
\94\
\90Ý
\92è
376 TransAction.Enabled := GikoSys.CanUser32DLL;
378 //
\83E
\83B
\83\93\83h
\83E
\82Ì
\83X
\83e
\83C
\8fó
\91Ô
379 if GikoSys.Setting.EditWindowStay then begin //
\83X
\83e
\83C
\8fó
\91Ô
380 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
381 TopAction.Checked := true;
382 TopToolButton.Down := true;
383 end else begin //
\83X
\83e
\83C
\82µ
\82È
\82¢
384 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
385 TopAction.Checked := false;
386 TopToolButton.Down := false;
389 //
\83E
\83B
\83\93\83h
\83E
\82Ì
\94¼
\93§
\96¾
\8fó
\91Ô
390 if(GikoSys.Setting.EditWindowTranslucent) and (TransAction.Enabled) then begin //
\94¼
\93§
\96¾
\81i
\83g
\83\89\83\93\83X
\83\8b\81[
\83Z
\83\93\83g
\81j
\8fó
\91Ô
392 TransAction.Checked := true;
393 TransToolButton.Down := true;
394 end else begin //
\95s
\93§
\96¾
396 TransAction.Checked := false;
397 TransToolButton.Down := false;
399 //
\94¼
\93§
\96¾
\8fó
\91Ô
\82Ì
\95Û
\91¶
400 GikoSys.Setting.EditWindowTranslucent := TransAction.Checked;
402 SpaceToNBSPAction.Checked := GikoSys.Setting.SpaceToNBSP;
403 AmpToCharRefAction.Checked := GikoSys.Setting.AmpToCharRef;
404 //
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\81{
\94Â
\83g
\83b
\83v
\89æ
\91\9c\82Ì
\83^
\83u
\82Ì
\90Ý
\92è
407 //
\83L
\81[
\90Ý
\92è
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
408 GikoSys.LoadKeySetting(ActionList, GikoSys.GetEditorKeyFileName);
409 SaveNameMailAction.Checked := True;
411 procedure TEditorForm.SetBoard(Item: TBoard);
414 Caption := CAPTION_NAME_NEW + ' - [' + Item.Title + ']';
415 NameComboBox.Text := FBoard.KotehanName;
416 MailComboBox.Text := FBoard.KotehanMail;
417 SageCheckBox.Checked := AnsiPos('sage', MailComboBox.Text) <> 0;
418 TitlePanel.Visible := True;
420 if (FSambaTimer.SetBoard(FBoard) >= 0) then begin
423 FSambaTimer.OnTimer := SambaTimer;
426 ShowBoardInformation(FBoard, BoardInformationMemo);
430 procedure TEditorForm.SetThreadItem(Item: TThreadItem);
433 Caption := CAPTION_NAME_RES + ' - [' + FThreadItem.Title + ']';
434 NameComboBox.Text := FThreadItem.ParentBoard.KotehanName;
435 MailComboBox.Text := FThreadItem.ParentBoard.KotehanMail;
436 SageCheckBox.Checked := AnsiPos('sage', MailComboBox.Text) <> 0;
437 TitlePanel.Visible := False;
439 if (FSambaTimer.SetBoard(FThreadItem.ParentBoard) >= 0) then begin
442 FSambaTimer.OnTimer := SambaTimer;
445 ShowBoardInformation(FThreadItem.ParentBoard, BoardInformationMemo);
449 function TEditorForm.GetBody : string;
458 body := BodyEdit.Text;
459 if AmpToCharRefAction.Checked then
460 // &
\82Ì
\92u
\8a·
\82Í
\88ê
\94Ô
\8dÅ
\8f\89\82É
\82â
\82é
\82±
\82Æ
461 body := CustomStringReplace( body, '&', '&' );
462 if SpaceToNBSPAction.Checked then begin
464 tail := p + Length( body );
466 while p < tail do begin
473 tmp := tmp + ' ';
474 until (len mod TAB_LENGTH) = 0;
479 tmp := tmp + p^; Inc( p );
485 tmp := tmp + ' ';
491 //
\8eÀ
\91Ì
\8eQ
\8fÆ
\82Í 1
\95¶
\8e\9a\95ª
496 while p < tail do begin
497 if p^ in ['a'..'z', 'A'..'Z', '0'..'9', '#'] then begin
499 end else if p^ = ';' then begin
511 if p^ in kYofKanji then begin
512 tmp := tmp + p^; Inc( p );
513 tmp := tmp + p^; Inc( p );
516 tmp := tmp + p^; Inc( p );
528 procedure TEditorForm.SetFont;
530 BodyEdit.Font.Name := GikoSys.Setting.EditorFontName;
531 BodyEdit.Font.Size := GikoSys.Setting.EditorFontSize;
532 BodyEdit.Font.Color := GikoSys.Setting.EditorFontColor;
533 BodyEdit.Color := GikoSys.Setting.EditorBackColor;
536 procedure TEditorForm.Preview;
545 if FThreadItem = nil then begin
547 Title := THTMLCreate.RepHtml(TitleEdit.Text);
549 No := IntToStr(FThreadItem.Count + 1);
550 Title := THTMLCreate.RepHtml(FThreadItem.Title);
554 Namae := THTMLCreate.RepHtml(NameComboBox.Text);
555 Mail := THTMLCreate.RepHtml(MailComboBox.Text);
556 Body := THTMLCreate.RepHtml(Body);
557 Body := CustomStringReplace(Body, #13#10, '<br>', False);
560 if Trim(Namae) = '' then
561 Namae := '
\96¼
\96³
\82µ
\82³
\82ñ';
563 s := THTMLCreate.CreatePreviewHTML(Title, No, Mail, Namae, Body);
565 SetContent(s, Browser);
568 procedure TEditorForm.EditorPageChange(Sender: TObject);
573 tmpBoard := GetBoard;
575 if tmpBoard = nil then Exit;
577 if EditorPage.ActivePage = PreviewTab then begin
579 end else if EditorPage.ActivePage = RocalRuleTab then begin
580 if not FileExists(tmpBoard.GETHEADTXTFileName) then begin
581 LocalEdit.Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\96¢
\8eæ
\93¾';
584 ShowBoardHead(tmpBoard, LocalEdit);
586 Browser.Navigate('about:blank');
590 procedure TEditorForm.BrowserStatusTextChange(Sender: TObject;
591 const Text: WideString);
593 if EditorPage.ActivePage = PreviewTab then begin
594 StatusBar.Panels[0].Text := Text;
596 StatusBar.Panels[0].Text := '';
600 function TEditorForm.Check: Boolean;
602 REQUIRED: string = '
\82ª
\93ü
\97Í
\82³
\82ê
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B';
603 ERROR: string = '
\83G
\83\89\81[';
613 if (not GikoSys.Setting.UseMachineTime) and
614 ((Board.LastGetTime = 0) or
615 (Board.LastGetTime = ZERO_DATE)) then begin
616 Msg := '
\83T
\81[
\83o
\82Ì
\8e\9e\8d\8f\82ª
\95ª
\82©
\82ç
\82È
\82¢
\82½
\82ß
\81A
\91\97\90M
\8fo
\97\88\82Ü
\82¹
\82ñ'#13#10
617 + '
\83X
\83\8c\83b
\83h
\82ð
\8dX
\90V
\81i
\8eæ
\93¾
\81j
\8cã
\81A15
\95b
\91Ò
\82Á
\82Ä
\82©
\82ç
\91\97\90M
\82µ
\82Ä
\82
\82¾
\82³
\82¢';
618 MsgBox(Handle, Msg, ERROR, MB_OK or MB_ICONSTOP);
620 end else if BodyEdit.Text = '' then begin
621 Msg := '
\96{
\95¶' + REQUIRED;
622 MsgBox(Handle, Msg, ERROR, MB_OK or MB_ICONSTOP);
624 end else if (FBoard <> nil) and (Trim(TitleEdit.Text) = '') then begin
625 Msg := '
\83^
\83C
\83g
\83\8b' + REQUIRED;
626 MsgBox(Handle, Msg, ERROR, MB_OK or MB_ICONSTOP);
629 if (not GikoSys.Dolib.Connected) and (AnsiPos('
\81\9c', NameComboBox.Text) <> 0) then begin
630 Msg := '
\83\8d\83O
\83C
\83\93\82µ
\82Ä
\82¢
\82È
\82¢
\82Ì
\82Å
\81\9c\82Ì
\8b@
\94\
\82Í
\97\98\97p
\8fo
\97\88\82Ü
\82¹
\82ñ
\81B'#13#10
631 + '
\82±
\82Ì
\82Ü
\82Ü
\91\97\90M
\82µ
\82Ä
\82à
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
632 rc := MsgBox(Handle, Msg, '
\8am
\94F', MB_YESNO or MB_ICONQUESTION);
633 Result := (rc = IDYES);
638 procedure TEditorForm.FormClose(Sender: TObject; var Action: TCloseAction);
643 procedure TEditorForm.FormDestroy(Sender: TObject);
645 wp: TWindowPlacement;
649 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
650 wp.length := sizeof(wp);
651 GetWindowPlacement(Handle, @wp);
653 GikoSys.Setting.EditWindowTop := wp.rcNormalPosition.Top;
654 GikoSys.Setting.EditWindowLeft := wp.rcNormalPosition.Left;
655 GikoSys.Setting.EditWindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
656 GikoSys.Setting.EditWindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
657 GikoSys.Setting.EditWindowMax := WindowState = wsMaximized;
658 //GikoSys.Setting.EditWindowStay := FormStyle = fsStayOnTop; //
\83X
\83e
\83C
\8fó
\91Ô
\82Ì
\95Û
\91¶
659 GikoSys.Setting.EditWindowTranslucent := TransAction.Checked; //
\94¼
\93§
\96¾
\8fó
\91Ô
\82Ì
\95Û
\91¶
663 procedure TEditorForm.SetNameList(sName, sMail: string);
665 if SaveNameMailAction.Checked then begin
666 if Trim(sName) <> '' then begin
667 if GikoSys.Setting.NameList.IndexOf(sName) = -1 then
668 GikoSys.Setting.NameList.Insert(0, sName);
670 if Trim(sMail) <> '' then begin
671 if GikoSys.Setting.MailList.IndexOf(sMail) = -1 then
672 GikoSys.Setting.MailList.Insert(0, sMail);
677 function TEditorForm.GetActiveControlHandle: THandle;
679 if EditorPage.ActivePage = EditorTab then begin
680 if ActiveControl = NameComboBox then
681 Result := FNameComboEdit
682 else if ActiveControl = MailComboBox then
683 Result := FMailComboEdit
684 else if ActiveControl = BodyEdit then
685 Result := BodyEdit.Handle
686 else if ActiveControl = TitleEdit then
687 Result := TitleEdit.Handle
690 end else if Editorpage.ActivePage = BoardInformationTab then begin
691 if ActiveControl = BoardInformationMemo then
692 Result := BoardInformationMemo.Handle
695 end else if Editorpage.ActivePage = RocalRuleTab then begin
696 if ActiveCOntrol = LocalEdit then
697 Result := LocalEdit.Handle
704 procedure TEditorForm.SetContent(Content: string; ABrowser: TWebBrowser);
708 if Assigned(ABrowser.ControlInterface.Document) then begin
709 doc := OleVariant(ABrowser.Document);
712 doc.charset := 'Shift_JIS';
717 procedure TEditorForm.InitIdHTTP(http: TIdHTTP);
720 http.ProxyParams.BasicAuthentication := False;
721 if GikoSys.Setting.WriteProxy then begin
722 http.ProxyParams.ProxyServer := GikoSys.Setting.WriteProxyAddress;
723 http.ProxyParams.ProxyPort := GikoSys.Setting.WriteProxyPort;
724 http.ProxyParams.ProxyUsername := GikoSys.Setting.WriteProxyUserID;
725 http.ProxyParams.ProxyPassword := GikoSys.Setting.WriteProxyPassword;
726 if GikoSys.Setting.ReadProxyUserID <> '' then
727 http.ProxyParams.BasicAuthentication := True;
729 http.ProxyParams.ProxyServer := '';
730 http.ProxyParams.ProxyPort := 80;
731 http.ProxyParams.ProxyUsername := '';
732 http.ProxyParams.ProxyPassword := '';
734 Indy.Request.UserAgent := GikoSys.GetUserAgent;
735 Indy.Request.AcceptEncoding := '';
736 Indy.AllowCookies := True;
738 //!
\91\97\90M
\92\86\8e~
\82Ì
\82½
\82ß
\82Ì
\83\81\83j
\83\85\81[
\82Ì
\8dÄ
\90¶
739 procedure TEditorForm.CancelSend(ABoard: TBoard; ASysMenu: HMENU);
744 EnableMenuItem(ASysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
748 procedure TEditorForm.Send( const ACOOKIE: string; const SPID: string;
749 const PON: string; FirstWriting: Boolean);
751 TextStream: TStringStream;
752 Source: TStringStream;
753 ResponseText: string;
755 State: TGikoDownloadState;
756 ResultType: TGikoResultType;
760 {Protocol,Host, Path, Document, Port, Bookmark : String;}
767 if FThreadItem = nil then begin
768 URL := FBoard.GetSendURL;
769 Indy.Request.Referer := GikoSys.UrlToServer(FBoard.URL) + 'test/bbs.cgi';
771 URL := FThreadItem.GetSendURL;
772 Indy.Request.Referer := FThreadItem.URL;
774 sysMenu := GetSystemMenu( Handle, false );
775 EnableMenuItem( sysMenu, SC_CLOSE, MF_GRAYED );
777 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
780 Indy.Request.CustomHeaders.Clear;
781 // Indy.Request.CacheControl := 'no-cache';
782 Indy.Request.CustomHeaders.Add('Pragma: no-cache');
783 Indy.Request.AcceptLanguage := 'ja';
784 Indy.Request.Accept := 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*';
785 Indy.Request.ContentType := 'application/x-www-form-urlencoded';
786 Indy.Request.CustomHeaders.Add(getHeaderStr(ACOOKIE, SPID, PON, GikoSys.GetBoukenCookie(URL), Board));
787 TextStream := TStringStream.Create('');
788 Source := TStringStream.Create('');
791 FDebugStrReceive := '';
794 if (FirstWriting) then begin
795 //
\83t
\83V
\83A
\83i
\83g
\83\89\83b
\83v
\8cx
\8d\90(LocalMode) by
\92è
\8aú
\95Ö
796 if (isLocalFusianaTrap) then begin
797 CancelSend( Board, SysMenu );
800 //
\83t
\83V
\83A
\83i
\83g
\83\89\83b
\83v
\8cx
\8d\90(Remote)
801 if (isRemoteFusianaTrap) then begin
802 CancelSend( Board, SysMenu );
805 //
\8cë
\94\9a\83`
\83F
\83b
\83N
806 if (isGobaku) then begin
807 CancelSend( Board, SysMenu );
813 IdAntiFreeze.Active := True;
815 Indy.Post(URL, Source, TextStream);
817 IdAntiFreeze.Active := False;
819 ResponseText := TextStream.DataString;
821 ResultType := GetResultType(ResponseText);
824 if ResultType = grtOK then begin
825 if (GikoSys.Setting.UseSamba) and (FSambaTimer.Enabled) then
827 FSambaTimer.WriteSambaTime(Now());
829 State := gdsComplete;
830 end else if ResultType = grtCookie then begin
831 //
\83\8b\81[
\83v
\96h
\8e~
832 if not FirstWriting then
833 raise Exception.Create('');
835 MsgResult := MsgBox( Handle,
836 '
\81E
\93\8a\8de
\82³
\82ê
\82½
\93à
\97e
\82Í
\83R
\83s
\81[
\81A
\95Û
\91¶
\81A
\88ø
\97p
\81A
\93]
\8dÚ
\93\99\82³
\82ê
\82é
\8fê
\8d\87\82ª
\82 \82è
\82Ü
\82·
\81B' + #13#10 +
837 '
\81E
\93\8a\8de
\82É
\8aÖ
\82µ
\82Ä
\94
\90¶
\82·
\82é
\90Ó
\94C
\82Í
\91S
\82Ä
\93\8a\8de
\8eÒ
\82É
\8bA
\82µ
\82Ü
\82·
\81B' + #13#10#13#10 +
838 '
\91S
\90Ó
\94C
\82ð
\95\89\82¤
\82±
\82Æ
\82ð
\8f³
\91ø
\82µ
\82Ä
\8f\91\82«
\8d\9e\82Ý
\82Ü
\82·
\82©
\81H',
840 MB_YESNO or MB_ICONQUESTION);
842 if MsgResult = IDYES then begin
844 for count := 0 to Indy.CookieManager.CookieCollection.Count - 1 do begin
845 cookie := Indy.CookieManager.CookieCollection.Items[count];
846 if ( cookie.CookieName = 'HAP' ) then begin
847 GikoSys.Setting.SetBoukenCookie(cookie.Value, cookie.Domain);
851 GetCookie(Indy.CookieManager, Board);
852 if (Board.Is2ch) then begin
853 GetHiddenParameter(ResponseText, Board);
856 if (Board.SPID = '') and (Board.PON = '') and (Board.Cookie = '') then
857 raise Exception.Create('');
858 //
\82à
\82¤
\88ê
\89ñ
\82±
\82Ì
\83\81\83\
\83b
\83h
859 Send(Board.Cookie, Board.SPID, Board.PON, False);
862 CancelSend( Board, SysMenu );
865 end else if ResultType = grtCheck then begin
866 //
\83\8b\81[
\83v
\96h
\8e~
867 if not FirstWriting then
868 raise Exception.Create('');
870 MsgResult := MsgBox( Handle,
871 '
\8f\91\82«
\8d\9e\82Ý
\82É
\8aÖ
\82µ
\82Ä
\82Í
\97l
\81X
\82È
\83\8d\83O
\8fî
\95ñ
\82ª
\8bL
\98^
\82³
\82ê
\82Ä
\82¢
\82Ü
\82·
\81B' + #13#10 +
872 '
\93\8a\8de
\82É
\8aÖ
\82µ
\82Ä
\94
\90¶
\82·
\82é
\90Ó
\94C
\82Í
\91S
\82Ä
\93\8a\8de
\8eÒ
\82É
\8bA
\82µ
\82Ü
\82·
\81B' + #13#10 +
873 '
\8cö
\8f\98\97Ç
\91
\82É
\94½
\82µ
\82½
\82è
\81A
\91¼
\90l
\82É
\96À
\98f
\82ð
\82©
\82¯
\82é
\8f\91\82«
\8d\9e\82Ý
\82Í
\8dT
\82¦
\82Ä
\89º
\82³
\82¢
\81B' + #13#10 +
874 '
\93\8a\8de
\82³
\82ê
\82½
\93à
\97e
\82Í
\83R
\83s
\81[
\81E
\95Û
\91¶
\81E
\88ø
\97p
\81E
\93]
\8dÚ
\93\99\82³
\82ê
\82é
\8fê
\8d\87\82ª
\82 \82è
\82Ü
\82·
\81B' + #13#10 +
876 '
\91S
\90Ó
\94C
\82ð
\95\89\82¤
\82±
\82Æ
\82ð
\8f³
\91ø
\82µ
\82Ä
\8f\91\82«
\8d\9e\82Ý
\82Ü
\82·
\82©
\81H',
878 MB_YESNO or MB_ICONQUESTION);
880 if MsgResult = IDYES then begin
882 for count := 0 to Indy.CookieManager.CookieCollection.Count - 1 do begin
883 cookie := Indy.CookieManager.CookieCollection.Items[count];
884 if ( cookie.CookieName = 'HAP' ) then begin
885 GikoSys.Setting.SetBoukenCookie(cookie.Value, cookie.Domain);
890 GetCookie(Indy.CookieManager, Board);
891 if (Board.Is2ch) then begin
892 GetHiddenParameter(ResponseText, Board);
895 if (Board.SPID = '') and (Board.PON = '') and (Board.Cookie = '') then
896 raise Exception.Create('');
899 Send(Board.Cookie, Board.SPID, Board.PON, False);
902 CancelSend( Board, SysMenu );
905 end else if ResultType = grtBouken then begin
907 '
\8bM
\95û
\82Ì
\96`
\8c¯
\82Ì
\8f\91\82ð
\8dì
\90¬
\92\86\82Å
\82·
\81B
\88ø
\82«
\95Ô
\82·
\82È
\82ç
\82¢
\82Ü
\82¾
\81B(
\82Q
\95ª
\82Ù
\82Ç
\82©
\82©
\82è
\82Ü
\82·)' + #13#10
909 MB_OK or MB_ICONQUESTION);
910 GetCookie(Indy.CookieManager, Board);
911 //
\96`
\8c¯
\82Ì
\8f\91\82Ì
\95Û
\91¶
912 GikoSys.Setting.WriteBoukenSettingFile;
915 if (GikoSys.Setting.UseSamba) and (FSambaTimer.Enabled) then
917 FSambaTimer.WriteSambaTime(Now());
921 raise Exception.Create('');
924 on E: EIdConnectException do begin
926 ResponseText := '<html><body>'
927 + '<div>
\90Ú
\91±
\82ª
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½<br>'
928 + '
\89ñ
\90ü
\82â
\83v
\83\8d\83L
\83V
\82Ì
\8fó
\91Ô
\82ð
\92²
\82×
\82Ä
\82
\82¾
\82³
\82¢<br></div>'
929 + '<br><br><div>' + E.Message + '</div>'
932 on E: Exception do begin
935 FDebugStrReceive := AnsiReplaceText(FDebugStrReceive, '<', '<');
936 FDebugStrReceive := AnsiReplaceText(FDebugStrReceive, '>', '>');
937 FDebugStrSend := AnsiReplaceText(FDebugStrSend, '<', '<');
938 FDebugStrSend := AnsiReplaceText(FDebugStrSend, '>', '>');
940 ResponseText := '<html><body>' + TextStream.DataString;
941 ResponseText := AnsiReplaceText(ResponseText, '</body>', '');
942 ResponseText := AnsiReplaceText(ResponseText, '</html>', '');
943 ResponseText := ResponseText + '<hr><div align="left"><pre>';
944 ResponseText := ResponseText + '<b>
\82±
\82±
\82©
\82ç
\83M
\83R
\83i
\83r
\82Ì
\8fî
\95ñ</b>'#13#10;
945 ResponseText := ResponseText + #13#10'
\81\9c\91\97\90M'#13#10;
946 ResponseText := ResponseText + FDebugStrSend;
947 ResponseText := ResponseText + #13#10'
\81\9c\8eó
\90M'#13#10;
948 ResponseText := ResponseText + FDebugStrReceive;
949 ResponseText := ResponseText + '</pre></div></body></html>';
952 FStatusCode := Indy.ResponseCode;
958 Indy.CookieManager.CookieCollection.Clear;
959 //sysMenu := GetSystemMenu( Handle, true );
960 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
964 //
\94ñ
\8cö
\8e®
\83M
\83R
\83i
\83r
\94Â
\82È
\82Ç
\82Ì2ch
\8cÝ
\8a·
\83X
\83N
\83\8a\83v
\83g
\97p
965 //2ch
\88È
\8aO
\82Å
\82©
\82ÂResponceCode
\82ª302Found
\82Å
\8f\91\82«
\8d\9e\82Ý
\8a®
\97¹
966 //if (not Board.Is2ch) and (FStatusCode = 302) then begin
967 if FStatusCode = 302 then begin
968 GikoForm.PlaySound('ResEnd');
970 AddFormMessageNew( gmiOK );
971 if (not ContinueModeAction.Enabled) or (not ContinueModeAction.Checked) then begin
976 if State = gdsComplete then begin
977 GikoForm.PlaySound('ResEnd');
979 AddFormMessageNew( gmiOK );
980 if (not ContinueModeAction.Enabled) or (not ContinueModeAction.Checked) then begin
983 end else if State = gdsError then begin
984 AddFormMessageNew( gmiOK );
985 EditorPage.ActivePage := PreviewTab;
986 SetContent(ResponseText, Browser);
987 end else if State = gdsAbort then begin
988 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiSAD);
991 function TEditorForm.GetResultType(ResponseText: string): TGikoResultType;
993 if AnsiPos('
\8f\91\82«
\82±
\82Ý
\82ª
\8fI
\82í
\82è
\82Ü
\82µ
\82½', ResponseText) <> 0 then
995 else if (AnsiPos('
\82d
\82q
\82q
\82n
\82q
\81F
\8bM
\95û
\82Ì
\96`
\8c¯
\82Ì
\8f\91\82ð
\8dì
\90¬
\92\86\82Å
\82·', ResponseText) > 0)
996 //(AnsiPos('
\82d
\82q
\82q
\82n
\82q
\81F
\8fC
\8ds
\82ª
\91«
\82è
\82Ü
\82¹
\82ñ', ResponseText) > 0) or
\83G
\83\89\81[
\88µ
\82¢
997 //(AnsiPos('
\82d
\82q
\82q
\82n
\82q
\81FLv
\82ª
\91«
\82è
\82È
\82
\82Ä
\83X
\83\8c\83b
\83h
\97§
\82Ä', ResponseText) > 0) )
\83G
\83\89\81[
\88µ
\82¢
998 and (AnsiPos(RES2CH_COOKIE, ResponseText) > 0) then
1000 else if ( AnsiPos('
\83N
\83b
\83L
\81[
\82ª
\82È
\82¢
\82©
\8aú
\8cÀ
\90Ø
\82ê
\82Å
\82·', ResponseText) > 0) or
1001 (AnsiPos('<title>
\83N
\83b
\83L
\81[
\8am
\94F
\81I</title>', ResponseText) > 0) or
1002 (AnsiPos('<title>
\81¡
\83N
\83b
\83L
\81[
\8am
\94F
\81I
\81¡</title>', ResponseText) > 0) or
1003 (AnsiPos(RES2CH_COOKIE, ResponseText) > 0) then
1005 else if (AnsiPos('<font size=+2 color=#FF0000>
\8f\91\82«
\8d\9e\82Ý
\83`
\83F
\83b
\83N
\81I </font>', ResponseText) > 0) or
1006 (AnsiPos('<title>
\81¡
\8f\91\82«
\8d\9e\82Ý
\8am
\94F
\82µ
\82Ü
\82·
\81¡</title>', ResponseText) > 0) or
1007 (AnsiPos('<title>
\93\8a\8de
\8am
\94F</title>', ResponseText) > 0) or
1008 (AnsiPos('<b>
\8f\91\82«
\82±
\82Ý
\8am
\94F</b>', ResponseText) > 0) or
1009 (AnsiPos('="../test/subbbs.cgi">', ResponseText) > 0) or
1010 (AnsiPos(RES2CH_FALSE, ResponseText) > 0) then
1012 else if (AnsiPos('
\81E
\93\8a\8de
\8eÒ
\82Í
\81A
\8cf
\8e¦
\94Â
\89^
\89c
\8eÒ
\82É
\91Î
\82µ
\82Ä
\81A
\92\98\8dì
\8eÒ
\90l
\8ai
\8c \82ð
\88ê
\90Ø
\8ds
\8eg
\82µ
\82È
\82¢
\82±
\82Æ
\82ð
\8f³
\91ø
\82µ
\82Ü
\82·
\81B<br>', ResponseText) > 0) or
1013 (AnsiPos('
\81i
\92\98\8dì
\8c \96@
\91æ21
\8fð
\82È
\82¢
\82µ
\91æ28
\8fð
\82É
\8bK
\92è
\82³
\82ê
\82é
\8c \97\98\82à
\8aÜ
\82Þ
\81j
\82»
\82Ì
\91¼
\82Ì
\8c \97\98\82É
\82Â
\82«
\81A', ResponseText) > 0) then
1020 procedure TEditorForm.GetSendData(Source: TStringStream);
1031 if GikoSys.Setting.UseMachineTime then begin
1032 if GikoSys.Setting.TimeAdjust then
1033 Adjust := Gikosys.Setting.TimeAdjustSec
1035 Adjust := GikoSys.Setting.TimeAdjustSec * -1;
1036 SendTime := GikoSys.DateTimeToInt(Now) - (9 * 60 * 60) + Adjust
1038 if (Board.LastGetTime = 0) or (Board.LastGetTime = ZERO_DATE) then
1039 SendTime := GikoSys.DateTimeToInt(Now)
1041 SendTime := GikoSys.DateTimeToInt(Board.LastGetTime);
1046 SessionID := GikoSys.Dolib.SessionID;
1047 if SessionID <> '' then
1048 s := 'sid=' + HttpEncode(SessionID) + '&'
1051 s := s + 'subject=&'
1052 + 'FROM=' + HttpEncode(NameComboBox.Text) + '&'
1053 + 'mail=' + HttpEncode(MailComboBox.Text) + '&'
1054 + 'MESSAGE=' + HttpEncode(body) + '&'
1055 + 'bbs=' + Board.BBSID + '&'
1056 + 'time=' + IntToStr(SendTime) + '&';
1058 if FThreadItem = nil then begin
1059 s := s + 'subject=' + HttpEncode(TitleEdit.Text) + '&';
1060 s := s + 'submit=' + HttpEncode('
\91S
\90Ó
\94C
\82ð
\95\89\82¤
\82±
\82Æ
\82ð
\8f³
\91ø
\82µ
\82Ä
\8f\91\82«
\8d\9e\82Þ') + #13#10;
1062 s := s + 'key=' + ChangeFileExt(FThreadItem.FileName, '') + '&';
1063 s := s + 'submit=' + HttpEncode('
\8f\91\82«
\8d\9e\82Þ') + #13#10;
1065 Source.WriteString(s);
1068 procedure TEditorForm.SaveSendFile;
1073 ini := CreateSentIniFile;
1074 if (ini <> nil) then begin
1076 sDate := IntToStr(GikoSys.DateTimeToInt(Now));
1078 ini.WriteString(sDate, 'Name', NameComboBox.Text);
1079 ini.WriteString(sDate, 'EMail', MailComboBox.Text);
1080 ini.WriteString(sDate, 'Body', HttpEncode(BodyEdit.Text));
1081 ini.WriteInteger(sDate, 'Status', FStatusCode);
1082 ini.WriteDateTime(sDate, 'Date', Now);
1083 if FThreadItem = nil then begin
1084 ini.WriteString(sDate, 'Title', MojuUtils.Sanitize(TitleEdit.Text));
1085 //ini.WriteString(sDate, 'BBS', FBoard.BBSID);
1086 ini.WriteString(sDate, 'URL', FBoard.URL);
1087 ini.WriteInteger(sDate, 'NewThread', 1);
1089 ini.WriteString(sDate, 'Title', FThreadItem.Title);
1090 //ini.WriteString(sDate, 'BBS', FThreadItem.ParentBoard.BBSID);
1091 ini.WriteString(sDate, 'URL', FThreadItem.URL);
1092 ini.WriteString(sDate, 'Key', ChangeFileExt(FThreadItem.FileName, ''));
1101 function TEditorForm.CreateSentIniFile: TMemIniFile;
1103 maxSize, fileSize, i: Integer;
1108 maxSize := GikoSys.Setting.SentIniFileSize * 1024 * 1024;
1109 //
\83t
\83@
\83C
\83\8b\83T
\83C
\83Y
\82ª0
\82Ì
\8fê
\8d\87\82Í
\81Asent.ini
\82É
\8f\91\82«
\8d\9e\82Ü
\82È
\82¢
\82Ì
\82Ånil
\82ð
\95Ô
\82·
1110 if (maxSize > 0) then begin
1111 fileSize := GikoSys.GetFileSize(GikoSys.Setting.GetSentFileName);
1112 //
\8dÅ
\91å
\83T
\83C
\83Y
\82ð
\92´
\82¦
\82Ä
\82¢
\82½
\8fê
\8d\87\82Í
\83\8a\83l
\81[
\83\80\82·
\82é
1113 if (fileSize >= maxSize) then begin
1115 //
\8d¡
\82Ì
\8e\9e\8d\8f\82ð
\83t
\83@
\83C
\83\8b\96¼
\82Ì
\8cã
\82ë
\82É
\82Â
\82¯
\82é
1117 // 10
\89ñ
\88È
\8fã
\8e¸
\94s
\82µ
\82½
\82ç
\82 \82«
\82ç
\82ß
\82é
1118 if (i > 10) then break;
1119 DateTimeToString(newName, 'yyhhnnsszzz', Now());
1121 until RenameFile(GikoSys.Setting.GetSentFileName,
1122 GikoSys.Setting.GetSentFileName + '.' + newName);
1124 Result := TMemIniFile.Create(GikoSys.Setting.GetSentFileName);
1127 procedure TEditorForm.SendActionExecute(Sender: TObject);
1129 TITLE_SAMBA : string = 'Samba24
\8cx
\8d\90';
1134 state : TGikoDownloadState;
1141 SendAction.Enabled := False;
1142 Application.ProcessMessages;
1143 if not Check then Exit;
1147 if FThreadItem = nil then begin
1148 rc := GikoUtil.MsgBox(Handle,
1149 '
\81u' + Board.Title + '
\81v
\94Â
\82É
\90V
\82µ
\82¢
\83X
\83\8c\83b
\83h
\97§
\82Ä
\82Ü
\82·'#13#10#13#10
1150 + '
\81E
\94Â
\82Ì
\83\8b\81[
\83\8b\82ð
\8eç
\82Á
\82½
\8f\91\82«
\8d\9e\82Ý
\82Å
\82 \82é
\82±
\82Æ
\82ð
\8am
\94F
\82µ
\82Ü
\82µ
\82½
\82©
\81H'#13#10
1151 + '
\81E
\91¼
\82É
\93¯
\82¶
\82æ
\82¤
\82È
\83X
\83\8c\83b
\83h
\82ª
\96³
\82©
\82Á
\82½
\82±
\82Æ
\82ð
\8am
\94F
\82µ
\82Ü
\82µ
\82½
\82©
\81H'#13#10#13#10
1152 + '
\81u
\82Í
\82¢
\81v
\82ð
\89\9f\82·
\82Æ
\91\97\90M
\82µ
\82Ü
\82·',
1154 MB_ICONQUESTION or MB_YESNO);
1155 if rc <> ID_YES then
1159 SetNameList(NameComboBox.Text, MailComboBox.Text);
1160 if (KotehanCheckBox.Enabled) and (KotehanCheckBox.Checked) then begin
1161 Board.KotehanName := NameComboBox.Text;
1162 Board.KotehanMail := MailComboBox.Text;
1165 if Board.IsBoardPlugInAvailable then begin
1168 if FThreadItem = nil then begin
1169 //
\83X
\83\8c\97§
\82Ä
1170 state := TGikoDownloadState( Board.BoardPlugIn.CreateThread(
1171 DWORD( Board ), TitleEdit.Text, NameComboBox.Text, MailComboBox.Text, body ) );
1173 if state = gdsComplete then begin
1174 GikoForm.PlaySound('ResEnd');
1176 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, gmiOK);
1179 end else if State = gdsError then begin
1180 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmSureError), nil, gmiNG);
1181 end else if State = gdsAbort then begin
1182 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiNG);
1186 state := TGikoDownloadState( FThreadItem.ParentBoard.BoardPlugIn.WriteThread(
1187 DWORD( FThreadItem ), NameComboBox.Text, MailComboBox.Text, body ) );
1189 if state = gdsComplete then begin
1190 GikoForm.PlaySound('ResEnd');
1192 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, gmiOK);
1195 end else if State = gdsError then begin
1196 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmResError), nil, gmiOK);
1197 end else if State = gdsAbort then begin
1198 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
1202 if not FSambaTimer.Enabled then begin
1203 if CompareDateTime(Board.Expires ,Now) <= 0 then begin
1208 Send(Board.Cookie, Board.SPID, Board.PON, True);
1210 if not FSambaTimer.CheckSambaTime(Now()) then begin
1211 rc := GikoUtil.MsgBox(Handle,
1212 'Samba24
\82Ì
\8bK
\92è
\92l
\96¢
\96\9e\82Ì
\95b
\90\94\82µ
\82©
\8co
\89ß
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B'#13#10
1213 + '
\91\97\90M
\82ð
\92\86\8e~
\82µ
\82Ü
\82·
\82©
\81H' + #13#10
1214 + '(
\81u
\82¢
\82¢
\82¦
\81v
\82¾
\82Æ
\91\97\90M
\82µ
\82Ü
\82·)', TITLE_SAMBA,
1215 MB_YESNO or MB_ICONQUESTION);
1216 if rc = IDYES then begin
1220 if rc = IDNO then begin
1221 rc2 := GikoUtil.MsgBox(Handle,
1222 '
\96{
\93\96\82É
\91\97\90M
\82µ
\82Ü
\82·
\82©
\81H',
1224 MB_YESNO or MB_ICONQUESTION);
1225 if rc2 = IDNO then begin
1231 if CompareDateTime(Board.Expires ,Now) <= 0 then begin
1236 Send(Board.Cookie, Board.SPID, Board.PON, True);
1241 if FSambaTimer.Enabled then begin
1242 FNow := FSambaTimer.Update;
1247 procedure TEditorForm.SaveActionExecute(Sender: TObject);
1252 procedure TEditorForm.CloseActionExecute(Sender: TObject);
1257 procedure TEditorForm.UndoActionExecute(Sender: TObject);
1259 SendMessage(GetActiveControlHandle, WM_UNDO, 0, 0);
1262 procedure TEditorForm.CutActionExecute(Sender: TObject);
1264 SendMessage(GetActiveControlHandle, WM_CUT, 0, 0);
1267 procedure TEditorForm.CopyActionExecute(Sender: TObject);
1269 SendMessage(GetActiveControlHandle, WM_COPY, 0, 0);
1272 procedure TEditorForm.PasteActionExecute(Sender: TObject);
1274 SendMessage(GetActiveControlHandle, WM_PASTE, 0, 0);
1277 procedure TEditorForm.SelectAllActionExecute(Sender: TObject);
1279 SendMessage(GetActiveControlHandle, EM_SETSEL, 0, GetWindowTextLength(GetActiveControlHandle));
1282 procedure TEditorForm.TopActionExecute(Sender: TObject); //
\83E
\83B
\83\93\83h
\83E
\8dÅ
\91O
\96Ê(Stay)
\83{
\83^
\83\93\82Ì
\8f\88\97\9d
1284 if not (fsShowing in Self.FormState) then begin
1285 if TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
1286 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
1287 GikoSys.Setting.EditWindowStay := true;
1288 end else begin //
\83X
\83e
\83C
\8fó
\91Ô
\89ð
\8f\9c
1289 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
1290 GikoSys.Setting.EditWindowStay := false;
1292 //
\83X
\83e
\83C
\8fó
\91Ô
\82Ì
\95Û
\91¶
1293 //GikoSys.Setting.EditWindowStay := FormStyle = fsStayOnTop;
1297 procedure TEditorForm.AbortActionExecute(Sender: TObject);
1302 procedure TEditorForm.SendActionUpdate(Sender: TObject);
1304 SendAction.Enabled := not FWork;
1307 procedure TEditorForm.SaveActionUpdate(Sender: TObject);
1309 SaveAction.Enabled := False;
1312 procedure TEditorForm.CloseActionUpdate(Sender: TObject);
1314 CloseAction.Enabled := not FWork;
1317 procedure TEditorForm.UndoActionUpdate(Sender: TObject);
1319 UndoAction.Enabled := (GetActiveControlHandle <> 0)
1320 and (SendMessage(GetActiveControlHandle, EM_CANUNDO, 0, 0) <> 0)
1324 procedure TEditorForm.CutActionUpdate(Sender: TObject);
1326 Selection: TSelection;
1329 AHandle := GetActiveControlHandle;
1330 SendMessage(AHandle, EM_GETSEL, Longint(@Selection.StartPos), Longint(@Selection.EndPos));
1331 CutAction.Enabled := (AHandle <> 0)
1332 and ((Selection.EndPos - Selection.StartPos) <> 0)
1336 procedure TEditorForm.CopyActionUpdate(Sender: TObject);
1338 Selection: TSelection;
1341 AHandle := GetActiveControlHandle;
1342 SendMessage(AHandle, EM_GETSEL, Longint(@Selection.StartPos), Longint(@Selection.EndPos));
1343 CopyAction.Enabled := (AHandle <> 0)
1344 and ((Selection.EndPos - Selection.StartPos) <> 0)
1348 procedure TEditorForm.PasteActionUpdate(Sender: TObject);
1350 PasteAction.Enabled := (GetActiveControlHandle <> 0)
1351 and (Clipboard.HasFormat(CF_TEXT))
1355 procedure TEditorForm.TopActionUpdate(Sender: TObject);
1357 TopAction.Enabled := not FWork;
1360 procedure TEditorForm.SageCheckBoxClick(Sender: TObject);
1362 if SageCheckBox.Checked then begin
1363 if AnsiPos('sage', MailComboBox.Text) = 0 then
1364 MailComboBox.Text := 'sage' + MailComboBox.Text;
1366 if AnsiPos('sage', MailComboBox.Text) <> 0 then
1367 MailComboBox.Text := StringReplace(MailComboBox.Text, 'sage', '', [rfReplaceAll]);
1371 procedure TEditorForm.MailComboBoxChange(Sender: TObject);
1373 if AnsiPos('sage', MailComboBox.Text) = 0 then
1374 SageCheckBox.Checked := False
1376 SageCheckBox.Checked := True;
1379 procedure TEditorForm.IdLogDebugReceive(ASender: TIdConnectionIntercept;
1382 StringStream: TStringStream;
1384 StringStream := TStringStream.Create('');
1386 StringStream.CopyFrom(AStream, AStream.Size);
1387 FDebugStrReceive := FDebugStrReceive + StringStream.DataString;
1393 procedure TEditorForm.IdLogDebugSend(ASender: TIdConnectionIntercept;
1396 StringStream: TStringStream;
1398 StringStream := TStringStream.Create('');
1400 StringStream.CopyFrom(AStream, AStream.Size);
1401 FDebugStrSend := FDebugStrSend + StringStream.DataString;
1407 procedure TEditorForm.TransActionExecute(Sender: TObject);
1409 AlphaBlend := TransAction.Checked;
1410 //
\94¼
\93§
\96¾
\8fó
\91Ô
\82Ì
\95Û
\91¶
1411 GikoSys.Setting.EditWindowTranslucent := TransAction.Checked;
1414 procedure TEditorForm.TransActionUpdate(Sender: TObject);
1416 TransAction.Enabled := not FWork;
1418 //StatusBar
\82ÌPanels[0]
\82Ì
\95\9d\82ð
\89Â
\95Ï
\81B
\8ec
\82è
\82ð
\8cÅ
\92è
\82É
\82·
\82é
1419 procedure TEditorForm.StatusBarResize(Sender: TObject);
1421 StatusBar.Panels[0].Width := StatusBar.Width
1422 - StatusBar.Panels[1].Width - StatusBar.Panels[2].Width;
1426 //Form
\82ªActive
\82É
\82È
\82Á
\82½
\82ç
\8dÅ
\8fI
\8f\91\82«
\8d\9e\82Ý
\8e\9e\8aÔ
\82ð
\93Ç
\82Ý
\8d\9e\82Þ
1427 procedure TEditorForm.FormActivate(Sender: TObject);
1429 if ( FSambaTimer.Enabled ) and ( FThreadItem <> nil ) then
1431 FNow := FSambaTimer.Update;
1433 if GikoSys.Setting.GestureEnabled then begin
1434 GikoSys.Setting.Gestures.ClearGesture;
1435 GikoSys.Setting.Gestures.LoadGesture(
1436 GikoSys.Setting.GetGestureFileName, ActionList );
1437 MouseGesture.UnHook;
1438 MouseGesture.OnGestureStart := OnGestureStart;
1439 MouseGesture.OnGestureMove := OnGestureMove;
1440 MouseGesture.OnGestureEnd := OnGestureEnd;
1441 MouseGesture.SetHook( Handle );
1444 procedure TEditorForm.FormCloseQuery(Sender: TObject;
1445 var CanClose: Boolean);
1447 CanClose := not FWork;
1450 procedure TEditorForm.QuotePasteActionExecute(Sender: TObject);
1457 quote := GikoSys.GetOEIndentChar;
1458 s := TStringList.Create;
1460 s.Text := Clipboard.AsText;
1462 for i := s.Count - 1 downto 0 do
1463 s[ i ] := quote + s[ i ];
1465 BodyEdit.SelText := s.Text;
1472 procedure TEditorForm.SpaceToNBSPActionExecute(Sender: TObject);
1474 GikoSys.Setting.SpaceToNBSP := SpaceToNBSPAction.Checked;
1475 if EditorPage.ActivePage = PreviewTab then
1479 procedure TEditorForm.AmpToCharRefActionExecute(Sender: TObject);
1481 GikoSys.Setting.AmpToCharRef := AmpToCharRefAction.Checked;
1482 if EditorPage.ActivePage = PreviewTab then
1486 procedure TEditorForm.BoardTopClick(Sender: TObject);
1490 ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
1492 BoardtopTab.TabVisible := BoardTop.Checked;
1493 ini.WriteBool('EditorForm', 'BoardTopTab', BoardtopTab.TabVisible);
1501 procedure TEditorForm.GetSETTINGTXTActionExecute(Sender: TObject);
1503 memStream: TMemoryStream;
1504 URL, RefURL: string;
1505 settingBody: TStringList;
1508 if not FWork then begin
1511 tmpBoard := GetBoard;
1512 if tmpBoard <> nil then begin
1514 RefURL := tmpBoard.URL;
1515 if RefURL[Length(RefURL)] <> '/' then
1516 URL := RefURL + '/' + 'SETTING.TXT'
1518 URL := RefURL + 'SETTING.TXT';
1519 Screen.Cursor := crHourGlass;
1520 memStream := TMemoryStream.Create;
1523 StatusBar.Panels[0].Text := 'SETTING.TXT
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86';
1524 GetWebData(URL, RefURL, tmpBoard.SETTINGTXTTime, memStream);
1525 if( Indy.ResponseCode = 200 ) then begin
1526 settingBody := TStringList.Create;
1528 memStream.Seek(0, soFromBeginning);
1529 settingBody.LoadFromStream(memStream);
1530 settingBody.SaveToFile(tmpBoard.GetSETTINGTXTFileName);
1531 tmpBoard.SETTINGTXTTime := Indy.Response.LastModified;
1532 tmpBoard.IsSETTINGTXT := true;
1533 tmpBoard.TitlePictureURL := GetTitlePictureURL(settingBody, tmpBoard);
1534 tmpBoard.Modified := true;
1538 StatusBar.Panels[0].Text := 'SETTING.TXT
\8eæ
\93¾
\8a®
\97¹(' + IntToStr(Indy.ResponseCode) + ')';
1541 on E: EIdException do begin
1542 if( AnsiPos('304', E.Message) > 0 ) then
1543 StatusBar.Panels[0].Text := 'SETTING.TXT
\8dX
\90V
\96³
\82µ(' + IntToStr(Indy.ResponseCode) + ')'
1545 StatusBar.Panels[0].Text := 'SETTING.TXT
\8eæ
\93¾
\83G
\83\89\81[(' + IntToStr(Indy.ResponseCode) + ')';
1550 Screen.Cursor := crDefault;
1552 ShowBoardInformation(tmpBoard, BoardInformationMemo);
1558 procedure TEditorForm.ShowBoardInformation(ABoard: TBoard; AMemo: TMemo);
1563 AMemo.Lines.Add('[SETTING.TXT]');
1564 if ABoard.IsSETTINGTXT then begin
1565 if FileExists(ABoard.GetSETTINGTXTFileName) then begin
1566 AMemo.Lines.Add(DateTimeToStr(ABoard.SETTINGTXTTime) + '
\8dX
\90V');
1567 body := TStringList.Create;
1569 body.LoadFromFile(ABoard.GetSETTINGTXTFileName);
1570 AMemo.Lines.AddStrings(body);
1575 ABoard.IsSETTINGTXT := false;
1576 ABoard.SETTINGTXTTime := ZERO_DATE;
1577 AMemo.Lines.Add('Local
\82É
\95Û
\91¶
\82³
\82ê
\82½SETTING.TXT
\82ª
\8c©
\82Â
\82©
\82è
\82Ü
\82¹
\82ñ');
1578 AMemo.Lines.Add('
\83\81\83j
\83\85\81[
\82æ
\82è
\8dÄ
\8eæ
\93¾
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
1581 AMemo.Lines.Add('SETTING.TXT
\82ð
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B');
1582 AMemo.Lines.Add('
\83\81\83j
\83\85\81[
\82æ
\82è
\8eæ
\93¾
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
1585 function TEditorForm.GetTitlePictureURL(body: TStringList; ABoard: TBoard): string;
1586 //BBS_TITLE_PICTURE=
1593 for i := 0 to body.Count - 1 do begin
1594 if (AnsiPos('BBS_TITLE_PICTURE=', body[i]) > 0) or
1595 (AnsiPos('BBS_FIGUREHEAD=', body[i]) > 0) then begin
1597 Delete(tmp, 1, AnsiPos('=', tmp));
1598 if AnsiPos('../', tmp) > 0 then begin
1599 tmp := CustomStringReplace(tmp, '../', GikoSys.UrlToServer(ABoard.URL));
1607 procedure TEditorForm.GetTitlePictureActionUpdate(Sender: TObject);
1609 if FThreadItem = nil then
1610 GetTitlePictureAction.Enabled := FBoard.IsSETTINGTXT
1612 GetTitlePictureAction.Enabled := FThreadItem.ParentBoard.IsSETTINGTXT;
1614 if GetTitlePictureAction.Enabled Then begin
1615 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
1616 GetTitlePictureAction.Enabled := not FWork;
1620 procedure TEditorForm.GetTitlePictureActionExecute(Sender: TObject);
1622 memStream: TMemoryStream;
1629 memStream := TMemoryStream.Create;
1631 tmpBoard := GetBoard;
1633 if (tmpBoard <> nil) and (tmpBoard.TitlePictureURL <> '') then begin
1634 StatusBar.Panels[0].Text := '
\94Â
\83g
\83b
\83v
\89æ
\91\9c\83_
\83E
\83\93\83\8d\81[
\83h
\92\86';
1635 Screen.Cursor := crHourGlass;
1637 // URL
\82ð
\8ew
\92è
\82µ
\82Ä
\83\81\83\82\83\8a\82É
\93Ç
\82Ý
\8d\9e\82Þ
1638 GetWebData(tmpBoard.TitlePictureURL, tmpBoard.URL,
1639 ZERO_DATE, memStream);
1640 if Indy.ResponseCode = 200 then begin
1641 memStream.SaveToFile(tmpBoard.GetTitlePictureFileName);
1643 tmpBoard.Modified := true;
1645 StatusBar.Panels[0].Text := '
\94Â
\83g
\83b
\83v
\89æ
\91\9c (' + IntToStr(Indy.ResponseCode) + ')';
1652 Screen.Cursor := crDefault;
1656 \brief URL
\82Ì
\83f
\81[
\83^
\82ðstream
\82É
\93Ç
\82Ý
\8d\9e\82Þ
1657 \param URL
\93Ç
\82Ý
\8d\9e\82Þ
\90æ
1658 \param RefURL referer
\82É
\90Ý
\92è
\82·
\82é
1659 \param Modified Modified
\82É
\90Ý
\92è
\82·
\82é
1660 \param stream
\93Ç
\82Ý
\8d\9e\82ñ
\82¾
\83f
\81[
\83^
\82Ì
\95Û
\91¶
\90æ
1662 procedure TEditorForm.GetWebData(const URL: string; const RefURL: string;
1663 Modified: TDateTime; stream: TStream);
1666 Indy.Request.Referer := RefURL;
1667 Indy.Request.LastModified := Modified;
1669 IdAntiFreeze.Active := True;
1671 Indy.Get(URL, stream);
1673 IdAntiFreeze.Active := False;
1677 procedure TEditorForm.ShowTitlePicture();
1682 tmpBoard := GetBoard;
1684 if FileExists(tmpBoard.GetTitlePictureFileName) then begin
1685 TitlePictureBrowser.Navigate(tmpBoard.GetTitlePictureFileName);
1687 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';
1688 SetContent(s, TitlePictureBrowser);
1692 function TEditorForm.GetFusianaName(body: TStringList; ABoard: TBoard): String;
1697 for i := 0 to body.Count - 1 do begin
1698 if (AnsiPos('BBS_NONAME_NAME=', body[i]) > 0) then begin
1700 Delete(tmp, 1, AnsiPos('=', tmp));
1707 procedure TEditorForm.GetHeadTXTActionExecute(Sender: TObject);
1709 URL, RefURL: string;
1710 settingBody: TStringList;
1712 memStream: TMemoryStream;
1714 if not FWork then begin
1717 tmpBoard := GetBoard;
1718 if (tmpBoard <> nil) then begin
1720 RefURL := tmpBoard.URL;
1721 if RefURL[Length(RefURL)] <> '/' then
1722 URL := RefURL + '/' + 'head.txt'
1724 URL := RefURL + 'head.txt';
1726 Screen.Cursor := crHourGlass;
1727 memStream := TMemoryStream.Create;
1729 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b(head.txt)
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86';
1731 GetWebData(URL, RefURL, tmpBoard.HEADTXTTime, memStream);
1732 if( Indy.ResponseCode = 200 ) then begin
1733 settingBody := TStringList.Create;
1735 memStream.Seek(0, soFromBeginning);
1736 settingBody.LoadFromStream(memStream);
1737 settingBody.Insert(0, '<HTML lang="ja"><HEAD>');
1738 settingBody.Insert(1, '<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">');
1739 settingBody.Insert(2, '<TITLE>' + tmpBoard.Title + '</TITLE>');
1740 settingBody.Insert(3, '<base href="' + RefURL + '"></HEAD><BODY>');
1741 settingBody.Add('</BODY></HTML>');
1742 settingBody.SaveToFile(tmpBoard.GETHEADTXTFileName);
1743 tmpBoard.HEADTXTTime := Indy.Response.LastModified;
1744 tmpBoard.IsHEADTXT := true;
1745 tmpBoard.Modified := true;
1749 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾
\8a®
\97¹(' + IntToStr(Indy.ResponseCode) + ')';
1752 on E: EIdException do begin
1753 if( AnsiPos('304', E.Message) > 0 ) then
1754 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8dX
\90V
\96³
\82µ(' + IntToStr(Indy.ResponseCode) + ')'
1756 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾
\83G
\83\89\81[(' + IntToStr(Indy.ResponseCode) + ')';
1761 Screen.Cursor := crDefault;
1763 if tmpBoard.IsHEADTXT then begin
1764 ShowBoardHead(tmpboard, LocalEdit);
1772 procedure TEditorForm.CalcCapacityActionExecute(Sender: TObject);
1778 //
\82Ç
\82¤
\82à
\81A
\89ü
\8ds
\95ª
\82¸
\82ê
\82Ä
\82½
\82Á
\82Û
\82¢
\82¯
\82Ç
\81A
\96{
\93\96\82©
\82æ
\82
\95ª
\82©
\82ç
\82È
\82¢
\81B
1781 if Board.BoardPlugIn <> nil then
1782 body := CustomStringReplace(body, #13#10, '<br>')
1784 body := CustomStringReplace(body, #13#10, ' <br> ');
1785 StatusBar.Panels[0].Text := '
\97e
\97Ê:' + IntToStr(Length(body)) + ' byte';
1788 procedure TEditorForm.LocalRuleClick(Sender: TObject);
1792 ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
1794 RocalRuleTab.TabVisible := LocalRule.Checked;
1795 ini.WriteBool('EditorForm', 'LocalRuleTab', RocalRuleTab.TabVisible);
1802 procedure TEditorForm.FormDeactivate(Sender: TObject);
1804 if GikoSys.Setting.GestureEnabled then begin
1805 GikoSys.Setting.Gestures.ClearGesture;
1806 MouseGesture.UnHook;
1807 MouseGesture.OnGestureStart := nil;
1808 MouseGesture.OnGestureMove := nil;
1809 MouseGesture.OnGestureEnd := nil;
1813 procedure TEditorForm.OnGestureStart(Sender: TObject);
1818 procedure TEditorForm.OnGestureMove(Sender: TObject);
1824 s := MouseGesture.GetGestureStr;
1826 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
1827 if Action <> nil then
1828 ActStr := '
\81i' + Action.Caption + '
\81j';
1829 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
1830 StatusBar.Panels[0].Text := s;
1833 procedure TEditorForm.OnGestureEnd(Sender: TObject);
1838 s := MouseGesture.GetGestureStr;
1840 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
1841 if Action <> nil then
1843 StatusBar.Panels[0].Text := '';
1846 procedure TEditorForm.ShowBoardHead(ABoard: TBoard; AMemo: TMemo);
1851 //http://www.campus.ne.jp/~ishigami/CREATION/TECHNIC/WEBAP-2.htm
1852 WebBrowser1.Navigate(ABoard.GETHEADTXTFileName);
1853 //
\83\8c\83^
\83\8a\83\93\83O
\82ª
\92x
\82·
\82¬
\82ÄTXT
\82É
\88Ú
\82¹
\82È
\82¢
\81B
\82Ê
\82é
\82Ûorz
1854 //
\89º
\82Ì
\82æ
\82¤
\82É
\82¿
\82á
\82ñ
\82Æ
\93Ç
\82Ý
\8d\9e\82Ý
\82ª
\8fI
\82í
\82Á
\82Ä
\82¢
\82é
\82©
\81A
\83`
\83F
\83b
\83N
\82·
\82ê
\82Î
\82¢
\82¢
\82ñ
\82¾
\82æ
\81B
1855 //
\82±
\82ê
\82Å
\82¢
\82¯
\82Ü
\82µ
\82½
\81B
\82 \82è
\82ª
\82Æ
\82¤
\82²
\82´
\82¢
\82Ü
\82µ
\82½
\81B
1856 while (WebBrowser1.ReadyState <> READYSTATE_COMPLETE) and
1857 (WebBrowser1.ReadyState <> READYSTATE_INTERACTIVE) do begin
1858 Application.ProcessMessages;
1863 range := OleVariant(WebBrowser1.Document).body.createTextRange;
1864 LocalEdit.Text := range.text;
1869 procedure TEditorForm.LocalRuleBrowseClick(Sender: TObject);
1879 URL := ABoard.GETHEADTXTFileName;
1880 GikoSys.OpenBrowser(URL, gbtAuto);
1883 procedure TEditorForm.SaveNameMailActionExecute(Sender: TObject);
1885 SaveNameMailAction.Checked := not SaveNameMailAction.Checked;
1886 KotehanCheckBox.Enabled := SaveNameMailAction.Checked;
1889 function TEditorForm.LFusianaGet(const s: String): Boolean;
1891 FUSIANA = 'fusianasan';
1895 i := AnsiPos(FUSIANA, s);
1899 procedure TEditorForm.BeLogInOutEActionExecute(Sender: TObject);
1901 GikoSys.Setting.BeLogin := not GikoSys.Setting.BeLogin;
1904 procedure TEditorForm.BeLogInOutEActionUpdate(Sender: TObject);
1906 if (GikoSys.Setting.BeUserID <> '') and (GikoSys.Setting.BeCode <> '') then begin
1907 if (GikoSys.Setting.BeLogin) then BeLogInOutEAction.Checked := true
1908 else BeLogInOutEAction.Checked := false;
1909 BeLogInOutEAction.Enabled := true
1911 BeLogInOutEAction.Enabled := false;
1914 // Cookie
\82Ì
\8eæ
\93¾
1915 procedure TEditorForm.GetCookie(CookieMng: TIdCookieManager; ABoard: TBoard);
1922 Cookie : TIdCookieRFC2109;
1923 curCookies : TStringList;
1925 // 2008.12.14
\96³
\8fð
\8c\8f\83N
\83\8a\83A
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢ by
\82à
\82¶
\82ã
1926 curCookies := TStringList.Create;
1927 curCookies.Delimiter := ';';
1928 curCookies.DelimitedText := ABoard.Cookie;
1929 ABoard.Cookie := '';
1931 for i := 0 to CookieMng.CookieCollection.Count - 1 do begin
1932 Cookie := CookieMng.CookieCollection.Items[i];
1933 if ( Cookie.CookieName = VAL_PON ) then begin
1934 ABoard.PON := Cookie.Value;
1935 ABoard.Expires := GMTToLocalDateTime(Cookie.Expires);
1936 end else if ( Cookie.CookieName = VAL_SPID ) then begin
1937 ABoard.SPID := Cookie.Value;
1938 ABoard.Expires := GMTToLocalDateTime(Cookie.Expires);
1939 end else if ( Cookie.CookieName = VAL_HAP ) then begin
1940 GikoSys.SetBoukenCookie(Cookie.Value, Cookie.Domain);
1942 if Length( curCookies.Values[ Cookie.CookieName ] ) > 0 then begin
1943 //
\8aù
\91¶
\92l
\82Ì
\95t
\82¯
\91Ö
\82¦
1944 curCookies[curCookies.IndexOfName(Cookie.CookieName)] :=
1948 curCookies.Add(Cookie.ClientCookie);
1952 for i := 0 to curCookies.Count - 1 do begin
1953 if (curCookies.Strings[i] <> '') then begin
1954 ABoard.Cookie := ABoard.Cookie + curCookies.Strings[i] + '; ';
1958 CookieMng.CookieCollection.Clear;
1962 //! hidden
\83f
\81[
\83^
\8eæ
\93¾
1963 procedure TEditorForm.GetHiddenParameter(Rawtext: String; ABoard: TBoard);
1965 INPUT_MARK = '<input type=hidden' ; //
\91å
\95¶
\8e\9a\8f¬
\95¶
\8e\9a\82Î
\82ç
\82Î
\82ç
\82È
\82±
\82Æ
\82É
\92\8d\88Ó
1966 VALUE_MARK = 'value=' ; //
\91å
\95¶
\8e\9a\8f¬
\95¶
\8e\9a\82Î
\82ç
\82Î
\82ç
\82È
\82±
\82Æ
\82É
\92\8d\88Ó
1967 NAME_MARK = 'name=' ; //
\91å
\95¶
\8e\9a\8f¬
\95¶
\8e\9a\82Î
\82ç
\82Î
\82ç
\82È
\82±
\82Æ
\82É
\92\8d\88Ó
1968 IGNORE_NAMES : array[0..6] of String =
1969 ('subject', 'from', 'mail', 'message', 'bbs', 'time', 'key');
1971 tmp, line, name, value, lname : String;
1972 pos, pose, i : Integer;
1974 tmp := AnsiLowerCase(Rawtext);
1975 pos := AnsiPos(INPUT_MARK, tmp);
1976 while (pos > 0 ) do begin
1977 tmp := Copy(Rawtext, pos + Length(INPUT_MARK), Length(tmp));
1978 Delete(Rawtext, 1, pos+ Length(INPUT_MARK) - 1);
1979 pose := AnsiPos('>', tmp);
1980 // name=xxx value=yyy
\82ª
\90Ø
\82è
\8fo
\82³
\82ê
\82é
1981 line := Copy(tmp, 1, pose - 1);
1984 pos := AnsiPos(NAME_MARK, tmp);
1985 if (pos > 0) then begin
1986 name := Copy(Rawtext, pos + Length(NAME_MARK), Length(line));
1987 //
\94¼
\8ap"
\82Å
\8en
\82Ü
\82Á
\82Ä
\82¢
\82é
\82©
1988 if AnsiPos('"', name) = 1 then begin
1989 //
\94¼
\8ap"
\82Ü
\82Å
\82ð
\83R
\83s
\81[
1991 pose := AnsiPos('"', name);
1992 if (pose > 0) then begin
1993 Delete(name, pose, Length(name));
1995 pose := AnsiPos(' ', name);
1996 if (pose > 0) then begin
1997 Delete(name, pose, Length(name));
2001 pose := AnsiPos(' ', name);
2002 if (pose > 0) then begin
2003 Delete(name, pose, Length(name));
2007 lname := AnsiLowerCase(name);
2008 for i := 0 to Length(IGNORE_NAMES) do begin
2009 if lname = IGNORE_NAMES[i] then begin
2014 pos := AnsiPos(VALUE_MARK, tmp);
2015 if (name <> '') and (pos > 0) then begin
2016 value := Copy(Rawtext, pos + Length(VALUE_MARK), Length(line));
2017 //
\94¼
\8ap"
\82Å
\8en
\82Ü
\82Á
\82Ä
\82¢
\82é
\82©
2018 if AnsiPos('"', value) = 1 then begin
2019 //
\94¼
\8ap"
\82Ü
\82Å
\82ð
\83R
\83s
\81[
2020 Delete(value, 1, 1);
2021 pose := AnsiPos('"', value);
2022 if (pose > 0) then begin
2023 Delete(value, pose, Length(value));
2025 pose := AnsiPos(' ', value);
2026 if (pose > 0) then begin
2027 Delete(value, pose, Length(value));
2031 pose := AnsiPos(' ', value);
2032 if (pose > 0) then begin
2033 Delete(value, pose, Length(name));
2037 if (name <> '') then begin
2038 ABoard.Cookie := ABoard.Cookie + name + '=' + value + '; ';
2041 Delete(tmp, 1, Length(line));
2042 Delete(Rawtext, 1, Length(line));
2043 pos := AnsiPos(INPUT_MARK, tmp);
2047 //!
\83T
\83\93\83o
\8dX
\90V
\82Ì
\83A
\83N
\83V
\83\87\83\93\82ÌUpdate
\83C
\83x
\83\93\83g
\81@
\8aÈ
\92P
\82Ì
\82½
\82ß
\83^
\83C
\83}
\81[
\82Æ
\93¯
\82¶
\82É
\82µ
\82Ä
\82¨
\82
2048 procedure TEditorForm.UpdateSambaActionUpdate(Sender: TObject);
2050 UpdateSambaAction.Enabled := FSambaTimer.Enabled;
2053 //!
\83T
\83\93\83o
\8dX
\90V
\83A
\83N
\83V
\83\87\83\93
2054 procedure TEditorForm.UpdateSambaActionExecute(Sender: TObject);
2059 if InputQuery('Samba24
\90Ý
\92è
\92l
\8dX
\90V', '
\90V
\82µ
\82¢
\90Ý
\92è
\92l
\82ð
\93ü
\97Í
\82µ
\82Ä
\82
\82¾
\82³
\82¢', input) then begin
2060 input := ZenToHan(input);
2061 if GikoSys.IsNumeric(input) then begin
2062 FSambaTimer.UpdateSambaSetting(StrToInt(input));
2064 //
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81ASamba
\83^
\83C
\83}
\81[
\82ð
\8dX
\90V
\82·
\82é
2065 for i := 0 to Screen.FormCount - 1 do begin
2066 if Screen.Forms[i] is TEditorForm then begin
2067 TEditorForm(Screen.Forms[i]).FSambaTimer.Update;
2068 TEditorForm(Screen.Forms[i]).UpdateSambaStatus;
2072 ShowMessage('
\90\94\92l
\82ð
\93ü
\97Í
\82µ
\82Ä
\82
\82¾
\82³
\82¢');
2073 UpdateSambaActionExecute(Sender);
2078 procedure TEditorForm.UpdateSambaStatus;
2080 if (FSambaTimer.Enabled) then begin
2081 StatusBar.Panels[2].Text
2082 := 'Samba24
\8bK
\92è
\92l' + IntToStr(FSambaTimer.SambaInterval);
2086 procedure TEditorForm.InputAssistActionExecute(Sender: TObject);
2092 TextWidth, ItemWidth, tmpWidth: Integer;
2094 if FInputAssistKey = '' then Exit;
2096 InputAssistPopupMenu.Items.Clear;
2098 if (FResistWords = nil) then begin
2099 FResistWords := TStringList.Create;
2104 if (GetKeyState( VK_SHIFT ) < 0) then begin
2105 //
\83V
\83t
\83g
\82ª
\89\9f\82³
\82ê
\82Ä
\82¢
\82ê
\82Î
\81A
\83L
\81[
\82Å
\8en
\82Ü
\82é
\83J
\83e
\83S
\83\8a
2107 InputAssistDM.GetStartWithCategoryResistWords(
2108 FInputAssistKey, FResistWords);
2110 //
\83V
\83t
\83g
\82ª
\96³
\82¢
\82Ì
\82Å
\81A
\83L
\81[
\82Å
\8en
\82Ü
\82é
\83L
\81[
2112 InputAssistDM.GetStartWithKeyResistWords(
2113 FInputAssistKey, FResistWords);
2115 Bitmap := TBitmap.Create;
2117 Bitmap.Canvas.Font.Assign(BodyEdit.Font);
2118 //
\83}
\81[
\83W
\83\935px
2119 TextWidth := Bitmap.Canvas.TextWidth(FInputAssistKey) + 5;
2121 for i := 0 to count - 1 do begin
2122 item := TMenuItem.Create(nil);
2123 item.Break := mbNone;
2124 item.Caption := FResistWords[i];
2126 item.OnClick := InputAssistMenuClick;
2127 InputAssistPopupMenu.Items.Add(item);
2129 tmpWidth := Bitmap.Canvas.TextWidth(Item.Caption);
2130 if (tmpWidth > ItemWidth) then begin
2131 ItemWidth := tmpWidth;
2138 if (count > 0) then begin
2140 point.X := point.X + Self.Left + (Self.Width - BodyEdit.Width) div 2;
2141 point.Y := point.Y + Self.Top + (Self.Height - Self.ClientHeight);
2143 if Screen.DesktopWidth >
2144 (point.X + TextWidth + ItemWidth) then begin
2145 InputAssistPopupMenu.Popup(
2146 point.X + TextWidth,
2147 point.Y + EditorPage.Top + EditorPage.TabHeight + BodyEdit.Top);
2149 InputAssistPopupMenu.Popup(
2150 point.X - TextWidth - ItemWidth,
2151 point.Y + EditorPage.Top + EditorPage.TabHeight + BodyEdit.Top);
2156 procedure TEditorForm.InputAssistMenuClick(Sender: TObject);
2161 if not (Sender is TMenuItem) then Exit;
2163 if (FResistWords <> nil) then begin
2166 TResistWord(FResistWords.Objects[TMenuItem(Sender).Tag]).GetText;
2170 IMC := ImmGetContext(BodyEdit.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
2172 ImmNotifyIME(IMC, NI_COMPOSITIONSTR, CPS_CANCEL, 0);
2174 ImmReleaseContext(BodyEdit.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
2178 FInputAssistKey := '';
2180 InsertText(BodyEdit, text);
2183 //! TMemo
\82Ì
\83J
\81[
\83\
\83\8b\88Ê
\92u
\82É
\95¶
\8e\9a\97ñ
\91}
\93ü
2184 procedure TEditorForm.InsertText(Memo: TMemo; Text: String);
2186 line, sel, pos: Integer;
2187 left, right : String;
2189 Memo.Lines.BeginUpdate;
2190 line := SendMessage(Memo.Handle,EM_LINEFROMCHAR,-1,0); //
\8ds
2191 sel := Memo.SelStart;
2192 pos := sel - SendMessage(Memo.Handle, EM_LINEINDEX, -1, 0); //
\8c\85
2193 if (pos > 0) then begin
2194 left := Copy(Memo.Lines[line], 0, pos);
2198 right := Copy(Memo.Lines[line], pos + 1, Length(Memo.Lines[line]));
2199 Memo.Lines.Strings[line] := left + Text + right;
2200 Memo.Lines.EndUpdate;
2201 //
\81@
\83L
\83\83\83\8c\83b
\83g
\82Ì
\88Ê
\92u
\82ð
\8dX
\90V
\82·
\82é
2202 Memo.SelStart := sel + Length(text);
2203 //
\83L
\83\83\83\8c\83b
\83g
\82Ì
\88Ê
\92u
\82Ü
\82Å
\83X
\83N
\83\8d\81[
\83\8b
2204 Memo.Perform(EM_SCROLLCARET, 0, 0);
2208 procedure TEditorForm.ApplicationEvents1Message(var Msg: tagMSG;
2209 var Handled: Boolean);
2216 if (Self.Active) then begin
2218 //
\83L
\81[
\89\9f\89º
\82Ì
\82Ý
\8eó
\82¯
\8eæ
\82é
2221 //
\83^
\83u
\82ª
\81h
\95Ò
\8fW
\81h
\82ÅCtrl
\83L
\81[
\82ª
\89\9f\82³
\82ê
\82Ä
\82¢
\82é
\82Ì
\82ð
\8am
\94F
\82·
\82é
2222 if (EditorPage.ActivePageIndex = 0)
2223 and (GetKeyState( VK_CONTROL ) < 0) then begin
2224 wmMsg.Msg := Msg.message;
2225 wmMsg.CharCode := Word(Msg.wParam);
2226 wmMsg.KeyData := Msg.lParam;
2227 if (wmMsg.CharCode = 229) and (wmMsg.KeyData = 3735553) then begin
2228 IMC := ImmGetContext(BodyEdit.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
2229 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
2230 if (Len > 0) then begin
2231 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
2232 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
2233 SetLength(Str, Len);
2234 FInputAssistKey := Str;
2235 InputAssistActionExecute(nil);
2238 ImmReleaseContext(BodyEdit.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
2247 procedure TEditorForm.ShowInputAssistFormExecute(Sender: TObject);
2249 form : TInputAssistForm;
2251 form := TInputAssistForm.Create(nil);
2253 if TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
2254 SetWindowPos(form.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2256 form.SetUpFromEditor;
2257 if (form.ShowModal = mrOk) then begin
2258 InsertText(BodyEdit, form.GetInsertText);
2264 //! Cookie
\8fî
\95ñ
\8dí
\8f\9c
2265 procedure TEditorForm.ReleaseCookieActionExecute(Sender: TObject);
2269 //
\83X
\83\8c\83b
\83h
\82ª
\96³
\82¢
\81@
\83X
\83\8c\97§
\82Ä
\82Ì
\82Æ
\82«
\82ÍFBoard
\82ð
\92¼
\90Ú
\8eg
\82¤
2272 //
\83N
\83b
\83L
\81[
\82Ì
\8fî
\95ñ
\82ð
\8eÌ
\82Ä
\82é
2276 // 0
\82É
\8aª
\82«
\96ß
\82·
2279 //!
\94Â
\8fî
\95ñ
\8eæ
\93¾Update
\83C
\83x
\83\93\83g
2280 procedure TEditorForm.GetSETTINGTXTActionUpdate(Sender: TObject);
2282 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
2283 GetSETTINGTXTAction.Enabled := not FWork;
2285 //!
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾Update
\83C
\83x
\83\93\83g
2286 procedure TEditorForm.GetHeadTXTActionUpdate(Sender: TObject);
2288 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
2289 GetSETTINGTXTAction.Enabled := not FWork;
2292 //! Samba
\83^
\83C
\83}
\81[
\83C
\83x
\83\93\83g
2293 procedure TEditorForm.SambaTimer(Sender: TObject);
2296 if FSambaTimer.WriteDeta = ZERO_DATE then
2297 StatusBar.Panels[1].Text := '
\8f\89\8f\91'
2299 FNow := IncMilliSecond(FNow, 500);
2300 StatusBar.Panels[1].Text :=
2301 Format('%8.0f
\95b
\8co
\89ß', [SecondSpan(FNow, FSambaTimer.WriteDeta)]);
2305 \brief
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82Æ
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
2307 procedure TEditorForm.SetWindowRect;
2309 wp: TWindowPlacement;
2311 //
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\90Ý
\92è
2312 wp.length := sizeof(wp);
2313 wp.rcNormalPosition.Top := GikoSys.Setting.EditWindowTop;
2314 wp.rcNormalPosition.Left := GikoSys.Setting.EditWindowLeft;
2316 wp.rcNormalPosition.Bottom := GikoSys.Setting.EditWindowTop + GikoSys.Setting.EditWindowHeight;
2317 wp.rcNormalPosition.Right := GikoSys.Setting.EditWindowLeft + GikoSys.Setting.EditWindowWidth;
2318 wp.showCmd := SW_HIDE;
2319 SetWindowPlacement(Handle, @wp);
2321 if GikoSys.Setting.EditWindowMax then begin
2322 WindowState := wsMaximized;
2325 //
\83E
\83B
\83\93\83h
\83E
\82ª
\89æ
\96Ê
\8aO
\82È
\82ç
\89æ
\96Ê
\93à
\82É
\88Ú
\93®
\82·
\82é
2326 if (Left + Width) > Screen.Width then begin
2329 if (Top + Height) > Screen.Height then begin
2332 if Left < 0 then begin
2335 if Top < 0 then begin
2339 //
\8c»
\8dÝ
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82ð
\95Û
\91¶
2340 GikoSys.Setting.EditWindowTop := Top + WINDOWMOVE_V; //
\8e\9f\82É
\8aJ
\82
\83E
\83B
\83\93\83h
\83E
\82Í
2341 GikoSys.Setting.EditWindowLeft := Left + WINDOWMOVE_H; //
\81@
\81@
\81@
\89E
\8eÎ
\82ß
\89º
\82É
\82¸
\82ç
\82·
2342 //
\83E
\83B
\83\93\83h
\83E
\82Ì
\95\9d\82Æ
\8d\82\82³
\82ª
\8f¬
\82³
\82·
\82¬
\82¢
\82ê
\82Î
\8c³
\82É
\96ß
\82·
2343 if GikoSys.Setting.EditWindowHeight < 144 then begin
2346 if GikoSys.Setting.EditWindowWidth < 144 then begin
2351 \brief
\8ag
\92£
\83^
\83u
\90Ý
\92è
2353 procedure TEditorForm.SetExtraTab;
2355 SECTION = 'EditorForm';
2359 ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
2361 BoardtopTab.TabVisible := ini.Readbool(SECTION, 'BoardTopTab', False);
2362 BoardTop.Checked := BoardtopTab.TabVisible;
2363 RocalRuleTab.TabVisible := ini.ReadBool(SECTION, 'LocalRuleTab', False);
2364 LocalRule.Checked := RocalRuleTab.TabVisible;
2371 \return
\83\8c\83X
\83G
\83f
\83B
\83^
\82ª
\93\8a\8de
\82µ
\82æ
\82¤
\82Æ
\82µ
\82Ä
\82¢
\82é
\94Â
2373 function TEditorForm.GetBoard : TBoard;
2375 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ªnull
\82Ì
\8e\9e\82ÍFBoard
2376 if FThreadItem = nil then begin
2379 Result := FThreadItem.ParentBoard;
2383 \brief GikoForm
\82É
\83\81\83b
\83Z
\81[
\83W
\82ð
\92Ç
\89Á
\82·
\82é
2384 \param icon
\83\81\83b
\83Z
\81[
\83W
\82É
\82Â
\82
\83A
\83C
\83R
\83\93
2386 procedure TEditorForm.AddFormMessageNew(icon: TGikoMessageIcon);
2388 if FThreadItem = nil then begin
2389 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, icon)
2391 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, icon);
2396 \brief
\83\8d\81[
\83J
\83\8bfusiana
\83g
\83\89\83b
\83v
2397 \return true:
\91\97\90M
\92\86\8e~ false:
\91\97\90M
2399 function TEditorForm.isLocalFusianaTrap: Boolean;
2404 if GikoSys.Setting.LocalTrapAtt then begin
2405 Namae := THTMLCreate.RepHtml(NameComboBox.Text);
2406 if (LFusianaGet(Namae)) or (Namae = '
\8eR
\8dè
\8fÂ') then begin
2407 if FusianaMsgBox = IDNO then begin
2414 \brief
\83\8a\83\82\81[
\83gfusiana
\83g
\83\89\83b
\83v
2415 \return true:
\91\97\90M
\92\86\8e~ false:
\91\97\90M
2417 function TEditorForm.isRemoteFusianaTrap: Boolean;
2425 Namae := THTMLCreate.RepHtml(NameComboBox.Text);
2426 if (GikoSys.Setting.RemoteTrapAtt) and (Length(Namae) = 0) then begin
2429 if Board = nil then Exit;
2431 if not FileExists(Board.GetSETTINGTXTFileName) then begin
2432 //Setting.txt
\82ª
\82È
\82©
\82Á
\82½
\82ç
\8eæ
\93¾
2433 //
\8eI
\82É
\95\89\89×
\82ª
\82©
\82©
\82è
\82»
\82¤...
2435 GetSETTINGTXTAction.Execute;
2441 if FileExists(Board.GetSETTINGTXTFileName) then begin
2442 body := TStringList.Create;
2444 body.LoadFromFile(Board.GetSETTINGTXTFileName);
2445 Remote := GetFusianaName(body, Board);
2451 if LFusianaGet(Remote) then begin
2452 if FusianaMsgBox = IDNO then begin
2459 \brief Header
\95¶
\8e\9a\97ñ
\8eæ
\93¾
2460 \param ACOOKIE Cookie
2465 \return Header
\95¶
\8e\9a\97ñ
2467 function TEditorForm.getHeaderStr(const ACOOKIE: string; const SPID : string;
2468 const PON : string; const HAP : string; Board : TBoard) : string;
2473 Result := Result + 'SPID=' + SPID + '; ';
2475 Result := Result + 'PON=' + PON + '; ';
2477 //
\83z
\83X
\83g
\82ª2ch
\82Å
\81ABe
\82ÉLogin
\82µ
\82Ä
\82¢
\82ê
\82ÎBE
\82Ì
\83f
\81[
\83^
\82ð
\91\97\82é
2478 //GikoSys.ParseURI( URL, Protocol,Host, Path, Document, Port, Bookmark );
2479 //if GikoSys.Is2chHost(Host) and GikoSys.Setting.BeLogin then
2480 if (Board.Is2ch) then begin
2481 //
\8cÅ
\92è
\82Ì
\83N
\83b
\83L
\81[
\82ª
\82 \82ê
\82Î
\90H
\82í
\82¹
\82é
2482 if Length(GikoSys.Setting.FixedCookie) > 0 then begin
2483 //
\83z
\83X
\83g
\82ª2ch
\82Ì
\8fê
\8d\87\81C
\8cÅ
\92è
\82Ì
\83N
\83b
\83L
\81[
\82ð
\90H
\82í
\82¹
\82é
2484 Result := Result + GikoSys.Setting.FixedCookie + '; ';
2486 if (GikoSys.Setting.BeLogin) then begin
2487 Result := Result + 'MDMD=' + GikoSys.Setting.BeCode + '; '
2488 + 'DMDM=' + GikoSys.Setting.BeUserID + '; ';
2492 Result := 'Cookie: ' + Result + 'NAME=' + NameComboBox.Text + '; MAIL=' + MailComboBox.Text;
2495 Result := Result + #13#10'Cookie: HAP=' + HAP + '; ';
2499 \brief fusiana
\8cx
\8d\90\83_
\83C
\83A
\83\8d\83O
2500 \return IDYES
\8f\91\82«
\8d\9e\82Þ IDNO
\92\86\8e~
2502 function TEditorForm.FusianaMsgBox: Integer;
2504 MSG_FUSIANA : string = '
\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 +
2505 '
\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' +
2506 #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';
2508 Result := MsgBox(Handle, MSG_FUSIANA, '
\8fî
\95ñ',
2509 MB_YESNO or MB_ICONQUESTION);
2512 \brief
\98A
\93\8a\83\82\81[
\83hON/OFF
\90Ø
\82è
\91Ö
\82¦
2514 procedure TEditorForm.ContinueModeActionExecute(Sender: TObject);
2516 ContinueModeAction.Checked := not ContinueModeAction.Checked;
2519 \brief
\98A
\93\8a\83\82\81[
\83h
\8dX
\90V
\8f\88\97\9d
2521 procedure TEditorForm.ContinueModeActionUpdate(Sender: TObject);
2523 //
\83X
\83\8c\82½
\82Ä
\82Ì
\82Æ
\82«
\82Í
\96³
\8cø
2524 ContinueModeAction.Enabled := FThreadItem <> nil;
2527 \brief
\8f\91\82«
\8d\9e\82Þ
\94Â/
\83X
\83\8c\83b
\83h
\82ð
\95\
\8e¦
\82·
\82é
2529 procedure TEditorForm.OpenSendTargetActionExecute(Sender: TObject);
2531 if (FThreadItem <> nil) then begin
2532 //
\83\81\83C
\83\93\82ð
\8dX
\90V
\82µ
\82Ä
\82µ
\82Ü
\82¤
\82Ì
\82Å
\89æ
\96Ê
\82ª
\83p
\83^
\83p
\83^
\90Ø
\82è
\91Ö
\82í
\82é
\82Ì
\82ð
\96h
\82®
\82½
\82ß
\82É
2533 //
\91O
\96Ê
\82Å
\8cÅ
\92è
\82·
\82é
2534 if not (fsShowing in Self.FormState) then begin
2535 //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
2536 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2539 //
\83X
\83\8c\83b
\83h
2540 GikoForm.InsertBrowserTab(FThreadItem, True);
2542 if not TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\89ð
\8f\9c
2543 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2549 GikoForm.SelectTreeNode(
2553 procedure TEditorForm.ReloadTargetActionExecute(Sender: TObject);
2555 if (FThreadItem <> nil) then begin
2556 //
\83X
\83\8c\83b
\83h
2557 //
\83\81\83C
\83\93\82ð
\8dX
\90V
\82µ
\82Ä
\82µ
\82Ü
\82¤
\82Ì
\82Å
\89æ
\96Ê
\82ª
\83p
\83^
\83p
\83^
\90Ø
\82è
\91Ö
\82í
\82é
\82Ì
\82ð
\96h
\82®
\82½
\82ß
\82É
2558 //
\91O
\96Ê
\82Å
\8cÅ
\92è
\82·
\82é(
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\94
\90¶
\82·
\82é
\82Æ
\90Ø
\82è
\91Ö
\82í
\82Á
\82Ä
\82µ
\82Ü
\82¤
\82ª
\82 \82«
\82ç
\82ß
\82é)
2559 if not (fsShowing in Self.FormState) then begin
2560 //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
2561 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2564 GikoForm.DownloadContent(FThreadItem);
2566 if not TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\89ð
\8f\9c
2567 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2573 GikoForm.DownloadList(GetBoard);
2576 //!
\8cë
\94\9a\83`
\83F
\83b
\83N
2577 function TEditorForm.isGobaku: Boolean;
2579 MSG_GOBAKU : string =
2580 '
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é%s
\82Æ
\93\8a\8de
\90æ
\82Ì%s
\82ª
\88Ù
\82È
\82è
\82Ü
\82·
\81B'#13#10 +
2581 '
\82±
\82Ì
\82Ü
\82Ü
\8f\91\82«
\8d\9e\82Ý
\82Ü
\82·
\82©
\81H';
2583 ThreadItem : TThreadItem;
2588 //
\83I
\83v
\83V
\83\87\83\93\97L
\8cø
\82©
\82Â
\83\8c\83X
\91\97\90M
\82Å
\82Ì
\82Ý
\97L
\8cø
2589 if (GikoSys.Setting.UseGobakuCheck) then begin
2590 //
\83\8c\83X
\91\97\90M
2591 if (FThreadItem <> nil) then begin
2592 ThreadItem := GikoForm.GetActiveContent(False);
2593 if (ThreadItem <> nil) then begin
2594 if (FThreadItem <> ThreadItem) then begin
2595 msg := Format(MSG_GOBAKU, ['
\83X
\83\8c\83b
\83h', '
\83X
\83\8c\83b
\83h']);
2596 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2599 if GikoForm.ActiveList is TBBS then begin
2600 if TBBS(GikoForm.ActiveList) <> FThreadItem.ParentBoard.ParentCategory.ParenTBBS then begin
2601 msg := Format(MSG_GOBAKU, ['BBS', '
\83X
\83\8c\83b
\83h
\82Ì
\8f\8a\91®
\82·
\82éBBS']);
2602 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2604 end else if GikoForm.ActiveList is TCategory then begin
2605 if TCategory(GikoForm.ActiveList).FindThreadFromURL(FThreadItem.URL) = nil then begin
2606 msg := Format(MSG_GOBAKU, ['
\83J
\83e
\83S
\83\8a', '
\83X
\83\8c\83b
\83h
\82Ì
\8f\8a\91®
\82·
\82é
\83J
\83e
\83S
\83\8a']);
2607 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2609 end else if GikoForm.ActiveList is TBoard then begin
2610 if TBoard(GikoForm.ActiveList) <> FThreadItem.ParentBoard then begin
2611 msg := Format(MSG_GOBAKU, ['
\94Â', '
\83X
\83\8c\83b
\83h
\82Ì
\8f\8a\91®
\82·
\82é
\94Â']);
2612 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2617 //
\83X
\83\8c\82½
\82Ä
2618 if GikoForm.ActiveList is TBBS then begin
2619 if TBBS(GikoForm.ActiveList) <> FBoard.ParentCategory.ParenTBBS then begin
2620 msg := Format(MSG_GOBAKU, ['BBS', '
\94Â
\82Ì
\8f\8a\91®
\82·
\82éBBS']);
2621 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2623 end else if GikoForm.ActiveList is TCategory then begin
2624 if TCategory(GikoForm.ActiveList).FindBoardFromURL(FBoard.URL) = nil then begin
2625 msg := Format(MSG_GOBAKU, ['
\83J
\83e
\83S
\83\8a', '
\94Â
\82Ì
\8f\8a\91®
\82·
\82é
\83J
\83e
\83S
\83\8a']);
2626 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2628 end else if GikoForm.ActiveList is TBoard then begin
2629 if TBoard(GikoForm.ActiveList) <> FBoard then begin
2630 msg := Format(MSG_GOBAKU, ['
\94Â', '
\94Â']);
2631 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;