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, WideMemo;
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, grtNinpou, grtNinpouErr, grtSuiton);
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;
130 ApplicationEvents1: TApplicationEvents;
131 ToolButton8: TToolButton;
132 ToolButton9: TToolButton;
133 ShowInputAssistForm: TAction;
134 ReleaseCookieAction: TAction;
136 ContinueModeAction: TAction;
137 ToolButton10: TToolButton;
138 ToolButton11: TToolButton;
139 OpenSendTargetAction: TAction;
140 ReloadTargetAction: TAction;
147 procedure EditorPageChange(Sender: TObject);
148 procedure FormCreate(Sender: TObject);
149 procedure BrowserStatusTextChange(Sender: TObject;
150 const Text: WideString);
151 procedure FormClose(Sender: TObject; var Action: TCloseAction);
152 procedure FormDestroy(Sender: TObject);
153 procedure SendActionExecute(Sender: TObject);
154 procedure SaveActionExecute(Sender: TObject);
155 procedure AbortActionExecute(Sender: TObject);
156 procedure CloseActionExecute(Sender: TObject);
157 procedure UndoActionExecute(Sender: TObject);
158 procedure CutActionExecute(Sender: TObject);
159 procedure CopyActionExecute(Sender: TObject);
160 procedure PasteActionExecute(Sender: TObject);
161 procedure SendActionUpdate(Sender: TObject);
162 procedure SaveActionUpdate(Sender: TObject);
163 procedure CloseActionUpdate(Sender: TObject);
164 procedure UndoActionUpdate(Sender: TObject);
165 procedure CutActionUpdate(Sender: TObject);
166 procedure CopyActionUpdate(Sender: TObject);
167 procedure PasteActionUpdate(Sender: TObject);
168 procedure TopActionExecute(Sender: TObject);
169 procedure TopActionUpdate(Sender: TObject);
170 procedure SageCheckBoxClick(Sender: TObject);
171 procedure MailComboBoxChange(Sender: TObject);
172 procedure TransActionExecute(Sender: TObject);
173 procedure TransActionUpdate(Sender: TObject);
174 procedure IdLogDebugReceive(ASender: TIdConnectionIntercept;
176 procedure IdLogDebugSend(ASender: TIdConnectionIntercept;
178 procedure SelectAllActionExecute(Sender: TObject);
179 procedure StatusBarResize(Sender: TObject);
180 procedure FormActivate(Sender: TObject);
181 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
182 procedure QuotePasteActionExecute(Sender: TObject);
183 procedure SpaceToNBSPActionExecute(Sender: TObject);
184 procedure AmpToCharRefActionExecute(Sender: TObject);
185 procedure BoardTopClick(Sender: TObject);
186 procedure GetSETTINGTXTActionExecute(Sender: TObject);
187 procedure GetTitlePictureActionUpdate(Sender: TObject);
188 procedure GetTitlePictureActionExecute(Sender: TObject);
189 procedure GetHeadTXTActionExecute(Sender: TObject);
190 procedure CalcCapacityActionExecute(Sender: TObject);
191 procedure LocalRuleClick(Sender: TObject);
192 procedure FormDeactivate(Sender: TObject);
193 procedure LocalRuleBrowseClick(Sender: TObject);
194 procedure SaveNameMailActionExecute(Sender: TObject);
195 procedure BeLogInOutEActionExecute(Sender: TObject);
196 procedure BeLogInOutEActionUpdate(Sender: TObject);
197 procedure UpdateSambaActionUpdate(Sender: TObject);
198 procedure UpdateSambaActionExecute(Sender: TObject);
199 procedure InputAssistActionExecute(Sender: TObject);
200 procedure ApplicationEvents1Message(var Msg: tagMSG;
201 var Handled: Boolean);
202 procedure ShowInputAssistFormExecute(Sender: TObject);
203 procedure ReleaseCookieActionExecute(Sender: TObject);
204 procedure GetSETTINGTXTActionUpdate(Sender: TObject);
205 procedure GetHeadTXTActionUpdate(Sender: TObject);
206 procedure ContinueModeActionExecute(Sender: TObject);
207 procedure ContinueModeActionUpdate(Sender: TObject);
208 procedure OpenSendTargetActionExecute(Sender: TObject);
209 procedure ReloadTargetActionExecute(Sender: TObject);
211 FThreadItem: TThreadItem;
213 FNameComboEdit: THandle;
214 FMailComboEdit: THandle;
217 FStatusCode: Integer;
218 FDebugStrReceive: string;
219 FDebugStrSend: string;
221 FInputAssistKey: String; ///<
\93ü
\97Í
\83A
\83V
\83X
\83g
\82Ì
\83L
\81[
222 FResistWords: TStringList; ///<
\93ü
\97Í
\83A
\83V
\83X
\83g
\82Ì
\8e«
\8f\91\82©
\82ç
\82Ì
\8c\9f\8dõ
\8c\8b\89Ê
223 FSambaTimer: TSambaTimer; ///< Samba
\91Î
\8dô
\82Ì
\83^
\83C
\83}
\81[
224 FCookieDomain: string; ///<
\94E
\96@
\92\9f\83h
\83\81\83C
\83\93
226 BodyEditUC: TWideMemo;
228 function Check: Boolean;
229 procedure SetNameList(sName, sMail: string);
230 procedure Send(const ACOOKIE: string; const SPID: string; const PON: string; FirstWriting: Boolean);
231 function GetActiveControlHandle: THandle;
232 procedure GetSendData(Source: TStringStream);
233 procedure SaveSendFile;
234 procedure SetContent(Content: string; ABrowser: TWebBrowser);
235 function GetResultType(ResponseText: string): TGikoResultType;
236 ///
\96{
\95¶
\82Ì
\8eæ
\93¾
237 function GetBody : string;
238 //IdHttp
\82Ì
\8f\89\8aú
\89»
239 procedure InitIdHTTP(http: TIdHTTP);
240 procedure ShowBoardInformation(ABoard: TBoard; AMemo: TMemo);
241 function GetTitlePictureURL(body: TStringList; ABoard: TBoard): string;
242 procedure ShowTitlePicture();
243 function GetFusianaName(body: TStringList; ABoard: TBoard): String;
244 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
245 procedure OnGestureStart(Sender: TObject);
246 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
247 procedure OnGestureMove(Sender: TObject);
248 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
249 procedure OnGestureEnd(Sender: TObject);
250 //HEAD.TXT
\8e©
\93®
\95\
\8e¦
251 procedure ShowBoardHead(ABoard: TBoard; AMemo: TMemo);
252 //LocalFusianaTrapAlart
253 function LFusianaGet(const s: String): Boolean;
254 // Cookie
\82Ì
\8eæ
\93¾
255 procedure GetCookie(CookieMng: TIdCookieManager; ABoard: TBoard);
256 // hidden
\83f
\81[
\83^
\8eæ
\93¾
257 procedure GetHiddenParameter(Rawtext: String; ABoard: TBoard);
258 //!
\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
259 procedure InputAssistMenuClick(Sender: TObject);
260 //! TMemo
\82Ì
\83J
\81[
\83\
\83\8b\88Ê
\92u
\82É
\95¶
\8e\9a\97ñ
\91}
\93ü
261 procedure InsertText(Memo: TMemo; Text: String);
262 //!
\91\97\90M
\92\86\8e~
263 procedure CancelSend(ABoard: TBoard; ASysMenu: HMENU);
264 //! Samba
\83^
\83C
\83}
\81[
\83C
\83x
\83\93\83g
265 procedure SambaTimer(Sender: TObject);
266 //!
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82Æ
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
267 procedure SetWindowRect;
268 //!
\8ag
\92£
\83^
\83u
\90Ý
\92è
269 procedure SetExtraTab;
271 function GetBoard : TBoard;
272 //! URL
\82Ì
\83f
\81[
\83^
\82ðstream
\82É
\8eæ
\82è
\8d\9e\82Þ
273 procedure GetWebData(const URL: string; const RefURL: string;
274 Modified: TDateTime; stream: TStream);
275 //! GikoForm
\82É
\90V
\92\85\83\81\83b
\83Z
\81[
\83W
\82ð
\92Ç
\89Á
\82·
\82é
276 procedure AddFormMessageNew(icon: TGikoMessageIcon);
277 //!
\83\8d\81[
\83J
\83\8bfusiana
\83g
\83\89\83b
\83v
278 function isLocalFusianaTrap: Boolean;
279 //!
\83\8d\81[
\83J
\83\8bfusiana
\83g
\83\89\83b
\83v
280 function isRemoteFusianaTrap: Boolean;
281 //! Header
\95¶
\8e\9a\97ñ
\8eæ
\93¾
282 function getHeaderStr(const ACOOKIE: string; const SPID : string;
283 const PON : string; const HAP : string; Board : TBoard) : string;
284 //! fusiana
\8cx
\8d\90\83_
\83C
\83A
\83\8d\83O
285 function FusianaMsgBox: Integer;
286 //! sent.ini
\83t
\83@
\83C
\83\8b\82Ì
\90¶
\90¬
287 function CreateSentIniFile: TMemIniFile;
288 //!
\8cë
\94\9a\83`
\83F
\83b
\83N
289 function isGobaku: Boolean;
291 procedure CreateParams(var Params: TCreateParams); override;
295 procedure SetThreadItem(Item: TThreadItem);
296 procedure SetBoard(Item: TBoard);
297 procedure UpdateSambaStatus;
298 procedure SetFocusEdit;
299 procedure SetTextEdit(TextSrc: String);
300 property BBSID: string read FBBSID write FBBSID;
306 Giko, ItemDownload, MojuUtils, IdGlobal, GikoMessage, Imm,
307 InputAssistDataModule, InputAssist, HTMLCreate, IdCookie, GikoDataModule,
310 CAPTION_NAME_NEW: string = '
\83M
\83R
\83i
\83r
\83X
\83\8c\97§
\82Ä
\83G
\83f
\83B
\83^';
311 CAPTION_NAME_RES: string = '
\83M
\83R
\83i
\83r
\83\8c\83X
\83G
\83f
\83B
\83^';
313 //
\83G
\83f
\83B
\83b
\83g
\83E
\83B
\83\93\83h
\83E
\82ð
\89E
\89º
\82É
\82¸
\82ç
\82µ
\82Ä
\8aJ
\82
\88Ú
\93®
\97Ê
317 //DAX
\82³
\82ñ±Ø¶ÞÄ!(
\81L
\81¤
\81M)
318 READCGI_ERR = '-ERR';
319 READCGI_INCR = '-INCR';
321 READCGI_PARTIAL = '+PARTIAL';
322 READCGI_ERR_FOUND_KAKO = '-ERR
\89ß
\8b\8e\83\8d\83O
\91q
\8cÉ
\82Å
\94
\8c©';
323 READCGI_ERR_NOT_HTML = '-ERR html
\89»
\91Ò
\82¿';
324 READCGI_ERR_NOT_FOUND = '-ERR
\82»
\82ñ
\82È
\94Âor
\83X
\83\8c\83b
\83h
\82È
\82¢
\82Å
\82·
\81B';
325 READCGI_ERR_ABONE = '-ERR
\82Ç
\82±
\82©
\82Å
\82 \82Ú
\81[
\82ñ
\82ª
\82 \82Á
\82½
\82Ý
\82½
\82¢
\82Å
\82·
\81B';
326 READCGI_ERR_TIMEOUT = '-ERR
\8ew
\92è
\8e\9e\8aÔ
\82ª
\89ß
\82¬
\82Ü
\82µ
\82½
\81B';
327 READCGI_ERR_CANTUSE = '-ERR
\82à
\82¤
\81@
\82Â
\82©
\82¦
\82Ü
\82¹
\82ñ';
328 RES2CH_TRUE = '<!-- 2ch_X:true -->';
329 RES2CH_FALSE = '<!-- 2ch_X:false -->';
330 RES2CH_ERROR = '<!-- 2ch_X:error -->';
331 RES2CH_CHECK = '<!-- 2ch_X:check -->';
332 RES2CH_COOKIE = '<!-- 2ch_X:cookie -->';
336 StartPos, EndPos: Integer;
341 {constructor TEditorForm.Create(AOwner: TComponent; Item: TBoard);
343 inherited Create(AOwner);
346 procedure TEditorForm.CreateParams(var Params: TCreateParams);
349 if FormStyle in [fsNormal, fsStayOnTop] then
350 if BorderStyle in [bsSingle, bsSizeable] then begin
351 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
352 Params.WndParent := 0;
356 {procedure TEditorForm.CreateParams(var Params: TCreateParams);
358 inherited CreateParams(Params);
359 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
362 procedure TEditorForm.FormCreate(Sender: TObject);
364 FUseUC := GikoSys.Setting.UseUnicode;
366 BodyEditUC := TWideMemo.Create(Self);
367 BodyEditUC.Parent := EditorTab;
368 BodyEditUC.Align := alClient;
369 BodyEditUC.ScrollBars := ssBoth;
371 if (FUseUC = True) then begin
372 BodyEditUC.Visible := True;
373 BodyEdit.Visible := False;
374 EditorTab.Caption := EditorTab.Caption + '(Unicode
\83\82\81[
\83h)';
376 BodyEditUC.Visible := False;
377 BodyEdit.Visible := True;
378 EditorTab.Caption := EditorTab.Caption + '(Shift-JIS
\83\82\81[
\83h)';
382 FSambaTimer := TSambaTimer.Create(Self);
383 FSambaTimer.Interval := 0;
384 Browser.Navigate('about:blank');
385 TitlePictureBrowser.Navigate('about:blank');
386 WebBrowser1.Navigate('about:blank');
390 if (Owner <> nil) and (Owner.ClassNameIs('TKeySettingForm') = False) then
391 //
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\90Ý
\92è
394 EditorPage.ActivePage := EditorTab;
395 FNameComboEdit := GetWindow(NameComboBox.Handle, GW_CHILD);
396 FMailComboEdit := GetWindow(MailComboBox.Handle, GW_CHILD);
397 NameComboBox.Items.Assign(GikoSys.Setting.NameList);
398 MailComboBox.Items.Assign(GikoSys.Setting.MailList);
400 //
\94¼
\93§
\96¾
\97\98\97p
\89Â
\94\
\90Ý
\92è
401 TransAction.Enabled := GikoSys.CanUser32DLL;
403 //
\83E
\83B
\83\93\83h
\83E
\82Ì
\83X
\83e
\83C
\8fó
\91Ô
404 if GikoSys.Setting.EditWindowStay then begin //
\83X
\83e
\83C
\8fó
\91Ô
405 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
406 TopAction.Checked := true;
407 TopToolButton.Down := true;
408 end else begin //
\83X
\83e
\83C
\82µ
\82È
\82¢
409 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
410 TopAction.Checked := false;
411 TopToolButton.Down := false;
414 //
\83E
\83B
\83\93\83h
\83E
\82Ì
\94¼
\93§
\96¾
\8fó
\91Ô
415 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Ô
417 TransAction.Checked := true;
418 TransToolButton.Down := true;
419 end else begin //
\95s
\93§
\96¾
421 TransAction.Checked := false;
422 TransToolButton.Down := false;
424 //
\94¼
\93§
\96¾
\8fó
\91Ô
\82Ì
\95Û
\91¶
425 GikoSys.Setting.EditWindowTranslucent := TransAction.Checked;
427 SpaceToNBSPAction.Checked := GikoSys.Setting.SpaceToNBSP;
428 AmpToCharRefAction.Checked := GikoSys.Setting.AmpToCharRef;
429 //
\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è
432 //
\83L
\81[
\90Ý
\92è
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
433 GikoSys.LoadKeySetting(ActionList, GikoSys.GetEditorKeyFileName);
434 SaveNameMailAction.Checked := True;
436 procedure TEditorForm.SetBoard(Item: TBoard);
439 Caption := CAPTION_NAME_NEW + ' - [' + Item.Title + ']';
440 NameComboBox.Text := FBoard.KotehanName;
441 MailComboBox.Text := FBoard.KotehanMail;
442 SageCheckBox.Checked := AnsiPos('sage', MailComboBox.Text) <> 0;
443 TitlePanel.Visible := True;
445 if (FSambaTimer.SetBoard(FBoard) >= 0) then begin
448 FSambaTimer.OnTimer := SambaTimer;
451 ShowBoardInformation(FBoard, BoardInformationMemo);
455 procedure TEditorForm.SetThreadItem(Item: TThreadItem);
458 Caption := CAPTION_NAME_RES + ' - [' + FThreadItem.Title + ']';
459 NameComboBox.Text := FThreadItem.ParentBoard.KotehanName;
460 MailComboBox.Text := FThreadItem.ParentBoard.KotehanMail;
461 SageCheckBox.Checked := AnsiPos('sage', MailComboBox.Text) <> 0;
462 TitlePanel.Visible := False;
464 if (FSambaTimer.SetBoard(FThreadItem.ParentBoard) >= 0) then begin
467 FSambaTimer.OnTimer := SambaTimer;
470 ShowBoardInformation(FThreadItem.ParentBoard, BoardInformationMemo);
474 function TEditorForm.GetBody : string;
483 if (FUseUC = True) then
484 body := BodyEditUC.EncodeText
486 body := BodyEdit.Text;
488 if AmpToCharRefAction.Checked then
489 // &
\82Ì
\92u
\8a·
\82Í
\88ê
\94Ô
\8dÅ
\8f\89\82É
\82â
\82é
\82±
\82Æ
490 body := CustomStringReplace( body, '&', '&' );
491 if SpaceToNBSPAction.Checked then begin
493 tail := p + Length( body );
495 while p < tail do begin
502 tmp := tmp + ' ';
503 until (len mod TAB_LENGTH) = 0;
508 tmp := tmp + p^; Inc( p );
514 tmp := tmp + ' ';
520 //
\8eÀ
\91Ì
\8eQ
\8fÆ
\82Í 1
\95¶
\8e\9a\95ª
525 while p < tail do begin
526 if p^ in ['a'..'z', 'A'..'Z', '0'..'9', '#'] then begin
528 end else if p^ = ';' then begin
540 if p^ in kYofKanji then begin
541 tmp := tmp + p^; Inc( p );
542 tmp := tmp + p^; Inc( p );
545 tmp := tmp + p^; Inc( p );
557 procedure TEditorForm.SetFont;
559 if (FUseUC = True) then begin
560 BodyEditUC.Font.Name := GikoSys.Setting.EditorFontName;
561 BodyEditUC.Font.Size := GikoSys.Setting.EditorFontSize;
562 BodyEditUC.Font.Color := GikoSys.Setting.EditorFontColor;
563 BodyEditUC.Color := GikoSys.Setting.EditorBackColor;
565 BodyEdit.Font.Name := GikoSys.Setting.EditorFontName;
566 BodyEdit.Font.Size := GikoSys.Setting.EditorFontSize;
567 BodyEdit.Font.Color := GikoSys.Setting.EditorFontColor;
568 BodyEdit.Color := GikoSys.Setting.EditorBackColor;
572 procedure TEditorForm.Preview;
581 if FThreadItem = nil then begin
583 Title := THTMLCreate.RepHtml(TitleEdit.Text);
585 No := IntToStr(FThreadItem.Count + 1);
586 Title := THTMLCreate.RepHtml(FThreadItem.Title);
590 Namae := THTMLCreate.RepHtml(NameComboBox.Text);
591 Mail := THTMLCreate.RepHtml(MailComboBox.Text);
592 Body := THTMLCreate.RepHtml(Body);
593 Body := CustomStringReplace(Body, #13#10, '<br>', False);
596 if Trim(Namae) = '' then
597 Namae := '
\96¼
\96³
\82µ
\82³
\82ñ';
599 s := THTMLCreate.CreatePreviewHTML(Title, No, Mail, Namae, Body);
601 SetContent(s, Browser);
604 procedure TEditorForm.EditorPageChange(Sender: TObject);
609 tmpBoard := GetBoard;
611 if tmpBoard = nil then Exit;
613 if EditorPage.ActivePage = PreviewTab then begin
615 end else if EditorPage.ActivePage = RocalRuleTab then begin
616 if not FileExists(tmpBoard.GETHEADTXTFileName) then begin
617 LocalEdit.Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\96¢
\8eæ
\93¾';
620 ShowBoardHead(tmpBoard, LocalEdit);
622 Browser.Navigate('about:blank');
626 procedure TEditorForm.BrowserStatusTextChange(Sender: TObject;
627 const Text: WideString);
629 if EditorPage.ActivePage = PreviewTab then begin
630 StatusBar.Panels[0].Text := Text;
632 StatusBar.Panels[0].Text := '';
636 function TEditorForm.Check: Boolean;
638 REQUIRED: string = '
\82ª
\93ü
\97Í
\82³
\82ê
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B';
639 ERROR: string = '
\83G
\83\89\81[';
650 if (FUseUC = True) then
651 BodyLen := Length(BodyEditUC.EncodeText)
653 BodyLen := Length(BodyEdit.Text);
655 if (not GikoSys.Setting.UseMachineTime) and
656 ((Board.LastGetTime = 0) or
657 (Board.LastGetTime = ZERO_DATE)) then begin
658 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
659 + '
\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¢';
660 MsgBox(Handle, Msg, ERROR, MB_OK or MB_ICONSTOP);
662 end else if BodyLen = 0 then begin
663 Msg := '
\96{
\95¶' + REQUIRED;
664 MsgBox(Handle, Msg, ERROR, MB_OK or MB_ICONSTOP);
666 end else if (FBoard <> nil) and (Trim(TitleEdit.Text) = '') then begin
667 Msg := '
\83^
\83C
\83g
\83\8b' + REQUIRED;
668 MsgBox(Handle, Msg, ERROR, MB_OK or MB_ICONSTOP);
671 if (not GikoSys.Dolib.Connected) and (AnsiPos('
\81\9c', NameComboBox.Text) <> 0) then begin
672 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
673 + '
\82±
\82Ì
\82Ü
\82Ü
\91\97\90M
\82µ
\82Ä
\82à
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
674 rc := MsgBox(Handle, Msg, '
\8am
\94F', MB_YESNO or MB_ICONQUESTION);
675 Result := (rc = IDYES);
680 procedure TEditorForm.FormClose(Sender: TObject; var Action: TCloseAction);
685 procedure TEditorForm.FormDestroy(Sender: TObject);
687 wp: TWindowPlacement;
691 if (Owner <> nil) and (Owner.ClassNameIs('TKeySettingForm') = False) then begin
692 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
693 wp.length := sizeof(wp);
694 GetWindowPlacement(Handle, @wp);
696 GikoSys.Setting.EditWindowTop := wp.rcNormalPosition.Top;
697 GikoSys.Setting.EditWindowLeft := wp.rcNormalPosition.Left;
698 GikoSys.Setting.EditWindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
699 GikoSys.Setting.EditWindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
700 GikoSys.Setting.EditWindowMax := WindowState = wsMaximized;
701 //GikoSys.Setting.EditWindowStay := FormStyle = fsStayOnTop; //
\83X
\83e
\83C
\8fó
\91Ô
\82Ì
\95Û
\91¶
702 GikoSys.Setting.EditWindowTranslucent := TransAction.Checked; //
\94¼
\93§
\96¾
\8fó
\91Ô
\82Ì
\95Û
\91¶
708 procedure TEditorForm.SetNameList(sName, sMail: string);
710 if SaveNameMailAction.Checked then begin
711 if Trim(sName) <> '' then begin
712 if GikoSys.Setting.NameList.IndexOf(sName) = -1 then
713 GikoSys.Setting.NameList.Insert(0, sName);
715 if Trim(sMail) <> '' then begin
716 if GikoSys.Setting.MailList.IndexOf(sMail) = -1 then
717 GikoSys.Setting.MailList.Insert(0, sMail);
722 function TEditorForm.GetActiveControlHandle: THandle;
724 if EditorPage.ActivePage = EditorTab then begin
725 if ActiveControl = NameComboBox then
726 Result := FNameComboEdit
727 else if ActiveControl = MailComboBox then
728 Result := FMailComboEdit
729 else if ActiveControl = BodyEditUC then
730 Result := BodyEditUC.Handle
731 else if ActiveControl = BodyEdit then
732 Result := BodyEdit.Handle
733 else if ActiveControl = TitleEdit then
734 Result := TitleEdit.Handle
737 end else if Editorpage.ActivePage = BoardInformationTab then begin
738 if ActiveControl = BoardInformationMemo then
739 Result := BoardInformationMemo.Handle
742 end else if Editorpage.ActivePage = RocalRuleTab then begin
743 if ActiveCOntrol = LocalEdit then
744 Result := LocalEdit.Handle
751 procedure TEditorForm.SetContent(Content: string; ABrowser: TWebBrowser);
755 if Assigned(ABrowser.ControlInterface.Document) then begin
756 doc := OleVariant(ABrowser.Document);
759 doc.charset := 'Shift_JIS';
764 procedure TEditorForm.InitIdHTTP(http: TIdHTTP);
767 http.ProxyParams.BasicAuthentication := False;
768 if GikoSys.Setting.WriteProxy then begin
769 http.ProxyParams.ProxyServer := GikoSys.Setting.WriteProxyAddress;
770 http.ProxyParams.ProxyPort := GikoSys.Setting.WriteProxyPort;
771 http.ProxyParams.ProxyUsername := GikoSys.Setting.WriteProxyUserID;
772 http.ProxyParams.ProxyPassword := GikoSys.Setting.WriteProxyPassword;
773 if GikoSys.Setting.ReadProxyUserID <> '' then
774 http.ProxyParams.BasicAuthentication := True;
776 http.ProxyParams.ProxyServer := '';
777 http.ProxyParams.ProxyPort := 80;
778 http.ProxyParams.ProxyUsername := '';
779 http.ProxyParams.ProxyPassword := '';
781 http.Request.UserAgent := GikoSys.GetUserAgent;
782 http.Request.AcceptEncoding := '';
783 http.AllowCookies := True;
784 http.ReadTimeout := GikoSys.Setting.ReadTimeOut;
785 http.ConnectTimeout := GikoSys.Setting.ReadTimeOut;
787 //!
\91\97\90M
\92\86\8e~
\82Ì
\82½
\82ß
\82Ì
\83\81\83j
\83\85\81[
\82Ì
\8dÄ
\90¶
788 procedure TEditorForm.CancelSend(ABoard: TBoard; ASysMenu: HMENU);
793 EnableMenuItem(ASysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
797 procedure TEditorForm.Send( const ACOOKIE: string; const SPID: string;
798 const PON: string; FirstWriting: Boolean);
800 TextStream: TStringStream;
801 Source: TStringStream;
802 ResponseText: string;
804 State: TGikoDownloadState;
805 ResultType: TGikoResultType;
810 {Protocol,Host, Path, Document, Port, Bookmark : String;}
817 if FThreadItem = nil then begin
818 URL := FBoard.GetSendURL;
819 Indy.Request.Referer := GikoSys.UrlToServer(FBoard.URL) + 'test/bbs.cgi';
821 URL := FThreadItem.GetSendURL;
822 Indy.Request.Referer := FThreadItem.URL;
824 sysMenu := GetSystemMenu( Handle, false );
825 EnableMenuItem( sysMenu, SC_CLOSE, MF_GRAYED );
827 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
830 Indy.Request.CustomHeaders.Clear;
831 // Indy.Request.CacheControl := 'no-cache';
832 Indy.Request.CustomHeaders.Add('Pragma: no-cache');
833 Indy.Request.AcceptLanguage := 'ja';
834 Indy.Request.Accept := 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*';
835 Indy.Request.ContentType := 'application/x-www-form-urlencoded';
836 Indy.Request.CustomHeaders.Add(getHeaderStr(ACOOKIE, SPID, PON, GikoSys.GetBouken(URL, FCookieDomain), Board));
837 TextStream := TStringStream.Create('');
838 Source := TStringStream.Create('');
841 FDebugStrReceive := '';
844 if (FirstWriting) then begin
845 //
\83t
\83V
\83A
\83i
\83g
\83\89\83b
\83v
\8cx
\8d\90(LocalMode) by
\92è
\8aú
\95Ö
846 if (isLocalFusianaTrap) then begin
847 CancelSend( Board, SysMenu );
850 //
\83t
\83V
\83A
\83i
\83g
\83\89\83b
\83v
\8cx
\8d\90(Remote)
851 if (isRemoteFusianaTrap) then begin
852 CancelSend( Board, SysMenu );
855 //
\8cë
\94\9a\83`
\83F
\83b
\83N
856 if (isGobaku) then begin
857 CancelSend( Board, SysMenu );
863 IdAntiFreeze.Active := True;
865 Indy.Post(URL, Source, TextStream);
867 IdAntiFreeze.Active := False;
869 ResponseText := TextStream.DataString;
871 ResultType := GetResultType(ResponseText);
874 if ResultType = grtOK then begin
875 if (GikoSys.Setting.UseSamba) and (FSambaTimer.Enabled) then
877 FSambaTimer.WriteSambaTime(Now());
879 GetCookie(Indy.CookieManager, Board);
880 State := gdsComplete;
881 end else if ResultType = grtCookie then begin
882 //
\83\8b\81[
\83v
\96h
\8e~
883 if not FirstWriting then
884 raise Exception.Create('');
886 MsgResult := MsgBox( Handle,
887 '
\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 +
888 '
\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 +
889 '
\91S
\90Ó
\94C
\82ð
\95\89\82¤
\82±
\82Æ
\82ð
\8f³
\91ø
\82µ
\82Ä
\8f\91\82«
\8d\9e\82Ý
\82Ü
\82·
\82©
\81H',
891 MB_YESNO or MB_ICONQUESTION);
893 if MsgResult = IDYES then begin
894 GetCookie(Indy.CookieManager, Board);
895 if (Board.Is2ch) then begin
896 GetHiddenParameter(ResponseText, Board);
899 if (Board.SPID = '') and (Board.PON = '') and (Board.Cookie = '') then
900 raise Exception.Create('');
901 //
\82à
\82¤
\88ê
\89ñ
\82±
\82Ì
\83\81\83\
\83b
\83h
902 Send(Board.Cookie, Board.SPID, Board.PON, False);
905 CancelSend( Board, SysMenu );
908 end else if ResultType = grtCheck then begin
909 //
\83\8b\81[
\83v
\96h
\8e~
910 if not FirstWriting then
911 raise Exception.Create('');
913 MsgResult := MsgBox( Handle,
914 '
\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 +
915 '
\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 +
916 '
\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 +
917 '
\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 +
919 '
\91S
\90Ó
\94C
\82ð
\95\89\82¤
\82±
\82Æ
\82ð
\8f³
\91ø
\82µ
\82Ä
\8f\91\82«
\8d\9e\82Ý
\82Ü
\82·
\82©
\81H',
921 MB_YESNO or MB_ICONQUESTION);
923 if MsgResult = IDYES then begin
924 GetCookie(Indy.CookieManager, Board);
925 if (Board.Is2ch) then begin
926 GetHiddenParameter(ResponseText, Board);
929 if (Board.SPID = '') and (Board.PON = '') and (Board.Cookie = '') then
930 raise Exception.Create('');
933 Send(Board.Cookie, Board.SPID, Board.PON, False);
936 CancelSend( Board, SysMenu );
939 end else if ResultType = grtNinpou then begin
941 '
\8bM
\95û
\82Ì
\94E
\96@
\92\9f\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
943 MB_OK or MB_ICONINFORMATION);
944 if (GikoSys.Setting.UseSamba) and (FSambaTimer.Enabled) then
946 FSambaTimer.WriteSambaTime(Now());
951 GetCookie(Indy.CookieManager, Board);
953 end else if ResultType = grtSuiton then begin
955 '
\8bM
\95û
\82Ì
\94E
\96@
\92\9f\82Í
\8fÄ
\82©
\82ê
\82Ü
\82µ
\82½
\81B' + #13#10 +
956 '
\94E
\96@
\92\9f\82ð
\8dí
\8f\9c\82µ
\82Ü
\82µ
\82½
\81A
\8dÄ
\91\97\90M
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B'
958 MB_OK or MB_ICONINFORMATION);
959 //
\94E
\96@
\92\9f\8aª
\95¨
\82ð
\8fÁ
\82·
960 GikoSys.DelBoukenCookie(FCookieDomain);
961 GikoSys.Setting.WriteBoukenSettingFile;
967 if (GikoSys.Setting.UseSamba) and (FSambaTimer.Enabled) then
969 FSambaTimer.WriteSambaTime(Now());
971 //
\94E
\96@
\92\9f\8aª
\95¨
\83G
\83\89\81[
\82ÍCookie
\82ð
\8dX
\90V
\82·
\82é
972 if ResultType = grtNinpouErr then begin
973 GetCookie(Indy.CookieManager, Board);
976 raise Exception.Create('');
979 on E: EIdSocketError do begin
981 ResponseText := '<html><body>'
982 + '<div>
\90Ú
\91±
\82ª
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½<br>'
983 + '
\89ñ
\90ü
\82Ì
\8fó
\91Ô
\82ð
\92²
\82×
\82Ä
\82
\82¾
\82³
\82¢<br></div>'
984 + '<br><br><div>' + E.Message + '</div>'
987 on E: EIdConnectException do begin
989 ResponseText := '<html><body>'
990 + '<div>
\90Ú
\91±
\82ª
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½<br>'
991 + '
\89ñ
\90ü
\82â
\83v
\83\8d\83L
\83V
\82Ì
\8fó
\91Ô
\82ð
\92²
\82×
\82Ä
\82
\82¾
\82³
\82¢<br></div>'
992 + '<br><br><div>' + E.Message + '</div>'
995 on E: Exception do begin
998 FDebugStrReceive := AnsiReplaceText(FDebugStrReceive, '<', '<');
999 FDebugStrReceive := AnsiReplaceText(FDebugStrReceive, '>', '>');
1000 FDebugStrSend := AnsiReplaceText(FDebugStrSend, '<', '<');
1001 FDebugStrSend := AnsiReplaceText(FDebugStrSend, '>', '>');
1002 ExpMsg := AnsiReplaceText(E.Message, '<', '<');
1003 ExpMsg := AnsiReplaceText(ExpMsg, '>', '>');
1005 ResponseText := '<html><body>' + TextStream.DataString;
1006 ResponseText := AnsiReplaceText(ResponseText, '</body>', '');
1007 ResponseText := AnsiReplaceText(ResponseText, '</html>', '');
1008 ResponseText := ResponseText + '<hr><div align="left"><pre>';
1009 ResponseText := ResponseText + '<b>
\82±
\82±
\82©
\82ç
\83M
\83R
\83i
\83r
\82Ì
\8fî
\95ñ</b>'#13#10;
1010 ResponseText := ResponseText + #13#10'
\81\9c\97á
\8aO'#13#10;
1011 ResponseText := ResponseText + ExpMsg;
1012 ResponseText := ResponseText + #13#10'
\81\9c\91\97\90M'#13#10;
1013 ResponseText := ResponseText + FDebugStrSend;
1014 ResponseText := ResponseText + #13#10'
\81\9c\8eó
\90M'#13#10;
1015 ResponseText := ResponseText + FDebugStrReceive;
1016 ResponseText := ResponseText + '</pre></div></body></html>';
1019 FStatusCode := Indy.ResponseCode;
1025 if ( Indy.CookieManager <> nil ) then begin
1026 Indy.CookieManager.CookieCollection.Clear;
1028 //sysMenu := GetSystemMenu( Handle, true );
1029 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
1030 DrawMenuBar(Handle);
1033 //
\94ñ
\8cö
\8e®
\83M
\83R
\83i
\83r
\94Â
\82È
\82Ç
\82Ì2ch
\8cÝ
\8a·
\83X
\83N
\83\8a\83v
\83g
\97p
1034 //2ch
\88È
\8aO
\82Å
\82©
\82ÂResponceCode
\82ª302Found
\82Å
\8f\91\82«
\8d\9e\82Ý
\8a®
\97¹
1035 //if (not Board.Is2ch) and (FStatusCode = 302) then begin
1036 if FStatusCode = 302 then begin
1037 GikoForm.PlaySound('ResEnd');
1039 AddFormMessageNew( gmiOK );
1040 if (not ContinueModeAction.Enabled) or (not ContinueModeAction.Checked) then begin
1045 if State = gdsComplete then begin
1046 GikoForm.PlaySound('ResEnd');
1048 AddFormMessageNew( gmiOK );
1049 if (not ContinueModeAction.Enabled) or (not ContinueModeAction.Checked) then begin
1052 end else if State = gdsError then begin
1053 AddFormMessageNew( gmiOK );
1054 EditorPage.ActivePage := PreviewTab;
1055 SetContent(ResponseText, Browser);
1056 end else if State = gdsAbort then begin
1057 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiSAD);
1060 function TEditorForm.GetResultType(ResponseText: string): TGikoResultType;
1062 if AnsiPos('
\8f\91\82«
\82±
\82Ý
\82ª
\8fI
\82í
\82è
\82Ü
\82µ
\82½', ResponseText) <> 0 then
1064 else if ( (AnsiPos('<b>
\82æ
\82¤
\82±
\82»
\81F
\8bM
\95û
\82Ì
\94E
\96@
\92\9f\82ð
\8dì
\90¬
\82µ
\82Ü
\82·
\81B
\82Q
\95ª
\8cã
\82É
\8dÄ
\93x
\8f\91\82«
\8d\9e\82Þ
\82©
\81A
\82¨
\8bA
\82è
\82
\82¾
\82³
\82¢', ResponseText) > 0) or
1065 (AnsiPos('
\82d
\82q
\82q
\82n
\82q
\81F
\8bM
\95û
\82Ì
\96`
\8c¯
\82Ì
\8f\91\82ð
\8dì
\90¬
\92\86\82Å
\82·', ResponseText) > 0) )
1066 and (AnsiPos(RES2CH_COOKIE, ResponseText) > 0) then
1068 else if ( (AnsiPos('
\82d
\82q
\82q
\82n
\82q
\81F
\8fC
\8ds
\82ª
\91«
\82è
\82Ü
\82¹
\82ñ', ResponseText) > 0) or //
\83G
\83\89\81[
\88µ
\82¢
1069 (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¢
1070 and (AnsiPos(RES2CH_COOKIE, ResponseText) > 0) then
1071 Result := grtNinpouErr
1072 else if( AnsiPos('<b>
\82â
\82ç
\82ê
\82½
\82Å
\82²
\82´
\82é
\81FLv=0 <br>
\82³
\82Ä
\8e©
\97Í
\82Å
\95\9c\8a\88\82Å
\82«
\82é
\82©
\82È?', ResponseText) > 0)
1073 and (AnsiPos(RES2CH_COOKIE, ResponseText) > 0) then
1075 else if ( AnsiPos('
\83N
\83b
\83L
\81[
\82ª
\82È
\82¢
\82©
\8aú
\8cÀ
\90Ø
\82ê
\82Å
\82·', ResponseText) > 0) or
1076 (AnsiPos('<title>
\83N
\83b
\83L
\81[
\8am
\94F
\81I</title>', ResponseText) > 0) or
1077 (AnsiPos('<title>
\81¡
\83N
\83b
\83L
\81[
\8am
\94F
\81I
\81¡</title>', ResponseText) > 0) or
1078 (AnsiPos(RES2CH_COOKIE, ResponseText) > 0) then
1080 else if (AnsiPos('<font size=+2 color=#FF0000>
\8f\91\82«
\8d\9e\82Ý
\83`
\83F
\83b
\83N
\81I </font>', ResponseText) > 0) or
1081 (AnsiPos('<title>
\81¡
\8f\91\82«
\8d\9e\82Ý
\8am
\94F
\82µ
\82Ü
\82·
\81¡</title>', ResponseText) > 0) or
1082 (AnsiPos('<title>
\93\8a\8de
\8am
\94F</title>', ResponseText) > 0) or
1083 (AnsiPos('<b>
\8f\91\82«
\82±
\82Ý
\8am
\94F</b>', ResponseText) > 0) or
1084 (AnsiPos('="../test/subbbs.cgi">', ResponseText) > 0) or
1085 (AnsiPos(RES2CH_FALSE, ResponseText) > 0) then
1087 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
1088 (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
1090 else if (AnsiPos('
\8f\91\82«
\82±
\82Ý
\81\95\83N
\83b
\83L
\81[
\8am
\94F', ResponseText) > 0) or
1091 (AnsiPos('(cookie
\82ð
\90Ý
\92è
\82·
\82é
\82Æ
\82±
\82Ì
\89æ
\96Ê
\82Í
\82Å
\82È
\82
\82È
\82è
\82Ü
\82·
\81B)', ResponseText) > 0) then
1098 procedure TEditorForm.GetSendData(Source: TStringStream);
1109 if GikoSys.Setting.UseMachineTime then begin
1110 if GikoSys.Setting.TimeAdjust then
1111 Adjust := Gikosys.Setting.TimeAdjustSec
1113 Adjust := GikoSys.Setting.TimeAdjustSec * -1;
1114 SendTime := GikoSys.DateTimeToInt(Now) - (9 * 60 * 60) + Adjust
1116 if (Board.LastGetTime = 0) or (Board.LastGetTime = ZERO_DATE) then
1117 SendTime := GikoSys.DateTimeToInt(Now)
1119 SendTime := GikoSys.DateTimeToInt(Board.LastGetTime);
1124 SessionID := GikoSys.Dolib.SessionID;
1125 if SessionID <> '' then
1126 s := 'sid=' + HttpEncode(SessionID) + '&'
1129 s := s + 'subject=&'
1130 + 'FROM=' + HttpEncode(NameComboBox.Text) + '&'
1131 + 'mail=' + HttpEncode(MailComboBox.Text) + '&'
1132 + 'MESSAGE=' + HttpEncode(body) + '&'
1133 + 'bbs=' + Board.BBSID + '&'
1134 + 'time=' + IntToStr(SendTime) + '&';
1136 if FThreadItem = nil then begin
1137 s := s + 'subject=' + HttpEncode(TitleEdit.Text) + '&';
1138 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;
1140 s := s + 'key=' + ChangeFileExt(FThreadItem.FileName, '') + '&';
1141 s := s + 'submit=' + HttpEncode('
\8f\91\82«
\8d\9e\82Þ') + #13#10;
1143 Source.WriteString(s);
1146 procedure TEditorForm.SaveSendFile;
1152 ini := CreateSentIniFile;
1153 if (ini <> nil) then begin
1155 sDate := IntToStr(GikoSys.DateTimeToInt(Now));
1156 if (FUseUC = True) then
1157 Body := BodyEditUC.EncodeText
1159 Body := BodyEdit.Text;
1161 ini.WriteString(sDate, 'Name', NameComboBox.Text);
1162 ini.WriteString(sDate, 'EMail', MailComboBox.Text);
1163 ini.WriteString(sDate, 'Body', HttpEncode(Body));
1164 ini.WriteInteger(sDate, 'Status', FStatusCode);
1165 ini.WriteDateTime(sDate, 'Date', Now);
1166 if FThreadItem = nil then begin
1167 ini.WriteString(sDate, 'Title', MojuUtils.Sanitize(TitleEdit.Text));
1168 //ini.WriteString(sDate, 'BBS', FBoard.BBSID);
1169 ini.WriteString(sDate, 'URL', FBoard.URL);
1170 ini.WriteInteger(sDate, 'NewThread', 1);
1172 ini.WriteString(sDate, 'Title', FThreadItem.Title);
1173 //ini.WriteString(sDate, 'BBS', FThreadItem.ParentBoard.BBSID);
1174 ini.WriteString(sDate, 'URL', FThreadItem.URL);
1175 ini.WriteString(sDate, 'Key', ChangeFileExt(FThreadItem.FileName, ''));
1184 function TEditorForm.CreateSentIniFile: TMemIniFile;
1186 maxSize, fileSize, i: Integer;
1191 maxSize := GikoSys.Setting.SentIniFileSize * 1024 * 1024;
1192 //
\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·
1193 if (maxSize > 0) then begin
1194 fileSize := GikoSys.GetFileSize(GikoSys.Setting.GetSentFileName);
1195 //
\8dÅ
\91å
\83T
\83C
\83Y
\82ð
\92´
\82¦
\82Ä
\82¢
\82½
\8fê
\8d\87\82Í
\83\8a\83l
\81[
\83\80\82·
\82é
1196 if (fileSize >= maxSize) then begin
1198 //
\8d¡
\82Ì
\8e\9e\8d\8f\82ð
\83t
\83@
\83C
\83\8b\96¼
\82Ì
\8cã
\82ë
\82É
\82Â
\82¯
\82é
1200 // 10
\89ñ
\88È
\8fã
\8e¸
\94s
\82µ
\82½
\82ç
\82 \82«
\82ç
\82ß
\82é
1201 if (i > 10) then break;
1202 DateTimeToString(newName, 'yyhhnnsszzz', Now());
1204 until RenameFile(GikoSys.Setting.GetSentFileName,
1205 GikoSys.Setting.GetSentFileName + '.' + newName);
1207 Result := TMemIniFile.Create(GikoSys.Setting.GetSentFileName);
1210 procedure TEditorForm.SendActionExecute(Sender: TObject);
1212 TITLE_SAMBA : string = 'Samba24
\8cx
\8d\90';
1217 state : TGikoDownloadState;
1224 SendAction.Enabled := False;
1225 Application.ProcessMessages;
1226 if not Check then Exit;
1230 if FThreadItem = nil then begin
1231 rc := GikoUtil.MsgBox(Handle,
1232 '
\81u' + Board.Title + '
\81v
\94Â
\82É
\90V
\82µ
\82¢
\83X
\83\8c\83b
\83h
\97§
\82Ä
\82Ü
\82·'#13#10#13#10
1233 + '
\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
1234 + '
\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
1235 + '
\81u
\82Í
\82¢
\81v
\82ð
\89\9f\82·
\82Æ
\91\97\90M
\82µ
\82Ü
\82·',
1237 MB_ICONQUESTION or MB_YESNO);
1238 if rc <> ID_YES then
1242 SetNameList(NameComboBox.Text, MailComboBox.Text);
1243 if (KotehanCheckBox.Enabled) and (KotehanCheckBox.Checked) then begin
1244 Board.KotehanName := NameComboBox.Text;
1245 Board.KotehanMail := MailComboBox.Text;
1248 if Board.IsBoardPlugInAvailable then begin
1251 if FThreadItem = nil then begin
1252 //
\83X
\83\8c\97§
\82Ä
1253 state := TGikoDownloadState( Board.BoardPlugIn.CreateThread(
1254 DWORD( Board ), TitleEdit.Text, NameComboBox.Text, MailComboBox.Text, body ) );
1256 if state = gdsComplete then begin
1257 GikoForm.PlaySound('ResEnd');
1259 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, gmiOK);
1261 if (not ContinueModeAction.Enabled) or (not ContinueModeAction.Checked) then
1263 end else if State = gdsError then begin
1264 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmSureError), nil, gmiNG);
1265 end else if State = gdsAbort then begin
1266 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiNG);
1270 state := TGikoDownloadState( FThreadItem.ParentBoard.BoardPlugIn.WriteThread(
1271 DWORD( FThreadItem ), NameComboBox.Text, MailComboBox.Text, body ) );
1273 if state = gdsComplete then begin
1274 GikoForm.PlaySound('ResEnd');
1276 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, gmiOK);
1278 if (not ContinueModeAction.Enabled) or (not ContinueModeAction.Checked) then
1280 end else if State = gdsError then begin
1281 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmResError), nil, gmiOK);
1282 end else if State = gdsAbort then begin
1283 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
1287 if not FSambaTimer.Enabled then begin
1288 if CompareDateTime(Board.Expires ,Now) <= 0 then begin
1293 //
\96`
\8c¯
\82Ì
\8f\91\83\8c\83x
\83\8b\96ß
\82é
\96â
\91è
\91Î
\89\9e
1294 if (Board.Is2ch) and (AnsiPos('HAP=', Board.Cookie)>0) then begin
1297 Send(Board.Cookie, Board.SPID, Board.PON, True);
1299 if not FSambaTimer.CheckSambaTime(Now()) then begin
1300 rc := GikoUtil.MsgBox(Handle,
1301 '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
1302 + '
\91\97\90M
\82ð
\92\86\8e~
\82µ
\82Ü
\82·
\82©
\81H' + #13#10
1303 + '(
\81u
\82¢
\82¢
\82¦
\81v
\82¾
\82Æ
\91\97\90M
\82µ
\82Ü
\82·)', TITLE_SAMBA,
1304 MB_YESNO or MB_ICONQUESTION);
1305 if rc = IDYES then begin
1309 if rc = IDNO then begin
1310 rc2 := GikoUtil.MsgBox(Handle,
1311 '
\96{
\93\96\82É
\91\97\90M
\82µ
\82Ü
\82·
\82©
\81H',
1313 MB_YESNO or MB_ICONQUESTION);
1314 if rc2 = IDNO then begin
1320 if CompareDateTime(Board.Expires ,Now) <= 0 then begin
1325 //
\96`
\8c¯
\82Ì
\8f\91\83\8c\83x
\83\8b\96ß
\82é
\96â
\91è
\91Î
\89\9e
1326 if (Board.Is2ch) and (AnsiPos('HAP=', Board.Cookie)>0) then begin
1329 Send(Board.Cookie, Board.SPID, Board.PON, True);
1334 if FSambaTimer.Enabled then begin
1335 FNow := FSambaTimer.Update;
1340 procedure TEditorForm.SaveActionExecute(Sender: TObject);
1345 procedure TEditorForm.CloseActionExecute(Sender: TObject);
1350 procedure TEditorForm.UndoActionExecute(Sender: TObject);
1352 SendMessage(GetActiveControlHandle, WM_UNDO, 0, 0);
1355 procedure TEditorForm.CutActionExecute(Sender: TObject);
1357 SendMessage(GetActiveControlHandle, WM_CUT, 0, 0);
1360 procedure TEditorForm.CopyActionExecute(Sender: TObject);
1362 SendMessage(GetActiveControlHandle, WM_COPY, 0, 0);
1365 procedure TEditorForm.PasteActionExecute(Sender: TObject);
1367 SendMessage(GetActiveControlHandle, WM_PASTE, 0, 0);
1370 procedure TEditorForm.SelectAllActionExecute(Sender: TObject);
1372 SendMessage(GetActiveControlHandle, EM_SETSEL, 0, GetWindowTextLength(GetActiveControlHandle));
1375 procedure TEditorForm.TopActionExecute(Sender: TObject); //
\83E
\83B
\83\93\83h
\83E
\8dÅ
\91O
\96Ê(Stay)
\83{
\83^
\83\93\82Ì
\8f\88\97\9d
1377 if not (fsShowing in Self.FormState) then begin
1378 if TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
1379 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
1380 GikoSys.Setting.EditWindowStay := true;
1381 end else begin //
\83X
\83e
\83C
\8fó
\91Ô
\89ð
\8f\9c
1382 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
1383 GikoSys.Setting.EditWindowStay := false;
1385 //
\83X
\83e
\83C
\8fó
\91Ô
\82Ì
\95Û
\91¶
1386 //GikoSys.Setting.EditWindowStay := FormStyle = fsStayOnTop;
1390 procedure TEditorForm.AbortActionExecute(Sender: TObject);
1395 procedure TEditorForm.SendActionUpdate(Sender: TObject);
1397 SendAction.Enabled := not FWork;
1400 procedure TEditorForm.SaveActionUpdate(Sender: TObject);
1402 SaveAction.Enabled := False;
1405 procedure TEditorForm.CloseActionUpdate(Sender: TObject);
1407 CloseAction.Enabled := not FWork;
1410 procedure TEditorForm.UndoActionUpdate(Sender: TObject);
1412 UndoAction.Enabled := (GetActiveControlHandle <> 0)
1413 and (SendMessage(GetActiveControlHandle, EM_CANUNDO, 0, 0) <> 0)
1417 procedure TEditorForm.CutActionUpdate(Sender: TObject);
1419 Selection: TSelection;
1422 AHandle := GetActiveControlHandle;
1423 SendMessage(AHandle, EM_GETSEL, Longint(@Selection.StartPos), Longint(@Selection.EndPos));
1424 CutAction.Enabled := (AHandle <> 0)
1425 and ((Selection.EndPos - Selection.StartPos) <> 0)
1429 procedure TEditorForm.CopyActionUpdate(Sender: TObject);
1431 Selection: TSelection;
1434 AHandle := GetActiveControlHandle;
1435 SendMessage(AHandle, EM_GETSEL, Longint(@Selection.StartPos), Longint(@Selection.EndPos));
1436 CopyAction.Enabled := (AHandle <> 0)
1437 and ((Selection.EndPos - Selection.StartPos) <> 0)
1441 procedure TEditorForm.PasteActionUpdate(Sender: TObject);
1443 PasteAction.Enabled := (GetActiveControlHandle <> 0)
1444 and (Clipboard.HasFormat(CF_TEXT))
1448 procedure TEditorForm.TopActionUpdate(Sender: TObject);
1450 TopAction.Enabled := not FWork;
1453 procedure TEditorForm.SageCheckBoxClick(Sender: TObject);
1455 if SageCheckBox.Checked then begin
1456 if AnsiPos('sage', MailComboBox.Text) = 0 then
1457 MailComboBox.Text := 'sage' + MailComboBox.Text;
1459 if AnsiPos('sage', MailComboBox.Text) <> 0 then
1460 MailComboBox.Text := StringReplace(MailComboBox.Text, 'sage', '', [rfReplaceAll]);
1464 procedure TEditorForm.MailComboBoxChange(Sender: TObject);
1466 if AnsiPos('sage', MailComboBox.Text) = 0 then
1467 SageCheckBox.Checked := False
1469 SageCheckBox.Checked := True;
1472 procedure TEditorForm.IdLogDebugReceive(ASender: TIdConnectionIntercept;
1475 StringStream: TStringStream;
1477 StringStream := TStringStream.Create('');
1479 StringStream.CopyFrom(AStream, AStream.Size);
1480 FDebugStrReceive := FDebugStrReceive + StringStream.DataString;
1486 procedure TEditorForm.IdLogDebugSend(ASender: TIdConnectionIntercept;
1489 StringStream: TStringStream;
1491 StringStream := TStringStream.Create('');
1493 StringStream.CopyFrom(AStream, AStream.Size);
1494 FDebugStrSend := FDebugStrSend + StringStream.DataString;
1500 procedure TEditorForm.TransActionExecute(Sender: TObject);
1502 AlphaBlend := TransAction.Checked;
1503 //
\94¼
\93§
\96¾
\8fó
\91Ô
\82Ì
\95Û
\91¶
1504 GikoSys.Setting.EditWindowTranslucent := TransAction.Checked;
1507 procedure TEditorForm.TransActionUpdate(Sender: TObject);
1509 TransAction.Enabled := not FWork;
1511 //StatusBar
\82ÌPanels[0]
\82Ì
\95\9d\82ð
\89Â
\95Ï
\81B
\8ec
\82è
\82ð
\8cÅ
\92è
\82É
\82·
\82é
1512 procedure TEditorForm.StatusBarResize(Sender: TObject);
1514 StatusBar.Panels[0].Width := StatusBar.Width
1515 - StatusBar.Panels[1].Width - StatusBar.Panels[2].Width;
1519 //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Þ
1520 procedure TEditorForm.FormActivate(Sender: TObject);
1522 if ( FSambaTimer.Enabled ) and ( FThreadItem <> nil ) then
1524 FNow := FSambaTimer.Update;
1526 if GikoSys.Setting.GestureEnabled then begin
1527 GikoSys.Setting.Gestures.ClearGesture;
1528 GikoSys.Setting.Gestures.LoadGesture(
1529 GikoSys.Setting.GetGestureFileName, ActionList );
1530 MouseGesture.UnHook;
1531 MouseGesture.OnGestureStart := OnGestureStart;
1532 MouseGesture.OnGestureMove := OnGestureMove;
1533 MouseGesture.OnGestureEnd := OnGestureEnd;
1534 MouseGesture.SetHook( Handle );
1537 procedure TEditorForm.FormCloseQuery(Sender: TObject;
1538 var CanClose: Boolean);
1540 CanClose := not FWork;
1543 procedure TEditorForm.QuotePasteActionExecute(Sender: TObject);
1550 quote := GikoSys.GetOEIndentChar;
1552 if (FUseUC = True) then begin
1553 BodyEditUC.QuotePaste(quote);
1555 s := TStringList.Create;
1557 s.Text := Clipboard.AsText;
1559 for i := s.Count - 1 downto 0 do
1560 s[ i ] := quote + s[ i ];
1562 BodyEdit.SelText := s.Text;
1569 procedure TEditorForm.SpaceToNBSPActionExecute(Sender: TObject);
1571 GikoSys.Setting.SpaceToNBSP := SpaceToNBSPAction.Checked;
1572 if EditorPage.ActivePage = PreviewTab then
1576 procedure TEditorForm.AmpToCharRefActionExecute(Sender: TObject);
1578 GikoSys.Setting.AmpToCharRef := AmpToCharRefAction.Checked;
1579 if EditorPage.ActivePage = PreviewTab then
1583 procedure TEditorForm.BoardTopClick(Sender: TObject);
1587 ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
1589 BoardtopTab.TabVisible := BoardTop.Checked;
1590 ini.WriteBool('EditorForm', 'BoardTopTab', BoardtopTab.TabVisible);
1598 procedure TEditorForm.GetSETTINGTXTActionExecute(Sender: TObject);
1600 memStream: TMemoryStream;
1601 URL, RefURL: string;
1602 settingBody: TStringList;
1605 if not FWork then begin
1608 tmpBoard := GetBoard;
1609 if tmpBoard <> nil then begin
1611 RefURL := tmpBoard.URL;
1612 if RefURL[Length(RefURL)] <> '/' then
1613 URL := RefURL + '/' + 'SETTING.TXT'
1615 URL := RefURL + 'SETTING.TXT';
1616 Screen.Cursor := crHourGlass;
1617 memStream := TMemoryStream.Create;
1620 StatusBar.Panels[0].Text := 'SETTING.TXT
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86';
1621 GetWebData(URL, RefURL, tmpBoard.SETTINGTXTTime, memStream);
1622 if( Indy.ResponseCode = 200 ) then begin
1623 settingBody := TStringList.Create;
1625 memStream.Seek(0, soFromBeginning);
1626 settingBody.LoadFromStream(memStream);
1627 settingBody.SaveToFile(tmpBoard.GetSETTINGTXTFileName);
1628 tmpBoard.SETTINGTXTTime := Indy.Response.LastModified;
1629 tmpBoard.IsSETTINGTXT := true;
1630 tmpBoard.TitlePictureURL := GetTitlePictureURL(settingBody, tmpBoard);
1631 tmpBoard.Modified := true;
1635 StatusBar.Panels[0].Text := 'SETTING.TXT
\8eæ
\93¾
\8a®
\97¹(' + IntToStr(Indy.ResponseCode) + ')';
1638 on E: EIdException do begin
1639 if( AnsiPos('304', E.Message) > 0 ) then
1640 StatusBar.Panels[0].Text := 'SETTING.TXT
\8dX
\90V
\96³
\82µ(' + IntToStr(Indy.ResponseCode) + ')'
1642 StatusBar.Panels[0].Text := 'SETTING.TXT
\8eæ
\93¾
\83G
\83\89\81[(' + IntToStr(Indy.ResponseCode) + ')';
1647 Screen.Cursor := crDefault;
1649 ShowBoardInformation(tmpBoard, BoardInformationMemo);
1655 procedure TEditorForm.ShowBoardInformation(ABoard: TBoard; AMemo: TMemo);
1658 UCType: Integer; // 0:
\95s
\96¾
\81A1:
\91Î
\89\9e\81A-1:
\94ñ
\91Î
\89\9e
1662 AMemo.Lines.Add('[SETTING.TXT]');
1663 if ABoard.IsSETTINGTXT then begin
1664 if FileExists(ABoard.GetSETTINGTXTFileName) then begin
1665 AMemo.Lines.Add(DateTimeToStr(ABoard.SETTINGTXTTime) + '
\8dX
\90V');
1666 body := TStringList.Create;
1668 body.LoadFromFile(ABoard.GetSETTINGTXTFileName);
1669 AMemo.Lines.AddStrings(body);
1673 if (Pos('BBS_UNICODE=pass', AMemo.Text) > 0) then
1675 else if (Pos('BBS_UNICODE=', AMemo.Text) > 0) then
1678 ABoard.IsSETTINGTXT := false;
1679 ABoard.SETTINGTXTTime := ZERO_DATE;
1680 AMemo.Lines.Add('Local
\82É
\95Û
\91¶
\82³
\82ê
\82½SETTING.TXT
\82ª
\8c©
\82Â
\82©
\82è
\82Ü
\82¹
\82ñ');
1681 AMemo.Lines.Add('
\83\81\83j
\83\85\81[
\82æ
\82è
\8dÄ
\8eæ
\93¾
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
1684 AMemo.Lines.Add('SETTING.TXT
\82ð
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B');
1685 AMemo.Lines.Add('
\83\81\83j
\83\85\81[
\82æ
\82è
\8eæ
\93¾
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
1690 UCInfoPanel.Caption := 'Unicode
\94ñ
\91Î
\89\9e\94Â';
1691 UCInfoPanel.Color := clRed;
1692 UCInfoPanel.Hint := '
\82±
\82Ì
\94Â
\82ÍUnicode
\82Å
\82Ì
\83\8c\83X
\82É
\91Î
\89\9e\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B';
1695 UCInfoPanel.Caption := 'Unicode
\91Î
\89\9e\95s
\96¾';
1696 UCInfoPanel.Color := clBtnFace;
1697 UCInfoPanel.Hint := '
\94Â
\8fî
\95ñ
\82ð
\8eæ
\93¾
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B';
1700 UCInfoPanel.Caption := 'Unicode
\91Î
\89\9e\94Â';
1701 UCInfoPanel.Color := clLime;
1702 UCInfoPanel.Hint := '
\82±
\82Ì
\94Â
\82ÍUnicode
\82Å
\82Ì
\83\8c\83X
\82É
\91Î
\89\9e\82µ
\82Ä
\82¢
\82Ü
\82·
\81B';
1706 function TEditorForm.GetTitlePictureURL(body: TStringList; ABoard: TBoard): string;
1707 //BBS_TITLE_PICTURE=
1714 for i := 0 to body.Count - 1 do begin
1715 if (AnsiPos('BBS_TITLE_PICTURE=', body[i]) > 0) or
1716 (AnsiPos('BBS_FIGUREHEAD=', body[i]) > 0) then begin
1718 Delete(tmp, 1, AnsiPos('=', tmp));
1719 if AnsiPos('../', tmp) > 0 then begin
1720 tmp := CustomStringReplace(tmp, '../', GikoSys.UrlToServer(ABoard.URL));
1728 procedure TEditorForm.GetTitlePictureActionUpdate(Sender: TObject);
1730 if FThreadItem = nil then
1731 GetTitlePictureAction.Enabled := FBoard.IsSETTINGTXT
1733 GetTitlePictureAction.Enabled := FThreadItem.ParentBoard.IsSETTINGTXT;
1735 if GetTitlePictureAction.Enabled Then begin
1736 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
1737 GetTitlePictureAction.Enabled := not FWork;
1741 procedure TEditorForm.GetTitlePictureActionExecute(Sender: TObject);
1743 memStream: TMemoryStream;
1750 memStream := TMemoryStream.Create;
1752 tmpBoard := GetBoard;
1754 if (tmpBoard <> nil) and (tmpBoard.TitlePictureURL <> '') then begin
1755 StatusBar.Panels[0].Text := '
\94Â
\83g
\83b
\83v
\89æ
\91\9c\83_
\83E
\83\93\83\8d\81[
\83h
\92\86';
1756 Screen.Cursor := crHourGlass;
1758 // URL
\82ð
\8ew
\92è
\82µ
\82Ä
\83\81\83\82\83\8a\82É
\93Ç
\82Ý
\8d\9e\82Þ
1759 GetWebData(tmpBoard.TitlePictureURL, tmpBoard.URL,
1760 ZERO_DATE, memStream);
1761 if Indy.ResponseCode = 200 then begin
1762 memStream.SaveToFile(tmpBoard.GetTitlePictureFileName);
1764 tmpBoard.Modified := true;
1766 StatusBar.Panels[0].Text := '
\94Â
\83g
\83b
\83v
\89æ
\91\9c (' + IntToStr(Indy.ResponseCode) + ')';
1773 Screen.Cursor := crDefault;
1777 \brief URL
\82Ì
\83f
\81[
\83^
\82ðstream
\82É
\93Ç
\82Ý
\8d\9e\82Þ
1778 \param URL
\93Ç
\82Ý
\8d\9e\82Þ
\90æ
1779 \param RefURL referer
\82É
\90Ý
\92è
\82·
\82é
1780 \param Modified Modified
\82É
\90Ý
\92è
\82·
\82é
1781 \param stream
\93Ç
\82Ý
\8d\9e\82ñ
\82¾
\83f
\81[
\83^
\82Ì
\95Û
\91¶
\90æ
1783 procedure TEditorForm.GetWebData(const URL: string; const RefURL: string;
1784 Modified: TDateTime; stream: TStream);
1787 Indy.Request.Referer := RefURL;
1788 Indy.Request.LastModified := Modified;
1790 IdAntiFreeze.Active := True;
1792 Indy.Get(URL, stream);
1794 IdAntiFreeze.Active := False;
1798 procedure TEditorForm.ShowTitlePicture();
1803 tmpBoard := GetBoard;
1805 if FileExists(tmpBoard.GetTitlePictureFileName) then begin
1806 TitlePictureBrowser.Navigate(tmpBoard.GetTitlePictureFileName);
1808 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';
1809 SetContent(s, TitlePictureBrowser);
1813 function TEditorForm.GetFusianaName(body: TStringList; ABoard: TBoard): String;
1818 for i := 0 to body.Count - 1 do begin
1819 if (AnsiPos('BBS_NONAME_NAME=', body[i]) > 0) then begin
1821 Delete(tmp, 1, AnsiPos('=', tmp));
1828 procedure TEditorForm.GetHeadTXTActionExecute(Sender: TObject);
1830 URL, RefURL: string;
1831 settingBody: TStringList;
1833 memStream: TMemoryStream;
1835 if not FWork then begin
1838 tmpBoard := GetBoard;
1839 if (tmpBoard <> nil) then begin
1841 RefURL := tmpBoard.URL;
1842 if RefURL[Length(RefURL)] <> '/' then
1843 URL := RefURL + '/' + 'head.txt'
1845 URL := RefURL + 'head.txt';
1847 Screen.Cursor := crHourGlass;
1848 memStream := TMemoryStream.Create;
1850 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';
1852 GetWebData(URL, RefURL, tmpBoard.HEADTXTTime, memStream);
1853 if( Indy.ResponseCode = 200 ) then begin
1854 settingBody := TStringList.Create;
1856 memStream.Seek(0, soFromBeginning);
1857 settingBody.LoadFromStream(memStream);
1858 settingBody.Insert(0, '<HTML lang="ja"><HEAD>');
1859 settingBody.Insert(1, '<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">');
1860 settingBody.Insert(2, '<TITLE>' + tmpBoard.Title + '</TITLE>');
1861 settingBody.Insert(3, '<base href="' + RefURL + '"></HEAD><BODY>');
1862 settingBody.Add('</BODY></HTML>');
1863 settingBody.SaveToFile(tmpBoard.GETHEADTXTFileName);
1864 tmpBoard.HEADTXTTime := Indy.Response.LastModified;
1865 tmpBoard.IsHEADTXT := true;
1866 tmpBoard.Modified := true;
1870 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾
\8a®
\97¹(' + IntToStr(Indy.ResponseCode) + ')';
1873 on E: EIdException do begin
1874 if( AnsiPos('304', E.Message) > 0 ) then
1875 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8dX
\90V
\96³
\82µ(' + IntToStr(Indy.ResponseCode) + ')'
1877 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾
\83G
\83\89\81[(' + IntToStr(Indy.ResponseCode) + ')';
1882 Screen.Cursor := crDefault;
1884 if tmpBoard.IsHEADTXT then begin
1885 ShowBoardHead(tmpboard, LocalEdit);
1893 procedure TEditorForm.CalcCapacityActionExecute(Sender: TObject);
1899 //
\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
1902 if Board.BoardPlugIn <> nil then
1903 body := CustomStringReplace(body, #13#10, '<br>')
1905 body := CustomStringReplace(body, #13#10, ' <br> ');
1906 StatusBar.Panels[0].Text := '
\97e
\97Ê:' + IntToStr(Length(body)) + ' byte';
1909 procedure TEditorForm.LocalRuleClick(Sender: TObject);
1913 ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
1915 RocalRuleTab.TabVisible := LocalRule.Checked;
1916 ini.WriteBool('EditorForm', 'LocalRuleTab', RocalRuleTab.TabVisible);
1923 procedure TEditorForm.FormDeactivate(Sender: TObject);
1925 if GikoSys.Setting.GestureEnabled then begin
1926 GikoSys.Setting.Gestures.ClearGesture;
1927 MouseGesture.UnHook;
1928 MouseGesture.OnGestureStart := nil;
1929 MouseGesture.OnGestureMove := nil;
1930 MouseGesture.OnGestureEnd := nil;
1934 procedure TEditorForm.OnGestureStart(Sender: TObject);
1939 procedure TEditorForm.OnGestureMove(Sender: TObject);
1945 s := MouseGesture.GetGestureStr;
1947 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
1948 if Action <> nil then
1949 ActStr := '
\81i' + Action.Caption + '
\81j';
1950 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
1951 StatusBar.Panels[0].Text := s;
1954 procedure TEditorForm.OnGestureEnd(Sender: TObject);
1959 s := MouseGesture.GetGestureStr;
1961 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
1962 if Action <> nil then
1964 StatusBar.Panels[0].Text := '';
1967 procedure TEditorForm.ShowBoardHead(ABoard: TBoard; AMemo: TMemo);
1972 //http://www.campus.ne.jp/~ishigami/CREATION/TECHNIC/WEBAP-2.htm
1973 WebBrowser1.Navigate(ABoard.GETHEADTXTFileName);
1974 //
\83\8c\83^
\83\8a\83\93\83O
\82ª
\92x
\82·
\82¬
\82ÄTXT
\82É
\88Ú
\82¹
\82È
\82¢
\81B
\82Ê
\82é
\82Ûorz
1975 //
\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
1976 //
\82±
\82ê
\82Å
\82¢
\82¯
\82Ü
\82µ
\82½
\81B
\82 \82è
\82ª
\82Æ
\82¤
\82²
\82´
\82¢
\82Ü
\82µ
\82½
\81B
1977 while (WebBrowser1.ReadyState <> READYSTATE_COMPLETE) and
1978 (WebBrowser1.ReadyState <> READYSTATE_INTERACTIVE) do begin
1979 Application.ProcessMessages;
1984 range := OleVariant(WebBrowser1.Document).body.createTextRange;
1985 LocalEdit.Text := range.text;
1990 procedure TEditorForm.LocalRuleBrowseClick(Sender: TObject);
2000 URL := ABoard.GETHEADTXTFileName;
2001 GikoSys.OpenBrowser(URL, gbtAuto);
2004 procedure TEditorForm.SaveNameMailActionExecute(Sender: TObject);
2006 SaveNameMailAction.Checked := not SaveNameMailAction.Checked;
2007 KotehanCheckBox.Enabled := SaveNameMailAction.Checked;
2010 function TEditorForm.LFusianaGet(const s: String): Boolean;
2012 FUSIANA = 'fusianasan';
2016 i := AnsiPos(FUSIANA, s);
2020 procedure TEditorForm.BeLogInOutEActionExecute(Sender: TObject);
2022 GikoDM.BeLogInOutAction.Execute;
2025 procedure TEditorForm.BeLogInOutEActionUpdate(Sender: TObject);
2027 BeLogInOutEAction.Checked := GikoDM.BeLogInOutAction.Checked;
2028 BeLogInOutEAction.Enabled := GikoDM.BeLogInOutAction.Enabled;
2030 // Cookie
\82Ì
\8eæ
\93¾
2031 procedure TEditorForm.GetCookie(CookieMng: TIdCookieManager; ABoard: TBoard);
2038 Cookie : TIdCookieRFC2109;
2039 curCookies : TStringList;
2041 // 2008.12.14
\96³
\8fð
\8c\8f\83N
\83\8a\83A
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢ by
\82à
\82¶
\82ã
2042 curCookies := TStringList.Create;
2043 curCookies.Delimiter := ';';
2044 curCookies.DelimitedText := ABoard.Cookie;
2046 curCookies.Duplicates := dupIgnore;
2047 ABoard.Cookie := '';
2049 for i := 0 to CookieMng.CookieCollection.Count - 1 do begin
2050 Cookie := CookieMng.CookieCollection.Items[i];
2051 if ( Cookie.CookieName = VAL_PON ) then begin
2052 ABoard.PON := Cookie.Value;
2053 ABoard.Expires := GMTToLocalDateTime(Cookie.Expires);
2054 end else if ( Cookie.CookieName = VAL_SPID ) then begin
2055 ABoard.SPID := Cookie.Value;
2056 ABoard.Expires := GMTToLocalDateTime(Cookie.Expires);
2057 end else if ( Cookie.CookieName = VAL_HAP ) then begin
2058 // HAP
\8dí
\8f\9c\97p
\82ÌCookie
\82ª
\94z
\95z
\82³
\82ê
\82é
\82Ì
\82Å
\81A
\97L
\8cø
\8aú
\8cÀ
\82ð
\83`
\83F
\83b
\83N
\82·
\82é
2059 if CompareDateTime(GMTToLocalDateTime(Cookie.Expires) ,Now) > 0 then begin
2060 GikoSys.SetBoukenCookie(Cookie.Value, Cookie.Domain);
2061 //
\96`
\8c¯
\82Ì
\8f\91\82Ì
\95Û
\91¶
2062 GikoSys.Setting.WriteBoukenSettingFile;
2065 if Length( curCookies.Values[ Cookie.CookieName ] ) > 0 then begin
2066 //
\8aù
\91¶
\92l
\82Ì
\95t
\82¯
\91Ö
\82¦
2067 curCookies[curCookies.IndexOfName(Cookie.CookieName)] :=
2068 Cookie.ClientCookie;
2071 curCookies.Add(Cookie.ClientCookie);
2075 for i := 0 to curCookies.Count - 1 do begin
2076 if (curCookies[i] <> '') then begin
2077 ABoard.Cookie := ABoard.Cookie + curCookies[i] + '; ';
2081 CookieMng.CookieCollection.Clear;
2085 //! hidden
\83f
\81[
\83^
\8eæ
\93¾
2086 procedure TEditorForm.GetHiddenParameter(Rawtext: String; ABoard: TBoard);
2088 INPUT_MARK = '<input type=hidden' ; //
\91å
\95¶
\8e\9a\8f¬
\95¶
\8e\9a\82Î
\82ç
\82Î
\82ç
\82È
\82±
\82Æ
\82É
\92\8d\88Ó
2089 VALUE_MARK = 'value=' ; //
\91å
\95¶
\8e\9a\8f¬
\95¶
\8e\9a\82Î
\82ç
\82Î
\82ç
\82È
\82±
\82Æ
\82É
\92\8d\88Ó
2090 NAME_MARK = 'name=' ; //
\91å
\95¶
\8e\9a\8f¬
\95¶
\8e\9a\82Î
\82ç
\82Î
\82ç
\82È
\82±
\82Æ
\82É
\92\8d\88Ó
2091 IGNORE_NAMES : array[0..6] of String =
2092 ('subject', 'from', 'mail', 'message', 'bbs', 'time', 'key');
2094 tmp, line, name, value, lname : String;
2095 pos, pose, i : Integer;
2097 tmp := AnsiLowerCase(Rawtext);
2098 pos := AnsiPos(INPUT_MARK, tmp);
2099 while (pos > 0 ) do begin
2100 tmp := Copy(Rawtext, pos + Length(INPUT_MARK), Length(tmp));
2101 Delete(Rawtext, 1, pos+ Length(INPUT_MARK) - 1);
2102 pose := AnsiPos('>', tmp);
2103 // name=xxx value=yyy
\82ª
\90Ø
\82è
\8fo
\82³
\82ê
\82é
2104 line := Copy(tmp, 1, pose - 1);
2107 pos := AnsiPos(NAME_MARK, tmp);
2108 if (pos > 0) then begin
2109 name := Copy(Rawtext, pos + Length(NAME_MARK), Length(line));
2110 //
\94¼
\8ap"
\82Å
\8en
\82Ü
\82Á
\82Ä
\82¢
\82é
\82©
2111 if AnsiPos('"', name) = 1 then begin
2112 //
\94¼
\8ap"
\82Ü
\82Å
\82ð
\83R
\83s
\81[
2114 pose := AnsiPos('"', name);
2115 if (pose > 0) then begin
2116 Delete(name, pose, Length(name));
2118 pose := AnsiPos(' ', name);
2119 if (pose > 0) then begin
2120 Delete(name, pose, Length(name));
2124 pose := AnsiPos(' ', name);
2125 if (pose > 0) then begin
2126 Delete(name, pose, Length(name));
2130 lname := AnsiLowerCase(name);
2131 for i := 0 to Length(IGNORE_NAMES) do begin
2132 if lname = IGNORE_NAMES[i] then begin
2137 pos := AnsiPos(VALUE_MARK, tmp);
2138 if (name <> '') and (pos > 0) then begin
2139 value := Copy(Rawtext, pos + Length(VALUE_MARK), Length(line));
2140 //
\94¼
\8ap"
\82Å
\8en
\82Ü
\82Á
\82Ä
\82¢
\82é
\82©
2141 if AnsiPos('"', value) = 1 then begin
2142 //
\94¼
\8ap"
\82Ü
\82Å
\82ð
\83R
\83s
\81[
2143 Delete(value, 1, 1);
2144 pose := AnsiPos('"', value);
2145 if (pose > 0) then begin
2146 Delete(value, pose, Length(value));
2148 pose := AnsiPos(' ', value);
2149 if (pose > 0) then begin
2150 Delete(value, pose, Length(value));
2154 pose := AnsiPos(' ', value);
2155 if (pose > 0) then begin
2156 Delete(value, pose, Length(name));
2160 if (name <> '') then begin
2161 ABoard.Cookie := ABoard.Cookie + name + '=' + value + '; ';
2164 Delete(tmp, 1, Length(line));
2165 Delete(Rawtext, 1, Length(line));
2166 pos := AnsiPos(INPUT_MARK, tmp);
2170 //!
\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
2171 procedure TEditorForm.UpdateSambaActionUpdate(Sender: TObject);
2173 UpdateSambaAction.Enabled := FSambaTimer.Enabled;
2176 //!
\83T
\83\93\83o
\8dX
\90V
\83A
\83N
\83V
\83\87\83\93
2177 procedure TEditorForm.UpdateSambaActionExecute(Sender: TObject);
2182 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
2183 input := ZenToHan(input);
2184 if GikoSys.IsNumeric(input) then begin
2185 FSambaTimer.UpdateSambaSetting(StrToInt(input));
2187 //
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81ASamba
\83^
\83C
\83}
\81[
\82ð
\8dX
\90V
\82·
\82é
2188 for i := 0 to Screen.FormCount - 1 do begin
2189 if Screen.Forms[i] is TEditorForm then begin
2190 TEditorForm(Screen.Forms[i]).FSambaTimer.Update;
2191 TEditorForm(Screen.Forms[i]).UpdateSambaStatus;
2195 ShowMessage('
\90\94\92l
\82ð
\93ü
\97Í
\82µ
\82Ä
\82
\82¾
\82³
\82¢');
2196 UpdateSambaActionExecute(Sender);
2201 procedure TEditorForm.UpdateSambaStatus;
2203 if (FSambaTimer.Enabled) then begin
2204 StatusBar.Panels[2].Text
2205 := 'Samba24
\8bK
\92è
\92l' + IntToStr(FSambaTimer.SambaInterval);
2209 procedure TEditorForm.InputAssistActionExecute(Sender: TObject);
2215 TextWidth, ItemWidth, tmpWidth, EditW, EditT: Integer;
2217 if FInputAssistKey = '' then Exit;
2219 InputAssistPopupMenu.Items.Clear;
2221 if (FResistWords = nil) then begin
2222 FResistWords := TStringList.Create;
2227 if (GetKeyState( VK_SHIFT ) < 0) then begin
2228 //
\83V
\83t
\83g
\82ª
\89\9f\82³
\82ê
\82Ä
\82¢
\82ê
\82Î
\81A
\83L
\81[
\82Å
\8en
\82Ü
\82é
\83J
\83e
\83S
\83\8a
2230 InputAssistDM.GetStartWithCategoryResistWords(
2231 FInputAssistKey, FResistWords);
2233 //
\83V
\83t
\83g
\82ª
\96³
\82¢
\82Ì
\82Å
\81A
\83L
\81[
\82Å
\8en
\82Ü
\82é
\83L
\81[
2235 InputAssistDM.GetStartWithKeyResistWords(
2236 FInputAssistKey, FResistWords);
2238 Bitmap := TBitmap.Create;
2240 if (FUseUC = True) then
2241 Bitmap.Canvas.Font.Assign(BodyEditUC.Font)
2243 Bitmap.Canvas.Font.Assign(BodyEdit.Font);
2244 //
\83}
\81[
\83W
\83\935px
2245 TextWidth := Bitmap.Canvas.TextWidth(FInputAssistKey) + 5;
2247 for i := 0 to count - 1 do begin
2248 item := TMenuItem.Create(nil);
2249 item.Break := mbNone;
2250 item.Caption := FResistWords[i];
2252 item.OnClick := InputAssistMenuClick;
2253 InputAssistPopupMenu.Items.Add(item);
2255 tmpWidth := Bitmap.Canvas.TextWidth(Item.Caption);
2256 if (tmpWidth > ItemWidth) then begin
2257 ItemWidth := tmpWidth;
2264 if (count > 0) then begin
2265 if (FUseUC = True) then begin
2266 EditW := BodyEditUC.Width;
2267 EditT := BodyEditUC.Top;
2269 EditW := BodyEdit.Width;
2270 EditT := BodyEdit.Top;
2273 point.X := point.X + Self.Left + (Self.Width - EditW) div 2;
2274 point.Y := point.Y + Self.Top + (Self.Height - Self.ClientHeight);
2276 if Screen.DesktopWidth >
2277 (point.X + TextWidth + ItemWidth) then begin
2278 InputAssistPopupMenu.Popup(
2279 point.X + TextWidth,
2280 point.Y + EditorPage.Top + EditorPage.TabHeight + EditT);
2282 InputAssistPopupMenu.Popup(
2283 point.X - TextWidth - ItemWidth,
2284 point.Y + EditorPage.Top + EditorPage.TabHeight + EditT);
2289 procedure TEditorForm.InputAssistMenuClick(Sender: TObject);
2295 if not (Sender is TMenuItem) then Exit;
2297 if (FResistWords <> nil) then begin
2298 if (FUseUC = True) then
2299 EditHandle := BodyEditUC.Handle
2301 EditHandle := BodyEdit.Handle;
2304 TResistWord(FResistWords.Objects[TMenuItem(Sender).Tag]).GetText;
2308 IMC := ImmGetContext(EditHandle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
2310 ImmNotifyIME(IMC, NI_COMPOSITIONSTR, CPS_CANCEL, 0);
2312 ImmReleaseContext(EditHandle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
2316 FInputAssistKey := '';
2318 if (FUseUC = True) then
2319 BodyEditUC.InsertText(text)
2321 InsertText(BodyEdit, text);
2324 //! TMemo
\82Ì
\83J
\81[
\83\
\83\8b\88Ê
\92u
\82É
\95¶
\8e\9a\97ñ
\91}
\93ü
2325 procedure TEditorForm.InsertText(Memo: TMemo; Text: String);
2327 line, sel, pos: Integer;
2328 left, right : String;
2330 Memo.Lines.BeginUpdate;
2331 line := SendMessage(Memo.Handle,EM_LINEFROMCHAR,-1,0); //
\8ds
2332 sel := Memo.SelStart;
2333 pos := sel - SendMessage(Memo.Handle, EM_LINEINDEX, -1, 0); //
\8c\85
2334 if (pos > 0) then begin
2335 left := Copy(Memo.Lines[line], 0, pos);
2339 right := Copy(Memo.Lines[line], pos + 1, Length(Memo.Lines[line]));
2340 Memo.Lines.Strings[line] := left + Text + right;
2341 Memo.Lines.EndUpdate;
2342 //
\81@
\83L
\83\83\83\8c\83b
\83g
\82Ì
\88Ê
\92u
\82ð
\8dX
\90V
\82·
\82é
2343 Memo.SelStart := sel + Length(text);
2344 //
\83L
\83\83\83\8c\83b
\83g
\82Ì
\88Ê
\92u
\82Ü
\82Å
\83X
\83N
\83\8d\81[
\83\8b
2345 Memo.Perform(EM_SCROLLCARET, 0, 0);
2349 procedure TEditorForm.ApplicationEvents1Message(var Msg: tagMSG;
2350 var Handled: Boolean);
2358 if (Self.Active) then begin
2360 //
\83L
\81[
\89\9f\89º
\82Ì
\82Ý
\8eó
\82¯
\8eæ
\82é
2363 //
\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é
2364 if (EditorPage.ActivePageIndex = 0)
2365 and (GetKeyState( VK_CONTROL ) < 0) then begin
2366 wmMsg.Msg := Msg.message;
2367 wmMsg.CharCode := Word(Msg.wParam);
2368 wmMsg.KeyData := Msg.lParam;
2369 if (wmMsg.CharCode = 229) and (wmMsg.KeyData = 3735553) then begin
2370 if (FUseUC = True) then
2371 EditHandle := BodyEditUC.Handle
2373 EditHandle := BodyEdit.Handle;
2374 IMC := ImmGetContext(EditHandle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
2375 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
2376 if (Len > 0) then begin
2377 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
2378 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
2379 SetLength(Str, Len);
2380 FInputAssistKey := Str;
2381 InputAssistActionExecute(nil);
2384 ImmReleaseContext(EditHandle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
2393 procedure TEditorForm.ShowInputAssistFormExecute(Sender: TObject);
2395 form : TInputAssistForm;
2397 form := TInputAssistForm.Create(nil);
2399 if TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
2400 SetWindowPos(form.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2402 form.SetUpFromEditor;
2403 if (form.ShowModal = mrOk) then begin
2404 if (FUseUC = True) then
2405 BodyEditUC.InsertText(form.GetInsertText)
2407 InsertText(BodyEdit, form.GetInsertText);
2413 //! Cookie
\8fî
\95ñ
\8dí
\8f\9c
2414 procedure TEditorForm.ReleaseCookieActionExecute(Sender: TObject);
2418 //
\83X
\83\8c\83b
\83h
\82ª
\96³
\82¢
\81@
\83X
\83\8c\97§
\82Ä
\82Ì
\82Æ
\82«
\82ÍFBoard
\82ð
\92¼
\90Ú
\8eg
\82¤
2421 //
\83N
\83b
\83L
\81[
\82Ì
\8fî
\95ñ
\82ð
\8eÌ
\82Ä
\82é
2425 // 0
\82É
\8aª
\82«
\96ß
\82·
2428 //!
\94Â
\8fî
\95ñ
\8eæ
\93¾Update
\83C
\83x
\83\93\83g
2429 procedure TEditorForm.GetSETTINGTXTActionUpdate(Sender: TObject);
2431 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
2432 GetSETTINGTXTAction.Enabled := not FWork;
2434 //!
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾Update
\83C
\83x
\83\93\83g
2435 procedure TEditorForm.GetHeadTXTActionUpdate(Sender: TObject);
2437 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
2438 GetSETTINGTXTAction.Enabled := not FWork;
2441 //! Samba
\83^
\83C
\83}
\81[
\83C
\83x
\83\93\83g
2442 procedure TEditorForm.SambaTimer(Sender: TObject);
2445 if FSambaTimer.WriteDeta = ZERO_DATE then
2446 StatusBar.Panels[1].Text := '
\8f\89\8f\91'
2448 FNow := IncMilliSecond(FNow, 500);
2449 StatusBar.Panels[1].Text :=
2450 Format('%8.0f
\95b
\8co
\89ß', [SecondSpan(FNow, FSambaTimer.WriteDeta)]);
2454 \brief
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82Æ
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
2456 procedure TEditorForm.SetWindowRect;
2458 wp: TWindowPlacement;
2466 //
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\90Ý
\92è
2467 wp.length := sizeof(wp);
2468 wp.rcNormalPosition.Top := GikoSys.Setting.EditWindowTop;
2469 wp.rcNormalPosition.Left := GikoSys.Setting.EditWindowLeft;
2471 wp.rcNormalPosition.Bottom := GikoSys.Setting.EditWindowTop + GikoSys.Setting.EditWindowHeight;
2472 wp.rcNormalPosition.Right := GikoSys.Setting.EditWindowLeft + GikoSys.Setting.EditWindowWidth;
2473 wp.showCmd := SW_HIDE;
2474 SetWindowPlacement(Handle, @wp);
2476 if GikoSys.Setting.EditWindowMax then begin
2477 WindowState := wsMaximized;
2480 //
\83E
\83B
\83\93\83h
\83E
\82ª
\89æ
\96Ê
\8aO
\82È
\82ç
\89æ
\96Ê
\93à
\82É
\88Ú
\93®
\82·
\82é
2481 Right := Left + Width;
2482 Bottom := Top + Height;
2485 while (MonCnt < Screen.MonitorCount) do begin
2486 MonR := Screen.Monitors[MonCnt].Left + Screen.Monitors[MonCnt].Width;
2487 MonB := Screen.Monitors[MonCnt].Top + Screen.Monitors[MonCnt].Height;
2489 if ((Left >= Screen.Monitors[MonCnt].Left) and (Left < MonR) and
2490 (Top >= Screen.Monitors[MonCnt].Top) and (Top < MonB) and
2491 (Right > Screen.Monitors[MonCnt].Left) and (Right <= MonR) and
2492 (Bottom > Screen.Monitors[MonCnt].Top) and (Bottom <= MonB)) then begin
2497 MonCnt := MonCnt + 1;
2500 if (MonOk = False) then begin
2505 //
\8c»
\8dÝ
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82ð
\95Û
\91¶
2506 GikoSys.Setting.EditWindowTop := Top + WINDOWMOVE_V; //
\8e\9f\82É
\8aJ
\82
\83E
\83B
\83\93\83h
\83E
\82Í
2507 GikoSys.Setting.EditWindowLeft := Left + WINDOWMOVE_H; //
\81@
\81@
\81@
\89E
\8eÎ
\82ß
\89º
\82É
\82¸
\82ç
\82·
2508 //
\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·
2509 if GikoSys.Setting.EditWindowHeight < 144 then begin
2512 if GikoSys.Setting.EditWindowWidth < 144 then begin
2517 \brief
\8ag
\92£
\83^
\83u
\90Ý
\92è
2519 procedure TEditorForm.SetExtraTab;
2521 SECTION = 'EditorForm';
2525 ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
2527 BoardtopTab.TabVisible := ini.Readbool(SECTION, 'BoardTopTab', False);
2528 BoardTop.Checked := BoardtopTab.TabVisible;
2529 RocalRuleTab.TabVisible := ini.ReadBool(SECTION, 'LocalRuleTab', False);
2530 LocalRule.Checked := RocalRuleTab.TabVisible;
2537 \return
\83\8c\83X
\83G
\83f
\83B
\83^
\82ª
\93\8a\8de
\82µ
\82æ
\82¤
\82Æ
\82µ
\82Ä
\82¢
\82é
\94Â
2539 function TEditorForm.GetBoard : TBoard;
2541 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ªnull
\82Ì
\8e\9e\82ÍFBoard
2542 if FThreadItem = nil then begin
2545 Result := FThreadItem.ParentBoard;
2549 \brief GikoForm
\82É
\83\81\83b
\83Z
\81[
\83W
\82ð
\92Ç
\89Á
\82·
\82é
2550 \param icon
\83\81\83b
\83Z
\81[
\83W
\82É
\82Â
\82
\83A
\83C
\83R
\83\93
2552 procedure TEditorForm.AddFormMessageNew(icon: TGikoMessageIcon);
2554 if FThreadItem = nil then begin
2555 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, icon)
2557 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, icon);
2562 \brief
\83\8d\81[
\83J
\83\8bfusiana
\83g
\83\89\83b
\83v
2563 \return true:
\91\97\90M
\92\86\8e~ false:
\91\97\90M
2565 function TEditorForm.isLocalFusianaTrap: Boolean;
2570 if GikoSys.Setting.LocalTrapAtt then begin
2571 Namae := THTMLCreate.RepHtml(NameComboBox.Text);
2572 if (LFusianaGet(Namae)) or (Namae = '
\8eR
\8dè
\8fÂ') then begin
2573 if FusianaMsgBox = IDNO then begin
2580 \brief
\83\8a\83\82\81[
\83gfusiana
\83g
\83\89\83b
\83v
2581 \return true:
\91\97\90M
\92\86\8e~ false:
\91\97\90M
2583 function TEditorForm.isRemoteFusianaTrap: Boolean;
2591 Namae := THTMLCreate.RepHtml(NameComboBox.Text);
2592 if (GikoSys.Setting.RemoteTrapAtt) and (Length(Namae) = 0) then begin
2595 if Board = nil then Exit;
2597 if not FileExists(Board.GetSETTINGTXTFileName) then begin
2598 //Setting.txt
\82ª
\82È
\82©
\82Á
\82½
\82ç
\8eæ
\93¾
2599 //
\8eI
\82É
\95\89\89×
\82ª
\82©
\82©
\82è
\82»
\82¤...
2601 GetSETTINGTXTAction.Execute;
2607 if FileExists(Board.GetSETTINGTXTFileName) then begin
2608 body := TStringList.Create;
2610 body.LoadFromFile(Board.GetSETTINGTXTFileName);
2611 Remote := GetFusianaName(body, Board);
2617 if LFusianaGet(Remote) then begin
2618 if FusianaMsgBox = IDNO then begin
2625 \brief Header
\95¶
\8e\9a\97ñ
\8eæ
\93¾
2626 \param ACOOKIE Cookie
2631 \return Header
\95¶
\8e\9a\97ñ
2633 function TEditorForm.getHeaderStr(const ACOOKIE: string; const SPID : string;
2634 const PON : string; const HAP : string; Board : TBoard) : string;
2639 Result := Result + 'SPID=' + SPID + '; ';
2641 Result := Result + 'PON=' + PON + '; ';
2643 //
\83z
\83X
\83g
\82ª2ch
\82Å
\81ABe
\82ÉLogin
\82µ
\82Ä
\82¢
\82ê
\82ÎBE
\82Ì
\83f
\81[
\83^
\82ð
\91\97\82é
2644 //GikoSys.ParseURI( URL, Protocol,Host, Path, Document, Port, Bookmark );
2645 //if GikoSys.Is2chHost(Host) and GikoSys.Setting.BeLogin then
2646 if (Board.Is2ch) then begin
2647 //
\8cÅ
\92è
\82Ì
\83N
\83b
\83L
\81[
\82ª
\82 \82ê
\82Î
\90H
\82í
\82¹
\82é
2648 if Length(GikoSys.Setting.FixedCookie) > 0 then begin
2649 //
\83z
\83X
\83g
\82ª2ch
\82Ì
\8fê
\8d\87\81C
\8cÅ
\92è
\82Ì
\83N
\83b
\83L
\81[
\82ð
\90H
\82í
\82¹
\82é
2650 Result := Result + GikoSys.Setting.FixedCookie + '; ';
2652 if (GikoSys.Belib.Connected) then begin
2653 Result := Result + 'MDMD=' + GikoSys.Belib.MDMD + '; '
2654 + 'DMDM=' + GikoSys.Belib.DMDM + '; ';
2658 Result := 'Cookie: ' + Result + 'NAME=' + NameComboBox.Text + '; MAIL=' + MailComboBox.Text;
2661 Result := Result + '; HAP=' + HAP + '; ';
2666 \brief fusiana
\8cx
\8d\90\83_
\83C
\83A
\83\8d\83O
2667 \return IDYES
\8f\91\82«
\8d\9e\82Þ IDNO
\92\86\8e~
2669 function TEditorForm.FusianaMsgBox: Integer;
2671 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 +
2672 '
\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' +
2673 #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';
2675 Result := MsgBox(Handle, MSG_FUSIANA, '
\8fî
\95ñ',
2676 MB_YESNO or MB_ICONQUESTION);
2679 \brief
\98A
\93\8a\83\82\81[
\83hON/OFF
\90Ø
\82è
\91Ö
\82¦
2681 procedure TEditorForm.ContinueModeActionExecute(Sender: TObject);
2683 ContinueModeAction.Checked := not ContinueModeAction.Checked;
2686 \brief
\98A
\93\8a\83\82\81[
\83h
\8dX
\90V
\8f\88\97\9d
2688 procedure TEditorForm.ContinueModeActionUpdate(Sender: TObject);
2690 //
\83X
\83\8c\82½
\82Ä
\82Ì
\82Æ
\82«
\82Í
\96³
\8cø
2691 ContinueModeAction.Enabled := FThreadItem <> nil;
2694 \brief
\8f\91\82«
\8d\9e\82Þ
\94Â/
\83X
\83\8c\83b
\83h
\82ð
\95\
\8e¦
\82·
\82é
2696 procedure TEditorForm.OpenSendTargetActionExecute(Sender: TObject);
2698 if (FThreadItem <> nil) then begin
2699 //
\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É
2700 //
\91O
\96Ê
\82Å
\8cÅ
\92è
\82·
\82é
2701 if not (fsShowing in Self.FormState) then begin
2702 //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
2703 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2706 //
\83X
\83\8c\83b
\83h
2707 GikoForm.InsertBrowserTab(FThreadItem, True);
2709 if not TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\89ð
\8f\9c
2710 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2716 GikoForm.SelectTreeNode(
2720 procedure TEditorForm.ReloadTargetActionExecute(Sender: TObject);
2722 if (FThreadItem <> nil) then begin
2723 //
\83X
\83\8c\83b
\83h
2724 //
\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É
2725 //
\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é)
2726 if not (fsShowing in Self.FormState) then begin
2727 //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
2728 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2731 GikoForm.DownloadContent(FThreadItem);
2733 if not TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\89ð
\8f\9c
2734 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2740 GikoForm.DownloadList(GetBoard);
2743 //!
\8cë
\94\9a\83`
\83F
\83b
\83N
2744 function TEditorForm.isGobaku: Boolean;
2746 MSG_GOBAKU : string =
2747 '
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é%s
\82Æ
\93\8a\8de
\90æ
\82Ì%s
\82ª
\88Ù
\82È
\82è
\82Ü
\82·
\81B'#13#10 +
2748 '
\82±
\82Ì
\82Ü
\82Ü
\8f\91\82«
\8d\9e\82Ý
\82Ü
\82·
\82©
\81H';
2750 ThreadItem : TThreadItem;
2755 //
\83I
\83v
\83V
\83\87\83\93\97L
\8cø
\82©
\82Â
\83\8c\83X
\91\97\90M
\82Å
\82Ì
\82Ý
\97L
\8cø
2756 if (GikoSys.Setting.UseGobakuCheck) then begin
2757 //
\83\8c\83X
\91\97\90M
2758 if (FThreadItem <> nil) then begin
2759 ThreadItem := GikoForm.GetActiveContent(False);
2760 if (ThreadItem <> nil) then begin
2761 if (FThreadItem <> ThreadItem) then begin
2762 msg := Format(MSG_GOBAKU, ['
\83X
\83\8c\83b
\83h', '
\83X
\83\8c\83b
\83h']);
2763 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2766 if GikoForm.ActiveList is TBBS then begin
2767 if TBBS(GikoForm.ActiveList) <> FThreadItem.ParentBoard.ParentCategory.ParenTBBS then begin
2768 msg := Format(MSG_GOBAKU, ['BBS', '
\83X
\83\8c\83b
\83h
\82Ì
\8f\8a\91®
\82·
\82éBBS']);
2769 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2771 end else if GikoForm.ActiveList is TCategory then begin
2772 if TCategory(GikoForm.ActiveList).FindThreadFromURL(FThreadItem.URL) = nil then begin
2773 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']);
2774 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2776 end else if GikoForm.ActiveList is TBoard then begin
2777 if TBoard(GikoForm.ActiveList) <> FThreadItem.ParentBoard then begin
2778 msg := Format(MSG_GOBAKU, ['
\94Â', '
\83X
\83\8c\83b
\83h
\82Ì
\8f\8a\91®
\82·
\82é
\94Â']);
2779 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2784 //
\83X
\83\8c\82½
\82Ä
2785 if GikoForm.ActiveList is TBBS then begin
2786 if TBBS(GikoForm.ActiveList) <> FBoard.ParentCategory.ParenTBBS then begin
2787 msg := Format(MSG_GOBAKU, ['BBS', '
\94Â
\82Ì
\8f\8a\91®
\82·
\82éBBS']);
2788 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2790 end else if GikoForm.ActiveList is TCategory then begin
2791 if TCategory(GikoForm.ActiveList).FindBoardFromURL(FBoard.URL) = nil then begin
2792 msg := Format(MSG_GOBAKU, ['
\83J
\83e
\83S
\83\8a', '
\94Â
\82Ì
\8f\8a\91®
\82·
\82é
\83J
\83e
\83S
\83\8a']);
2793 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2795 end else if GikoForm.ActiveList is TBoard then begin
2796 if TBoard(GikoForm.ActiveList) <> FBoard then begin
2797 msg := Format(MSG_GOBAKU, ['
\94Â', '
\94Â']);
2798 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2805 procedure TEditorForm.SetFocusEdit;
2807 if (FUseUC = True) then
2813 procedure TEditorForm.SetTextEdit(TextSrc: String);
2815 if (FUseUC = True) then
2816 BodyEditUC.Text := TextSrc
2818 BodyEdit.Text := TextSrc;