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
1095 procedure TEditorForm.GetSendData(Source: TStringStream);
1106 if GikoSys.Setting.UseMachineTime then begin
1107 if GikoSys.Setting.TimeAdjust then
1108 Adjust := Gikosys.Setting.TimeAdjustSec
1110 Adjust := GikoSys.Setting.TimeAdjustSec * -1;
1111 SendTime := GikoSys.DateTimeToInt(Now) - (9 * 60 * 60) + Adjust
1113 if (Board.LastGetTime = 0) or (Board.LastGetTime = ZERO_DATE) then
1114 SendTime := GikoSys.DateTimeToInt(Now)
1116 SendTime := GikoSys.DateTimeToInt(Board.LastGetTime);
1121 SessionID := GikoSys.Dolib.SessionID;
1122 if SessionID <> '' then
1123 s := 'sid=' + HttpEncode(SessionID) + '&'
1126 s := s + 'subject=&'
1127 + 'FROM=' + HttpEncode(NameComboBox.Text) + '&'
1128 + 'mail=' + HttpEncode(MailComboBox.Text) + '&'
1129 + 'MESSAGE=' + HttpEncode(body) + '&'
1130 + 'bbs=' + Board.BBSID + '&'
1131 + 'time=' + IntToStr(SendTime) + '&';
1133 if FThreadItem = nil then begin
1134 s := s + 'subject=' + HttpEncode(TitleEdit.Text) + '&';
1135 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;
1137 s := s + 'key=' + ChangeFileExt(FThreadItem.FileName, '') + '&';
1138 s := s + 'submit=' + HttpEncode('
\8f\91\82«
\8d\9e\82Þ') + #13#10;
1140 Source.WriteString(s);
1143 procedure TEditorForm.SaveSendFile;
1149 ini := CreateSentIniFile;
1150 if (ini <> nil) then begin
1152 sDate := IntToStr(GikoSys.DateTimeToInt(Now));
1153 if (FUseUC = True) then
1154 Body := BodyEditUC.EncodeText
1156 Body := BodyEdit.Text;
1158 ini.WriteString(sDate, 'Name', NameComboBox.Text);
1159 ini.WriteString(sDate, 'EMail', MailComboBox.Text);
1160 ini.WriteString(sDate, 'Body', HttpEncode(Body));
1161 ini.WriteInteger(sDate, 'Status', FStatusCode);
1162 ini.WriteDateTime(sDate, 'Date', Now);
1163 if FThreadItem = nil then begin
1164 ini.WriteString(sDate, 'Title', MojuUtils.Sanitize(TitleEdit.Text));
1165 //ini.WriteString(sDate, 'BBS', FBoard.BBSID);
1166 ini.WriteString(sDate, 'URL', FBoard.URL);
1167 ini.WriteInteger(sDate, 'NewThread', 1);
1169 ini.WriteString(sDate, 'Title', FThreadItem.Title);
1170 //ini.WriteString(sDate, 'BBS', FThreadItem.ParentBoard.BBSID);
1171 ini.WriteString(sDate, 'URL', FThreadItem.URL);
1172 ini.WriteString(sDate, 'Key', ChangeFileExt(FThreadItem.FileName, ''));
1181 function TEditorForm.CreateSentIniFile: TMemIniFile;
1183 maxSize, fileSize, i: Integer;
1188 maxSize := GikoSys.Setting.SentIniFileSize * 1024 * 1024;
1189 //
\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·
1190 if (maxSize > 0) then begin
1191 fileSize := GikoSys.GetFileSize(GikoSys.Setting.GetSentFileName);
1192 //
\8dÅ
\91å
\83T
\83C
\83Y
\82ð
\92´
\82¦
\82Ä
\82¢
\82½
\8fê
\8d\87\82Í
\83\8a\83l
\81[
\83\80\82·
\82é
1193 if (fileSize >= maxSize) then begin
1195 //
\8d¡
\82Ì
\8e\9e\8d\8f\82ð
\83t
\83@
\83C
\83\8b\96¼
\82Ì
\8cã
\82ë
\82É
\82Â
\82¯
\82é
1197 // 10
\89ñ
\88È
\8fã
\8e¸
\94s
\82µ
\82½
\82ç
\82 \82«
\82ç
\82ß
\82é
1198 if (i > 10) then break;
1199 DateTimeToString(newName, 'yyhhnnsszzz', Now());
1201 until RenameFile(GikoSys.Setting.GetSentFileName,
1202 GikoSys.Setting.GetSentFileName + '.' + newName);
1204 Result := TMemIniFile.Create(GikoSys.Setting.GetSentFileName);
1207 procedure TEditorForm.SendActionExecute(Sender: TObject);
1209 TITLE_SAMBA : string = 'Samba24
\8cx
\8d\90';
1214 state : TGikoDownloadState;
1221 SendAction.Enabled := False;
1222 Application.ProcessMessages;
1223 if not Check then Exit;
1227 if FThreadItem = nil then begin
1228 rc := GikoUtil.MsgBox(Handle,
1229 '
\81u' + Board.Title + '
\81v
\94Â
\82É
\90V
\82µ
\82¢
\83X
\83\8c\83b
\83h
\97§
\82Ä
\82Ü
\82·'#13#10#13#10
1230 + '
\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
1231 + '
\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
1232 + '
\81u
\82Í
\82¢
\81v
\82ð
\89\9f\82·
\82Æ
\91\97\90M
\82µ
\82Ü
\82·',
1234 MB_ICONQUESTION or MB_YESNO);
1235 if rc <> ID_YES then
1239 SetNameList(NameComboBox.Text, MailComboBox.Text);
1240 if (KotehanCheckBox.Enabled) and (KotehanCheckBox.Checked) then begin
1241 Board.KotehanName := NameComboBox.Text;
1242 Board.KotehanMail := MailComboBox.Text;
1245 if Board.IsBoardPlugInAvailable then begin
1248 if FThreadItem = nil then begin
1249 //
\83X
\83\8c\97§
\82Ä
1250 state := TGikoDownloadState( Board.BoardPlugIn.CreateThread(
1251 DWORD( Board ), TitleEdit.Text, NameComboBox.Text, MailComboBox.Text, body ) );
1253 if state = gdsComplete then begin
1254 GikoForm.PlaySound('ResEnd');
1256 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, gmiOK);
1259 end else if State = gdsError then begin
1260 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmSureError), nil, gmiNG);
1261 end else if State = gdsAbort then begin
1262 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiNG);
1266 state := TGikoDownloadState( FThreadItem.ParentBoard.BoardPlugIn.WriteThread(
1267 DWORD( FThreadItem ), NameComboBox.Text, MailComboBox.Text, body ) );
1269 if state = gdsComplete then begin
1270 GikoForm.PlaySound('ResEnd');
1272 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, gmiOK);
1275 end else if State = gdsError then begin
1276 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmResError), nil, gmiOK);
1277 end else if State = gdsAbort then begin
1278 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
1282 if not FSambaTimer.Enabled then begin
1283 if CompareDateTime(Board.Expires ,Now) <= 0 then begin
1288 //
\96`
\8c¯
\82Ì
\8f\91\83\8c\83x
\83\8b\96ß
\82é
\96â
\91è
\91Î
\89\9e
1289 if (Board.Is2ch) and (AnsiPos('HAP=', Board.Cookie)>0) then begin
1292 Send(Board.Cookie, Board.SPID, Board.PON, True);
1294 if not FSambaTimer.CheckSambaTime(Now()) then begin
1295 rc := GikoUtil.MsgBox(Handle,
1296 '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
1297 + '
\91\97\90M
\82ð
\92\86\8e~
\82µ
\82Ü
\82·
\82©
\81H' + #13#10
1298 + '(
\81u
\82¢
\82¢
\82¦
\81v
\82¾
\82Æ
\91\97\90M
\82µ
\82Ü
\82·)', TITLE_SAMBA,
1299 MB_YESNO or MB_ICONQUESTION);
1300 if rc = IDYES then begin
1304 if rc = IDNO then begin
1305 rc2 := GikoUtil.MsgBox(Handle,
1306 '
\96{
\93\96\82É
\91\97\90M
\82µ
\82Ü
\82·
\82©
\81H',
1308 MB_YESNO or MB_ICONQUESTION);
1309 if rc2 = IDNO then begin
1315 if CompareDateTime(Board.Expires ,Now) <= 0 then begin
1320 //
\96`
\8c¯
\82Ì
\8f\91\83\8c\83x
\83\8b\96ß
\82é
\96â
\91è
\91Î
\89\9e
1321 if (Board.Is2ch) and (AnsiPos('HAP=', Board.Cookie)>0) then begin
1324 Send(Board.Cookie, Board.SPID, Board.PON, True);
1329 if FSambaTimer.Enabled then begin
1330 FNow := FSambaTimer.Update;
1335 procedure TEditorForm.SaveActionExecute(Sender: TObject);
1340 procedure TEditorForm.CloseActionExecute(Sender: TObject);
1345 procedure TEditorForm.UndoActionExecute(Sender: TObject);
1347 SendMessage(GetActiveControlHandle, WM_UNDO, 0, 0);
1350 procedure TEditorForm.CutActionExecute(Sender: TObject);
1352 SendMessage(GetActiveControlHandle, WM_CUT, 0, 0);
1355 procedure TEditorForm.CopyActionExecute(Sender: TObject);
1357 SendMessage(GetActiveControlHandle, WM_COPY, 0, 0);
1360 procedure TEditorForm.PasteActionExecute(Sender: TObject);
1362 SendMessage(GetActiveControlHandle, WM_PASTE, 0, 0);
1365 procedure TEditorForm.SelectAllActionExecute(Sender: TObject);
1367 SendMessage(GetActiveControlHandle, EM_SETSEL, 0, GetWindowTextLength(GetActiveControlHandle));
1370 procedure TEditorForm.TopActionExecute(Sender: TObject); //
\83E
\83B
\83\93\83h
\83E
\8dÅ
\91O
\96Ê(Stay)
\83{
\83^
\83\93\82Ì
\8f\88\97\9d
1372 if not (fsShowing in Self.FormState) then begin
1373 if TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
1374 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
1375 GikoSys.Setting.EditWindowStay := true;
1376 end else begin //
\83X
\83e
\83C
\8fó
\91Ô
\89ð
\8f\9c
1377 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
1378 GikoSys.Setting.EditWindowStay := false;
1380 //
\83X
\83e
\83C
\8fó
\91Ô
\82Ì
\95Û
\91¶
1381 //GikoSys.Setting.EditWindowStay := FormStyle = fsStayOnTop;
1385 procedure TEditorForm.AbortActionExecute(Sender: TObject);
1390 procedure TEditorForm.SendActionUpdate(Sender: TObject);
1392 SendAction.Enabled := not FWork;
1395 procedure TEditorForm.SaveActionUpdate(Sender: TObject);
1397 SaveAction.Enabled := False;
1400 procedure TEditorForm.CloseActionUpdate(Sender: TObject);
1402 CloseAction.Enabled := not FWork;
1405 procedure TEditorForm.UndoActionUpdate(Sender: TObject);
1407 UndoAction.Enabled := (GetActiveControlHandle <> 0)
1408 and (SendMessage(GetActiveControlHandle, EM_CANUNDO, 0, 0) <> 0)
1412 procedure TEditorForm.CutActionUpdate(Sender: TObject);
1414 Selection: TSelection;
1417 AHandle := GetActiveControlHandle;
1418 SendMessage(AHandle, EM_GETSEL, Longint(@Selection.StartPos), Longint(@Selection.EndPos));
1419 CutAction.Enabled := (AHandle <> 0)
1420 and ((Selection.EndPos - Selection.StartPos) <> 0)
1424 procedure TEditorForm.CopyActionUpdate(Sender: TObject);
1426 Selection: TSelection;
1429 AHandle := GetActiveControlHandle;
1430 SendMessage(AHandle, EM_GETSEL, Longint(@Selection.StartPos), Longint(@Selection.EndPos));
1431 CopyAction.Enabled := (AHandle <> 0)
1432 and ((Selection.EndPos - Selection.StartPos) <> 0)
1436 procedure TEditorForm.PasteActionUpdate(Sender: TObject);
1438 PasteAction.Enabled := (GetActiveControlHandle <> 0)
1439 and (Clipboard.HasFormat(CF_TEXT))
1443 procedure TEditorForm.TopActionUpdate(Sender: TObject);
1445 TopAction.Enabled := not FWork;
1448 procedure TEditorForm.SageCheckBoxClick(Sender: TObject);
1450 if SageCheckBox.Checked then begin
1451 if AnsiPos('sage', MailComboBox.Text) = 0 then
1452 MailComboBox.Text := 'sage' + MailComboBox.Text;
1454 if AnsiPos('sage', MailComboBox.Text) <> 0 then
1455 MailComboBox.Text := StringReplace(MailComboBox.Text, 'sage', '', [rfReplaceAll]);
1459 procedure TEditorForm.MailComboBoxChange(Sender: TObject);
1461 if AnsiPos('sage', MailComboBox.Text) = 0 then
1462 SageCheckBox.Checked := False
1464 SageCheckBox.Checked := True;
1467 procedure TEditorForm.IdLogDebugReceive(ASender: TIdConnectionIntercept;
1470 StringStream: TStringStream;
1472 StringStream := TStringStream.Create('');
1474 StringStream.CopyFrom(AStream, AStream.Size);
1475 FDebugStrReceive := FDebugStrReceive + StringStream.DataString;
1481 procedure TEditorForm.IdLogDebugSend(ASender: TIdConnectionIntercept;
1484 StringStream: TStringStream;
1486 StringStream := TStringStream.Create('');
1488 StringStream.CopyFrom(AStream, AStream.Size);
1489 FDebugStrSend := FDebugStrSend + StringStream.DataString;
1495 procedure TEditorForm.TransActionExecute(Sender: TObject);
1497 AlphaBlend := TransAction.Checked;
1498 //
\94¼
\93§
\96¾
\8fó
\91Ô
\82Ì
\95Û
\91¶
1499 GikoSys.Setting.EditWindowTranslucent := TransAction.Checked;
1502 procedure TEditorForm.TransActionUpdate(Sender: TObject);
1504 TransAction.Enabled := not FWork;
1506 //StatusBar
\82ÌPanels[0]
\82Ì
\95\9d\82ð
\89Â
\95Ï
\81B
\8ec
\82è
\82ð
\8cÅ
\92è
\82É
\82·
\82é
1507 procedure TEditorForm.StatusBarResize(Sender: TObject);
1509 StatusBar.Panels[0].Width := StatusBar.Width
1510 - StatusBar.Panels[1].Width - StatusBar.Panels[2].Width;
1514 //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Þ
1515 procedure TEditorForm.FormActivate(Sender: TObject);
1517 if ( FSambaTimer.Enabled ) and ( FThreadItem <> nil ) then
1519 FNow := FSambaTimer.Update;
1521 if GikoSys.Setting.GestureEnabled then begin
1522 GikoSys.Setting.Gestures.ClearGesture;
1523 GikoSys.Setting.Gestures.LoadGesture(
1524 GikoSys.Setting.GetGestureFileName, ActionList );
1525 MouseGesture.UnHook;
1526 MouseGesture.OnGestureStart := OnGestureStart;
1527 MouseGesture.OnGestureMove := OnGestureMove;
1528 MouseGesture.OnGestureEnd := OnGestureEnd;
1529 MouseGesture.SetHook( Handle );
1532 procedure TEditorForm.FormCloseQuery(Sender: TObject;
1533 var CanClose: Boolean);
1535 CanClose := not FWork;
1538 procedure TEditorForm.QuotePasteActionExecute(Sender: TObject);
1545 quote := GikoSys.GetOEIndentChar;
1546 s := TStringList.Create;
1548 s.Text := Clipboard.AsText;
1550 for i := s.Count - 1 downto 0 do
1551 s[ i ] := quote + s[ i ];
1553 if (FUseUC = True) then
1554 BodyEditUC.SelText := s.Text
1556 BodyEdit.SelText := s.Text;
1563 procedure TEditorForm.SpaceToNBSPActionExecute(Sender: TObject);
1565 GikoSys.Setting.SpaceToNBSP := SpaceToNBSPAction.Checked;
1566 if EditorPage.ActivePage = PreviewTab then
1570 procedure TEditorForm.AmpToCharRefActionExecute(Sender: TObject);
1572 GikoSys.Setting.AmpToCharRef := AmpToCharRefAction.Checked;
1573 if EditorPage.ActivePage = PreviewTab then
1577 procedure TEditorForm.BoardTopClick(Sender: TObject);
1581 ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
1583 BoardtopTab.TabVisible := BoardTop.Checked;
1584 ini.WriteBool('EditorForm', 'BoardTopTab', BoardtopTab.TabVisible);
1592 procedure TEditorForm.GetSETTINGTXTActionExecute(Sender: TObject);
1594 memStream: TMemoryStream;
1595 URL, RefURL: string;
1596 settingBody: TStringList;
1599 if not FWork then begin
1602 tmpBoard := GetBoard;
1603 if tmpBoard <> nil then begin
1605 RefURL := tmpBoard.URL;
1606 if RefURL[Length(RefURL)] <> '/' then
1607 URL := RefURL + '/' + 'SETTING.TXT'
1609 URL := RefURL + 'SETTING.TXT';
1610 Screen.Cursor := crHourGlass;
1611 memStream := TMemoryStream.Create;
1614 StatusBar.Panels[0].Text := 'SETTING.TXT
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86';
1615 GetWebData(URL, RefURL, tmpBoard.SETTINGTXTTime, memStream);
1616 if( Indy.ResponseCode = 200 ) then begin
1617 settingBody := TStringList.Create;
1619 memStream.Seek(0, soFromBeginning);
1620 settingBody.LoadFromStream(memStream);
1621 settingBody.SaveToFile(tmpBoard.GetSETTINGTXTFileName);
1622 tmpBoard.SETTINGTXTTime := Indy.Response.LastModified;
1623 tmpBoard.IsSETTINGTXT := true;
1624 tmpBoard.TitlePictureURL := GetTitlePictureURL(settingBody, tmpBoard);
1625 tmpBoard.Modified := true;
1629 StatusBar.Panels[0].Text := 'SETTING.TXT
\8eæ
\93¾
\8a®
\97¹(' + IntToStr(Indy.ResponseCode) + ')';
1632 on E: EIdException do begin
1633 if( AnsiPos('304', E.Message) > 0 ) then
1634 StatusBar.Panels[0].Text := 'SETTING.TXT
\8dX
\90V
\96³
\82µ(' + IntToStr(Indy.ResponseCode) + ')'
1636 StatusBar.Panels[0].Text := 'SETTING.TXT
\8eæ
\93¾
\83G
\83\89\81[(' + IntToStr(Indy.ResponseCode) + ')';
1641 Screen.Cursor := crDefault;
1643 ShowBoardInformation(tmpBoard, BoardInformationMemo);
1649 procedure TEditorForm.ShowBoardInformation(ABoard: TBoard; AMemo: TMemo);
1652 UCType: Integer; // 0:
\95s
\96¾
\81A1:
\91Î
\89\9e\81A-1:
\94ñ
\91Î
\89\9e
1656 AMemo.Lines.Add('[SETTING.TXT]');
1657 if ABoard.IsSETTINGTXT then begin
1658 if FileExists(ABoard.GetSETTINGTXTFileName) then begin
1659 AMemo.Lines.Add(DateTimeToStr(ABoard.SETTINGTXTTime) + '
\8dX
\90V');
1660 body := TStringList.Create;
1662 body.LoadFromFile(ABoard.GetSETTINGTXTFileName);
1663 AMemo.Lines.AddStrings(body);
1667 if (Pos('BBS_UNICODE=pass', AMemo.Text) > 0) then
1669 else if (Pos('BBS_UNICODE=', AMemo.Text) > 0) then
1672 ABoard.IsSETTINGTXT := false;
1673 ABoard.SETTINGTXTTime := ZERO_DATE;
1674 AMemo.Lines.Add('Local
\82É
\95Û
\91¶
\82³
\82ê
\82½SETTING.TXT
\82ª
\8c©
\82Â
\82©
\82è
\82Ü
\82¹
\82ñ');
1675 AMemo.Lines.Add('
\83\81\83j
\83\85\81[
\82æ
\82è
\8dÄ
\8eæ
\93¾
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
1678 AMemo.Lines.Add('SETTING.TXT
\82ð
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B');
1679 AMemo.Lines.Add('
\83\81\83j
\83\85\81[
\82æ
\82è
\8eæ
\93¾
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
1684 UCInfoPanel.Caption := 'Unicode
\94ñ
\91Î
\89\9e\94Â';
1685 UCInfoPanel.Color := clRed;
1686 UCInfoPanel.Hint := '
\82±
\82Ì
\94Â
\82ÍUnicode
\82Å
\82Ì
\83\8c\83X
\82É
\91Î
\89\9e\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B';
1689 UCInfoPanel.Caption := 'Unicode
\91Î
\89\9e\95s
\96¾';
1690 UCInfoPanel.Color := clBtnFace;
1691 UCInfoPanel.Hint := '
\94Â
\8fî
\95ñ
\82ð
\8eæ
\93¾
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B';
1694 UCInfoPanel.Caption := 'Unicode
\91Î
\89\9e\94Â';
1695 UCInfoPanel.Color := clLime;
1696 UCInfoPanel.Hint := '
\82±
\82Ì
\94Â
\82ÍUnicode
\82Å
\82Ì
\83\8c\83X
\82É
\91Î
\89\9e\82µ
\82Ä
\82¢
\82Ü
\82·
\81B';
1700 function TEditorForm.GetTitlePictureURL(body: TStringList; ABoard: TBoard): string;
1701 //BBS_TITLE_PICTURE=
1708 for i := 0 to body.Count - 1 do begin
1709 if (AnsiPos('BBS_TITLE_PICTURE=', body[i]) > 0) or
1710 (AnsiPos('BBS_FIGUREHEAD=', body[i]) > 0) then begin
1712 Delete(tmp, 1, AnsiPos('=', tmp));
1713 if AnsiPos('../', tmp) > 0 then begin
1714 tmp := CustomStringReplace(tmp, '../', GikoSys.UrlToServer(ABoard.URL));
1722 procedure TEditorForm.GetTitlePictureActionUpdate(Sender: TObject);
1724 if FThreadItem = nil then
1725 GetTitlePictureAction.Enabled := FBoard.IsSETTINGTXT
1727 GetTitlePictureAction.Enabled := FThreadItem.ParentBoard.IsSETTINGTXT;
1729 if GetTitlePictureAction.Enabled Then begin
1730 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
1731 GetTitlePictureAction.Enabled := not FWork;
1735 procedure TEditorForm.GetTitlePictureActionExecute(Sender: TObject);
1737 memStream: TMemoryStream;
1744 memStream := TMemoryStream.Create;
1746 tmpBoard := GetBoard;
1748 if (tmpBoard <> nil) and (tmpBoard.TitlePictureURL <> '') then begin
1749 StatusBar.Panels[0].Text := '
\94Â
\83g
\83b
\83v
\89æ
\91\9c\83_
\83E
\83\93\83\8d\81[
\83h
\92\86';
1750 Screen.Cursor := crHourGlass;
1752 // URL
\82ð
\8ew
\92è
\82µ
\82Ä
\83\81\83\82\83\8a\82É
\93Ç
\82Ý
\8d\9e\82Þ
1753 GetWebData(tmpBoard.TitlePictureURL, tmpBoard.URL,
1754 ZERO_DATE, memStream);
1755 if Indy.ResponseCode = 200 then begin
1756 memStream.SaveToFile(tmpBoard.GetTitlePictureFileName);
1758 tmpBoard.Modified := true;
1760 StatusBar.Panels[0].Text := '
\94Â
\83g
\83b
\83v
\89æ
\91\9c (' + IntToStr(Indy.ResponseCode) + ')';
1767 Screen.Cursor := crDefault;
1771 \brief URL
\82Ì
\83f
\81[
\83^
\82ðstream
\82É
\93Ç
\82Ý
\8d\9e\82Þ
1772 \param URL
\93Ç
\82Ý
\8d\9e\82Þ
\90æ
1773 \param RefURL referer
\82É
\90Ý
\92è
\82·
\82é
1774 \param Modified Modified
\82É
\90Ý
\92è
\82·
\82é
1775 \param stream
\93Ç
\82Ý
\8d\9e\82ñ
\82¾
\83f
\81[
\83^
\82Ì
\95Û
\91¶
\90æ
1777 procedure TEditorForm.GetWebData(const URL: string; const RefURL: string;
1778 Modified: TDateTime; stream: TStream);
1781 Indy.Request.Referer := RefURL;
1782 Indy.Request.LastModified := Modified;
1784 IdAntiFreeze.Active := True;
1786 Indy.Get(URL, stream);
1788 IdAntiFreeze.Active := False;
1792 procedure TEditorForm.ShowTitlePicture();
1797 tmpBoard := GetBoard;
1799 if FileExists(tmpBoard.GetTitlePictureFileName) then begin
1800 TitlePictureBrowser.Navigate(tmpBoard.GetTitlePictureFileName);
1802 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';
1803 SetContent(s, TitlePictureBrowser);
1807 function TEditorForm.GetFusianaName(body: TStringList; ABoard: TBoard): String;
1812 for i := 0 to body.Count - 1 do begin
1813 if (AnsiPos('BBS_NONAME_NAME=', body[i]) > 0) then begin
1815 Delete(tmp, 1, AnsiPos('=', tmp));
1822 procedure TEditorForm.GetHeadTXTActionExecute(Sender: TObject);
1824 URL, RefURL: string;
1825 settingBody: TStringList;
1827 memStream: TMemoryStream;
1829 if not FWork then begin
1832 tmpBoard := GetBoard;
1833 if (tmpBoard <> nil) then begin
1835 RefURL := tmpBoard.URL;
1836 if RefURL[Length(RefURL)] <> '/' then
1837 URL := RefURL + '/' + 'head.txt'
1839 URL := RefURL + 'head.txt';
1841 Screen.Cursor := crHourGlass;
1842 memStream := TMemoryStream.Create;
1844 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';
1846 GetWebData(URL, RefURL, tmpBoard.HEADTXTTime, memStream);
1847 if( Indy.ResponseCode = 200 ) then begin
1848 settingBody := TStringList.Create;
1850 memStream.Seek(0, soFromBeginning);
1851 settingBody.LoadFromStream(memStream);
1852 settingBody.Insert(0, '<HTML lang="ja"><HEAD>');
1853 settingBody.Insert(1, '<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">');
1854 settingBody.Insert(2, '<TITLE>' + tmpBoard.Title + '</TITLE>');
1855 settingBody.Insert(3, '<base href="' + RefURL + '"></HEAD><BODY>');
1856 settingBody.Add('</BODY></HTML>');
1857 settingBody.SaveToFile(tmpBoard.GETHEADTXTFileName);
1858 tmpBoard.HEADTXTTime := Indy.Response.LastModified;
1859 tmpBoard.IsHEADTXT := true;
1860 tmpBoard.Modified := true;
1864 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾
\8a®
\97¹(' + IntToStr(Indy.ResponseCode) + ')';
1867 on E: EIdException do begin
1868 if( AnsiPos('304', E.Message) > 0 ) then
1869 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8dX
\90V
\96³
\82µ(' + IntToStr(Indy.ResponseCode) + ')'
1871 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾
\83G
\83\89\81[(' + IntToStr(Indy.ResponseCode) + ')';
1876 Screen.Cursor := crDefault;
1878 if tmpBoard.IsHEADTXT then begin
1879 ShowBoardHead(tmpboard, LocalEdit);
1887 procedure TEditorForm.CalcCapacityActionExecute(Sender: TObject);
1893 //
\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
1896 if Board.BoardPlugIn <> nil then
1897 body := CustomStringReplace(body, #13#10, '<br>')
1899 body := CustomStringReplace(body, #13#10, ' <br> ');
1900 StatusBar.Panels[0].Text := '
\97e
\97Ê:' + IntToStr(Length(body)) + ' byte';
1903 procedure TEditorForm.LocalRuleClick(Sender: TObject);
1907 ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
1909 RocalRuleTab.TabVisible := LocalRule.Checked;
1910 ini.WriteBool('EditorForm', 'LocalRuleTab', RocalRuleTab.TabVisible);
1917 procedure TEditorForm.FormDeactivate(Sender: TObject);
1919 if GikoSys.Setting.GestureEnabled then begin
1920 GikoSys.Setting.Gestures.ClearGesture;
1921 MouseGesture.UnHook;
1922 MouseGesture.OnGestureStart := nil;
1923 MouseGesture.OnGestureMove := nil;
1924 MouseGesture.OnGestureEnd := nil;
1928 procedure TEditorForm.OnGestureStart(Sender: TObject);
1933 procedure TEditorForm.OnGestureMove(Sender: TObject);
1939 s := MouseGesture.GetGestureStr;
1941 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
1942 if Action <> nil then
1943 ActStr := '
\81i' + Action.Caption + '
\81j';
1944 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
1945 StatusBar.Panels[0].Text := s;
1948 procedure TEditorForm.OnGestureEnd(Sender: TObject);
1953 s := MouseGesture.GetGestureStr;
1955 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
1956 if Action <> nil then
1958 StatusBar.Panels[0].Text := '';
1961 procedure TEditorForm.ShowBoardHead(ABoard: TBoard; AMemo: TMemo);
1966 //http://www.campus.ne.jp/~ishigami/CREATION/TECHNIC/WEBAP-2.htm
1967 WebBrowser1.Navigate(ABoard.GETHEADTXTFileName);
1968 //
\83\8c\83^
\83\8a\83\93\83O
\82ª
\92x
\82·
\82¬
\82ÄTXT
\82É
\88Ú
\82¹
\82È
\82¢
\81B
\82Ê
\82é
\82Ûorz
1969 //
\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
1970 //
\82±
\82ê
\82Å
\82¢
\82¯
\82Ü
\82µ
\82½
\81B
\82 \82è
\82ª
\82Æ
\82¤
\82²
\82´
\82¢
\82Ü
\82µ
\82½
\81B
1971 while (WebBrowser1.ReadyState <> READYSTATE_COMPLETE) and
1972 (WebBrowser1.ReadyState <> READYSTATE_INTERACTIVE) do begin
1973 Application.ProcessMessages;
1978 range := OleVariant(WebBrowser1.Document).body.createTextRange;
1979 LocalEdit.Text := range.text;
1984 procedure TEditorForm.LocalRuleBrowseClick(Sender: TObject);
1994 URL := ABoard.GETHEADTXTFileName;
1995 GikoSys.OpenBrowser(URL, gbtAuto);
1998 procedure TEditorForm.SaveNameMailActionExecute(Sender: TObject);
2000 SaveNameMailAction.Checked := not SaveNameMailAction.Checked;
2001 KotehanCheckBox.Enabled := SaveNameMailAction.Checked;
2004 function TEditorForm.LFusianaGet(const s: String): Boolean;
2006 FUSIANA = 'fusianasan';
2010 i := AnsiPos(FUSIANA, s);
2014 procedure TEditorForm.BeLogInOutEActionExecute(Sender: TObject);
2016 GikoDM.BeLogInOutAction.Execute;
2019 procedure TEditorForm.BeLogInOutEActionUpdate(Sender: TObject);
2021 BeLogInOutEAction.Checked := GikoDM.BeLogInOutAction.Checked;
2022 BeLogInOutEAction.Enabled := GikoDM.BeLogInOutAction.Enabled;
2024 // Cookie
\82Ì
\8eæ
\93¾
2025 procedure TEditorForm.GetCookie(CookieMng: TIdCookieManager; ABoard: TBoard);
2032 Cookie : TIdCookieRFC2109;
2033 curCookies : TStringList;
2035 // 2008.12.14
\96³
\8fð
\8c\8f\83N
\83\8a\83A
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢ by
\82à
\82¶
\82ã
2036 curCookies := TStringList.Create;
2037 curCookies.Delimiter := ';';
2038 curCookies.DelimitedText := ABoard.Cookie;
2040 curCookies.Duplicates := dupIgnore;
2041 ABoard.Cookie := '';
2043 for i := 0 to CookieMng.CookieCollection.Count - 1 do begin
2044 Cookie := CookieMng.CookieCollection.Items[i];
2045 if ( Cookie.CookieName = VAL_PON ) then begin
2046 ABoard.PON := Cookie.Value;
2047 ABoard.Expires := GMTToLocalDateTime(Cookie.Expires);
2048 end else if ( Cookie.CookieName = VAL_SPID ) then begin
2049 ABoard.SPID := Cookie.Value;
2050 ABoard.Expires := GMTToLocalDateTime(Cookie.Expires);
2051 end else if ( Cookie.CookieName = VAL_HAP ) then begin
2052 // 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é
2053 if CompareDateTime(GMTToLocalDateTime(Cookie.Expires) ,Now) > 0 then begin
2054 GikoSys.SetBoukenCookie(Cookie.Value, Cookie.Domain);
2055 //
\96`
\8c¯
\82Ì
\8f\91\82Ì
\95Û
\91¶
2056 GikoSys.Setting.WriteBoukenSettingFile;
2059 if Length( curCookies.Values[ Cookie.CookieName ] ) > 0 then begin
2060 //
\8aù
\91¶
\92l
\82Ì
\95t
\82¯
\91Ö
\82¦
2061 curCookies[curCookies.IndexOfName(Cookie.CookieName)] :=
2062 Cookie.ClientCookie;
2065 curCookies.Add(Cookie.ClientCookie);
2069 for i := 0 to curCookies.Count - 1 do begin
2070 if (curCookies[i] <> '') then begin
2071 ABoard.Cookie := ABoard.Cookie + curCookies[i] + '; ';
2075 CookieMng.CookieCollection.Clear;
2079 //! hidden
\83f
\81[
\83^
\8eæ
\93¾
2080 procedure TEditorForm.GetHiddenParameter(Rawtext: String; ABoard: TBoard);
2082 INPUT_MARK = '<input type=hidden' ; //
\91å
\95¶
\8e\9a\8f¬
\95¶
\8e\9a\82Î
\82ç
\82Î
\82ç
\82È
\82±
\82Æ
\82É
\92\8d\88Ó
2083 VALUE_MARK = 'value=' ; //
\91å
\95¶
\8e\9a\8f¬
\95¶
\8e\9a\82Î
\82ç
\82Î
\82ç
\82È
\82±
\82Æ
\82É
\92\8d\88Ó
2084 NAME_MARK = 'name=' ; //
\91å
\95¶
\8e\9a\8f¬
\95¶
\8e\9a\82Î
\82ç
\82Î
\82ç
\82È
\82±
\82Æ
\82É
\92\8d\88Ó
2085 IGNORE_NAMES : array[0..6] of String =
2086 ('subject', 'from', 'mail', 'message', 'bbs', 'time', 'key');
2088 tmp, line, name, value, lname : String;
2089 pos, pose, i : Integer;
2091 tmp := AnsiLowerCase(Rawtext);
2092 pos := AnsiPos(INPUT_MARK, tmp);
2093 while (pos > 0 ) do begin
2094 tmp := Copy(Rawtext, pos + Length(INPUT_MARK), Length(tmp));
2095 Delete(Rawtext, 1, pos+ Length(INPUT_MARK) - 1);
2096 pose := AnsiPos('>', tmp);
2097 // name=xxx value=yyy
\82ª
\90Ø
\82è
\8fo
\82³
\82ê
\82é
2098 line := Copy(tmp, 1, pose - 1);
2101 pos := AnsiPos(NAME_MARK, tmp);
2102 if (pos > 0) then begin
2103 name := Copy(Rawtext, pos + Length(NAME_MARK), Length(line));
2104 //
\94¼
\8ap"
\82Å
\8en
\82Ü
\82Á
\82Ä
\82¢
\82é
\82©
2105 if AnsiPos('"', name) = 1 then begin
2106 //
\94¼
\8ap"
\82Ü
\82Å
\82ð
\83R
\83s
\81[
2108 pose := AnsiPos('"', name);
2109 if (pose > 0) then begin
2110 Delete(name, pose, Length(name));
2112 pose := AnsiPos(' ', name);
2113 if (pose > 0) then begin
2114 Delete(name, pose, Length(name));
2118 pose := AnsiPos(' ', name);
2119 if (pose > 0) then begin
2120 Delete(name, pose, Length(name));
2124 lname := AnsiLowerCase(name);
2125 for i := 0 to Length(IGNORE_NAMES) do begin
2126 if lname = IGNORE_NAMES[i] then begin
2131 pos := AnsiPos(VALUE_MARK, tmp);
2132 if (name <> '') and (pos > 0) then begin
2133 value := Copy(Rawtext, pos + Length(VALUE_MARK), Length(line));
2134 //
\94¼
\8ap"
\82Å
\8en
\82Ü
\82Á
\82Ä
\82¢
\82é
\82©
2135 if AnsiPos('"', value) = 1 then begin
2136 //
\94¼
\8ap"
\82Ü
\82Å
\82ð
\83R
\83s
\81[
2137 Delete(value, 1, 1);
2138 pose := AnsiPos('"', value);
2139 if (pose > 0) then begin
2140 Delete(value, pose, Length(value));
2142 pose := AnsiPos(' ', value);
2143 if (pose > 0) then begin
2144 Delete(value, pose, Length(value));
2148 pose := AnsiPos(' ', value);
2149 if (pose > 0) then begin
2150 Delete(value, pose, Length(name));
2154 if (name <> '') then begin
2155 ABoard.Cookie := ABoard.Cookie + name + '=' + value + '; ';
2158 Delete(tmp, 1, Length(line));
2159 Delete(Rawtext, 1, Length(line));
2160 pos := AnsiPos(INPUT_MARK, tmp);
2164 //!
\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
2165 procedure TEditorForm.UpdateSambaActionUpdate(Sender: TObject);
2167 UpdateSambaAction.Enabled := FSambaTimer.Enabled;
2170 //!
\83T
\83\93\83o
\8dX
\90V
\83A
\83N
\83V
\83\87\83\93
2171 procedure TEditorForm.UpdateSambaActionExecute(Sender: TObject);
2176 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
2177 input := ZenToHan(input);
2178 if GikoSys.IsNumeric(input) then begin
2179 FSambaTimer.UpdateSambaSetting(StrToInt(input));
2181 //
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81ASamba
\83^
\83C
\83}
\81[
\82ð
\8dX
\90V
\82·
\82é
2182 for i := 0 to Screen.FormCount - 1 do begin
2183 if Screen.Forms[i] is TEditorForm then begin
2184 TEditorForm(Screen.Forms[i]).FSambaTimer.Update;
2185 TEditorForm(Screen.Forms[i]).UpdateSambaStatus;
2189 ShowMessage('
\90\94\92l
\82ð
\93ü
\97Í
\82µ
\82Ä
\82
\82¾
\82³
\82¢');
2190 UpdateSambaActionExecute(Sender);
2195 procedure TEditorForm.UpdateSambaStatus;
2197 if (FSambaTimer.Enabled) then begin
2198 StatusBar.Panels[2].Text
2199 := 'Samba24
\8bK
\92è
\92l' + IntToStr(FSambaTimer.SambaInterval);
2203 procedure TEditorForm.InputAssistActionExecute(Sender: TObject);
2209 TextWidth, ItemWidth, tmpWidth, EditW, EditT: Integer;
2211 if FInputAssistKey = '' then Exit;
2213 InputAssistPopupMenu.Items.Clear;
2215 if (FResistWords = nil) then begin
2216 FResistWords := TStringList.Create;
2221 if (GetKeyState( VK_SHIFT ) < 0) then begin
2222 //
\83V
\83t
\83g
\82ª
\89\9f\82³
\82ê
\82Ä
\82¢
\82ê
\82Î
\81A
\83L
\81[
\82Å
\8en
\82Ü
\82é
\83J
\83e
\83S
\83\8a
2224 InputAssistDM.GetStartWithCategoryResistWords(
2225 FInputAssistKey, FResistWords);
2227 //
\83V
\83t
\83g
\82ª
\96³
\82¢
\82Ì
\82Å
\81A
\83L
\81[
\82Å
\8en
\82Ü
\82é
\83L
\81[
2229 InputAssistDM.GetStartWithKeyResistWords(
2230 FInputAssistKey, FResistWords);
2232 Bitmap := TBitmap.Create;
2234 if (FUseUC = True) then
2235 Bitmap.Canvas.Font.Assign(BodyEditUC.Font)
2237 Bitmap.Canvas.Font.Assign(BodyEdit.Font);
2238 //
\83}
\81[
\83W
\83\935px
2239 TextWidth := Bitmap.Canvas.TextWidth(FInputAssistKey) + 5;
2241 for i := 0 to count - 1 do begin
2242 item := TMenuItem.Create(nil);
2243 item.Break := mbNone;
2244 item.Caption := FResistWords[i];
2246 item.OnClick := InputAssistMenuClick;
2247 InputAssistPopupMenu.Items.Add(item);
2249 tmpWidth := Bitmap.Canvas.TextWidth(Item.Caption);
2250 if (tmpWidth > ItemWidth) then begin
2251 ItemWidth := tmpWidth;
2258 if (count > 0) then begin
2259 if (FUseUC = True) then begin
2260 EditW := BodyEditUC.Width;
2261 EditT := BodyEditUC.Top;
2263 EditW := BodyEdit.Width;
2264 EditT := BodyEdit.Top;
2267 point.X := point.X + Self.Left + (Self.Width - EditW) div 2;
2268 point.Y := point.Y + Self.Top + (Self.Height - Self.ClientHeight);
2270 if Screen.DesktopWidth >
2271 (point.X + TextWidth + ItemWidth) then begin
2272 InputAssistPopupMenu.Popup(
2273 point.X + TextWidth,
2274 point.Y + EditorPage.Top + EditorPage.TabHeight + EditT);
2276 InputAssistPopupMenu.Popup(
2277 point.X - TextWidth - ItemWidth,
2278 point.Y + EditorPage.Top + EditorPage.TabHeight + EditT);
2283 procedure TEditorForm.InputAssistMenuClick(Sender: TObject);
2289 if not (Sender is TMenuItem) then Exit;
2291 if (FResistWords <> nil) then begin
2292 if (FUseUC = True) then
2293 EditHandle := BodyEditUC.Handle
2295 EditHandle := BodyEdit.Handle;
2298 TResistWord(FResistWords.Objects[TMenuItem(Sender).Tag]).GetText;
2302 IMC := ImmGetContext(EditHandle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
2304 ImmNotifyIME(IMC, NI_COMPOSITIONSTR, CPS_CANCEL, 0);
2306 ImmReleaseContext(EditHandle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
2310 FInputAssistKey := '';
2312 if (FUseUC = True) then
2313 BodyEditUC.InsertText(text)
2315 InsertText(BodyEdit, text);
2318 //! TMemo
\82Ì
\83J
\81[
\83\
\83\8b\88Ê
\92u
\82É
\95¶
\8e\9a\97ñ
\91}
\93ü
2319 procedure TEditorForm.InsertText(Memo: TMemo; Text: String);
2321 line, sel, pos: Integer;
2322 left, right : String;
2324 Memo.Lines.BeginUpdate;
2325 line := SendMessage(Memo.Handle,EM_LINEFROMCHAR,-1,0); //
\8ds
2326 sel := Memo.SelStart;
2327 pos := sel - SendMessage(Memo.Handle, EM_LINEINDEX, -1, 0); //
\8c\85
2328 if (pos > 0) then begin
2329 left := Copy(Memo.Lines[line], 0, pos);
2333 right := Copy(Memo.Lines[line], pos + 1, Length(Memo.Lines[line]));
2334 Memo.Lines.Strings[line] := left + Text + right;
2335 Memo.Lines.EndUpdate;
2336 //
\81@
\83L
\83\83\83\8c\83b
\83g
\82Ì
\88Ê
\92u
\82ð
\8dX
\90V
\82·
\82é
2337 Memo.SelStart := sel + Length(text);
2338 //
\83L
\83\83\83\8c\83b
\83g
\82Ì
\88Ê
\92u
\82Ü
\82Å
\83X
\83N
\83\8d\81[
\83\8b
2339 Memo.Perform(EM_SCROLLCARET, 0, 0);
2343 procedure TEditorForm.ApplicationEvents1Message(var Msg: tagMSG;
2344 var Handled: Boolean);
2352 if (Self.Active) then begin
2354 //
\83L
\81[
\89\9f\89º
\82Ì
\82Ý
\8eó
\82¯
\8eæ
\82é
2357 //
\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é
2358 if (EditorPage.ActivePageIndex = 0)
2359 and (GetKeyState( VK_CONTROL ) < 0) then begin
2360 wmMsg.Msg := Msg.message;
2361 wmMsg.CharCode := Word(Msg.wParam);
2362 wmMsg.KeyData := Msg.lParam;
2363 if (wmMsg.CharCode = 229) and (wmMsg.KeyData = 3735553) then begin
2364 if (FUseUC = True) then
2365 EditHandle := BodyEditUC.Handle
2367 EditHandle := BodyEdit.Handle;
2368 IMC := ImmGetContext(EditHandle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
2369 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
2370 if (Len > 0) then begin
2371 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
2372 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
2373 SetLength(Str, Len);
2374 FInputAssistKey := Str;
2375 InputAssistActionExecute(nil);
2378 ImmReleaseContext(EditHandle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
2387 procedure TEditorForm.ShowInputAssistFormExecute(Sender: TObject);
2389 form : TInputAssistForm;
2391 form := TInputAssistForm.Create(nil);
2393 if TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
2394 SetWindowPos(form.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2396 form.SetUpFromEditor;
2397 if (form.ShowModal = mrOk) then begin
2398 if (FUseUC = True) then
2399 BodyEditUC.InsertText(form.GetInsertText)
2401 InsertText(BodyEdit, form.GetInsertText);
2407 //! Cookie
\8fî
\95ñ
\8dí
\8f\9c
2408 procedure TEditorForm.ReleaseCookieActionExecute(Sender: TObject);
2412 //
\83X
\83\8c\83b
\83h
\82ª
\96³
\82¢
\81@
\83X
\83\8c\97§
\82Ä
\82Ì
\82Æ
\82«
\82ÍFBoard
\82ð
\92¼
\90Ú
\8eg
\82¤
2415 //
\83N
\83b
\83L
\81[
\82Ì
\8fî
\95ñ
\82ð
\8eÌ
\82Ä
\82é
2419 // 0
\82É
\8aª
\82«
\96ß
\82·
2422 //!
\94Â
\8fî
\95ñ
\8eæ
\93¾Update
\83C
\83x
\83\93\83g
2423 procedure TEditorForm.GetSETTINGTXTActionUpdate(Sender: TObject);
2425 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
2426 GetSETTINGTXTAction.Enabled := not FWork;
2428 //!
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾Update
\83C
\83x
\83\93\83g
2429 procedure TEditorForm.GetHeadTXTActionUpdate(Sender: TObject);
2431 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
2432 GetSETTINGTXTAction.Enabled := not FWork;
2435 //! Samba
\83^
\83C
\83}
\81[
\83C
\83x
\83\93\83g
2436 procedure TEditorForm.SambaTimer(Sender: TObject);
2439 if FSambaTimer.WriteDeta = ZERO_DATE then
2440 StatusBar.Panels[1].Text := '
\8f\89\8f\91'
2442 FNow := IncMilliSecond(FNow, 500);
2443 StatusBar.Panels[1].Text :=
2444 Format('%8.0f
\95b
\8co
\89ß', [SecondSpan(FNow, FSambaTimer.WriteDeta)]);
2448 \brief
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82Æ
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
2450 procedure TEditorForm.SetWindowRect;
2452 wp: TWindowPlacement;
2460 //
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\90Ý
\92è
2461 wp.length := sizeof(wp);
2462 wp.rcNormalPosition.Top := GikoSys.Setting.EditWindowTop;
2463 wp.rcNormalPosition.Left := GikoSys.Setting.EditWindowLeft;
2465 wp.rcNormalPosition.Bottom := GikoSys.Setting.EditWindowTop + GikoSys.Setting.EditWindowHeight;
2466 wp.rcNormalPosition.Right := GikoSys.Setting.EditWindowLeft + GikoSys.Setting.EditWindowWidth;
2467 wp.showCmd := SW_HIDE;
2468 SetWindowPlacement(Handle, @wp);
2470 if GikoSys.Setting.EditWindowMax then begin
2471 WindowState := wsMaximized;
2474 //
\83E
\83B
\83\93\83h
\83E
\82ª
\89æ
\96Ê
\8aO
\82È
\82ç
\89æ
\96Ê
\93à
\82É
\88Ú
\93®
\82·
\82é
2475 Right := Left + Width;
2476 Bottom := Top + Height;
2479 while (MonCnt < Screen.MonitorCount) do begin
2480 MonR := Screen.Monitors[MonCnt].Left + Screen.Monitors[MonCnt].Width;
2481 MonB := Screen.Monitors[MonCnt].Top + Screen.Monitors[MonCnt].Height;
2483 if ((Left >= Screen.Monitors[MonCnt].Left) and (Left < MonR) and
2484 (Top >= Screen.Monitors[MonCnt].Top) and (Top < MonB) and
2485 (Right > Screen.Monitors[MonCnt].Left) and (Right <= MonR) and
2486 (Bottom > Screen.Monitors[MonCnt].Top) and (Bottom <= MonB)) then begin
2491 MonCnt := MonCnt + 1;
2494 if (MonOk = False) then begin
2499 //
\8c»
\8dÝ
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82ð
\95Û
\91¶
2500 GikoSys.Setting.EditWindowTop := Top + WINDOWMOVE_V; //
\8e\9f\82É
\8aJ
\82
\83E
\83B
\83\93\83h
\83E
\82Í
2501 GikoSys.Setting.EditWindowLeft := Left + WINDOWMOVE_H; //
\81@
\81@
\81@
\89E
\8eÎ
\82ß
\89º
\82É
\82¸
\82ç
\82·
2502 //
\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·
2503 if GikoSys.Setting.EditWindowHeight < 144 then begin
2506 if GikoSys.Setting.EditWindowWidth < 144 then begin
2511 \brief
\8ag
\92£
\83^
\83u
\90Ý
\92è
2513 procedure TEditorForm.SetExtraTab;
2515 SECTION = 'EditorForm';
2519 ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
2521 BoardtopTab.TabVisible := ini.Readbool(SECTION, 'BoardTopTab', False);
2522 BoardTop.Checked := BoardtopTab.TabVisible;
2523 RocalRuleTab.TabVisible := ini.ReadBool(SECTION, 'LocalRuleTab', False);
2524 LocalRule.Checked := RocalRuleTab.TabVisible;
2531 \return
\83\8c\83X
\83G
\83f
\83B
\83^
\82ª
\93\8a\8de
\82µ
\82æ
\82¤
\82Æ
\82µ
\82Ä
\82¢
\82é
\94Â
2533 function TEditorForm.GetBoard : TBoard;
2535 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ªnull
\82Ì
\8e\9e\82ÍFBoard
2536 if FThreadItem = nil then begin
2539 Result := FThreadItem.ParentBoard;
2543 \brief GikoForm
\82É
\83\81\83b
\83Z
\81[
\83W
\82ð
\92Ç
\89Á
\82·
\82é
2544 \param icon
\83\81\83b
\83Z
\81[
\83W
\82É
\82Â
\82
\83A
\83C
\83R
\83\93
2546 procedure TEditorForm.AddFormMessageNew(icon: TGikoMessageIcon);
2548 if FThreadItem = nil then begin
2549 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, icon)
2551 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, icon);
2556 \brief
\83\8d\81[
\83J
\83\8bfusiana
\83g
\83\89\83b
\83v
2557 \return true:
\91\97\90M
\92\86\8e~ false:
\91\97\90M
2559 function TEditorForm.isLocalFusianaTrap: Boolean;
2564 if GikoSys.Setting.LocalTrapAtt then begin
2565 Namae := THTMLCreate.RepHtml(NameComboBox.Text);
2566 if (LFusianaGet(Namae)) or (Namae = '
\8eR
\8dè
\8fÂ') then begin
2567 if FusianaMsgBox = IDNO then begin
2574 \brief
\83\8a\83\82\81[
\83gfusiana
\83g
\83\89\83b
\83v
2575 \return true:
\91\97\90M
\92\86\8e~ false:
\91\97\90M
2577 function TEditorForm.isRemoteFusianaTrap: Boolean;
2585 Namae := THTMLCreate.RepHtml(NameComboBox.Text);
2586 if (GikoSys.Setting.RemoteTrapAtt) and (Length(Namae) = 0) then begin
2589 if Board = nil then Exit;
2591 if not FileExists(Board.GetSETTINGTXTFileName) then begin
2592 //Setting.txt
\82ª
\82È
\82©
\82Á
\82½
\82ç
\8eæ
\93¾
2593 //
\8eI
\82É
\95\89\89×
\82ª
\82©
\82©
\82è
\82»
\82¤...
2595 GetSETTINGTXTAction.Execute;
2601 if FileExists(Board.GetSETTINGTXTFileName) then begin
2602 body := TStringList.Create;
2604 body.LoadFromFile(Board.GetSETTINGTXTFileName);
2605 Remote := GetFusianaName(body, Board);
2611 if LFusianaGet(Remote) then begin
2612 if FusianaMsgBox = IDNO then begin
2619 \brief Header
\95¶
\8e\9a\97ñ
\8eæ
\93¾
2620 \param ACOOKIE Cookie
2625 \return Header
\95¶
\8e\9a\97ñ
2627 function TEditorForm.getHeaderStr(const ACOOKIE: string; const SPID : string;
2628 const PON : string; const HAP : string; Board : TBoard) : string;
2633 Result := Result + 'SPID=' + SPID + '; ';
2635 Result := Result + 'PON=' + PON + '; ';
2637 //
\83z
\83X
\83g
\82ª2ch
\82Å
\81ABe
\82ÉLogin
\82µ
\82Ä
\82¢
\82ê
\82ÎBE
\82Ì
\83f
\81[
\83^
\82ð
\91\97\82é
2638 //GikoSys.ParseURI( URL, Protocol,Host, Path, Document, Port, Bookmark );
2639 //if GikoSys.Is2chHost(Host) and GikoSys.Setting.BeLogin then
2640 if (Board.Is2ch) then begin
2641 //
\8cÅ
\92è
\82Ì
\83N
\83b
\83L
\81[
\82ª
\82 \82ê
\82Î
\90H
\82í
\82¹
\82é
2642 if Length(GikoSys.Setting.FixedCookie) > 0 then begin
2643 //
\83z
\83X
\83g
\82ª2ch
\82Ì
\8fê
\8d\87\81C
\8cÅ
\92è
\82Ì
\83N
\83b
\83L
\81[
\82ð
\90H
\82í
\82¹
\82é
2644 Result := Result + GikoSys.Setting.FixedCookie + '; ';
2646 if (GikoSys.Belib.Connected) then begin
2647 Result := Result + 'MDMD=' + GikoSys.Belib.MDMD + '; '
2648 + 'DMDM=' + GikoSys.Belib.DMDM + '; ';
2652 Result := 'Cookie: ' + Result + 'NAME=' + NameComboBox.Text + '; MAIL=' + MailComboBox.Text;
2655 Result := Result + '; HAP=' + HAP + '; ';
2660 \brief fusiana
\8cx
\8d\90\83_
\83C
\83A
\83\8d\83O
2661 \return IDYES
\8f\91\82«
\8d\9e\82Þ IDNO
\92\86\8e~
2663 function TEditorForm.FusianaMsgBox: Integer;
2665 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 +
2666 '
\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' +
2667 #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';
2669 Result := MsgBox(Handle, MSG_FUSIANA, '
\8fî
\95ñ',
2670 MB_YESNO or MB_ICONQUESTION);
2673 \brief
\98A
\93\8a\83\82\81[
\83hON/OFF
\90Ø
\82è
\91Ö
\82¦
2675 procedure TEditorForm.ContinueModeActionExecute(Sender: TObject);
2677 ContinueModeAction.Checked := not ContinueModeAction.Checked;
2680 \brief
\98A
\93\8a\83\82\81[
\83h
\8dX
\90V
\8f\88\97\9d
2682 procedure TEditorForm.ContinueModeActionUpdate(Sender: TObject);
2684 //
\83X
\83\8c\82½
\82Ä
\82Ì
\82Æ
\82«
\82Í
\96³
\8cø
2685 ContinueModeAction.Enabled := FThreadItem <> nil;
2688 \brief
\8f\91\82«
\8d\9e\82Þ
\94Â/
\83X
\83\8c\83b
\83h
\82ð
\95\
\8e¦
\82·
\82é
2690 procedure TEditorForm.OpenSendTargetActionExecute(Sender: TObject);
2692 if (FThreadItem <> nil) then begin
2693 //
\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É
2694 //
\91O
\96Ê
\82Å
\8cÅ
\92è
\82·
\82é
2695 if not (fsShowing in Self.FormState) then begin
2696 //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
2697 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2700 //
\83X
\83\8c\83b
\83h
2701 GikoForm.InsertBrowserTab(FThreadItem, True);
2703 if not TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\89ð
\8f\9c
2704 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2710 GikoForm.SelectTreeNode(
2714 procedure TEditorForm.ReloadTargetActionExecute(Sender: TObject);
2716 if (FThreadItem <> nil) then begin
2717 //
\83X
\83\8c\83b
\83h
2718 //
\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É
2719 //
\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é)
2720 if not (fsShowing in Self.FormState) then begin
2721 //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
2722 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2725 GikoForm.DownloadContent(FThreadItem);
2727 if not TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\89ð
\8f\9c
2728 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2734 GikoForm.DownloadList(GetBoard);
2737 //!
\8cë
\94\9a\83`
\83F
\83b
\83N
2738 function TEditorForm.isGobaku: Boolean;
2740 MSG_GOBAKU : string =
2741 '
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é%s
\82Æ
\93\8a\8de
\90æ
\82Ì%s
\82ª
\88Ù
\82È
\82è
\82Ü
\82·
\81B'#13#10 +
2742 '
\82±
\82Ì
\82Ü
\82Ü
\8f\91\82«
\8d\9e\82Ý
\82Ü
\82·
\82©
\81H';
2744 ThreadItem : TThreadItem;
2749 //
\83I
\83v
\83V
\83\87\83\93\97L
\8cø
\82©
\82Â
\83\8c\83X
\91\97\90M
\82Å
\82Ì
\82Ý
\97L
\8cø
2750 if (GikoSys.Setting.UseGobakuCheck) then begin
2751 //
\83\8c\83X
\91\97\90M
2752 if (FThreadItem <> nil) then begin
2753 ThreadItem := GikoForm.GetActiveContent(False);
2754 if (ThreadItem <> nil) then begin
2755 if (FThreadItem <> ThreadItem) then begin
2756 msg := Format(MSG_GOBAKU, ['
\83X
\83\8c\83b
\83h', '
\83X
\83\8c\83b
\83h']);
2757 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2760 if GikoForm.ActiveList is TBBS then begin
2761 if TBBS(GikoForm.ActiveList) <> FThreadItem.ParentBoard.ParentCategory.ParenTBBS then begin
2762 msg := Format(MSG_GOBAKU, ['BBS', '
\83X
\83\8c\83b
\83h
\82Ì
\8f\8a\91®
\82·
\82éBBS']);
2763 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2765 end else if GikoForm.ActiveList is TCategory then begin
2766 if TCategory(GikoForm.ActiveList).FindThreadFromURL(FThreadItem.URL) = nil then begin
2767 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']);
2768 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2770 end else if GikoForm.ActiveList is TBoard then begin
2771 if TBoard(GikoForm.ActiveList) <> FThreadItem.ParentBoard then begin
2772 msg := Format(MSG_GOBAKU, ['
\94Â', '
\83X
\83\8c\83b
\83h
\82Ì
\8f\8a\91®
\82·
\82é
\94Â']);
2773 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2778 //
\83X
\83\8c\82½
\82Ä
2779 if GikoForm.ActiveList is TBBS then begin
2780 if TBBS(GikoForm.ActiveList) <> FBoard.ParentCategory.ParenTBBS then begin
2781 msg := Format(MSG_GOBAKU, ['BBS', '
\94Â
\82Ì
\8f\8a\91®
\82·
\82éBBS']);
2782 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2784 end else if GikoForm.ActiveList is TCategory then begin
2785 if TCategory(GikoForm.ActiveList).FindBoardFromURL(FBoard.URL) = nil then begin
2786 msg := Format(MSG_GOBAKU, ['
\83J
\83e
\83S
\83\8a', '
\94Â
\82Ì
\8f\8a\91®
\82·
\82é
\83J
\83e
\83S
\83\8a']);
2787 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2789 end else if GikoForm.ActiveList is TBoard then begin
2790 if TBoard(GikoForm.ActiveList) <> FBoard then begin
2791 msg := Format(MSG_GOBAKU, ['
\94Â', '
\94Â']);
2792 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2799 procedure TEditorForm.SetFocusEdit;
2801 if (FUseUC = True) then
2807 procedure TEditorForm.SetTextEdit(TextSrc: String);
2809 if (FUseUC = True) then
2810 BodyEditUC.Text := TextSrc
2812 BodyEdit.Text := TextSrc;