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('(cookie
\82ð
\90Ý
\92è
\82·
\82é
\82Æ
\82±
\82Ì
\89æ
\96Ê
\82Í
\82Å
\82È
\82
\82È
\82è
\82Ü
\82·
\81B)', ResponseText) > 0) or
1079 (AnsiPos(RES2CH_COOKIE, ResponseText) > 0) then
1081 else if (AnsiPos('<font size=+2 color=#FF0000>
\8f\91\82«
\8d\9e\82Ý
\83`
\83F
\83b
\83N
\81I </font>', ResponseText) > 0) or
1082 (AnsiPos('<title>
\81¡
\8f\91\82«
\8d\9e\82Ý
\8am
\94F
\82µ
\82Ü
\82·
\81¡</title>', ResponseText) > 0) or
1083 (AnsiPos('<title>
\93\8a\8de
\8am
\94F</title>', ResponseText) > 0) or
1084 (AnsiPos('<b>
\8f\91\82«
\82±
\82Ý
\8am
\94F</b>', ResponseText) > 0) or
1085 (AnsiPos('="../test/subbbs.cgi">', ResponseText) > 0) or
1086 (AnsiPos(RES2CH_FALSE, ResponseText) > 0) then
1088 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
1089 (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
1096 procedure TEditorForm.GetSendData(Source: TStringStream);
1107 if GikoSys.Setting.UseMachineTime then begin
1108 if GikoSys.Setting.TimeAdjust then
1109 Adjust := Gikosys.Setting.TimeAdjustSec
1111 Adjust := GikoSys.Setting.TimeAdjustSec * -1;
1112 SendTime := GikoSys.DateTimeToInt(Now) - (9 * 60 * 60) + Adjust
1114 if (Board.LastGetTime = 0) or (Board.LastGetTime = ZERO_DATE) then
1115 SendTime := GikoSys.DateTimeToInt(Now)
1117 SendTime := GikoSys.DateTimeToInt(Board.LastGetTime);
1122 SessionID := GikoSys.Dolib.SessionID;
1123 if SessionID <> '' then
1124 s := 'sid=' + HttpEncode(SessionID) + '&'
1127 s := s + 'subject=&'
1128 + 'FROM=' + HttpEncode(NameComboBox.Text) + '&'
1129 + 'mail=' + HttpEncode(MailComboBox.Text) + '&'
1130 + 'MESSAGE=' + HttpEncode(body) + '&'
1131 + 'bbs=' + Board.BBSID + '&'
1132 + 'time=' + IntToStr(SendTime) + '&';
1134 if FThreadItem = nil then begin
1135 s := s + 'subject=' + HttpEncode(TitleEdit.Text) + '&';
1136 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;
1138 s := s + 'key=' + ChangeFileExt(FThreadItem.FileName, '') + '&';
1139 s := s + 'submit=' + HttpEncode('
\8f\91\82«
\8d\9e\82Þ') + #13#10;
1141 Source.WriteString(s);
1144 procedure TEditorForm.SaveSendFile;
1150 ini := CreateSentIniFile;
1151 if (ini <> nil) then begin
1153 sDate := IntToStr(GikoSys.DateTimeToInt(Now));
1154 if (FUseUC = True) then
1155 Body := BodyEditUC.EncodeText
1157 Body := BodyEdit.Text;
1159 ini.WriteString(sDate, 'Name', NameComboBox.Text);
1160 ini.WriteString(sDate, 'EMail', MailComboBox.Text);
1161 ini.WriteString(sDate, 'Body', HttpEncode(Body));
1162 ini.WriteInteger(sDate, 'Status', FStatusCode);
1163 ini.WriteDateTime(sDate, 'Date', Now);
1164 if FThreadItem = nil then begin
1165 ini.WriteString(sDate, 'Title', MojuUtils.Sanitize(TitleEdit.Text));
1166 //ini.WriteString(sDate, 'BBS', FBoard.BBSID);
1167 ini.WriteString(sDate, 'URL', FBoard.URL);
1168 ini.WriteInteger(sDate, 'NewThread', 1);
1170 ini.WriteString(sDate, 'Title', FThreadItem.Title);
1171 //ini.WriteString(sDate, 'BBS', FThreadItem.ParentBoard.BBSID);
1172 ini.WriteString(sDate, 'URL', FThreadItem.URL);
1173 ini.WriteString(sDate, 'Key', ChangeFileExt(FThreadItem.FileName, ''));
1182 function TEditorForm.CreateSentIniFile: TMemIniFile;
1184 maxSize, fileSize, i: Integer;
1189 maxSize := GikoSys.Setting.SentIniFileSize * 1024 * 1024;
1190 //
\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·
1191 if (maxSize > 0) then begin
1192 fileSize := GikoSys.GetFileSize(GikoSys.Setting.GetSentFileName);
1193 //
\8dÅ
\91å
\83T
\83C
\83Y
\82ð
\92´
\82¦
\82Ä
\82¢
\82½
\8fê
\8d\87\82Í
\83\8a\83l
\81[
\83\80\82·
\82é
1194 if (fileSize >= maxSize) then begin
1196 //
\8d¡
\82Ì
\8e\9e\8d\8f\82ð
\83t
\83@
\83C
\83\8b\96¼
\82Ì
\8cã
\82ë
\82É
\82Â
\82¯
\82é
1198 // 10
\89ñ
\88È
\8fã
\8e¸
\94s
\82µ
\82½
\82ç
\82 \82«
\82ç
\82ß
\82é
1199 if (i > 10) then break;
1200 DateTimeToString(newName, 'yyhhnnsszzz', Now());
1202 until RenameFile(GikoSys.Setting.GetSentFileName,
1203 GikoSys.Setting.GetSentFileName + '.' + newName);
1205 Result := TMemIniFile.Create(GikoSys.Setting.GetSentFileName);
1208 procedure TEditorForm.SendActionExecute(Sender: TObject);
1210 TITLE_SAMBA : string = 'Samba24
\8cx
\8d\90';
1215 state : TGikoDownloadState;
1222 SendAction.Enabled := False;
1223 Application.ProcessMessages;
1224 if not Check then Exit;
1228 if FThreadItem = nil then begin
1229 rc := GikoUtil.MsgBox(Handle,
1230 '
\81u' + Board.Title + '
\81v
\94Â
\82É
\90V
\82µ
\82¢
\83X
\83\8c\83b
\83h
\97§
\82Ä
\82Ü
\82·'#13#10#13#10
1231 + '
\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
1232 + '
\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
1233 + '
\81u
\82Í
\82¢
\81v
\82ð
\89\9f\82·
\82Æ
\91\97\90M
\82µ
\82Ü
\82·',
1235 MB_ICONQUESTION or MB_YESNO);
1236 if rc <> ID_YES then
1240 SetNameList(NameComboBox.Text, MailComboBox.Text);
1241 if (KotehanCheckBox.Enabled) and (KotehanCheckBox.Checked) then begin
1242 Board.KotehanName := NameComboBox.Text;
1243 Board.KotehanMail := MailComboBox.Text;
1246 if Board.IsBoardPlugInAvailable then begin
1249 if FThreadItem = nil then begin
1250 //
\83X
\83\8c\97§
\82Ä
1251 state := TGikoDownloadState( Board.BoardPlugIn.CreateThread(
1252 DWORD( Board ), TitleEdit.Text, NameComboBox.Text, MailComboBox.Text, body ) );
1254 if state = gdsComplete then begin
1255 GikoForm.PlaySound('ResEnd');
1257 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, gmiOK);
1259 if (not ContinueModeAction.Enabled) or (not ContinueModeAction.Checked) then
1261 end else if State = gdsError then begin
1262 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmSureError), nil, gmiNG);
1263 end else if State = gdsAbort then begin
1264 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiNG);
1268 state := TGikoDownloadState( FThreadItem.ParentBoard.BoardPlugIn.WriteThread(
1269 DWORD( FThreadItem ), NameComboBox.Text, MailComboBox.Text, body ) );
1271 if state = gdsComplete then begin
1272 GikoForm.PlaySound('ResEnd');
1274 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, gmiOK);
1276 if (not ContinueModeAction.Enabled) or (not ContinueModeAction.Checked) then
1278 end else if State = gdsError then begin
1279 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmResError), nil, gmiOK);
1280 end else if State = gdsAbort then begin
1281 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
1285 if not FSambaTimer.Enabled then begin
1286 if CompareDateTime(Board.Expires ,Now) <= 0 then begin
1291 //
\96`
\8c¯
\82Ì
\8f\91\83\8c\83x
\83\8b\96ß
\82é
\96â
\91è
\91Î
\89\9e
1292 if (Board.Is2ch) and (AnsiPos('HAP=', Board.Cookie)>0) then begin
1295 Send(Board.Cookie, Board.SPID, Board.PON, True);
1297 if not FSambaTimer.CheckSambaTime(Now()) then begin
1298 rc := GikoUtil.MsgBox(Handle,
1299 '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
1300 + '
\91\97\90M
\82ð
\92\86\8e~
\82µ
\82Ü
\82·
\82©
\81H' + #13#10
1301 + '(
\81u
\82¢
\82¢
\82¦
\81v
\82¾
\82Æ
\91\97\90M
\82µ
\82Ü
\82·)', TITLE_SAMBA,
1302 MB_YESNO or MB_ICONQUESTION);
1303 if rc = IDYES then begin
1307 if rc = IDNO then begin
1308 rc2 := GikoUtil.MsgBox(Handle,
1309 '
\96{
\93\96\82É
\91\97\90M
\82µ
\82Ü
\82·
\82©
\81H',
1311 MB_YESNO or MB_ICONQUESTION);
1312 if rc2 = IDNO then begin
1318 if CompareDateTime(Board.Expires ,Now) <= 0 then begin
1323 //
\96`
\8c¯
\82Ì
\8f\91\83\8c\83x
\83\8b\96ß
\82é
\96â
\91è
\91Î
\89\9e
1324 if (Board.Is2ch) and (AnsiPos('HAP=', Board.Cookie)>0) then begin
1327 Send(Board.Cookie, Board.SPID, Board.PON, True);
1332 if FSambaTimer.Enabled then begin
1333 FNow := FSambaTimer.Update;
1338 procedure TEditorForm.SaveActionExecute(Sender: TObject);
1343 procedure TEditorForm.CloseActionExecute(Sender: TObject);
1348 procedure TEditorForm.UndoActionExecute(Sender: TObject);
1350 SendMessage(GetActiveControlHandle, WM_UNDO, 0, 0);
1353 procedure TEditorForm.CutActionExecute(Sender: TObject);
1355 SendMessage(GetActiveControlHandle, WM_CUT, 0, 0);
1358 procedure TEditorForm.CopyActionExecute(Sender: TObject);
1360 SendMessage(GetActiveControlHandle, WM_COPY, 0, 0);
1363 procedure TEditorForm.PasteActionExecute(Sender: TObject);
1365 SendMessage(GetActiveControlHandle, WM_PASTE, 0, 0);
1368 procedure TEditorForm.SelectAllActionExecute(Sender: TObject);
1370 SendMessage(GetActiveControlHandle, EM_SETSEL, 0, GetWindowTextLength(GetActiveControlHandle));
1373 procedure TEditorForm.TopActionExecute(Sender: TObject); //
\83E
\83B
\83\93\83h
\83E
\8dÅ
\91O
\96Ê(Stay)
\83{
\83^
\83\93\82Ì
\8f\88\97\9d
1375 if not (fsShowing in Self.FormState) then begin
1376 if TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
1377 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
1378 GikoSys.Setting.EditWindowStay := true;
1379 end else begin //
\83X
\83e
\83C
\8fó
\91Ô
\89ð
\8f\9c
1380 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
1381 GikoSys.Setting.EditWindowStay := false;
1383 //
\83X
\83e
\83C
\8fó
\91Ô
\82Ì
\95Û
\91¶
1384 //GikoSys.Setting.EditWindowStay := FormStyle = fsStayOnTop;
1388 procedure TEditorForm.AbortActionExecute(Sender: TObject);
1393 procedure TEditorForm.SendActionUpdate(Sender: TObject);
1395 SendAction.Enabled := not FWork;
1398 procedure TEditorForm.SaveActionUpdate(Sender: TObject);
1400 SaveAction.Enabled := False;
1403 procedure TEditorForm.CloseActionUpdate(Sender: TObject);
1405 CloseAction.Enabled := not FWork;
1408 procedure TEditorForm.UndoActionUpdate(Sender: TObject);
1410 UndoAction.Enabled := (GetActiveControlHandle <> 0)
1411 and (SendMessage(GetActiveControlHandle, EM_CANUNDO, 0, 0) <> 0)
1415 procedure TEditorForm.CutActionUpdate(Sender: TObject);
1417 Selection: TSelection;
1420 AHandle := GetActiveControlHandle;
1421 SendMessage(AHandle, EM_GETSEL, Longint(@Selection.StartPos), Longint(@Selection.EndPos));
1422 CutAction.Enabled := (AHandle <> 0)
1423 and ((Selection.EndPos - Selection.StartPos) <> 0)
1427 procedure TEditorForm.CopyActionUpdate(Sender: TObject);
1429 Selection: TSelection;
1432 AHandle := GetActiveControlHandle;
1433 SendMessage(AHandle, EM_GETSEL, Longint(@Selection.StartPos), Longint(@Selection.EndPos));
1434 CopyAction.Enabled := (AHandle <> 0)
1435 and ((Selection.EndPos - Selection.StartPos) <> 0)
1439 procedure TEditorForm.PasteActionUpdate(Sender: TObject);
1441 PasteAction.Enabled := (GetActiveControlHandle <> 0)
1442 and (Clipboard.HasFormat(CF_TEXT))
1446 procedure TEditorForm.TopActionUpdate(Sender: TObject);
1448 TopAction.Enabled := not FWork;
1451 procedure TEditorForm.SageCheckBoxClick(Sender: TObject);
1453 if SageCheckBox.Checked then begin
1454 if AnsiPos('sage', MailComboBox.Text) = 0 then
1455 MailComboBox.Text := 'sage' + MailComboBox.Text;
1457 if AnsiPos('sage', MailComboBox.Text) <> 0 then
1458 MailComboBox.Text := StringReplace(MailComboBox.Text, 'sage', '', [rfReplaceAll]);
1462 procedure TEditorForm.MailComboBoxChange(Sender: TObject);
1464 if AnsiPos('sage', MailComboBox.Text) = 0 then
1465 SageCheckBox.Checked := False
1467 SageCheckBox.Checked := True;
1470 procedure TEditorForm.IdLogDebugReceive(ASender: TIdConnectionIntercept;
1473 StringStream: TStringStream;
1475 StringStream := TStringStream.Create('');
1477 StringStream.CopyFrom(AStream, AStream.Size);
1478 FDebugStrReceive := FDebugStrReceive + StringStream.DataString;
1484 procedure TEditorForm.IdLogDebugSend(ASender: TIdConnectionIntercept;
1487 StringStream: TStringStream;
1489 StringStream := TStringStream.Create('');
1491 StringStream.CopyFrom(AStream, AStream.Size);
1492 FDebugStrSend := FDebugStrSend + StringStream.DataString;
1498 procedure TEditorForm.TransActionExecute(Sender: TObject);
1500 AlphaBlend := TransAction.Checked;
1501 //
\94¼
\93§
\96¾
\8fó
\91Ô
\82Ì
\95Û
\91¶
1502 GikoSys.Setting.EditWindowTranslucent := TransAction.Checked;
1505 procedure TEditorForm.TransActionUpdate(Sender: TObject);
1507 TransAction.Enabled := not FWork;
1509 //StatusBar
\82ÌPanels[0]
\82Ì
\95\9d\82ð
\89Â
\95Ï
\81B
\8ec
\82è
\82ð
\8cÅ
\92è
\82É
\82·
\82é
1510 procedure TEditorForm.StatusBarResize(Sender: TObject);
1512 StatusBar.Panels[0].Width := StatusBar.Width
1513 - StatusBar.Panels[1].Width - StatusBar.Panels[2].Width;
1517 //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Þ
1518 procedure TEditorForm.FormActivate(Sender: TObject);
1520 if ( FSambaTimer.Enabled ) and ( FThreadItem <> nil ) then
1522 FNow := FSambaTimer.Update;
1524 if GikoSys.Setting.GestureEnabled then begin
1525 GikoSys.Setting.Gestures.ClearGesture;
1526 GikoSys.Setting.Gestures.LoadGesture(
1527 GikoSys.Setting.GetGestureFileName, ActionList );
1528 MouseGesture.UnHook;
1529 MouseGesture.OnGestureStart := OnGestureStart;
1530 MouseGesture.OnGestureMove := OnGestureMove;
1531 MouseGesture.OnGestureEnd := OnGestureEnd;
1532 MouseGesture.SetHook( Handle );
1535 procedure TEditorForm.FormCloseQuery(Sender: TObject;
1536 var CanClose: Boolean);
1538 CanClose := not FWork;
1541 procedure TEditorForm.QuotePasteActionExecute(Sender: TObject);
1548 quote := GikoSys.GetOEIndentChar;
1550 if (FUseUC = True) then begin
1551 BodyEditUC.QuotePaste(quote);
1553 s := TStringList.Create;
1555 s.Text := Clipboard.AsText;
1557 for i := s.Count - 1 downto 0 do
1558 s[ i ] := quote + s[ i ];
1560 BodyEdit.SelText := s.Text;
1567 procedure TEditorForm.SpaceToNBSPActionExecute(Sender: TObject);
1569 GikoSys.Setting.SpaceToNBSP := SpaceToNBSPAction.Checked;
1570 if EditorPage.ActivePage = PreviewTab then
1574 procedure TEditorForm.AmpToCharRefActionExecute(Sender: TObject);
1576 GikoSys.Setting.AmpToCharRef := AmpToCharRefAction.Checked;
1577 if EditorPage.ActivePage = PreviewTab then
1581 procedure TEditorForm.BoardTopClick(Sender: TObject);
1585 ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
1587 BoardtopTab.TabVisible := BoardTop.Checked;
1588 ini.WriteBool('EditorForm', 'BoardTopTab', BoardtopTab.TabVisible);
1596 procedure TEditorForm.GetSETTINGTXTActionExecute(Sender: TObject);
1598 memStream: TMemoryStream;
1599 URL, RefURL: string;
1600 settingBody: TStringList;
1603 if not FWork then begin
1606 tmpBoard := GetBoard;
1607 if tmpBoard <> nil then begin
1609 RefURL := tmpBoard.URL;
1610 if RefURL[Length(RefURL)] <> '/' then
1611 URL := RefURL + '/' + 'SETTING.TXT'
1613 URL := RefURL + 'SETTING.TXT';
1614 Screen.Cursor := crHourGlass;
1615 memStream := TMemoryStream.Create;
1618 StatusBar.Panels[0].Text := 'SETTING.TXT
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86';
1619 GetWebData(URL, RefURL, tmpBoard.SETTINGTXTTime, memStream);
1620 if( Indy.ResponseCode = 200 ) then begin
1621 settingBody := TStringList.Create;
1623 memStream.Seek(0, soFromBeginning);
1624 settingBody.LoadFromStream(memStream);
1625 settingBody.SaveToFile(tmpBoard.GetSETTINGTXTFileName);
1626 tmpBoard.SETTINGTXTTime := Indy.Response.LastModified;
1627 tmpBoard.IsSETTINGTXT := true;
1628 tmpBoard.TitlePictureURL := GetTitlePictureURL(settingBody, tmpBoard);
1629 tmpBoard.Modified := true;
1633 StatusBar.Panels[0].Text := 'SETTING.TXT
\8eæ
\93¾
\8a®
\97¹(' + IntToStr(Indy.ResponseCode) + ')';
1636 on E: EIdException do begin
1637 if( AnsiPos('304', E.Message) > 0 ) then
1638 StatusBar.Panels[0].Text := 'SETTING.TXT
\8dX
\90V
\96³
\82µ(' + IntToStr(Indy.ResponseCode) + ')'
1640 StatusBar.Panels[0].Text := 'SETTING.TXT
\8eæ
\93¾
\83G
\83\89\81[(' + IntToStr(Indy.ResponseCode) + ')';
1645 Screen.Cursor := crDefault;
1647 ShowBoardInformation(tmpBoard, BoardInformationMemo);
1653 procedure TEditorForm.ShowBoardInformation(ABoard: TBoard; AMemo: TMemo);
1656 UCType: Integer; // 0:
\95s
\96¾
\81A1:
\91Î
\89\9e\81A-1:
\94ñ
\91Î
\89\9e
1660 AMemo.Lines.Add('[SETTING.TXT]');
1661 if ABoard.IsSETTINGTXT then begin
1662 if FileExists(ABoard.GetSETTINGTXTFileName) then begin
1663 AMemo.Lines.Add(DateTimeToStr(ABoard.SETTINGTXTTime) + '
\8dX
\90V');
1664 body := TStringList.Create;
1666 body.LoadFromFile(ABoard.GetSETTINGTXTFileName);
1667 AMemo.Lines.AddStrings(body);
1671 if (Pos('BBS_UNICODE=pass', AMemo.Text) > 0) then
1673 else if (Pos('BBS_UNICODE=', AMemo.Text) > 0) then
1676 ABoard.IsSETTINGTXT := false;
1677 ABoard.SETTINGTXTTime := ZERO_DATE;
1678 AMemo.Lines.Add('Local
\82É
\95Û
\91¶
\82³
\82ê
\82½SETTING.TXT
\82ª
\8c©
\82Â
\82©
\82è
\82Ü
\82¹
\82ñ');
1679 AMemo.Lines.Add('
\83\81\83j
\83\85\81[
\82æ
\82è
\8dÄ
\8eæ
\93¾
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
1682 AMemo.Lines.Add('SETTING.TXT
\82ð
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B');
1683 AMemo.Lines.Add('
\83\81\83j
\83\85\81[
\82æ
\82è
\8eæ
\93¾
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
1688 UCInfoPanel.Caption := 'Unicode
\94ñ
\91Î
\89\9e\94Â';
1689 UCInfoPanel.Color := clRed;
1690 UCInfoPanel.Hint := '
\82±
\82Ì
\94Â
\82ÍUnicode
\82Å
\82Ì
\83\8c\83X
\82É
\91Î
\89\9e\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B';
1693 UCInfoPanel.Caption := 'Unicode
\91Î
\89\9e\95s
\96¾';
1694 UCInfoPanel.Color := clBtnFace;
1695 UCInfoPanel.Hint := '
\94Â
\8fî
\95ñ
\82ð
\8eæ
\93¾
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B';
1698 UCInfoPanel.Caption := 'Unicode
\91Î
\89\9e\94Â';
1699 UCInfoPanel.Color := clLime;
1700 UCInfoPanel.Hint := '
\82±
\82Ì
\94Â
\82ÍUnicode
\82Å
\82Ì
\83\8c\83X
\82É
\91Î
\89\9e\82µ
\82Ä
\82¢
\82Ü
\82·
\81B';
1704 function TEditorForm.GetTitlePictureURL(body: TStringList; ABoard: TBoard): string;
1705 //BBS_TITLE_PICTURE=
1712 for i := 0 to body.Count - 1 do begin
1713 if (AnsiPos('BBS_TITLE_PICTURE=', body[i]) > 0) or
1714 (AnsiPos('BBS_FIGUREHEAD=', body[i]) > 0) then begin
1716 Delete(tmp, 1, AnsiPos('=', tmp));
1717 if AnsiPos('../', tmp) > 0 then begin
1718 tmp := CustomStringReplace(tmp, '../', GikoSys.UrlToServer(ABoard.URL));
1726 procedure TEditorForm.GetTitlePictureActionUpdate(Sender: TObject);
1728 if FThreadItem = nil then
1729 GetTitlePictureAction.Enabled := FBoard.IsSETTINGTXT
1731 GetTitlePictureAction.Enabled := FThreadItem.ParentBoard.IsSETTINGTXT;
1733 if GetTitlePictureAction.Enabled Then begin
1734 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
1735 GetTitlePictureAction.Enabled := not FWork;
1739 procedure TEditorForm.GetTitlePictureActionExecute(Sender: TObject);
1741 memStream: TMemoryStream;
1748 memStream := TMemoryStream.Create;
1750 tmpBoard := GetBoard;
1752 if (tmpBoard <> nil) and (tmpBoard.TitlePictureURL <> '') then begin
1753 StatusBar.Panels[0].Text := '
\94Â
\83g
\83b
\83v
\89æ
\91\9c\83_
\83E
\83\93\83\8d\81[
\83h
\92\86';
1754 Screen.Cursor := crHourGlass;
1756 // URL
\82ð
\8ew
\92è
\82µ
\82Ä
\83\81\83\82\83\8a\82É
\93Ç
\82Ý
\8d\9e\82Þ
1757 GetWebData(tmpBoard.TitlePictureURL, tmpBoard.URL,
1758 ZERO_DATE, memStream);
1759 if Indy.ResponseCode = 200 then begin
1760 memStream.SaveToFile(tmpBoard.GetTitlePictureFileName);
1762 tmpBoard.Modified := true;
1764 StatusBar.Panels[0].Text := '
\94Â
\83g
\83b
\83v
\89æ
\91\9c (' + IntToStr(Indy.ResponseCode) + ')';
1771 Screen.Cursor := crDefault;
1775 \brief URL
\82Ì
\83f
\81[
\83^
\82ðstream
\82É
\93Ç
\82Ý
\8d\9e\82Þ
1776 \param URL
\93Ç
\82Ý
\8d\9e\82Þ
\90æ
1777 \param RefURL referer
\82É
\90Ý
\92è
\82·
\82é
1778 \param Modified Modified
\82É
\90Ý
\92è
\82·
\82é
1779 \param stream
\93Ç
\82Ý
\8d\9e\82ñ
\82¾
\83f
\81[
\83^
\82Ì
\95Û
\91¶
\90æ
1781 procedure TEditorForm.GetWebData(const URL: string; const RefURL: string;
1782 Modified: TDateTime; stream: TStream);
1785 Indy.Request.Referer := RefURL;
1786 Indy.Request.LastModified := Modified;
1788 IdAntiFreeze.Active := True;
1790 Indy.Get(URL, stream);
1792 IdAntiFreeze.Active := False;
1796 procedure TEditorForm.ShowTitlePicture();
1801 tmpBoard := GetBoard;
1803 if FileExists(tmpBoard.GetTitlePictureFileName) then begin
1804 TitlePictureBrowser.Navigate(tmpBoard.GetTitlePictureFileName);
1806 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';
1807 SetContent(s, TitlePictureBrowser);
1811 function TEditorForm.GetFusianaName(body: TStringList; ABoard: TBoard): String;
1816 for i := 0 to body.Count - 1 do begin
1817 if (AnsiPos('BBS_NONAME_NAME=', body[i]) > 0) then begin
1819 Delete(tmp, 1, AnsiPos('=', tmp));
1826 procedure TEditorForm.GetHeadTXTActionExecute(Sender: TObject);
1828 URL, RefURL: string;
1829 settingBody: TStringList;
1831 memStream: TMemoryStream;
1833 if not FWork then begin
1836 tmpBoard := GetBoard;
1837 if (tmpBoard <> nil) then begin
1839 RefURL := tmpBoard.URL;
1840 if RefURL[Length(RefURL)] <> '/' then
1841 URL := RefURL + '/' + 'head.txt'
1843 URL := RefURL + 'head.txt';
1845 Screen.Cursor := crHourGlass;
1846 memStream := TMemoryStream.Create;
1848 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';
1850 GetWebData(URL, RefURL, tmpBoard.HEADTXTTime, memStream);
1851 if( Indy.ResponseCode = 200 ) then begin
1852 settingBody := TStringList.Create;
1854 memStream.Seek(0, soFromBeginning);
1855 settingBody.LoadFromStream(memStream);
1856 settingBody.Insert(0, '<HTML lang="ja"><HEAD>');
1857 settingBody.Insert(1, '<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">');
1858 settingBody.Insert(2, '<TITLE>' + tmpBoard.Title + '</TITLE>');
1859 settingBody.Insert(3, '<base href="' + RefURL + '"></HEAD><BODY>');
1860 settingBody.Add('</BODY></HTML>');
1861 settingBody.SaveToFile(tmpBoard.GETHEADTXTFileName);
1862 tmpBoard.HEADTXTTime := Indy.Response.LastModified;
1863 tmpBoard.IsHEADTXT := true;
1864 tmpBoard.Modified := true;
1868 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾
\8a®
\97¹(' + IntToStr(Indy.ResponseCode) + ')';
1871 on E: EIdException do begin
1872 if( AnsiPos('304', E.Message) > 0 ) then
1873 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8dX
\90V
\96³
\82µ(' + IntToStr(Indy.ResponseCode) + ')'
1875 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾
\83G
\83\89\81[(' + IntToStr(Indy.ResponseCode) + ')';
1880 Screen.Cursor := crDefault;
1882 if tmpBoard.IsHEADTXT then begin
1883 ShowBoardHead(tmpboard, LocalEdit);
1891 procedure TEditorForm.CalcCapacityActionExecute(Sender: TObject);
1897 //
\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
1900 if Board.BoardPlugIn <> nil then
1901 body := CustomStringReplace(body, #13#10, '<br>')
1903 body := CustomStringReplace(body, #13#10, ' <br> ');
1904 StatusBar.Panels[0].Text := '
\97e
\97Ê:' + IntToStr(Length(body)) + ' byte';
1907 procedure TEditorForm.LocalRuleClick(Sender: TObject);
1911 ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
1913 RocalRuleTab.TabVisible := LocalRule.Checked;
1914 ini.WriteBool('EditorForm', 'LocalRuleTab', RocalRuleTab.TabVisible);
1921 procedure TEditorForm.FormDeactivate(Sender: TObject);
1923 if GikoSys.Setting.GestureEnabled then begin
1924 GikoSys.Setting.Gestures.ClearGesture;
1925 MouseGesture.UnHook;
1926 MouseGesture.OnGestureStart := nil;
1927 MouseGesture.OnGestureMove := nil;
1928 MouseGesture.OnGestureEnd := nil;
1932 procedure TEditorForm.OnGestureStart(Sender: TObject);
1937 procedure TEditorForm.OnGestureMove(Sender: TObject);
1943 s := MouseGesture.GetGestureStr;
1945 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
1946 if Action <> nil then
1947 ActStr := '
\81i' + Action.Caption + '
\81j';
1948 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
1949 StatusBar.Panels[0].Text := s;
1952 procedure TEditorForm.OnGestureEnd(Sender: TObject);
1957 s := MouseGesture.GetGestureStr;
1959 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
1960 if Action <> nil then
1962 StatusBar.Panels[0].Text := '';
1965 procedure TEditorForm.ShowBoardHead(ABoard: TBoard; AMemo: TMemo);
1970 //http://www.campus.ne.jp/~ishigami/CREATION/TECHNIC/WEBAP-2.htm
1971 WebBrowser1.Navigate(ABoard.GETHEADTXTFileName);
1972 //
\83\8c\83^
\83\8a\83\93\83O
\82ª
\92x
\82·
\82¬
\82ÄTXT
\82É
\88Ú
\82¹
\82È
\82¢
\81B
\82Ê
\82é
\82Ûorz
1973 //
\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
1974 //
\82±
\82ê
\82Å
\82¢
\82¯
\82Ü
\82µ
\82½
\81B
\82 \82è
\82ª
\82Æ
\82¤
\82²
\82´
\82¢
\82Ü
\82µ
\82½
\81B
1975 while (WebBrowser1.ReadyState <> READYSTATE_COMPLETE) and
1976 (WebBrowser1.ReadyState <> READYSTATE_INTERACTIVE) do begin
1977 Application.ProcessMessages;
1982 range := OleVariant(WebBrowser1.Document).body.createTextRange;
1983 LocalEdit.Text := range.text;
1988 procedure TEditorForm.LocalRuleBrowseClick(Sender: TObject);
1998 URL := ABoard.GETHEADTXTFileName;
1999 GikoSys.OpenBrowser(URL, gbtAuto);
2002 procedure TEditorForm.SaveNameMailActionExecute(Sender: TObject);
2004 SaveNameMailAction.Checked := not SaveNameMailAction.Checked;
2005 KotehanCheckBox.Enabled := SaveNameMailAction.Checked;
2008 function TEditorForm.LFusianaGet(const s: String): Boolean;
2010 FUSIANA = 'fusianasan';
2014 i := AnsiPos(FUSIANA, s);
2018 procedure TEditorForm.BeLogInOutEActionExecute(Sender: TObject);
2020 GikoDM.BeLogInOutAction.Execute;
2023 procedure TEditorForm.BeLogInOutEActionUpdate(Sender: TObject);
2025 BeLogInOutEAction.Checked := GikoDM.BeLogInOutAction.Checked;
2026 BeLogInOutEAction.Enabled := GikoDM.BeLogInOutAction.Enabled;
2028 // Cookie
\82Ì
\8eæ
\93¾
2029 procedure TEditorForm.GetCookie(CookieMng: TIdCookieManager; ABoard: TBoard);
2036 Cookie : TIdCookieRFC2109;
2037 curCookies : TStringList;
2039 // 2008.12.14
\96³
\8fð
\8c\8f\83N
\83\8a\83A
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢ by
\82à
\82¶
\82ã
2040 curCookies := TStringList.Create;
2041 curCookies.Delimiter := ';';
2042 curCookies.DelimitedText := ABoard.Cookie;
2044 curCookies.Duplicates := dupIgnore;
2045 ABoard.Cookie := '';
2047 for i := 0 to CookieMng.CookieCollection.Count - 1 do begin
2048 Cookie := CookieMng.CookieCollection.Items[i];
2049 if ( Cookie.CookieName = VAL_PON ) then begin
2050 ABoard.PON := Cookie.Value;
2051 ABoard.Expires := GMTToLocalDateTime(Cookie.Expires);
2052 end else if ( Cookie.CookieName = VAL_SPID ) then begin
2053 ABoard.SPID := Cookie.Value;
2054 ABoard.Expires := GMTToLocalDateTime(Cookie.Expires);
2055 end else if ( Cookie.CookieName = VAL_HAP ) then begin
2056 // 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é
2057 if CompareDateTime(GMTToLocalDateTime(Cookie.Expires) ,Now) > 0 then begin
2058 GikoSys.SetBoukenCookie(Cookie.Value, Cookie.Domain);
2059 //
\96`
\8c¯
\82Ì
\8f\91\82Ì
\95Û
\91¶
2060 GikoSys.Setting.WriteBoukenSettingFile;
2063 if Length( curCookies.Values[ Cookie.CookieName ] ) > 0 then begin
2064 //
\8aù
\91¶
\92l
\82Ì
\95t
\82¯
\91Ö
\82¦
2065 curCookies[curCookies.IndexOfName(Cookie.CookieName)] :=
2066 Cookie.ClientCookie;
2069 curCookies.Add(Cookie.ClientCookie);
2073 for i := 0 to curCookies.Count - 1 do begin
2074 if (curCookies[i] <> '') then begin
2075 ABoard.Cookie := ABoard.Cookie + curCookies[i] + '; ';
2079 CookieMng.CookieCollection.Clear;
2083 //! hidden
\83f
\81[
\83^
\8eæ
\93¾
2084 procedure TEditorForm.GetHiddenParameter(Rawtext: String; ABoard: TBoard);
2086 INPUT_MARK = '<input type=hidden' ; //
\91å
\95¶
\8e\9a\8f¬
\95¶
\8e\9a\82Î
\82ç
\82Î
\82ç
\82È
\82±
\82Æ
\82É
\92\8d\88Ó
2087 VALUE_MARK = 'value=' ; //
\91å
\95¶
\8e\9a\8f¬
\95¶
\8e\9a\82Î
\82ç
\82Î
\82ç
\82È
\82±
\82Æ
\82É
\92\8d\88Ó
2088 NAME_MARK = 'name=' ; //
\91å
\95¶
\8e\9a\8f¬
\95¶
\8e\9a\82Î
\82ç
\82Î
\82ç
\82È
\82±
\82Æ
\82É
\92\8d\88Ó
2089 IGNORE_NAMES : array[0..6] of String =
2090 ('subject', 'from', 'mail', 'message', 'bbs', 'time', 'key');
2092 tmp, line, name, value, lname : String;
2093 pos, pose, i : Integer;
2095 tmp := AnsiLowerCase(Rawtext);
2096 pos := AnsiPos(INPUT_MARK, tmp);
2097 while (pos > 0 ) do begin
2098 tmp := Copy(Rawtext, pos + Length(INPUT_MARK), Length(tmp));
2099 Delete(Rawtext, 1, pos+ Length(INPUT_MARK) - 1);
2100 pose := AnsiPos('>', tmp);
2101 // name=xxx value=yyy
\82ª
\90Ø
\82è
\8fo
\82³
\82ê
\82é
2102 line := Copy(tmp, 1, pose - 1);
2105 pos := AnsiPos(NAME_MARK, tmp);
2106 if (pos > 0) then begin
2107 name := Copy(Rawtext, pos + Length(NAME_MARK), Length(line));
2108 //
\94¼
\8ap"
\82Å
\8en
\82Ü
\82Á
\82Ä
\82¢
\82é
\82©
2109 if AnsiPos('"', name) = 1 then begin
2110 //
\94¼
\8ap"
\82Ü
\82Å
\82ð
\83R
\83s
\81[
2112 pose := AnsiPos('"', name);
2113 if (pose > 0) then begin
2114 Delete(name, pose, Length(name));
2116 pose := AnsiPos(' ', name);
2117 if (pose > 0) then begin
2118 Delete(name, pose, Length(name));
2122 pose := AnsiPos(' ', name);
2123 if (pose > 0) then begin
2124 Delete(name, pose, Length(name));
2128 lname := AnsiLowerCase(name);
2129 for i := 0 to Length(IGNORE_NAMES) do begin
2130 if lname = IGNORE_NAMES[i] then begin
2135 pos := AnsiPos(VALUE_MARK, tmp);
2136 if (name <> '') and (pos > 0) then begin
2137 value := Copy(Rawtext, pos + Length(VALUE_MARK), Length(line));
2138 //
\94¼
\8ap"
\82Å
\8en
\82Ü
\82Á
\82Ä
\82¢
\82é
\82©
2139 if AnsiPos('"', value) = 1 then begin
2140 //
\94¼
\8ap"
\82Ü
\82Å
\82ð
\83R
\83s
\81[
2141 Delete(value, 1, 1);
2142 pose := AnsiPos('"', value);
2143 if (pose > 0) then begin
2144 Delete(value, pose, Length(value));
2146 pose := AnsiPos(' ', value);
2147 if (pose > 0) then begin
2148 Delete(value, pose, Length(value));
2152 pose := AnsiPos(' ', value);
2153 if (pose > 0) then begin
2154 Delete(value, pose, Length(name));
2158 if (name <> '') then begin
2159 ABoard.Cookie := ABoard.Cookie + name + '=' + value + '; ';
2162 Delete(tmp, 1, Length(line));
2163 Delete(Rawtext, 1, Length(line));
2164 pos := AnsiPos(INPUT_MARK, tmp);
2168 //!
\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
2169 procedure TEditorForm.UpdateSambaActionUpdate(Sender: TObject);
2171 UpdateSambaAction.Enabled := FSambaTimer.Enabled;
2174 //!
\83T
\83\93\83o
\8dX
\90V
\83A
\83N
\83V
\83\87\83\93
2175 procedure TEditorForm.UpdateSambaActionExecute(Sender: TObject);
2180 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
2181 input := ZenToHan(input);
2182 if GikoSys.IsNumeric(input) then begin
2183 FSambaTimer.UpdateSambaSetting(StrToInt(input));
2185 //
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81ASamba
\83^
\83C
\83}
\81[
\82ð
\8dX
\90V
\82·
\82é
2186 for i := 0 to Screen.FormCount - 1 do begin
2187 if Screen.Forms[i] is TEditorForm then begin
2188 TEditorForm(Screen.Forms[i]).FSambaTimer.Update;
2189 TEditorForm(Screen.Forms[i]).UpdateSambaStatus;
2193 ShowMessage('
\90\94\92l
\82ð
\93ü
\97Í
\82µ
\82Ä
\82
\82¾
\82³
\82¢');
2194 UpdateSambaActionExecute(Sender);
2199 procedure TEditorForm.UpdateSambaStatus;
2201 if (FSambaTimer.Enabled) then begin
2202 StatusBar.Panels[2].Text
2203 := 'Samba24
\8bK
\92è
\92l' + IntToStr(FSambaTimer.SambaInterval);
2207 procedure TEditorForm.InputAssistActionExecute(Sender: TObject);
2213 TextWidth, ItemWidth, tmpWidth, EditW, EditT: Integer;
2215 if FInputAssistKey = '' then Exit;
2217 InputAssistPopupMenu.Items.Clear;
2219 if (FResistWords = nil) then begin
2220 FResistWords := TStringList.Create;
2225 if (GetKeyState( VK_SHIFT ) < 0) then begin
2226 //
\83V
\83t
\83g
\82ª
\89\9f\82³
\82ê
\82Ä
\82¢
\82ê
\82Î
\81A
\83L
\81[
\82Å
\8en
\82Ü
\82é
\83J
\83e
\83S
\83\8a
2228 InputAssistDM.GetStartWithCategoryResistWords(
2229 FInputAssistKey, FResistWords);
2231 //
\83V
\83t
\83g
\82ª
\96³
\82¢
\82Ì
\82Å
\81A
\83L
\81[
\82Å
\8en
\82Ü
\82é
\83L
\81[
2233 InputAssistDM.GetStartWithKeyResistWords(
2234 FInputAssistKey, FResistWords);
2236 Bitmap := TBitmap.Create;
2238 if (FUseUC = True) then
2239 Bitmap.Canvas.Font.Assign(BodyEditUC.Font)
2241 Bitmap.Canvas.Font.Assign(BodyEdit.Font);
2242 //
\83}
\81[
\83W
\83\935px
2243 TextWidth := Bitmap.Canvas.TextWidth(FInputAssistKey) + 5;
2245 for i := 0 to count - 1 do begin
2246 item := TMenuItem.Create(nil);
2247 item.Break := mbNone;
2248 item.Caption := FResistWords[i];
2250 item.OnClick := InputAssistMenuClick;
2251 InputAssistPopupMenu.Items.Add(item);
2253 tmpWidth := Bitmap.Canvas.TextWidth(Item.Caption);
2254 if (tmpWidth > ItemWidth) then begin
2255 ItemWidth := tmpWidth;
2262 if (count > 0) then begin
2263 if (FUseUC = True) then begin
2264 EditW := BodyEditUC.Width;
2265 EditT := BodyEditUC.Top;
2267 EditW := BodyEdit.Width;
2268 EditT := BodyEdit.Top;
2271 point.X := point.X + Self.Left + (Self.Width - EditW) div 2;
2272 point.Y := point.Y + Self.Top + (Self.Height - Self.ClientHeight);
2274 if Screen.DesktopWidth >
2275 (point.X + TextWidth + ItemWidth) then begin
2276 InputAssistPopupMenu.Popup(
2277 point.X + TextWidth,
2278 point.Y + EditorPage.Top + EditorPage.TabHeight + EditT);
2280 InputAssistPopupMenu.Popup(
2281 point.X - TextWidth - ItemWidth,
2282 point.Y + EditorPage.Top + EditorPage.TabHeight + EditT);
2287 procedure TEditorForm.InputAssistMenuClick(Sender: TObject);
2293 if not (Sender is TMenuItem) then Exit;
2295 if (FResistWords <> nil) then begin
2296 if (FUseUC = True) then
2297 EditHandle := BodyEditUC.Handle
2299 EditHandle := BodyEdit.Handle;
2302 TResistWord(FResistWords.Objects[TMenuItem(Sender).Tag]).GetText;
2306 IMC := ImmGetContext(EditHandle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
2308 ImmNotifyIME(IMC, NI_COMPOSITIONSTR, CPS_CANCEL, 0);
2310 ImmReleaseContext(EditHandle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
2314 FInputAssistKey := '';
2316 if (FUseUC = True) then
2317 BodyEditUC.InsertText(text)
2319 InsertText(BodyEdit, text);
2322 //! TMemo
\82Ì
\83J
\81[
\83\
\83\8b\88Ê
\92u
\82É
\95¶
\8e\9a\97ñ
\91}
\93ü
2323 procedure TEditorForm.InsertText(Memo: TMemo; Text: String);
2325 line, sel, pos: Integer;
2326 left, right : String;
2328 Memo.Lines.BeginUpdate;
2329 line := SendMessage(Memo.Handle,EM_LINEFROMCHAR,-1,0); //
\8ds
2330 sel := Memo.SelStart;
2331 pos := sel - SendMessage(Memo.Handle, EM_LINEINDEX, -1, 0); //
\8c\85
2332 if (pos > 0) then begin
2333 left := Copy(Memo.Lines[line], 0, pos);
2337 right := Copy(Memo.Lines[line], pos + 1, Length(Memo.Lines[line]));
2338 Memo.Lines.Strings[line] := left + Text + right;
2339 Memo.Lines.EndUpdate;
2340 //
\81@
\83L
\83\83\83\8c\83b
\83g
\82Ì
\88Ê
\92u
\82ð
\8dX
\90V
\82·
\82é
2341 Memo.SelStart := sel + Length(text);
2342 //
\83L
\83\83\83\8c\83b
\83g
\82Ì
\88Ê
\92u
\82Ü
\82Å
\83X
\83N
\83\8d\81[
\83\8b
2343 Memo.Perform(EM_SCROLLCARET, 0, 0);
2347 procedure TEditorForm.ApplicationEvents1Message(var Msg: tagMSG;
2348 var Handled: Boolean);
2356 if (Self.Active) then begin
2358 //
\83L
\81[
\89\9f\89º
\82Ì
\82Ý
\8eó
\82¯
\8eæ
\82é
2361 //
\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é
2362 if (EditorPage.ActivePageIndex = 0)
2363 and (GetKeyState( VK_CONTROL ) < 0) then begin
2364 wmMsg.Msg := Msg.message;
2365 wmMsg.CharCode := Word(Msg.wParam);
2366 wmMsg.KeyData := Msg.lParam;
2367 if (wmMsg.CharCode = 229) and (wmMsg.KeyData = 3735553) then begin
2368 if (FUseUC = True) then
2369 EditHandle := BodyEditUC.Handle
2371 EditHandle := BodyEdit.Handle;
2372 IMC := ImmGetContext(EditHandle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
2373 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
2374 if (Len > 0) then begin
2375 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
2376 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
2377 SetLength(Str, Len);
2378 FInputAssistKey := Str;
2379 InputAssistActionExecute(nil);
2382 ImmReleaseContext(EditHandle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
2391 procedure TEditorForm.ShowInputAssistFormExecute(Sender: TObject);
2393 form : TInputAssistForm;
2395 form := TInputAssistForm.Create(nil);
2397 if TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
2398 SetWindowPos(form.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2400 form.SetUpFromEditor;
2401 if (form.ShowModal = mrOk) then begin
2402 if (FUseUC = True) then
2403 BodyEditUC.InsertText(form.GetInsertText)
2405 InsertText(BodyEdit, form.GetInsertText);
2411 //! Cookie
\8fî
\95ñ
\8dí
\8f\9c
2412 procedure TEditorForm.ReleaseCookieActionExecute(Sender: TObject);
2416 //
\83X
\83\8c\83b
\83h
\82ª
\96³
\82¢
\81@
\83X
\83\8c\97§
\82Ä
\82Ì
\82Æ
\82«
\82ÍFBoard
\82ð
\92¼
\90Ú
\8eg
\82¤
2419 //
\83N
\83b
\83L
\81[
\82Ì
\8fî
\95ñ
\82ð
\8eÌ
\82Ä
\82é
2423 // 0
\82É
\8aª
\82«
\96ß
\82·
2426 //!
\94Â
\8fî
\95ñ
\8eæ
\93¾Update
\83C
\83x
\83\93\83g
2427 procedure TEditorForm.GetSETTINGTXTActionUpdate(Sender: TObject);
2429 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
2430 GetSETTINGTXTAction.Enabled := not FWork;
2432 //!
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾Update
\83C
\83x
\83\93\83g
2433 procedure TEditorForm.GetHeadTXTActionUpdate(Sender: TObject);
2435 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
2436 GetSETTINGTXTAction.Enabled := not FWork;
2439 //! Samba
\83^
\83C
\83}
\81[
\83C
\83x
\83\93\83g
2440 procedure TEditorForm.SambaTimer(Sender: TObject);
2443 if FSambaTimer.WriteDeta = ZERO_DATE then
2444 StatusBar.Panels[1].Text := '
\8f\89\8f\91'
2446 FNow := IncMilliSecond(FNow, 500);
2447 StatusBar.Panels[1].Text :=
2448 Format('%8.0f
\95b
\8co
\89ß', [SecondSpan(FNow, FSambaTimer.WriteDeta)]);
2452 \brief
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82Æ
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
2454 procedure TEditorForm.SetWindowRect;
2456 wp: TWindowPlacement;
2464 //
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\90Ý
\92è
2465 wp.length := sizeof(wp);
2466 wp.rcNormalPosition.Top := GikoSys.Setting.EditWindowTop;
2467 wp.rcNormalPosition.Left := GikoSys.Setting.EditWindowLeft;
2469 wp.rcNormalPosition.Bottom := GikoSys.Setting.EditWindowTop + GikoSys.Setting.EditWindowHeight;
2470 wp.rcNormalPosition.Right := GikoSys.Setting.EditWindowLeft + GikoSys.Setting.EditWindowWidth;
2471 wp.showCmd := SW_HIDE;
2472 SetWindowPlacement(Handle, @wp);
2474 if GikoSys.Setting.EditWindowMax then begin
2475 WindowState := wsMaximized;
2478 //
\83E
\83B
\83\93\83h
\83E
\82ª
\89æ
\96Ê
\8aO
\82È
\82ç
\89æ
\96Ê
\93à
\82É
\88Ú
\93®
\82·
\82é
2479 Right := Left + Width;
2480 Bottom := Top + Height;
2483 while (MonCnt < Screen.MonitorCount) do begin
2484 MonR := Screen.Monitors[MonCnt].Left + Screen.Monitors[MonCnt].Width;
2485 MonB := Screen.Monitors[MonCnt].Top + Screen.Monitors[MonCnt].Height;
2487 if ((Left >= Screen.Monitors[MonCnt].Left) and (Left < MonR) and
2488 (Top >= Screen.Monitors[MonCnt].Top) and (Top < MonB) and
2489 (Right > Screen.Monitors[MonCnt].Left) and (Right <= MonR) and
2490 (Bottom > Screen.Monitors[MonCnt].Top) and (Bottom <= MonB)) then begin
2495 MonCnt := MonCnt + 1;
2498 if (MonOk = False) then begin
2503 //
\8c»
\8dÝ
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82ð
\95Û
\91¶
2504 GikoSys.Setting.EditWindowTop := Top + WINDOWMOVE_V; //
\8e\9f\82É
\8aJ
\82
\83E
\83B
\83\93\83h
\83E
\82Í
2505 GikoSys.Setting.EditWindowLeft := Left + WINDOWMOVE_H; //
\81@
\81@
\81@
\89E
\8eÎ
\82ß
\89º
\82É
\82¸
\82ç
\82·
2506 //
\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·
2507 if GikoSys.Setting.EditWindowHeight < 144 then begin
2510 if GikoSys.Setting.EditWindowWidth < 144 then begin
2515 \brief
\8ag
\92£
\83^
\83u
\90Ý
\92è
2517 procedure TEditorForm.SetExtraTab;
2519 SECTION = 'EditorForm';
2523 ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
2525 BoardtopTab.TabVisible := ini.Readbool(SECTION, 'BoardTopTab', False);
2526 BoardTop.Checked := BoardtopTab.TabVisible;
2527 RocalRuleTab.TabVisible := ini.ReadBool(SECTION, 'LocalRuleTab', False);
2528 LocalRule.Checked := RocalRuleTab.TabVisible;
2535 \return
\83\8c\83X
\83G
\83f
\83B
\83^
\82ª
\93\8a\8de
\82µ
\82æ
\82¤
\82Æ
\82µ
\82Ä
\82¢
\82é
\94Â
2537 function TEditorForm.GetBoard : TBoard;
2539 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ªnull
\82Ì
\8e\9e\82ÍFBoard
2540 if FThreadItem = nil then begin
2543 Result := FThreadItem.ParentBoard;
2547 \brief GikoForm
\82É
\83\81\83b
\83Z
\81[
\83W
\82ð
\92Ç
\89Á
\82·
\82é
2548 \param icon
\83\81\83b
\83Z
\81[
\83W
\82É
\82Â
\82
\83A
\83C
\83R
\83\93
2550 procedure TEditorForm.AddFormMessageNew(icon: TGikoMessageIcon);
2552 if FThreadItem = nil then begin
2553 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, icon)
2555 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, icon);
2560 \brief
\83\8d\81[
\83J
\83\8bfusiana
\83g
\83\89\83b
\83v
2561 \return true:
\91\97\90M
\92\86\8e~ false:
\91\97\90M
2563 function TEditorForm.isLocalFusianaTrap: Boolean;
2568 if GikoSys.Setting.LocalTrapAtt then begin
2569 Namae := THTMLCreate.RepHtml(NameComboBox.Text);
2570 if (LFusianaGet(Namae)) or (Namae = '
\8eR
\8dè
\8fÂ') then begin
2571 if FusianaMsgBox = IDNO then begin
2578 \brief
\83\8a\83\82\81[
\83gfusiana
\83g
\83\89\83b
\83v
2579 \return true:
\91\97\90M
\92\86\8e~ false:
\91\97\90M
2581 function TEditorForm.isRemoteFusianaTrap: Boolean;
2589 Namae := THTMLCreate.RepHtml(NameComboBox.Text);
2590 if (GikoSys.Setting.RemoteTrapAtt) and (Length(Namae) = 0) then begin
2593 if Board = nil then Exit;
2595 if not FileExists(Board.GetSETTINGTXTFileName) then begin
2596 //Setting.txt
\82ª
\82È
\82©
\82Á
\82½
\82ç
\8eæ
\93¾
2597 //
\8eI
\82É
\95\89\89×
\82ª
\82©
\82©
\82è
\82»
\82¤...
2599 GetSETTINGTXTAction.Execute;
2605 if FileExists(Board.GetSETTINGTXTFileName) then begin
2606 body := TStringList.Create;
2608 body.LoadFromFile(Board.GetSETTINGTXTFileName);
2609 Remote := GetFusianaName(body, Board);
2615 if LFusianaGet(Remote) then begin
2616 if FusianaMsgBox = IDNO then begin
2623 \brief Header
\95¶
\8e\9a\97ñ
\8eæ
\93¾
2624 \param ACOOKIE Cookie
2629 \return Header
\95¶
\8e\9a\97ñ
2631 function TEditorForm.getHeaderStr(const ACOOKIE: string; const SPID : string;
2632 const PON : string; const HAP : string; Board : TBoard) : string;
2637 Result := Result + 'SPID=' + SPID + '; ';
2639 Result := Result + 'PON=' + PON + '; ';
2641 //
\83z
\83X
\83g
\82ª2ch
\82Å
\81ABe
\82ÉLogin
\82µ
\82Ä
\82¢
\82ê
\82ÎBE
\82Ì
\83f
\81[
\83^
\82ð
\91\97\82é
2642 //GikoSys.ParseURI( URL, Protocol,Host, Path, Document, Port, Bookmark );
2643 //if GikoSys.Is2chHost(Host) and GikoSys.Setting.BeLogin then
2644 if (Board.Is2ch) then begin
2645 //
\8cÅ
\92è
\82Ì
\83N
\83b
\83L
\81[
\82ª
\82 \82ê
\82Î
\90H
\82í
\82¹
\82é
2646 if Length(GikoSys.Setting.FixedCookie) > 0 then begin
2647 //
\83z
\83X
\83g
\82ª2ch
\82Ì
\8fê
\8d\87\81C
\8cÅ
\92è
\82Ì
\83N
\83b
\83L
\81[
\82ð
\90H
\82í
\82¹
\82é
2648 Result := Result + GikoSys.Setting.FixedCookie + '; ';
2650 if (GikoSys.Belib.Connected) then begin
2651 Result := Result + 'MDMD=' + GikoSys.Belib.MDMD + '; '
2652 + 'DMDM=' + GikoSys.Belib.DMDM + '; ';
2656 Result := 'Cookie: ' + Result + 'NAME=' + NameComboBox.Text + '; MAIL=' + MailComboBox.Text;
2659 Result := Result + '; HAP=' + HAP + '; ';
2664 \brief fusiana
\8cx
\8d\90\83_
\83C
\83A
\83\8d\83O
2665 \return IDYES
\8f\91\82«
\8d\9e\82Þ IDNO
\92\86\8e~
2667 function TEditorForm.FusianaMsgBox: Integer;
2669 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 +
2670 '
\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' +
2671 #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';
2673 Result := MsgBox(Handle, MSG_FUSIANA, '
\8fî
\95ñ',
2674 MB_YESNO or MB_ICONQUESTION);
2677 \brief
\98A
\93\8a\83\82\81[
\83hON/OFF
\90Ø
\82è
\91Ö
\82¦
2679 procedure TEditorForm.ContinueModeActionExecute(Sender: TObject);
2681 ContinueModeAction.Checked := not ContinueModeAction.Checked;
2684 \brief
\98A
\93\8a\83\82\81[
\83h
\8dX
\90V
\8f\88\97\9d
2686 procedure TEditorForm.ContinueModeActionUpdate(Sender: TObject);
2688 //
\83X
\83\8c\82½
\82Ä
\82Ì
\82Æ
\82«
\82Í
\96³
\8cø
2689 ContinueModeAction.Enabled := FThreadItem <> nil;
2692 \brief
\8f\91\82«
\8d\9e\82Þ
\94Â/
\83X
\83\8c\83b
\83h
\82ð
\95\
\8e¦
\82·
\82é
2694 procedure TEditorForm.OpenSendTargetActionExecute(Sender: TObject);
2696 if (FThreadItem <> nil) then begin
2697 //
\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É
2698 //
\91O
\96Ê
\82Å
\8cÅ
\92è
\82·
\82é
2699 if not (fsShowing in Self.FormState) then begin
2700 //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
2701 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2704 //
\83X
\83\8c\83b
\83h
2705 GikoForm.InsertBrowserTab(FThreadItem, True);
2707 if not TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\89ð
\8f\9c
2708 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2714 GikoForm.SelectTreeNode(
2718 procedure TEditorForm.ReloadTargetActionExecute(Sender: TObject);
2720 if (FThreadItem <> nil) then begin
2721 //
\83X
\83\8c\83b
\83h
2722 //
\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É
2723 //
\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é)
2724 if not (fsShowing in Self.FormState) then begin
2725 //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
2726 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2729 GikoForm.DownloadContent(FThreadItem);
2731 if not TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\89ð
\8f\9c
2732 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2738 GikoForm.DownloadList(GetBoard);
2741 //!
\8cë
\94\9a\83`
\83F
\83b
\83N
2742 function TEditorForm.isGobaku: Boolean;
2744 MSG_GOBAKU : string =
2745 '
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é%s
\82Æ
\93\8a\8de
\90æ
\82Ì%s
\82ª
\88Ù
\82È
\82è
\82Ü
\82·
\81B'#13#10 +
2746 '
\82±
\82Ì
\82Ü
\82Ü
\8f\91\82«
\8d\9e\82Ý
\82Ü
\82·
\82©
\81H';
2748 ThreadItem : TThreadItem;
2753 //
\83I
\83v
\83V
\83\87\83\93\97L
\8cø
\82©
\82Â
\83\8c\83X
\91\97\90M
\82Å
\82Ì
\82Ý
\97L
\8cø
2754 if (GikoSys.Setting.UseGobakuCheck) then begin
2755 //
\83\8c\83X
\91\97\90M
2756 if (FThreadItem <> nil) then begin
2757 ThreadItem := GikoForm.GetActiveContent(False);
2758 if (ThreadItem <> nil) then begin
2759 if (FThreadItem <> ThreadItem) then begin
2760 msg := Format(MSG_GOBAKU, ['
\83X
\83\8c\83b
\83h', '
\83X
\83\8c\83b
\83h']);
2761 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2764 if GikoForm.ActiveList is TBBS then begin
2765 if TBBS(GikoForm.ActiveList) <> FThreadItem.ParentBoard.ParentCategory.ParenTBBS then begin
2766 msg := Format(MSG_GOBAKU, ['BBS', '
\83X
\83\8c\83b
\83h
\82Ì
\8f\8a\91®
\82·
\82éBBS']);
2767 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2769 end else if GikoForm.ActiveList is TCategory then begin
2770 if TCategory(GikoForm.ActiveList).FindThreadFromURL(FThreadItem.URL) = nil then begin
2771 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']);
2772 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2774 end else if GikoForm.ActiveList is TBoard then begin
2775 if TBoard(GikoForm.ActiveList) <> FThreadItem.ParentBoard then begin
2776 msg := Format(MSG_GOBAKU, ['
\94Â', '
\83X
\83\8c\83b
\83h
\82Ì
\8f\8a\91®
\82·
\82é
\94Â']);
2777 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2782 //
\83X
\83\8c\82½
\82Ä
2783 if GikoForm.ActiveList is TBBS then begin
2784 if TBBS(GikoForm.ActiveList) <> FBoard.ParentCategory.ParenTBBS then begin
2785 msg := Format(MSG_GOBAKU, ['BBS', '
\94Â
\82Ì
\8f\8a\91®
\82·
\82éBBS']);
2786 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2788 end else if GikoForm.ActiveList is TCategory then begin
2789 if TCategory(GikoForm.ActiveList).FindBoardFromURL(FBoard.URL) = nil then begin
2790 msg := Format(MSG_GOBAKU, ['
\83J
\83e
\83S
\83\8a', '
\94Â
\82Ì
\8f\8a\91®
\82·
\82é
\83J
\83e
\83S
\83\8a']);
2791 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2793 end else if GikoForm.ActiveList is TBoard then begin
2794 if TBoard(GikoForm.ActiveList) <> FBoard then begin
2795 msg := Format(MSG_GOBAKU, ['
\94Â', '
\94Â']);
2796 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2803 procedure TEditorForm.SetFocusEdit;
2805 if (FUseUC = True) then
2811 procedure TEditorForm.SetTextEdit(TextSrc: String);
2813 if (FUseUC = True) then
2814 BodyEditUC.Text := TextSrc
2816 BodyEdit.Text := TextSrc;