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;
1547 if (FUseUC = True) then begin
1548 BodyEditUC.QuotePaste(quote);
1550 s := TStringList.Create;
1552 s.Text := Clipboard.AsText;
1554 for i := s.Count - 1 downto 0 do
1555 s[ i ] := quote + s[ i ];
1557 BodyEdit.SelText := s.Text;
1564 procedure TEditorForm.SpaceToNBSPActionExecute(Sender: TObject);
1566 GikoSys.Setting.SpaceToNBSP := SpaceToNBSPAction.Checked;
1567 if EditorPage.ActivePage = PreviewTab then
1571 procedure TEditorForm.AmpToCharRefActionExecute(Sender: TObject);
1573 GikoSys.Setting.AmpToCharRef := AmpToCharRefAction.Checked;
1574 if EditorPage.ActivePage = PreviewTab then
1578 procedure TEditorForm.BoardTopClick(Sender: TObject);
1582 ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
1584 BoardtopTab.TabVisible := BoardTop.Checked;
1585 ini.WriteBool('EditorForm', 'BoardTopTab', BoardtopTab.TabVisible);
1593 procedure TEditorForm.GetSETTINGTXTActionExecute(Sender: TObject);
1595 memStream: TMemoryStream;
1596 URL, RefURL: string;
1597 settingBody: TStringList;
1600 if not FWork then begin
1603 tmpBoard := GetBoard;
1604 if tmpBoard <> nil then begin
1606 RefURL := tmpBoard.URL;
1607 if RefURL[Length(RefURL)] <> '/' then
1608 URL := RefURL + '/' + 'SETTING.TXT'
1610 URL := RefURL + 'SETTING.TXT';
1611 Screen.Cursor := crHourGlass;
1612 memStream := TMemoryStream.Create;
1615 StatusBar.Panels[0].Text := 'SETTING.TXT
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86';
1616 GetWebData(URL, RefURL, tmpBoard.SETTINGTXTTime, memStream);
1617 if( Indy.ResponseCode = 200 ) then begin
1618 settingBody := TStringList.Create;
1620 memStream.Seek(0, soFromBeginning);
1621 settingBody.LoadFromStream(memStream);
1622 settingBody.SaveToFile(tmpBoard.GetSETTINGTXTFileName);
1623 tmpBoard.SETTINGTXTTime := Indy.Response.LastModified;
1624 tmpBoard.IsSETTINGTXT := true;
1625 tmpBoard.TitlePictureURL := GetTitlePictureURL(settingBody, tmpBoard);
1626 tmpBoard.Modified := true;
1630 StatusBar.Panels[0].Text := 'SETTING.TXT
\8eæ
\93¾
\8a®
\97¹(' + IntToStr(Indy.ResponseCode) + ')';
1633 on E: EIdException do begin
1634 if( AnsiPos('304', E.Message) > 0 ) then
1635 StatusBar.Panels[0].Text := 'SETTING.TXT
\8dX
\90V
\96³
\82µ(' + IntToStr(Indy.ResponseCode) + ')'
1637 StatusBar.Panels[0].Text := 'SETTING.TXT
\8eæ
\93¾
\83G
\83\89\81[(' + IntToStr(Indy.ResponseCode) + ')';
1642 Screen.Cursor := crDefault;
1644 ShowBoardInformation(tmpBoard, BoardInformationMemo);
1650 procedure TEditorForm.ShowBoardInformation(ABoard: TBoard; AMemo: TMemo);
1653 UCType: Integer; // 0:
\95s
\96¾
\81A1:
\91Î
\89\9e\81A-1:
\94ñ
\91Î
\89\9e
1657 AMemo.Lines.Add('[SETTING.TXT]');
1658 if ABoard.IsSETTINGTXT then begin
1659 if FileExists(ABoard.GetSETTINGTXTFileName) then begin
1660 AMemo.Lines.Add(DateTimeToStr(ABoard.SETTINGTXTTime) + '
\8dX
\90V');
1661 body := TStringList.Create;
1663 body.LoadFromFile(ABoard.GetSETTINGTXTFileName);
1664 AMemo.Lines.AddStrings(body);
1668 if (Pos('BBS_UNICODE=pass', AMemo.Text) > 0) then
1670 else if (Pos('BBS_UNICODE=', AMemo.Text) > 0) then
1673 ABoard.IsSETTINGTXT := false;
1674 ABoard.SETTINGTXTTime := ZERO_DATE;
1675 AMemo.Lines.Add('Local
\82É
\95Û
\91¶
\82³
\82ê
\82½SETTING.TXT
\82ª
\8c©
\82Â
\82©
\82è
\82Ü
\82¹
\82ñ');
1676 AMemo.Lines.Add('
\83\81\83j
\83\85\81[
\82æ
\82è
\8dÄ
\8eæ
\93¾
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
1679 AMemo.Lines.Add('SETTING.TXT
\82ð
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B');
1680 AMemo.Lines.Add('
\83\81\83j
\83\85\81[
\82æ
\82è
\8eæ
\93¾
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
1685 UCInfoPanel.Caption := 'Unicode
\94ñ
\91Î
\89\9e\94Â';
1686 UCInfoPanel.Color := clRed;
1687 UCInfoPanel.Hint := '
\82±
\82Ì
\94Â
\82ÍUnicode
\82Å
\82Ì
\83\8c\83X
\82É
\91Î
\89\9e\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B';
1690 UCInfoPanel.Caption := 'Unicode
\91Î
\89\9e\95s
\96¾';
1691 UCInfoPanel.Color := clBtnFace;
1692 UCInfoPanel.Hint := '
\94Â
\8fî
\95ñ
\82ð
\8eæ
\93¾
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B';
1695 UCInfoPanel.Caption := 'Unicode
\91Î
\89\9e\94Â';
1696 UCInfoPanel.Color := clLime;
1697 UCInfoPanel.Hint := '
\82±
\82Ì
\94Â
\82ÍUnicode
\82Å
\82Ì
\83\8c\83X
\82É
\91Î
\89\9e\82µ
\82Ä
\82¢
\82Ü
\82·
\81B';
1701 function TEditorForm.GetTitlePictureURL(body: TStringList; ABoard: TBoard): string;
1702 //BBS_TITLE_PICTURE=
1709 for i := 0 to body.Count - 1 do begin
1710 if (AnsiPos('BBS_TITLE_PICTURE=', body[i]) > 0) or
1711 (AnsiPos('BBS_FIGUREHEAD=', body[i]) > 0) then begin
1713 Delete(tmp, 1, AnsiPos('=', tmp));
1714 if AnsiPos('../', tmp) > 0 then begin
1715 tmp := CustomStringReplace(tmp, '../', GikoSys.UrlToServer(ABoard.URL));
1723 procedure TEditorForm.GetTitlePictureActionUpdate(Sender: TObject);
1725 if FThreadItem = nil then
1726 GetTitlePictureAction.Enabled := FBoard.IsSETTINGTXT
1728 GetTitlePictureAction.Enabled := FThreadItem.ParentBoard.IsSETTINGTXT;
1730 if GetTitlePictureAction.Enabled Then begin
1731 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
1732 GetTitlePictureAction.Enabled := not FWork;
1736 procedure TEditorForm.GetTitlePictureActionExecute(Sender: TObject);
1738 memStream: TMemoryStream;
1745 memStream := TMemoryStream.Create;
1747 tmpBoard := GetBoard;
1749 if (tmpBoard <> nil) and (tmpBoard.TitlePictureURL <> '') then begin
1750 StatusBar.Panels[0].Text := '
\94Â
\83g
\83b
\83v
\89æ
\91\9c\83_
\83E
\83\93\83\8d\81[
\83h
\92\86';
1751 Screen.Cursor := crHourGlass;
1753 // URL
\82ð
\8ew
\92è
\82µ
\82Ä
\83\81\83\82\83\8a\82É
\93Ç
\82Ý
\8d\9e\82Þ
1754 GetWebData(tmpBoard.TitlePictureURL, tmpBoard.URL,
1755 ZERO_DATE, memStream);
1756 if Indy.ResponseCode = 200 then begin
1757 memStream.SaveToFile(tmpBoard.GetTitlePictureFileName);
1759 tmpBoard.Modified := true;
1761 StatusBar.Panels[0].Text := '
\94Â
\83g
\83b
\83v
\89æ
\91\9c (' + IntToStr(Indy.ResponseCode) + ')';
1768 Screen.Cursor := crDefault;
1772 \brief URL
\82Ì
\83f
\81[
\83^
\82ðstream
\82É
\93Ç
\82Ý
\8d\9e\82Þ
1773 \param URL
\93Ç
\82Ý
\8d\9e\82Þ
\90æ
1774 \param RefURL referer
\82É
\90Ý
\92è
\82·
\82é
1775 \param Modified Modified
\82É
\90Ý
\92è
\82·
\82é
1776 \param stream
\93Ç
\82Ý
\8d\9e\82ñ
\82¾
\83f
\81[
\83^
\82Ì
\95Û
\91¶
\90æ
1778 procedure TEditorForm.GetWebData(const URL: string; const RefURL: string;
1779 Modified: TDateTime; stream: TStream);
1782 Indy.Request.Referer := RefURL;
1783 Indy.Request.LastModified := Modified;
1785 IdAntiFreeze.Active := True;
1787 Indy.Get(URL, stream);
1789 IdAntiFreeze.Active := False;
1793 procedure TEditorForm.ShowTitlePicture();
1798 tmpBoard := GetBoard;
1800 if FileExists(tmpBoard.GetTitlePictureFileName) then begin
1801 TitlePictureBrowser.Navigate(tmpBoard.GetTitlePictureFileName);
1803 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';
1804 SetContent(s, TitlePictureBrowser);
1808 function TEditorForm.GetFusianaName(body: TStringList; ABoard: TBoard): String;
1813 for i := 0 to body.Count - 1 do begin
1814 if (AnsiPos('BBS_NONAME_NAME=', body[i]) > 0) then begin
1816 Delete(tmp, 1, AnsiPos('=', tmp));
1823 procedure TEditorForm.GetHeadTXTActionExecute(Sender: TObject);
1825 URL, RefURL: string;
1826 settingBody: TStringList;
1828 memStream: TMemoryStream;
1830 if not FWork then begin
1833 tmpBoard := GetBoard;
1834 if (tmpBoard <> nil) then begin
1836 RefURL := tmpBoard.URL;
1837 if RefURL[Length(RefURL)] <> '/' then
1838 URL := RefURL + '/' + 'head.txt'
1840 URL := RefURL + 'head.txt';
1842 Screen.Cursor := crHourGlass;
1843 memStream := TMemoryStream.Create;
1845 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';
1847 GetWebData(URL, RefURL, tmpBoard.HEADTXTTime, memStream);
1848 if( Indy.ResponseCode = 200 ) then begin
1849 settingBody := TStringList.Create;
1851 memStream.Seek(0, soFromBeginning);
1852 settingBody.LoadFromStream(memStream);
1853 settingBody.Insert(0, '<HTML lang="ja"><HEAD>');
1854 settingBody.Insert(1, '<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">');
1855 settingBody.Insert(2, '<TITLE>' + tmpBoard.Title + '</TITLE>');
1856 settingBody.Insert(3, '<base href="' + RefURL + '"></HEAD><BODY>');
1857 settingBody.Add('</BODY></HTML>');
1858 settingBody.SaveToFile(tmpBoard.GETHEADTXTFileName);
1859 tmpBoard.HEADTXTTime := Indy.Response.LastModified;
1860 tmpBoard.IsHEADTXT := true;
1861 tmpBoard.Modified := true;
1865 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾
\8a®
\97¹(' + IntToStr(Indy.ResponseCode) + ')';
1868 on E: EIdException do begin
1869 if( AnsiPos('304', E.Message) > 0 ) then
1870 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8dX
\90V
\96³
\82µ(' + IntToStr(Indy.ResponseCode) + ')'
1872 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾
\83G
\83\89\81[(' + IntToStr(Indy.ResponseCode) + ')';
1877 Screen.Cursor := crDefault;
1879 if tmpBoard.IsHEADTXT then begin
1880 ShowBoardHead(tmpboard, LocalEdit);
1888 procedure TEditorForm.CalcCapacityActionExecute(Sender: TObject);
1894 //
\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
1897 if Board.BoardPlugIn <> nil then
1898 body := CustomStringReplace(body, #13#10, '<br>')
1900 body := CustomStringReplace(body, #13#10, ' <br> ');
1901 StatusBar.Panels[0].Text := '
\97e
\97Ê:' + IntToStr(Length(body)) + ' byte';
1904 procedure TEditorForm.LocalRuleClick(Sender: TObject);
1908 ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
1910 RocalRuleTab.TabVisible := LocalRule.Checked;
1911 ini.WriteBool('EditorForm', 'LocalRuleTab', RocalRuleTab.TabVisible);
1918 procedure TEditorForm.FormDeactivate(Sender: TObject);
1920 if GikoSys.Setting.GestureEnabled then begin
1921 GikoSys.Setting.Gestures.ClearGesture;
1922 MouseGesture.UnHook;
1923 MouseGesture.OnGestureStart := nil;
1924 MouseGesture.OnGestureMove := nil;
1925 MouseGesture.OnGestureEnd := nil;
1929 procedure TEditorForm.OnGestureStart(Sender: TObject);
1934 procedure TEditorForm.OnGestureMove(Sender: TObject);
1940 s := MouseGesture.GetGestureStr;
1942 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
1943 if Action <> nil then
1944 ActStr := '
\81i' + Action.Caption + '
\81j';
1945 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
1946 StatusBar.Panels[0].Text := s;
1949 procedure TEditorForm.OnGestureEnd(Sender: TObject);
1954 s := MouseGesture.GetGestureStr;
1956 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
1957 if Action <> nil then
1959 StatusBar.Panels[0].Text := '';
1962 procedure TEditorForm.ShowBoardHead(ABoard: TBoard; AMemo: TMemo);
1967 //http://www.campus.ne.jp/~ishigami/CREATION/TECHNIC/WEBAP-2.htm
1968 WebBrowser1.Navigate(ABoard.GETHEADTXTFileName);
1969 //
\83\8c\83^
\83\8a\83\93\83O
\82ª
\92x
\82·
\82¬
\82ÄTXT
\82É
\88Ú
\82¹
\82È
\82¢
\81B
\82Ê
\82é
\82Ûorz
1970 //
\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
1971 //
\82±
\82ê
\82Å
\82¢
\82¯
\82Ü
\82µ
\82½
\81B
\82 \82è
\82ª
\82Æ
\82¤
\82²
\82´
\82¢
\82Ü
\82µ
\82½
\81B
1972 while (WebBrowser1.ReadyState <> READYSTATE_COMPLETE) and
1973 (WebBrowser1.ReadyState <> READYSTATE_INTERACTIVE) do begin
1974 Application.ProcessMessages;
1979 range := OleVariant(WebBrowser1.Document).body.createTextRange;
1980 LocalEdit.Text := range.text;
1985 procedure TEditorForm.LocalRuleBrowseClick(Sender: TObject);
1995 URL := ABoard.GETHEADTXTFileName;
1996 GikoSys.OpenBrowser(URL, gbtAuto);
1999 procedure TEditorForm.SaveNameMailActionExecute(Sender: TObject);
2001 SaveNameMailAction.Checked := not SaveNameMailAction.Checked;
2002 KotehanCheckBox.Enabled := SaveNameMailAction.Checked;
2005 function TEditorForm.LFusianaGet(const s: String): Boolean;
2007 FUSIANA = 'fusianasan';
2011 i := AnsiPos(FUSIANA, s);
2015 procedure TEditorForm.BeLogInOutEActionExecute(Sender: TObject);
2017 GikoDM.BeLogInOutAction.Execute;
2020 procedure TEditorForm.BeLogInOutEActionUpdate(Sender: TObject);
2022 BeLogInOutEAction.Checked := GikoDM.BeLogInOutAction.Checked;
2023 BeLogInOutEAction.Enabled := GikoDM.BeLogInOutAction.Enabled;
2025 // Cookie
\82Ì
\8eæ
\93¾
2026 procedure TEditorForm.GetCookie(CookieMng: TIdCookieManager; ABoard: TBoard);
2033 Cookie : TIdCookieRFC2109;
2034 curCookies : TStringList;
2036 // 2008.12.14
\96³
\8fð
\8c\8f\83N
\83\8a\83A
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢ by
\82à
\82¶
\82ã
2037 curCookies := TStringList.Create;
2038 curCookies.Delimiter := ';';
2039 curCookies.DelimitedText := ABoard.Cookie;
2041 curCookies.Duplicates := dupIgnore;
2042 ABoard.Cookie := '';
2044 for i := 0 to CookieMng.CookieCollection.Count - 1 do begin
2045 Cookie := CookieMng.CookieCollection.Items[i];
2046 if ( Cookie.CookieName = VAL_PON ) then begin
2047 ABoard.PON := Cookie.Value;
2048 ABoard.Expires := GMTToLocalDateTime(Cookie.Expires);
2049 end else if ( Cookie.CookieName = VAL_SPID ) then begin
2050 ABoard.SPID := Cookie.Value;
2051 ABoard.Expires := GMTToLocalDateTime(Cookie.Expires);
2052 end else if ( Cookie.CookieName = VAL_HAP ) then begin
2053 // 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é
2054 if CompareDateTime(GMTToLocalDateTime(Cookie.Expires) ,Now) > 0 then begin
2055 GikoSys.SetBoukenCookie(Cookie.Value, Cookie.Domain);
2056 //
\96`
\8c¯
\82Ì
\8f\91\82Ì
\95Û
\91¶
2057 GikoSys.Setting.WriteBoukenSettingFile;
2060 if Length( curCookies.Values[ Cookie.CookieName ] ) > 0 then begin
2061 //
\8aù
\91¶
\92l
\82Ì
\95t
\82¯
\91Ö
\82¦
2062 curCookies[curCookies.IndexOfName(Cookie.CookieName)] :=
2063 Cookie.ClientCookie;
2066 curCookies.Add(Cookie.ClientCookie);
2070 for i := 0 to curCookies.Count - 1 do begin
2071 if (curCookies[i] <> '') then begin
2072 ABoard.Cookie := ABoard.Cookie + curCookies[i] + '; ';
2076 CookieMng.CookieCollection.Clear;
2080 //! hidden
\83f
\81[
\83^
\8eæ
\93¾
2081 procedure TEditorForm.GetHiddenParameter(Rawtext: String; ABoard: TBoard);
2083 INPUT_MARK = '<input type=hidden' ; //
\91å
\95¶
\8e\9a\8f¬
\95¶
\8e\9a\82Î
\82ç
\82Î
\82ç
\82È
\82±
\82Æ
\82É
\92\8d\88Ó
2084 VALUE_MARK = 'value=' ; //
\91å
\95¶
\8e\9a\8f¬
\95¶
\8e\9a\82Î
\82ç
\82Î
\82ç
\82È
\82±
\82Æ
\82É
\92\8d\88Ó
2085 NAME_MARK = 'name=' ; //
\91å
\95¶
\8e\9a\8f¬
\95¶
\8e\9a\82Î
\82ç
\82Î
\82ç
\82È
\82±
\82Æ
\82É
\92\8d\88Ó
2086 IGNORE_NAMES : array[0..6] of String =
2087 ('subject', 'from', 'mail', 'message', 'bbs', 'time', 'key');
2089 tmp, line, name, value, lname : String;
2090 pos, pose, i : Integer;
2092 tmp := AnsiLowerCase(Rawtext);
2093 pos := AnsiPos(INPUT_MARK, tmp);
2094 while (pos > 0 ) do begin
2095 tmp := Copy(Rawtext, pos + Length(INPUT_MARK), Length(tmp));
2096 Delete(Rawtext, 1, pos+ Length(INPUT_MARK) - 1);
2097 pose := AnsiPos('>', tmp);
2098 // name=xxx value=yyy
\82ª
\90Ø
\82è
\8fo
\82³
\82ê
\82é
2099 line := Copy(tmp, 1, pose - 1);
2102 pos := AnsiPos(NAME_MARK, tmp);
2103 if (pos > 0) then begin
2104 name := Copy(Rawtext, pos + Length(NAME_MARK), Length(line));
2105 //
\94¼
\8ap"
\82Å
\8en
\82Ü
\82Á
\82Ä
\82¢
\82é
\82©
2106 if AnsiPos('"', name) = 1 then begin
2107 //
\94¼
\8ap"
\82Ü
\82Å
\82ð
\83R
\83s
\81[
2109 pose := AnsiPos('"', name);
2110 if (pose > 0) then begin
2111 Delete(name, pose, Length(name));
2113 pose := AnsiPos(' ', name);
2114 if (pose > 0) then begin
2115 Delete(name, pose, Length(name));
2119 pose := AnsiPos(' ', name);
2120 if (pose > 0) then begin
2121 Delete(name, pose, Length(name));
2125 lname := AnsiLowerCase(name);
2126 for i := 0 to Length(IGNORE_NAMES) do begin
2127 if lname = IGNORE_NAMES[i] then begin
2132 pos := AnsiPos(VALUE_MARK, tmp);
2133 if (name <> '') and (pos > 0) then begin
2134 value := Copy(Rawtext, pos + Length(VALUE_MARK), Length(line));
2135 //
\94¼
\8ap"
\82Å
\8en
\82Ü
\82Á
\82Ä
\82¢
\82é
\82©
2136 if AnsiPos('"', value) = 1 then begin
2137 //
\94¼
\8ap"
\82Ü
\82Å
\82ð
\83R
\83s
\81[
2138 Delete(value, 1, 1);
2139 pose := AnsiPos('"', value);
2140 if (pose > 0) then begin
2141 Delete(value, pose, Length(value));
2143 pose := AnsiPos(' ', value);
2144 if (pose > 0) then begin
2145 Delete(value, pose, Length(value));
2149 pose := AnsiPos(' ', value);
2150 if (pose > 0) then begin
2151 Delete(value, pose, Length(name));
2155 if (name <> '') then begin
2156 ABoard.Cookie := ABoard.Cookie + name + '=' + value + '; ';
2159 Delete(tmp, 1, Length(line));
2160 Delete(Rawtext, 1, Length(line));
2161 pos := AnsiPos(INPUT_MARK, tmp);
2165 //!
\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
2166 procedure TEditorForm.UpdateSambaActionUpdate(Sender: TObject);
2168 UpdateSambaAction.Enabled := FSambaTimer.Enabled;
2171 //!
\83T
\83\93\83o
\8dX
\90V
\83A
\83N
\83V
\83\87\83\93
2172 procedure TEditorForm.UpdateSambaActionExecute(Sender: TObject);
2177 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
2178 input := ZenToHan(input);
2179 if GikoSys.IsNumeric(input) then begin
2180 FSambaTimer.UpdateSambaSetting(StrToInt(input));
2182 //
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81ASamba
\83^
\83C
\83}
\81[
\82ð
\8dX
\90V
\82·
\82é
2183 for i := 0 to Screen.FormCount - 1 do begin
2184 if Screen.Forms[i] is TEditorForm then begin
2185 TEditorForm(Screen.Forms[i]).FSambaTimer.Update;
2186 TEditorForm(Screen.Forms[i]).UpdateSambaStatus;
2190 ShowMessage('
\90\94\92l
\82ð
\93ü
\97Í
\82µ
\82Ä
\82
\82¾
\82³
\82¢');
2191 UpdateSambaActionExecute(Sender);
2196 procedure TEditorForm.UpdateSambaStatus;
2198 if (FSambaTimer.Enabled) then begin
2199 StatusBar.Panels[2].Text
2200 := 'Samba24
\8bK
\92è
\92l' + IntToStr(FSambaTimer.SambaInterval);
2204 procedure TEditorForm.InputAssistActionExecute(Sender: TObject);
2210 TextWidth, ItemWidth, tmpWidth, EditW, EditT: Integer;
2212 if FInputAssistKey = '' then Exit;
2214 InputAssistPopupMenu.Items.Clear;
2216 if (FResistWords = nil) then begin
2217 FResistWords := TStringList.Create;
2222 if (GetKeyState( VK_SHIFT ) < 0) then begin
2223 //
\83V
\83t
\83g
\82ª
\89\9f\82³
\82ê
\82Ä
\82¢
\82ê
\82Î
\81A
\83L
\81[
\82Å
\8en
\82Ü
\82é
\83J
\83e
\83S
\83\8a
2225 InputAssistDM.GetStartWithCategoryResistWords(
2226 FInputAssistKey, FResistWords);
2228 //
\83V
\83t
\83g
\82ª
\96³
\82¢
\82Ì
\82Å
\81A
\83L
\81[
\82Å
\8en
\82Ü
\82é
\83L
\81[
2230 InputAssistDM.GetStartWithKeyResistWords(
2231 FInputAssistKey, FResistWords);
2233 Bitmap := TBitmap.Create;
2235 if (FUseUC = True) then
2236 Bitmap.Canvas.Font.Assign(BodyEditUC.Font)
2238 Bitmap.Canvas.Font.Assign(BodyEdit.Font);
2239 //
\83}
\81[
\83W
\83\935px
2240 TextWidth := Bitmap.Canvas.TextWidth(FInputAssistKey) + 5;
2242 for i := 0 to count - 1 do begin
2243 item := TMenuItem.Create(nil);
2244 item.Break := mbNone;
2245 item.Caption := FResistWords[i];
2247 item.OnClick := InputAssistMenuClick;
2248 InputAssistPopupMenu.Items.Add(item);
2250 tmpWidth := Bitmap.Canvas.TextWidth(Item.Caption);
2251 if (tmpWidth > ItemWidth) then begin
2252 ItemWidth := tmpWidth;
2259 if (count > 0) then begin
2260 if (FUseUC = True) then begin
2261 EditW := BodyEditUC.Width;
2262 EditT := BodyEditUC.Top;
2264 EditW := BodyEdit.Width;
2265 EditT := BodyEdit.Top;
2268 point.X := point.X + Self.Left + (Self.Width - EditW) div 2;
2269 point.Y := point.Y + Self.Top + (Self.Height - Self.ClientHeight);
2271 if Screen.DesktopWidth >
2272 (point.X + TextWidth + ItemWidth) then begin
2273 InputAssistPopupMenu.Popup(
2274 point.X + TextWidth,
2275 point.Y + EditorPage.Top + EditorPage.TabHeight + EditT);
2277 InputAssistPopupMenu.Popup(
2278 point.X - TextWidth - ItemWidth,
2279 point.Y + EditorPage.Top + EditorPage.TabHeight + EditT);
2284 procedure TEditorForm.InputAssistMenuClick(Sender: TObject);
2290 if not (Sender is TMenuItem) then Exit;
2292 if (FResistWords <> nil) then begin
2293 if (FUseUC = True) then
2294 EditHandle := BodyEditUC.Handle
2296 EditHandle := BodyEdit.Handle;
2299 TResistWord(FResistWords.Objects[TMenuItem(Sender).Tag]).GetText;
2303 IMC := ImmGetContext(EditHandle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
2305 ImmNotifyIME(IMC, NI_COMPOSITIONSTR, CPS_CANCEL, 0);
2307 ImmReleaseContext(EditHandle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
2311 FInputAssistKey := '';
2313 if (FUseUC = True) then
2314 BodyEditUC.InsertText(text)
2316 InsertText(BodyEdit, text);
2319 //! TMemo
\82Ì
\83J
\81[
\83\
\83\8b\88Ê
\92u
\82É
\95¶
\8e\9a\97ñ
\91}
\93ü
2320 procedure TEditorForm.InsertText(Memo: TMemo; Text: String);
2322 line, sel, pos: Integer;
2323 left, right : String;
2325 Memo.Lines.BeginUpdate;
2326 line := SendMessage(Memo.Handle,EM_LINEFROMCHAR,-1,0); //
\8ds
2327 sel := Memo.SelStart;
2328 pos := sel - SendMessage(Memo.Handle, EM_LINEINDEX, -1, 0); //
\8c\85
2329 if (pos > 0) then begin
2330 left := Copy(Memo.Lines[line], 0, pos);
2334 right := Copy(Memo.Lines[line], pos + 1, Length(Memo.Lines[line]));
2335 Memo.Lines.Strings[line] := left + Text + right;
2336 Memo.Lines.EndUpdate;
2337 //
\81@
\83L
\83\83\83\8c\83b
\83g
\82Ì
\88Ê
\92u
\82ð
\8dX
\90V
\82·
\82é
2338 Memo.SelStart := sel + Length(text);
2339 //
\83L
\83\83\83\8c\83b
\83g
\82Ì
\88Ê
\92u
\82Ü
\82Å
\83X
\83N
\83\8d\81[
\83\8b
2340 Memo.Perform(EM_SCROLLCARET, 0, 0);
2344 procedure TEditorForm.ApplicationEvents1Message(var Msg: tagMSG;
2345 var Handled: Boolean);
2353 if (Self.Active) then begin
2355 //
\83L
\81[
\89\9f\89º
\82Ì
\82Ý
\8eó
\82¯
\8eæ
\82é
2358 //
\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é
2359 if (EditorPage.ActivePageIndex = 0)
2360 and (GetKeyState( VK_CONTROL ) < 0) then begin
2361 wmMsg.Msg := Msg.message;
2362 wmMsg.CharCode := Word(Msg.wParam);
2363 wmMsg.KeyData := Msg.lParam;
2364 if (wmMsg.CharCode = 229) and (wmMsg.KeyData = 3735553) then begin
2365 if (FUseUC = True) then
2366 EditHandle := BodyEditUC.Handle
2368 EditHandle := BodyEdit.Handle;
2369 IMC := ImmGetContext(EditHandle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
2370 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
2371 if (Len > 0) then begin
2372 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
2373 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
2374 SetLength(Str, Len);
2375 FInputAssistKey := Str;
2376 InputAssistActionExecute(nil);
2379 ImmReleaseContext(EditHandle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
2388 procedure TEditorForm.ShowInputAssistFormExecute(Sender: TObject);
2390 form : TInputAssistForm;
2392 form := TInputAssistForm.Create(nil);
2394 if TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
2395 SetWindowPos(form.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2397 form.SetUpFromEditor;
2398 if (form.ShowModal = mrOk) then begin
2399 if (FUseUC = True) then
2400 BodyEditUC.InsertText(form.GetInsertText)
2402 InsertText(BodyEdit, form.GetInsertText);
2408 //! Cookie
\8fî
\95ñ
\8dí
\8f\9c
2409 procedure TEditorForm.ReleaseCookieActionExecute(Sender: TObject);
2413 //
\83X
\83\8c\83b
\83h
\82ª
\96³
\82¢
\81@
\83X
\83\8c\97§
\82Ä
\82Ì
\82Æ
\82«
\82ÍFBoard
\82ð
\92¼
\90Ú
\8eg
\82¤
2416 //
\83N
\83b
\83L
\81[
\82Ì
\8fî
\95ñ
\82ð
\8eÌ
\82Ä
\82é
2420 // 0
\82É
\8aª
\82«
\96ß
\82·
2423 //!
\94Â
\8fî
\95ñ
\8eæ
\93¾Update
\83C
\83x
\83\93\83g
2424 procedure TEditorForm.GetSETTINGTXTActionUpdate(Sender: TObject);
2426 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
2427 GetSETTINGTXTAction.Enabled := not FWork;
2429 //!
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾Update
\83C
\83x
\83\93\83g
2430 procedure TEditorForm.GetHeadTXTActionUpdate(Sender: TObject);
2432 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
2433 GetSETTINGTXTAction.Enabled := not FWork;
2436 //! Samba
\83^
\83C
\83}
\81[
\83C
\83x
\83\93\83g
2437 procedure TEditorForm.SambaTimer(Sender: TObject);
2440 if FSambaTimer.WriteDeta = ZERO_DATE then
2441 StatusBar.Panels[1].Text := '
\8f\89\8f\91'
2443 FNow := IncMilliSecond(FNow, 500);
2444 StatusBar.Panels[1].Text :=
2445 Format('%8.0f
\95b
\8co
\89ß', [SecondSpan(FNow, FSambaTimer.WriteDeta)]);
2449 \brief
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82Æ
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
2451 procedure TEditorForm.SetWindowRect;
2453 wp: TWindowPlacement;
2461 //
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\90Ý
\92è
2462 wp.length := sizeof(wp);
2463 wp.rcNormalPosition.Top := GikoSys.Setting.EditWindowTop;
2464 wp.rcNormalPosition.Left := GikoSys.Setting.EditWindowLeft;
2466 wp.rcNormalPosition.Bottom := GikoSys.Setting.EditWindowTop + GikoSys.Setting.EditWindowHeight;
2467 wp.rcNormalPosition.Right := GikoSys.Setting.EditWindowLeft + GikoSys.Setting.EditWindowWidth;
2468 wp.showCmd := SW_HIDE;
2469 SetWindowPlacement(Handle, @wp);
2471 if GikoSys.Setting.EditWindowMax then begin
2472 WindowState := wsMaximized;
2475 //
\83E
\83B
\83\93\83h
\83E
\82ª
\89æ
\96Ê
\8aO
\82È
\82ç
\89æ
\96Ê
\93à
\82É
\88Ú
\93®
\82·
\82é
2476 Right := Left + Width;
2477 Bottom := Top + Height;
2480 while (MonCnt < Screen.MonitorCount) do begin
2481 MonR := Screen.Monitors[MonCnt].Left + Screen.Monitors[MonCnt].Width;
2482 MonB := Screen.Monitors[MonCnt].Top + Screen.Monitors[MonCnt].Height;
2484 if ((Left >= Screen.Monitors[MonCnt].Left) and (Left < MonR) and
2485 (Top >= Screen.Monitors[MonCnt].Top) and (Top < MonB) and
2486 (Right > Screen.Monitors[MonCnt].Left) and (Right <= MonR) and
2487 (Bottom > Screen.Monitors[MonCnt].Top) and (Bottom <= MonB)) then begin
2492 MonCnt := MonCnt + 1;
2495 if (MonOk = False) then begin
2500 //
\8c»
\8dÝ
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82ð
\95Û
\91¶
2501 GikoSys.Setting.EditWindowTop := Top + WINDOWMOVE_V; //
\8e\9f\82É
\8aJ
\82
\83E
\83B
\83\93\83h
\83E
\82Í
2502 GikoSys.Setting.EditWindowLeft := Left + WINDOWMOVE_H; //
\81@
\81@
\81@
\89E
\8eÎ
\82ß
\89º
\82É
\82¸
\82ç
\82·
2503 //
\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·
2504 if GikoSys.Setting.EditWindowHeight < 144 then begin
2507 if GikoSys.Setting.EditWindowWidth < 144 then begin
2512 \brief
\8ag
\92£
\83^
\83u
\90Ý
\92è
2514 procedure TEditorForm.SetExtraTab;
2516 SECTION = 'EditorForm';
2520 ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
2522 BoardtopTab.TabVisible := ini.Readbool(SECTION, 'BoardTopTab', False);
2523 BoardTop.Checked := BoardtopTab.TabVisible;
2524 RocalRuleTab.TabVisible := ini.ReadBool(SECTION, 'LocalRuleTab', False);
2525 LocalRule.Checked := RocalRuleTab.TabVisible;
2532 \return
\83\8c\83X
\83G
\83f
\83B
\83^
\82ª
\93\8a\8de
\82µ
\82æ
\82¤
\82Æ
\82µ
\82Ä
\82¢
\82é
\94Â
2534 function TEditorForm.GetBoard : TBoard;
2536 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ªnull
\82Ì
\8e\9e\82ÍFBoard
2537 if FThreadItem = nil then begin
2540 Result := FThreadItem.ParentBoard;
2544 \brief GikoForm
\82É
\83\81\83b
\83Z
\81[
\83W
\82ð
\92Ç
\89Á
\82·
\82é
2545 \param icon
\83\81\83b
\83Z
\81[
\83W
\82É
\82Â
\82
\83A
\83C
\83R
\83\93
2547 procedure TEditorForm.AddFormMessageNew(icon: TGikoMessageIcon);
2549 if FThreadItem = nil then begin
2550 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, icon)
2552 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, icon);
2557 \brief
\83\8d\81[
\83J
\83\8bfusiana
\83g
\83\89\83b
\83v
2558 \return true:
\91\97\90M
\92\86\8e~ false:
\91\97\90M
2560 function TEditorForm.isLocalFusianaTrap: Boolean;
2565 if GikoSys.Setting.LocalTrapAtt then begin
2566 Namae := THTMLCreate.RepHtml(NameComboBox.Text);
2567 if (LFusianaGet(Namae)) or (Namae = '
\8eR
\8dè
\8fÂ') then begin
2568 if FusianaMsgBox = IDNO then begin
2575 \brief
\83\8a\83\82\81[
\83gfusiana
\83g
\83\89\83b
\83v
2576 \return true:
\91\97\90M
\92\86\8e~ false:
\91\97\90M
2578 function TEditorForm.isRemoteFusianaTrap: Boolean;
2586 Namae := THTMLCreate.RepHtml(NameComboBox.Text);
2587 if (GikoSys.Setting.RemoteTrapAtt) and (Length(Namae) = 0) then begin
2590 if Board = nil then Exit;
2592 if not FileExists(Board.GetSETTINGTXTFileName) then begin
2593 //Setting.txt
\82ª
\82È
\82©
\82Á
\82½
\82ç
\8eæ
\93¾
2594 //
\8eI
\82É
\95\89\89×
\82ª
\82©
\82©
\82è
\82»
\82¤...
2596 GetSETTINGTXTAction.Execute;
2602 if FileExists(Board.GetSETTINGTXTFileName) then begin
2603 body := TStringList.Create;
2605 body.LoadFromFile(Board.GetSETTINGTXTFileName);
2606 Remote := GetFusianaName(body, Board);
2612 if LFusianaGet(Remote) then begin
2613 if FusianaMsgBox = IDNO then begin
2620 \brief Header
\95¶
\8e\9a\97ñ
\8eæ
\93¾
2621 \param ACOOKIE Cookie
2626 \return Header
\95¶
\8e\9a\97ñ
2628 function TEditorForm.getHeaderStr(const ACOOKIE: string; const SPID : string;
2629 const PON : string; const HAP : string; Board : TBoard) : string;
2634 Result := Result + 'SPID=' + SPID + '; ';
2636 Result := Result + 'PON=' + PON + '; ';
2638 //
\83z
\83X
\83g
\82ª2ch
\82Å
\81ABe
\82ÉLogin
\82µ
\82Ä
\82¢
\82ê
\82ÎBE
\82Ì
\83f
\81[
\83^
\82ð
\91\97\82é
2639 //GikoSys.ParseURI( URL, Protocol,Host, Path, Document, Port, Bookmark );
2640 //if GikoSys.Is2chHost(Host) and GikoSys.Setting.BeLogin then
2641 if (Board.Is2ch) then begin
2642 //
\8cÅ
\92è
\82Ì
\83N
\83b
\83L
\81[
\82ª
\82 \82ê
\82Î
\90H
\82í
\82¹
\82é
2643 if Length(GikoSys.Setting.FixedCookie) > 0 then begin
2644 //
\83z
\83X
\83g
\82ª2ch
\82Ì
\8fê
\8d\87\81C
\8cÅ
\92è
\82Ì
\83N
\83b
\83L
\81[
\82ð
\90H
\82í
\82¹
\82é
2645 Result := Result + GikoSys.Setting.FixedCookie + '; ';
2647 if (GikoSys.Belib.Connected) then begin
2648 Result := Result + 'MDMD=' + GikoSys.Belib.MDMD + '; '
2649 + 'DMDM=' + GikoSys.Belib.DMDM + '; ';
2653 Result := 'Cookie: ' + Result + 'NAME=' + NameComboBox.Text + '; MAIL=' + MailComboBox.Text;
2656 Result := Result + '; HAP=' + HAP + '; ';
2661 \brief fusiana
\8cx
\8d\90\83_
\83C
\83A
\83\8d\83O
2662 \return IDYES
\8f\91\82«
\8d\9e\82Þ IDNO
\92\86\8e~
2664 function TEditorForm.FusianaMsgBox: Integer;
2666 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 +
2667 '
\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' +
2668 #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';
2670 Result := MsgBox(Handle, MSG_FUSIANA, '
\8fî
\95ñ',
2671 MB_YESNO or MB_ICONQUESTION);
2674 \brief
\98A
\93\8a\83\82\81[
\83hON/OFF
\90Ø
\82è
\91Ö
\82¦
2676 procedure TEditorForm.ContinueModeActionExecute(Sender: TObject);
2678 ContinueModeAction.Checked := not ContinueModeAction.Checked;
2681 \brief
\98A
\93\8a\83\82\81[
\83h
\8dX
\90V
\8f\88\97\9d
2683 procedure TEditorForm.ContinueModeActionUpdate(Sender: TObject);
2685 //
\83X
\83\8c\82½
\82Ä
\82Ì
\82Æ
\82«
\82Í
\96³
\8cø
2686 ContinueModeAction.Enabled := FThreadItem <> nil;
2689 \brief
\8f\91\82«
\8d\9e\82Þ
\94Â/
\83X
\83\8c\83b
\83h
\82ð
\95\
\8e¦
\82·
\82é
2691 procedure TEditorForm.OpenSendTargetActionExecute(Sender: TObject);
2693 if (FThreadItem <> nil) then begin
2694 //
\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É
2695 //
\91O
\96Ê
\82Å
\8cÅ
\92è
\82·
\82é
2696 if not (fsShowing in Self.FormState) then begin
2697 //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
2698 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2701 //
\83X
\83\8c\83b
\83h
2702 GikoForm.InsertBrowserTab(FThreadItem, True);
2704 if not TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\89ð
\8f\9c
2705 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2711 GikoForm.SelectTreeNode(
2715 procedure TEditorForm.ReloadTargetActionExecute(Sender: TObject);
2717 if (FThreadItem <> nil) then begin
2718 //
\83X
\83\8c\83b
\83h
2719 //
\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É
2720 //
\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é)
2721 if not (fsShowing in Self.FormState) then begin
2722 //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
2723 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2726 GikoForm.DownloadContent(FThreadItem);
2728 if not TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\89ð
\8f\9c
2729 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2735 GikoForm.DownloadList(GetBoard);
2738 //!
\8cë
\94\9a\83`
\83F
\83b
\83N
2739 function TEditorForm.isGobaku: Boolean;
2741 MSG_GOBAKU : string =
2742 '
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é%s
\82Æ
\93\8a\8de
\90æ
\82Ì%s
\82ª
\88Ù
\82È
\82è
\82Ü
\82·
\81B'#13#10 +
2743 '
\82±
\82Ì
\82Ü
\82Ü
\8f\91\82«
\8d\9e\82Ý
\82Ü
\82·
\82©
\81H';
2745 ThreadItem : TThreadItem;
2750 //
\83I
\83v
\83V
\83\87\83\93\97L
\8cø
\82©
\82Â
\83\8c\83X
\91\97\90M
\82Å
\82Ì
\82Ý
\97L
\8cø
2751 if (GikoSys.Setting.UseGobakuCheck) then begin
2752 //
\83\8c\83X
\91\97\90M
2753 if (FThreadItem <> nil) then begin
2754 ThreadItem := GikoForm.GetActiveContent(False);
2755 if (ThreadItem <> nil) then begin
2756 if (FThreadItem <> ThreadItem) then begin
2757 msg := Format(MSG_GOBAKU, ['
\83X
\83\8c\83b
\83h', '
\83X
\83\8c\83b
\83h']);
2758 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2761 if GikoForm.ActiveList is TBBS then begin
2762 if TBBS(GikoForm.ActiveList) <> FThreadItem.ParentBoard.ParentCategory.ParenTBBS then begin
2763 msg := Format(MSG_GOBAKU, ['BBS', '
\83X
\83\8c\83b
\83h
\82Ì
\8f\8a\91®
\82·
\82éBBS']);
2764 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2766 end else if GikoForm.ActiveList is TCategory then begin
2767 if TCategory(GikoForm.ActiveList).FindThreadFromURL(FThreadItem.URL) = nil then begin
2768 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']);
2769 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2771 end else if GikoForm.ActiveList is TBoard then begin
2772 if TBoard(GikoForm.ActiveList) <> FThreadItem.ParentBoard then begin
2773 msg := Format(MSG_GOBAKU, ['
\94Â', '
\83X
\83\8c\83b
\83h
\82Ì
\8f\8a\91®
\82·
\82é
\94Â']);
2774 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2779 //
\83X
\83\8c\82½
\82Ä
2780 if GikoForm.ActiveList is TBBS then begin
2781 if TBBS(GikoForm.ActiveList) <> FBoard.ParentCategory.ParenTBBS then begin
2782 msg := Format(MSG_GOBAKU, ['BBS', '
\94Â
\82Ì
\8f\8a\91®
\82·
\82éBBS']);
2783 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2785 end else if GikoForm.ActiveList is TCategory then begin
2786 if TCategory(GikoForm.ActiveList).FindBoardFromURL(FBoard.URL) = nil then begin
2787 msg := Format(MSG_GOBAKU, ['
\83J
\83e
\83S
\83\8a', '
\94Â
\82Ì
\8f\8a\91®
\82·
\82é
\83J
\83e
\83S
\83\8a']);
2788 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2790 end else if GikoForm.ActiveList is TBoard then begin
2791 if TBoard(GikoForm.ActiveList) <> FBoard then begin
2792 msg := Format(MSG_GOBAKU, ['
\94Â', '
\94Â']);
2793 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2800 procedure TEditorForm.SetFocusEdit;
2802 if (FUseUC = True) then
2808 procedure TEditorForm.SetTextEdit(TextSrc: String);
2810 if (FUseUC = True) then
2811 BodyEditUC.Text := TextSrc
2813 BodyEdit.Text := TextSrc;