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);
1258 if (not ContinueModeAction.Enabled) or (not ContinueModeAction.Checked) then
1260 end else if State = gdsError then begin
1261 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmSureError), nil, gmiNG);
1262 end else if State = gdsAbort then begin
1263 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiNG);
1267 state := TGikoDownloadState( FThreadItem.ParentBoard.BoardPlugIn.WriteThread(
1268 DWORD( FThreadItem ), NameComboBox.Text, MailComboBox.Text, body ) );
1270 if state = gdsComplete then begin
1271 GikoForm.PlaySound('ResEnd');
1273 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, gmiOK);
1275 if (not ContinueModeAction.Enabled) or (not ContinueModeAction.Checked) then
1277 end else if State = gdsError then begin
1278 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmResError), nil, gmiOK);
1279 end else if State = gdsAbort then begin
1280 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
1284 if not FSambaTimer.Enabled then begin
1285 if CompareDateTime(Board.Expires ,Now) <= 0 then begin
1290 //
\96`
\8c¯
\82Ì
\8f\91\83\8c\83x
\83\8b\96ß
\82é
\96â
\91è
\91Î
\89\9e
1291 if (Board.Is2ch) and (AnsiPos('HAP=', Board.Cookie)>0) then begin
1294 Send(Board.Cookie, Board.SPID, Board.PON, True);
1296 if not FSambaTimer.CheckSambaTime(Now()) then begin
1297 rc := GikoUtil.MsgBox(Handle,
1298 '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
1299 + '
\91\97\90M
\82ð
\92\86\8e~
\82µ
\82Ü
\82·
\82©
\81H' + #13#10
1300 + '(
\81u
\82¢
\82¢
\82¦
\81v
\82¾
\82Æ
\91\97\90M
\82µ
\82Ü
\82·)', TITLE_SAMBA,
1301 MB_YESNO or MB_ICONQUESTION);
1302 if rc = IDYES then begin
1306 if rc = IDNO then begin
1307 rc2 := GikoUtil.MsgBox(Handle,
1308 '
\96{
\93\96\82É
\91\97\90M
\82µ
\82Ü
\82·
\82©
\81H',
1310 MB_YESNO or MB_ICONQUESTION);
1311 if rc2 = IDNO then begin
1317 if CompareDateTime(Board.Expires ,Now) <= 0 then begin
1322 //
\96`
\8c¯
\82Ì
\8f\91\83\8c\83x
\83\8b\96ß
\82é
\96â
\91è
\91Î
\89\9e
1323 if (Board.Is2ch) and (AnsiPos('HAP=', Board.Cookie)>0) then begin
1326 Send(Board.Cookie, Board.SPID, Board.PON, True);
1331 if FSambaTimer.Enabled then begin
1332 FNow := FSambaTimer.Update;
1337 procedure TEditorForm.SaveActionExecute(Sender: TObject);
1342 procedure TEditorForm.CloseActionExecute(Sender: TObject);
1347 procedure TEditorForm.UndoActionExecute(Sender: TObject);
1349 SendMessage(GetActiveControlHandle, WM_UNDO, 0, 0);
1352 procedure TEditorForm.CutActionExecute(Sender: TObject);
1354 SendMessage(GetActiveControlHandle, WM_CUT, 0, 0);
1357 procedure TEditorForm.CopyActionExecute(Sender: TObject);
1359 SendMessage(GetActiveControlHandle, WM_COPY, 0, 0);
1362 procedure TEditorForm.PasteActionExecute(Sender: TObject);
1364 SendMessage(GetActiveControlHandle, WM_PASTE, 0, 0);
1367 procedure TEditorForm.SelectAllActionExecute(Sender: TObject);
1369 SendMessage(GetActiveControlHandle, EM_SETSEL, 0, GetWindowTextLength(GetActiveControlHandle));
1372 procedure TEditorForm.TopActionExecute(Sender: TObject); //
\83E
\83B
\83\93\83h
\83E
\8dÅ
\91O
\96Ê(Stay)
\83{
\83^
\83\93\82Ì
\8f\88\97\9d
1374 if not (fsShowing in Self.FormState) then begin
1375 if TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
1376 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
1377 GikoSys.Setting.EditWindowStay := true;
1378 end else begin //
\83X
\83e
\83C
\8fó
\91Ô
\89ð
\8f\9c
1379 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
1380 GikoSys.Setting.EditWindowStay := false;
1382 //
\83X
\83e
\83C
\8fó
\91Ô
\82Ì
\95Û
\91¶
1383 //GikoSys.Setting.EditWindowStay := FormStyle = fsStayOnTop;
1387 procedure TEditorForm.AbortActionExecute(Sender: TObject);
1392 procedure TEditorForm.SendActionUpdate(Sender: TObject);
1394 SendAction.Enabled := not FWork;
1397 procedure TEditorForm.SaveActionUpdate(Sender: TObject);
1399 SaveAction.Enabled := False;
1402 procedure TEditorForm.CloseActionUpdate(Sender: TObject);
1404 CloseAction.Enabled := not FWork;
1407 procedure TEditorForm.UndoActionUpdate(Sender: TObject);
1409 UndoAction.Enabled := (GetActiveControlHandle <> 0)
1410 and (SendMessage(GetActiveControlHandle, EM_CANUNDO, 0, 0) <> 0)
1414 procedure TEditorForm.CutActionUpdate(Sender: TObject);
1416 Selection: TSelection;
1419 AHandle := GetActiveControlHandle;
1420 SendMessage(AHandle, EM_GETSEL, Longint(@Selection.StartPos), Longint(@Selection.EndPos));
1421 CutAction.Enabled := (AHandle <> 0)
1422 and ((Selection.EndPos - Selection.StartPos) <> 0)
1426 procedure TEditorForm.CopyActionUpdate(Sender: TObject);
1428 Selection: TSelection;
1431 AHandle := GetActiveControlHandle;
1432 SendMessage(AHandle, EM_GETSEL, Longint(@Selection.StartPos), Longint(@Selection.EndPos));
1433 CopyAction.Enabled := (AHandle <> 0)
1434 and ((Selection.EndPos - Selection.StartPos) <> 0)
1438 procedure TEditorForm.PasteActionUpdate(Sender: TObject);
1440 PasteAction.Enabled := (GetActiveControlHandle <> 0)
1441 and (Clipboard.HasFormat(CF_TEXT))
1445 procedure TEditorForm.TopActionUpdate(Sender: TObject);
1447 TopAction.Enabled := not FWork;
1450 procedure TEditorForm.SageCheckBoxClick(Sender: TObject);
1452 if SageCheckBox.Checked then begin
1453 if AnsiPos('sage', MailComboBox.Text) = 0 then
1454 MailComboBox.Text := 'sage' + MailComboBox.Text;
1456 if AnsiPos('sage', MailComboBox.Text) <> 0 then
1457 MailComboBox.Text := StringReplace(MailComboBox.Text, 'sage', '', [rfReplaceAll]);
1461 procedure TEditorForm.MailComboBoxChange(Sender: TObject);
1463 if AnsiPos('sage', MailComboBox.Text) = 0 then
1464 SageCheckBox.Checked := False
1466 SageCheckBox.Checked := True;
1469 procedure TEditorForm.IdLogDebugReceive(ASender: TIdConnectionIntercept;
1472 StringStream: TStringStream;
1474 StringStream := TStringStream.Create('');
1476 StringStream.CopyFrom(AStream, AStream.Size);
1477 FDebugStrReceive := FDebugStrReceive + StringStream.DataString;
1483 procedure TEditorForm.IdLogDebugSend(ASender: TIdConnectionIntercept;
1486 StringStream: TStringStream;
1488 StringStream := TStringStream.Create('');
1490 StringStream.CopyFrom(AStream, AStream.Size);
1491 FDebugStrSend := FDebugStrSend + StringStream.DataString;
1497 procedure TEditorForm.TransActionExecute(Sender: TObject);
1499 AlphaBlend := TransAction.Checked;
1500 //
\94¼
\93§
\96¾
\8fó
\91Ô
\82Ì
\95Û
\91¶
1501 GikoSys.Setting.EditWindowTranslucent := TransAction.Checked;
1504 procedure TEditorForm.TransActionUpdate(Sender: TObject);
1506 TransAction.Enabled := not FWork;
1508 //StatusBar
\82ÌPanels[0]
\82Ì
\95\9d\82ð
\89Â
\95Ï
\81B
\8ec
\82è
\82ð
\8cÅ
\92è
\82É
\82·
\82é
1509 procedure TEditorForm.StatusBarResize(Sender: TObject);
1511 StatusBar.Panels[0].Width := StatusBar.Width
1512 - StatusBar.Panels[1].Width - StatusBar.Panels[2].Width;
1516 //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Þ
1517 procedure TEditorForm.FormActivate(Sender: TObject);
1519 if ( FSambaTimer.Enabled ) and ( FThreadItem <> nil ) then
1521 FNow := FSambaTimer.Update;
1523 if GikoSys.Setting.GestureEnabled then begin
1524 GikoSys.Setting.Gestures.ClearGesture;
1525 GikoSys.Setting.Gestures.LoadGesture(
1526 GikoSys.Setting.GetGestureFileName, ActionList );
1527 MouseGesture.UnHook;
1528 MouseGesture.OnGestureStart := OnGestureStart;
1529 MouseGesture.OnGestureMove := OnGestureMove;
1530 MouseGesture.OnGestureEnd := OnGestureEnd;
1531 MouseGesture.SetHook( Handle );
1534 procedure TEditorForm.FormCloseQuery(Sender: TObject;
1535 var CanClose: Boolean);
1537 CanClose := not FWork;
1540 procedure TEditorForm.QuotePasteActionExecute(Sender: TObject);
1547 quote := GikoSys.GetOEIndentChar;
1549 if (FUseUC = True) then begin
1550 BodyEditUC.QuotePaste(quote);
1552 s := TStringList.Create;
1554 s.Text := Clipboard.AsText;
1556 for i := s.Count - 1 downto 0 do
1557 s[ i ] := quote + s[ i ];
1559 BodyEdit.SelText := s.Text;
1566 procedure TEditorForm.SpaceToNBSPActionExecute(Sender: TObject);
1568 GikoSys.Setting.SpaceToNBSP := SpaceToNBSPAction.Checked;
1569 if EditorPage.ActivePage = PreviewTab then
1573 procedure TEditorForm.AmpToCharRefActionExecute(Sender: TObject);
1575 GikoSys.Setting.AmpToCharRef := AmpToCharRefAction.Checked;
1576 if EditorPage.ActivePage = PreviewTab then
1580 procedure TEditorForm.BoardTopClick(Sender: TObject);
1584 ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
1586 BoardtopTab.TabVisible := BoardTop.Checked;
1587 ini.WriteBool('EditorForm', 'BoardTopTab', BoardtopTab.TabVisible);
1595 procedure TEditorForm.GetSETTINGTXTActionExecute(Sender: TObject);
1597 memStream: TMemoryStream;
1598 URL, RefURL: string;
1599 settingBody: TStringList;
1602 if not FWork then begin
1605 tmpBoard := GetBoard;
1606 if tmpBoard <> nil then begin
1608 RefURL := tmpBoard.URL;
1609 if RefURL[Length(RefURL)] <> '/' then
1610 URL := RefURL + '/' + 'SETTING.TXT'
1612 URL := RefURL + 'SETTING.TXT';
1613 Screen.Cursor := crHourGlass;
1614 memStream := TMemoryStream.Create;
1617 StatusBar.Panels[0].Text := 'SETTING.TXT
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86';
1618 GetWebData(URL, RefURL, tmpBoard.SETTINGTXTTime, memStream);
1619 if( Indy.ResponseCode = 200 ) then begin
1620 settingBody := TStringList.Create;
1622 memStream.Seek(0, soFromBeginning);
1623 settingBody.LoadFromStream(memStream);
1624 settingBody.SaveToFile(tmpBoard.GetSETTINGTXTFileName);
1625 tmpBoard.SETTINGTXTTime := Indy.Response.LastModified;
1626 tmpBoard.IsSETTINGTXT := true;
1627 tmpBoard.TitlePictureURL := GetTitlePictureURL(settingBody, tmpBoard);
1628 tmpBoard.Modified := true;
1632 StatusBar.Panels[0].Text := 'SETTING.TXT
\8eæ
\93¾
\8a®
\97¹(' + IntToStr(Indy.ResponseCode) + ')';
1635 on E: EIdException do begin
1636 if( AnsiPos('304', E.Message) > 0 ) then
1637 StatusBar.Panels[0].Text := 'SETTING.TXT
\8dX
\90V
\96³
\82µ(' + IntToStr(Indy.ResponseCode) + ')'
1639 StatusBar.Panels[0].Text := 'SETTING.TXT
\8eæ
\93¾
\83G
\83\89\81[(' + IntToStr(Indy.ResponseCode) + ')';
1644 Screen.Cursor := crDefault;
1646 ShowBoardInformation(tmpBoard, BoardInformationMemo);
1652 procedure TEditorForm.ShowBoardInformation(ABoard: TBoard; AMemo: TMemo);
1655 UCType: Integer; // 0:
\95s
\96¾
\81A1:
\91Î
\89\9e\81A-1:
\94ñ
\91Î
\89\9e
1659 AMemo.Lines.Add('[SETTING.TXT]');
1660 if ABoard.IsSETTINGTXT then begin
1661 if FileExists(ABoard.GetSETTINGTXTFileName) then begin
1662 AMemo.Lines.Add(DateTimeToStr(ABoard.SETTINGTXTTime) + '
\8dX
\90V');
1663 body := TStringList.Create;
1665 body.LoadFromFile(ABoard.GetSETTINGTXTFileName);
1666 AMemo.Lines.AddStrings(body);
1670 if (Pos('BBS_UNICODE=pass', AMemo.Text) > 0) then
1672 else if (Pos('BBS_UNICODE=', AMemo.Text) > 0) then
1675 ABoard.IsSETTINGTXT := false;
1676 ABoard.SETTINGTXTTime := ZERO_DATE;
1677 AMemo.Lines.Add('Local
\82É
\95Û
\91¶
\82³
\82ê
\82½SETTING.TXT
\82ª
\8c©
\82Â
\82©
\82è
\82Ü
\82¹
\82ñ');
1678 AMemo.Lines.Add('
\83\81\83j
\83\85\81[
\82æ
\82è
\8dÄ
\8eæ
\93¾
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
1681 AMemo.Lines.Add('SETTING.TXT
\82ð
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B');
1682 AMemo.Lines.Add('
\83\81\83j
\83\85\81[
\82æ
\82è
\8eæ
\93¾
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
1687 UCInfoPanel.Caption := 'Unicode
\94ñ
\91Î
\89\9e\94Â';
1688 UCInfoPanel.Color := clRed;
1689 UCInfoPanel.Hint := '
\82±
\82Ì
\94Â
\82ÍUnicode
\82Å
\82Ì
\83\8c\83X
\82É
\91Î
\89\9e\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B';
1692 UCInfoPanel.Caption := 'Unicode
\91Î
\89\9e\95s
\96¾';
1693 UCInfoPanel.Color := clBtnFace;
1694 UCInfoPanel.Hint := '
\94Â
\8fî
\95ñ
\82ð
\8eæ
\93¾
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B';
1697 UCInfoPanel.Caption := 'Unicode
\91Î
\89\9e\94Â';
1698 UCInfoPanel.Color := clLime;
1699 UCInfoPanel.Hint := '
\82±
\82Ì
\94Â
\82ÍUnicode
\82Å
\82Ì
\83\8c\83X
\82É
\91Î
\89\9e\82µ
\82Ä
\82¢
\82Ü
\82·
\81B';
1703 function TEditorForm.GetTitlePictureURL(body: TStringList; ABoard: TBoard): string;
1704 //BBS_TITLE_PICTURE=
1711 for i := 0 to body.Count - 1 do begin
1712 if (AnsiPos('BBS_TITLE_PICTURE=', body[i]) > 0) or
1713 (AnsiPos('BBS_FIGUREHEAD=', body[i]) > 0) then begin
1715 Delete(tmp, 1, AnsiPos('=', tmp));
1716 if AnsiPos('../', tmp) > 0 then begin
1717 tmp := CustomStringReplace(tmp, '../', GikoSys.UrlToServer(ABoard.URL));
1725 procedure TEditorForm.GetTitlePictureActionUpdate(Sender: TObject);
1727 if FThreadItem = nil then
1728 GetTitlePictureAction.Enabled := FBoard.IsSETTINGTXT
1730 GetTitlePictureAction.Enabled := FThreadItem.ParentBoard.IsSETTINGTXT;
1732 if GetTitlePictureAction.Enabled Then begin
1733 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
1734 GetTitlePictureAction.Enabled := not FWork;
1738 procedure TEditorForm.GetTitlePictureActionExecute(Sender: TObject);
1740 memStream: TMemoryStream;
1747 memStream := TMemoryStream.Create;
1749 tmpBoard := GetBoard;
1751 if (tmpBoard <> nil) and (tmpBoard.TitlePictureURL <> '') then begin
1752 StatusBar.Panels[0].Text := '
\94Â
\83g
\83b
\83v
\89æ
\91\9c\83_
\83E
\83\93\83\8d\81[
\83h
\92\86';
1753 Screen.Cursor := crHourGlass;
1755 // URL
\82ð
\8ew
\92è
\82µ
\82Ä
\83\81\83\82\83\8a\82É
\93Ç
\82Ý
\8d\9e\82Þ
1756 GetWebData(tmpBoard.TitlePictureURL, tmpBoard.URL,
1757 ZERO_DATE, memStream);
1758 if Indy.ResponseCode = 200 then begin
1759 memStream.SaveToFile(tmpBoard.GetTitlePictureFileName);
1761 tmpBoard.Modified := true;
1763 StatusBar.Panels[0].Text := '
\94Â
\83g
\83b
\83v
\89æ
\91\9c (' + IntToStr(Indy.ResponseCode) + ')';
1770 Screen.Cursor := crDefault;
1774 \brief URL
\82Ì
\83f
\81[
\83^
\82ðstream
\82É
\93Ç
\82Ý
\8d\9e\82Þ
1775 \param URL
\93Ç
\82Ý
\8d\9e\82Þ
\90æ
1776 \param RefURL referer
\82É
\90Ý
\92è
\82·
\82é
1777 \param Modified Modified
\82É
\90Ý
\92è
\82·
\82é
1778 \param stream
\93Ç
\82Ý
\8d\9e\82ñ
\82¾
\83f
\81[
\83^
\82Ì
\95Û
\91¶
\90æ
1780 procedure TEditorForm.GetWebData(const URL: string; const RefURL: string;
1781 Modified: TDateTime; stream: TStream);
1784 Indy.Request.Referer := RefURL;
1785 Indy.Request.LastModified := Modified;
1787 IdAntiFreeze.Active := True;
1789 Indy.Get(URL, stream);
1791 IdAntiFreeze.Active := False;
1795 procedure TEditorForm.ShowTitlePicture();
1800 tmpBoard := GetBoard;
1802 if FileExists(tmpBoard.GetTitlePictureFileName) then begin
1803 TitlePictureBrowser.Navigate(tmpBoard.GetTitlePictureFileName);
1805 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';
1806 SetContent(s, TitlePictureBrowser);
1810 function TEditorForm.GetFusianaName(body: TStringList; ABoard: TBoard): String;
1815 for i := 0 to body.Count - 1 do begin
1816 if (AnsiPos('BBS_NONAME_NAME=', body[i]) > 0) then begin
1818 Delete(tmp, 1, AnsiPos('=', tmp));
1825 procedure TEditorForm.GetHeadTXTActionExecute(Sender: TObject);
1827 URL, RefURL: string;
1828 settingBody: TStringList;
1830 memStream: TMemoryStream;
1832 if not FWork then begin
1835 tmpBoard := GetBoard;
1836 if (tmpBoard <> nil) then begin
1838 RefURL := tmpBoard.URL;
1839 if RefURL[Length(RefURL)] <> '/' then
1840 URL := RefURL + '/' + 'head.txt'
1842 URL := RefURL + 'head.txt';
1844 Screen.Cursor := crHourGlass;
1845 memStream := TMemoryStream.Create;
1847 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';
1849 GetWebData(URL, RefURL, tmpBoard.HEADTXTTime, memStream);
1850 if( Indy.ResponseCode = 200 ) then begin
1851 settingBody := TStringList.Create;
1853 memStream.Seek(0, soFromBeginning);
1854 settingBody.LoadFromStream(memStream);
1855 settingBody.Insert(0, '<HTML lang="ja"><HEAD>');
1856 settingBody.Insert(1, '<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">');
1857 settingBody.Insert(2, '<TITLE>' + tmpBoard.Title + '</TITLE>');
1858 settingBody.Insert(3, '<base href="' + RefURL + '"></HEAD><BODY>');
1859 settingBody.Add('</BODY></HTML>');
1860 settingBody.SaveToFile(tmpBoard.GETHEADTXTFileName);
1861 tmpBoard.HEADTXTTime := Indy.Response.LastModified;
1862 tmpBoard.IsHEADTXT := true;
1863 tmpBoard.Modified := true;
1867 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾
\8a®
\97¹(' + IntToStr(Indy.ResponseCode) + ')';
1870 on E: EIdException do begin
1871 if( AnsiPos('304', E.Message) > 0 ) then
1872 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8dX
\90V
\96³
\82µ(' + IntToStr(Indy.ResponseCode) + ')'
1874 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾
\83G
\83\89\81[(' + IntToStr(Indy.ResponseCode) + ')';
1879 Screen.Cursor := crDefault;
1881 if tmpBoard.IsHEADTXT then begin
1882 ShowBoardHead(tmpboard, LocalEdit);
1890 procedure TEditorForm.CalcCapacityActionExecute(Sender: TObject);
1896 //
\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
1899 if Board.BoardPlugIn <> nil then
1900 body := CustomStringReplace(body, #13#10, '<br>')
1902 body := CustomStringReplace(body, #13#10, ' <br> ');
1903 StatusBar.Panels[0].Text := '
\97e
\97Ê:' + IntToStr(Length(body)) + ' byte';
1906 procedure TEditorForm.LocalRuleClick(Sender: TObject);
1910 ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
1912 RocalRuleTab.TabVisible := LocalRule.Checked;
1913 ini.WriteBool('EditorForm', 'LocalRuleTab', RocalRuleTab.TabVisible);
1920 procedure TEditorForm.FormDeactivate(Sender: TObject);
1922 if GikoSys.Setting.GestureEnabled then begin
1923 GikoSys.Setting.Gestures.ClearGesture;
1924 MouseGesture.UnHook;
1925 MouseGesture.OnGestureStart := nil;
1926 MouseGesture.OnGestureMove := nil;
1927 MouseGesture.OnGestureEnd := nil;
1931 procedure TEditorForm.OnGestureStart(Sender: TObject);
1936 procedure TEditorForm.OnGestureMove(Sender: TObject);
1942 s := MouseGesture.GetGestureStr;
1944 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
1945 if Action <> nil then
1946 ActStr := '
\81i' + Action.Caption + '
\81j';
1947 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
1948 StatusBar.Panels[0].Text := s;
1951 procedure TEditorForm.OnGestureEnd(Sender: TObject);
1956 s := MouseGesture.GetGestureStr;
1958 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
1959 if Action <> nil then
1961 StatusBar.Panels[0].Text := '';
1964 procedure TEditorForm.ShowBoardHead(ABoard: TBoard; AMemo: TMemo);
1969 //http://www.campus.ne.jp/~ishigami/CREATION/TECHNIC/WEBAP-2.htm
1970 WebBrowser1.Navigate(ABoard.GETHEADTXTFileName);
1971 //
\83\8c\83^
\83\8a\83\93\83O
\82ª
\92x
\82·
\82¬
\82ÄTXT
\82É
\88Ú
\82¹
\82È
\82¢
\81B
\82Ê
\82é
\82Ûorz
1972 //
\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
1973 //
\82±
\82ê
\82Å
\82¢
\82¯
\82Ü
\82µ
\82½
\81B
\82 \82è
\82ª
\82Æ
\82¤
\82²
\82´
\82¢
\82Ü
\82µ
\82½
\81B
1974 while (WebBrowser1.ReadyState <> READYSTATE_COMPLETE) and
1975 (WebBrowser1.ReadyState <> READYSTATE_INTERACTIVE) do begin
1976 Application.ProcessMessages;
1981 range := OleVariant(WebBrowser1.Document).body.createTextRange;
1982 LocalEdit.Text := range.text;
1987 procedure TEditorForm.LocalRuleBrowseClick(Sender: TObject);
1997 URL := ABoard.GETHEADTXTFileName;
1998 GikoSys.OpenBrowser(URL, gbtAuto);
2001 procedure TEditorForm.SaveNameMailActionExecute(Sender: TObject);
2003 SaveNameMailAction.Checked := not SaveNameMailAction.Checked;
2004 KotehanCheckBox.Enabled := SaveNameMailAction.Checked;
2007 function TEditorForm.LFusianaGet(const s: String): Boolean;
2009 FUSIANA = 'fusianasan';
2013 i := AnsiPos(FUSIANA, s);
2017 procedure TEditorForm.BeLogInOutEActionExecute(Sender: TObject);
2019 GikoDM.BeLogInOutAction.Execute;
2022 procedure TEditorForm.BeLogInOutEActionUpdate(Sender: TObject);
2024 BeLogInOutEAction.Checked := GikoDM.BeLogInOutAction.Checked;
2025 BeLogInOutEAction.Enabled := GikoDM.BeLogInOutAction.Enabled;
2027 // Cookie
\82Ì
\8eæ
\93¾
2028 procedure TEditorForm.GetCookie(CookieMng: TIdCookieManager; ABoard: TBoard);
2035 Cookie : TIdCookieRFC2109;
2036 curCookies : TStringList;
2038 // 2008.12.14
\96³
\8fð
\8c\8f\83N
\83\8a\83A
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢ by
\82à
\82¶
\82ã
2039 curCookies := TStringList.Create;
2040 curCookies.Delimiter := ';';
2041 curCookies.DelimitedText := ABoard.Cookie;
2043 curCookies.Duplicates := dupIgnore;
2044 ABoard.Cookie := '';
2046 for i := 0 to CookieMng.CookieCollection.Count - 1 do begin
2047 Cookie := CookieMng.CookieCollection.Items[i];
2048 if ( Cookie.CookieName = VAL_PON ) then begin
2049 ABoard.PON := Cookie.Value;
2050 ABoard.Expires := GMTToLocalDateTime(Cookie.Expires);
2051 end else if ( Cookie.CookieName = VAL_SPID ) then begin
2052 ABoard.SPID := Cookie.Value;
2053 ABoard.Expires := GMTToLocalDateTime(Cookie.Expires);
2054 end else if ( Cookie.CookieName = VAL_HAP ) then begin
2055 // 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é
2056 if CompareDateTime(GMTToLocalDateTime(Cookie.Expires) ,Now) > 0 then begin
2057 GikoSys.SetBoukenCookie(Cookie.Value, Cookie.Domain);
2058 //
\96`
\8c¯
\82Ì
\8f\91\82Ì
\95Û
\91¶
2059 GikoSys.Setting.WriteBoukenSettingFile;
2062 if Length( curCookies.Values[ Cookie.CookieName ] ) > 0 then begin
2063 //
\8aù
\91¶
\92l
\82Ì
\95t
\82¯
\91Ö
\82¦
2064 curCookies[curCookies.IndexOfName(Cookie.CookieName)] :=
2065 Cookie.ClientCookie;
2068 curCookies.Add(Cookie.ClientCookie);
2072 for i := 0 to curCookies.Count - 1 do begin
2073 if (curCookies[i] <> '') then begin
2074 ABoard.Cookie := ABoard.Cookie + curCookies[i] + '; ';
2078 CookieMng.CookieCollection.Clear;
2082 //! hidden
\83f
\81[
\83^
\8eæ
\93¾
2083 procedure TEditorForm.GetHiddenParameter(Rawtext: String; ABoard: TBoard);
2085 INPUT_MARK = '<input type=hidden' ; //
\91å
\95¶
\8e\9a\8f¬
\95¶
\8e\9a\82Î
\82ç
\82Î
\82ç
\82È
\82±
\82Æ
\82É
\92\8d\88Ó
2086 VALUE_MARK = 'value=' ; //
\91å
\95¶
\8e\9a\8f¬
\95¶
\8e\9a\82Î
\82ç
\82Î
\82ç
\82È
\82±
\82Æ
\82É
\92\8d\88Ó
2087 NAME_MARK = 'name=' ; //
\91å
\95¶
\8e\9a\8f¬
\95¶
\8e\9a\82Î
\82ç
\82Î
\82ç
\82È
\82±
\82Æ
\82É
\92\8d\88Ó
2088 IGNORE_NAMES : array[0..6] of String =
2089 ('subject', 'from', 'mail', 'message', 'bbs', 'time', 'key');
2091 tmp, line, name, value, lname : String;
2092 pos, pose, i : Integer;
2094 tmp := AnsiLowerCase(Rawtext);
2095 pos := AnsiPos(INPUT_MARK, tmp);
2096 while (pos > 0 ) do begin
2097 tmp := Copy(Rawtext, pos + Length(INPUT_MARK), Length(tmp));
2098 Delete(Rawtext, 1, pos+ Length(INPUT_MARK) - 1);
2099 pose := AnsiPos('>', tmp);
2100 // name=xxx value=yyy
\82ª
\90Ø
\82è
\8fo
\82³
\82ê
\82é
2101 line := Copy(tmp, 1, pose - 1);
2104 pos := AnsiPos(NAME_MARK, tmp);
2105 if (pos > 0) then begin
2106 name := Copy(Rawtext, pos + Length(NAME_MARK), Length(line));
2107 //
\94¼
\8ap"
\82Å
\8en
\82Ü
\82Á
\82Ä
\82¢
\82é
\82©
2108 if AnsiPos('"', name) = 1 then begin
2109 //
\94¼
\8ap"
\82Ü
\82Å
\82ð
\83R
\83s
\81[
2111 pose := AnsiPos('"', name);
2112 if (pose > 0) then begin
2113 Delete(name, pose, Length(name));
2115 pose := AnsiPos(' ', name);
2116 if (pose > 0) then begin
2117 Delete(name, pose, Length(name));
2121 pose := AnsiPos(' ', name);
2122 if (pose > 0) then begin
2123 Delete(name, pose, Length(name));
2127 lname := AnsiLowerCase(name);
2128 for i := 0 to Length(IGNORE_NAMES) do begin
2129 if lname = IGNORE_NAMES[i] then begin
2134 pos := AnsiPos(VALUE_MARK, tmp);
2135 if (name <> '') and (pos > 0) then begin
2136 value := Copy(Rawtext, pos + Length(VALUE_MARK), Length(line));
2137 //
\94¼
\8ap"
\82Å
\8en
\82Ü
\82Á
\82Ä
\82¢
\82é
\82©
2138 if AnsiPos('"', value) = 1 then begin
2139 //
\94¼
\8ap"
\82Ü
\82Å
\82ð
\83R
\83s
\81[
2140 Delete(value, 1, 1);
2141 pose := AnsiPos('"', value);
2142 if (pose > 0) then begin
2143 Delete(value, pose, Length(value));
2145 pose := AnsiPos(' ', value);
2146 if (pose > 0) then begin
2147 Delete(value, pose, Length(value));
2151 pose := AnsiPos(' ', value);
2152 if (pose > 0) then begin
2153 Delete(value, pose, Length(name));
2157 if (name <> '') then begin
2158 ABoard.Cookie := ABoard.Cookie + name + '=' + value + '; ';
2161 Delete(tmp, 1, Length(line));
2162 Delete(Rawtext, 1, Length(line));
2163 pos := AnsiPos(INPUT_MARK, tmp);
2167 //!
\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
2168 procedure TEditorForm.UpdateSambaActionUpdate(Sender: TObject);
2170 UpdateSambaAction.Enabled := FSambaTimer.Enabled;
2173 //!
\83T
\83\93\83o
\8dX
\90V
\83A
\83N
\83V
\83\87\83\93
2174 procedure TEditorForm.UpdateSambaActionExecute(Sender: TObject);
2179 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
2180 input := ZenToHan(input);
2181 if GikoSys.IsNumeric(input) then begin
2182 FSambaTimer.UpdateSambaSetting(StrToInt(input));
2184 //
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81ASamba
\83^
\83C
\83}
\81[
\82ð
\8dX
\90V
\82·
\82é
2185 for i := 0 to Screen.FormCount - 1 do begin
2186 if Screen.Forms[i] is TEditorForm then begin
2187 TEditorForm(Screen.Forms[i]).FSambaTimer.Update;
2188 TEditorForm(Screen.Forms[i]).UpdateSambaStatus;
2192 ShowMessage('
\90\94\92l
\82ð
\93ü
\97Í
\82µ
\82Ä
\82
\82¾
\82³
\82¢');
2193 UpdateSambaActionExecute(Sender);
2198 procedure TEditorForm.UpdateSambaStatus;
2200 if (FSambaTimer.Enabled) then begin
2201 StatusBar.Panels[2].Text
2202 := 'Samba24
\8bK
\92è
\92l' + IntToStr(FSambaTimer.SambaInterval);
2206 procedure TEditorForm.InputAssistActionExecute(Sender: TObject);
2212 TextWidth, ItemWidth, tmpWidth, EditW, EditT: Integer;
2214 if FInputAssistKey = '' then Exit;
2216 InputAssistPopupMenu.Items.Clear;
2218 if (FResistWords = nil) then begin
2219 FResistWords := TStringList.Create;
2224 if (GetKeyState( VK_SHIFT ) < 0) then begin
2225 //
\83V
\83t
\83g
\82ª
\89\9f\82³
\82ê
\82Ä
\82¢
\82ê
\82Î
\81A
\83L
\81[
\82Å
\8en
\82Ü
\82é
\83J
\83e
\83S
\83\8a
2227 InputAssistDM.GetStartWithCategoryResistWords(
2228 FInputAssistKey, FResistWords);
2230 //
\83V
\83t
\83g
\82ª
\96³
\82¢
\82Ì
\82Å
\81A
\83L
\81[
\82Å
\8en
\82Ü
\82é
\83L
\81[
2232 InputAssistDM.GetStartWithKeyResistWords(
2233 FInputAssistKey, FResistWords);
2235 Bitmap := TBitmap.Create;
2237 if (FUseUC = True) then
2238 Bitmap.Canvas.Font.Assign(BodyEditUC.Font)
2240 Bitmap.Canvas.Font.Assign(BodyEdit.Font);
2241 //
\83}
\81[
\83W
\83\935px
2242 TextWidth := Bitmap.Canvas.TextWidth(FInputAssistKey) + 5;
2244 for i := 0 to count - 1 do begin
2245 item := TMenuItem.Create(nil);
2246 item.Break := mbNone;
2247 item.Caption := FResistWords[i];
2249 item.OnClick := InputAssistMenuClick;
2250 InputAssistPopupMenu.Items.Add(item);
2252 tmpWidth := Bitmap.Canvas.TextWidth(Item.Caption);
2253 if (tmpWidth > ItemWidth) then begin
2254 ItemWidth := tmpWidth;
2261 if (count > 0) then begin
2262 if (FUseUC = True) then begin
2263 EditW := BodyEditUC.Width;
2264 EditT := BodyEditUC.Top;
2266 EditW := BodyEdit.Width;
2267 EditT := BodyEdit.Top;
2270 point.X := point.X + Self.Left + (Self.Width - EditW) div 2;
2271 point.Y := point.Y + Self.Top + (Self.Height - Self.ClientHeight);
2273 if Screen.DesktopWidth >
2274 (point.X + TextWidth + ItemWidth) then begin
2275 InputAssistPopupMenu.Popup(
2276 point.X + TextWidth,
2277 point.Y + EditorPage.Top + EditorPage.TabHeight + EditT);
2279 InputAssistPopupMenu.Popup(
2280 point.X - TextWidth - ItemWidth,
2281 point.Y + EditorPage.Top + EditorPage.TabHeight + EditT);
2286 procedure TEditorForm.InputAssistMenuClick(Sender: TObject);
2292 if not (Sender is TMenuItem) then Exit;
2294 if (FResistWords <> nil) then begin
2295 if (FUseUC = True) then
2296 EditHandle := BodyEditUC.Handle
2298 EditHandle := BodyEdit.Handle;
2301 TResistWord(FResistWords.Objects[TMenuItem(Sender).Tag]).GetText;
2305 IMC := ImmGetContext(EditHandle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
2307 ImmNotifyIME(IMC, NI_COMPOSITIONSTR, CPS_CANCEL, 0);
2309 ImmReleaseContext(EditHandle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
2313 FInputAssistKey := '';
2315 if (FUseUC = True) then
2316 BodyEditUC.InsertText(text)
2318 InsertText(BodyEdit, text);
2321 //! TMemo
\82Ì
\83J
\81[
\83\
\83\8b\88Ê
\92u
\82É
\95¶
\8e\9a\97ñ
\91}
\93ü
2322 procedure TEditorForm.InsertText(Memo: TMemo; Text: String);
2324 line, sel, pos: Integer;
2325 left, right : String;
2327 Memo.Lines.BeginUpdate;
2328 line := SendMessage(Memo.Handle,EM_LINEFROMCHAR,-1,0); //
\8ds
2329 sel := Memo.SelStart;
2330 pos := sel - SendMessage(Memo.Handle, EM_LINEINDEX, -1, 0); //
\8c\85
2331 if (pos > 0) then begin
2332 left := Copy(Memo.Lines[line], 0, pos);
2336 right := Copy(Memo.Lines[line], pos + 1, Length(Memo.Lines[line]));
2337 Memo.Lines.Strings[line] := left + Text + right;
2338 Memo.Lines.EndUpdate;
2339 //
\81@
\83L
\83\83\83\8c\83b
\83g
\82Ì
\88Ê
\92u
\82ð
\8dX
\90V
\82·
\82é
2340 Memo.SelStart := sel + Length(text);
2341 //
\83L
\83\83\83\8c\83b
\83g
\82Ì
\88Ê
\92u
\82Ü
\82Å
\83X
\83N
\83\8d\81[
\83\8b
2342 Memo.Perform(EM_SCROLLCARET, 0, 0);
2346 procedure TEditorForm.ApplicationEvents1Message(var Msg: tagMSG;
2347 var Handled: Boolean);
2355 if (Self.Active) then begin
2357 //
\83L
\81[
\89\9f\89º
\82Ì
\82Ý
\8eó
\82¯
\8eæ
\82é
2360 //
\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é
2361 if (EditorPage.ActivePageIndex = 0)
2362 and (GetKeyState( VK_CONTROL ) < 0) then begin
2363 wmMsg.Msg := Msg.message;
2364 wmMsg.CharCode := Word(Msg.wParam);
2365 wmMsg.KeyData := Msg.lParam;
2366 if (wmMsg.CharCode = 229) and (wmMsg.KeyData = 3735553) then begin
2367 if (FUseUC = True) then
2368 EditHandle := BodyEditUC.Handle
2370 EditHandle := BodyEdit.Handle;
2371 IMC := ImmGetContext(EditHandle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
2372 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
2373 if (Len > 0) then begin
2374 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
2375 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
2376 SetLength(Str, Len);
2377 FInputAssistKey := Str;
2378 InputAssistActionExecute(nil);
2381 ImmReleaseContext(EditHandle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
2390 procedure TEditorForm.ShowInputAssistFormExecute(Sender: TObject);
2392 form : TInputAssistForm;
2394 form := TInputAssistForm.Create(nil);
2396 if TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
2397 SetWindowPos(form.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2399 form.SetUpFromEditor;
2400 if (form.ShowModal = mrOk) then begin
2401 if (FUseUC = True) then
2402 BodyEditUC.InsertText(form.GetInsertText)
2404 InsertText(BodyEdit, form.GetInsertText);
2410 //! Cookie
\8fî
\95ñ
\8dí
\8f\9c
2411 procedure TEditorForm.ReleaseCookieActionExecute(Sender: TObject);
2415 //
\83X
\83\8c\83b
\83h
\82ª
\96³
\82¢
\81@
\83X
\83\8c\97§
\82Ä
\82Ì
\82Æ
\82«
\82ÍFBoard
\82ð
\92¼
\90Ú
\8eg
\82¤
2418 //
\83N
\83b
\83L
\81[
\82Ì
\8fî
\95ñ
\82ð
\8eÌ
\82Ä
\82é
2422 // 0
\82É
\8aª
\82«
\96ß
\82·
2425 //!
\94Â
\8fî
\95ñ
\8eæ
\93¾Update
\83C
\83x
\83\93\83g
2426 procedure TEditorForm.GetSETTINGTXTActionUpdate(Sender: TObject);
2428 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
2429 GetSETTINGTXTAction.Enabled := not FWork;
2431 //!
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾Update
\83C
\83x
\83\93\83g
2432 procedure TEditorForm.GetHeadTXTActionUpdate(Sender: TObject);
2434 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
2435 GetSETTINGTXTAction.Enabled := not FWork;
2438 //! Samba
\83^
\83C
\83}
\81[
\83C
\83x
\83\93\83g
2439 procedure TEditorForm.SambaTimer(Sender: TObject);
2442 if FSambaTimer.WriteDeta = ZERO_DATE then
2443 StatusBar.Panels[1].Text := '
\8f\89\8f\91'
2445 FNow := IncMilliSecond(FNow, 500);
2446 StatusBar.Panels[1].Text :=
2447 Format('%8.0f
\95b
\8co
\89ß', [SecondSpan(FNow, FSambaTimer.WriteDeta)]);
2451 \brief
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82Æ
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
2453 procedure TEditorForm.SetWindowRect;
2455 wp: TWindowPlacement;
2463 //
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\90Ý
\92è
2464 wp.length := sizeof(wp);
2465 wp.rcNormalPosition.Top := GikoSys.Setting.EditWindowTop;
2466 wp.rcNormalPosition.Left := GikoSys.Setting.EditWindowLeft;
2468 wp.rcNormalPosition.Bottom := GikoSys.Setting.EditWindowTop + GikoSys.Setting.EditWindowHeight;
2469 wp.rcNormalPosition.Right := GikoSys.Setting.EditWindowLeft + GikoSys.Setting.EditWindowWidth;
2470 wp.showCmd := SW_HIDE;
2471 SetWindowPlacement(Handle, @wp);
2473 if GikoSys.Setting.EditWindowMax then begin
2474 WindowState := wsMaximized;
2477 //
\83E
\83B
\83\93\83h
\83E
\82ª
\89æ
\96Ê
\8aO
\82È
\82ç
\89æ
\96Ê
\93à
\82É
\88Ú
\93®
\82·
\82é
2478 Right := Left + Width;
2479 Bottom := Top + Height;
2482 while (MonCnt < Screen.MonitorCount) do begin
2483 MonR := Screen.Monitors[MonCnt].Left + Screen.Monitors[MonCnt].Width;
2484 MonB := Screen.Monitors[MonCnt].Top + Screen.Monitors[MonCnt].Height;
2486 if ((Left >= Screen.Monitors[MonCnt].Left) and (Left < MonR) and
2487 (Top >= Screen.Monitors[MonCnt].Top) and (Top < MonB) and
2488 (Right > Screen.Monitors[MonCnt].Left) and (Right <= MonR) and
2489 (Bottom > Screen.Monitors[MonCnt].Top) and (Bottom <= MonB)) then begin
2494 MonCnt := MonCnt + 1;
2497 if (MonOk = False) then begin
2502 //
\8c»
\8dÝ
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82ð
\95Û
\91¶
2503 GikoSys.Setting.EditWindowTop := Top + WINDOWMOVE_V; //
\8e\9f\82É
\8aJ
\82
\83E
\83B
\83\93\83h
\83E
\82Í
2504 GikoSys.Setting.EditWindowLeft := Left + WINDOWMOVE_H; //
\81@
\81@
\81@
\89E
\8eÎ
\82ß
\89º
\82É
\82¸
\82ç
\82·
2505 //
\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·
2506 if GikoSys.Setting.EditWindowHeight < 144 then begin
2509 if GikoSys.Setting.EditWindowWidth < 144 then begin
2514 \brief
\8ag
\92£
\83^
\83u
\90Ý
\92è
2516 procedure TEditorForm.SetExtraTab;
2518 SECTION = 'EditorForm';
2522 ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
2524 BoardtopTab.TabVisible := ini.Readbool(SECTION, 'BoardTopTab', False);
2525 BoardTop.Checked := BoardtopTab.TabVisible;
2526 RocalRuleTab.TabVisible := ini.ReadBool(SECTION, 'LocalRuleTab', False);
2527 LocalRule.Checked := RocalRuleTab.TabVisible;
2534 \return
\83\8c\83X
\83G
\83f
\83B
\83^
\82ª
\93\8a\8de
\82µ
\82æ
\82¤
\82Æ
\82µ
\82Ä
\82¢
\82é
\94Â
2536 function TEditorForm.GetBoard : TBoard;
2538 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ªnull
\82Ì
\8e\9e\82ÍFBoard
2539 if FThreadItem = nil then begin
2542 Result := FThreadItem.ParentBoard;
2546 \brief GikoForm
\82É
\83\81\83b
\83Z
\81[
\83W
\82ð
\92Ç
\89Á
\82·
\82é
2547 \param icon
\83\81\83b
\83Z
\81[
\83W
\82É
\82Â
\82
\83A
\83C
\83R
\83\93
2549 procedure TEditorForm.AddFormMessageNew(icon: TGikoMessageIcon);
2551 if FThreadItem = nil then begin
2552 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, icon)
2554 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, icon);
2559 \brief
\83\8d\81[
\83J
\83\8bfusiana
\83g
\83\89\83b
\83v
2560 \return true:
\91\97\90M
\92\86\8e~ false:
\91\97\90M
2562 function TEditorForm.isLocalFusianaTrap: Boolean;
2567 if GikoSys.Setting.LocalTrapAtt then begin
2568 Namae := THTMLCreate.RepHtml(NameComboBox.Text);
2569 if (LFusianaGet(Namae)) or (Namae = '
\8eR
\8dè
\8fÂ') then begin
2570 if FusianaMsgBox = IDNO then begin
2577 \brief
\83\8a\83\82\81[
\83gfusiana
\83g
\83\89\83b
\83v
2578 \return true:
\91\97\90M
\92\86\8e~ false:
\91\97\90M
2580 function TEditorForm.isRemoteFusianaTrap: Boolean;
2588 Namae := THTMLCreate.RepHtml(NameComboBox.Text);
2589 if (GikoSys.Setting.RemoteTrapAtt) and (Length(Namae) = 0) then begin
2592 if Board = nil then Exit;
2594 if not FileExists(Board.GetSETTINGTXTFileName) then begin
2595 //Setting.txt
\82ª
\82È
\82©
\82Á
\82½
\82ç
\8eæ
\93¾
2596 //
\8eI
\82É
\95\89\89×
\82ª
\82©
\82©
\82è
\82»
\82¤...
2598 GetSETTINGTXTAction.Execute;
2604 if FileExists(Board.GetSETTINGTXTFileName) then begin
2605 body := TStringList.Create;
2607 body.LoadFromFile(Board.GetSETTINGTXTFileName);
2608 Remote := GetFusianaName(body, Board);
2614 if LFusianaGet(Remote) then begin
2615 if FusianaMsgBox = IDNO then begin
2622 \brief Header
\95¶
\8e\9a\97ñ
\8eæ
\93¾
2623 \param ACOOKIE Cookie
2628 \return Header
\95¶
\8e\9a\97ñ
2630 function TEditorForm.getHeaderStr(const ACOOKIE: string; const SPID : string;
2631 const PON : string; const HAP : string; Board : TBoard) : string;
2636 Result := Result + 'SPID=' + SPID + '; ';
2638 Result := Result + 'PON=' + PON + '; ';
2640 //
\83z
\83X
\83g
\82ª2ch
\82Å
\81ABe
\82ÉLogin
\82µ
\82Ä
\82¢
\82ê
\82ÎBE
\82Ì
\83f
\81[
\83^
\82ð
\91\97\82é
2641 //GikoSys.ParseURI( URL, Protocol,Host, Path, Document, Port, Bookmark );
2642 //if GikoSys.Is2chHost(Host) and GikoSys.Setting.BeLogin then
2643 if (Board.Is2ch) then begin
2644 //
\8cÅ
\92è
\82Ì
\83N
\83b
\83L
\81[
\82ª
\82 \82ê
\82Î
\90H
\82í
\82¹
\82é
2645 if Length(GikoSys.Setting.FixedCookie) > 0 then begin
2646 //
\83z
\83X
\83g
\82ª2ch
\82Ì
\8fê
\8d\87\81C
\8cÅ
\92è
\82Ì
\83N
\83b
\83L
\81[
\82ð
\90H
\82í
\82¹
\82é
2647 Result := Result + GikoSys.Setting.FixedCookie + '; ';
2649 if (GikoSys.Belib.Connected) then begin
2650 Result := Result + 'MDMD=' + GikoSys.Belib.MDMD + '; '
2651 + 'DMDM=' + GikoSys.Belib.DMDM + '; ';
2655 Result := 'Cookie: ' + Result + 'NAME=' + NameComboBox.Text + '; MAIL=' + MailComboBox.Text;
2658 Result := Result + '; HAP=' + HAP + '; ';
2663 \brief fusiana
\8cx
\8d\90\83_
\83C
\83A
\83\8d\83O
2664 \return IDYES
\8f\91\82«
\8d\9e\82Þ IDNO
\92\86\8e~
2666 function TEditorForm.FusianaMsgBox: Integer;
2668 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 +
2669 '
\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' +
2670 #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';
2672 Result := MsgBox(Handle, MSG_FUSIANA, '
\8fî
\95ñ',
2673 MB_YESNO or MB_ICONQUESTION);
2676 \brief
\98A
\93\8a\83\82\81[
\83hON/OFF
\90Ø
\82è
\91Ö
\82¦
2678 procedure TEditorForm.ContinueModeActionExecute(Sender: TObject);
2680 ContinueModeAction.Checked := not ContinueModeAction.Checked;
2683 \brief
\98A
\93\8a\83\82\81[
\83h
\8dX
\90V
\8f\88\97\9d
2685 procedure TEditorForm.ContinueModeActionUpdate(Sender: TObject);
2687 //
\83X
\83\8c\82½
\82Ä
\82Ì
\82Æ
\82«
\82Í
\96³
\8cø
2688 ContinueModeAction.Enabled := FThreadItem <> nil;
2691 \brief
\8f\91\82«
\8d\9e\82Þ
\94Â/
\83X
\83\8c\83b
\83h
\82ð
\95\
\8e¦
\82·
\82é
2693 procedure TEditorForm.OpenSendTargetActionExecute(Sender: TObject);
2695 if (FThreadItem <> nil) then begin
2696 //
\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É
2697 //
\91O
\96Ê
\82Å
\8cÅ
\92è
\82·
\82é
2698 if not (fsShowing in Self.FormState) then begin
2699 //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
2700 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2703 //
\83X
\83\8c\83b
\83h
2704 GikoForm.InsertBrowserTab(FThreadItem, True);
2706 if not TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\89ð
\8f\9c
2707 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2713 GikoForm.SelectTreeNode(
2717 procedure TEditorForm.ReloadTargetActionExecute(Sender: TObject);
2719 if (FThreadItem <> nil) then begin
2720 //
\83X
\83\8c\83b
\83h
2721 //
\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É
2722 //
\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é)
2723 if not (fsShowing in Self.FormState) then begin
2724 //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
2725 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2728 GikoForm.DownloadContent(FThreadItem);
2730 if not TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\89ð
\8f\9c
2731 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2737 GikoForm.DownloadList(GetBoard);
2740 //!
\8cë
\94\9a\83`
\83F
\83b
\83N
2741 function TEditorForm.isGobaku: Boolean;
2743 MSG_GOBAKU : string =
2744 '
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é%s
\82Æ
\93\8a\8de
\90æ
\82Ì%s
\82ª
\88Ù
\82È
\82è
\82Ü
\82·
\81B'#13#10 +
2745 '
\82±
\82Ì
\82Ü
\82Ü
\8f\91\82«
\8d\9e\82Ý
\82Ü
\82·
\82©
\81H';
2747 ThreadItem : TThreadItem;
2752 //
\83I
\83v
\83V
\83\87\83\93\97L
\8cø
\82©
\82Â
\83\8c\83X
\91\97\90M
\82Å
\82Ì
\82Ý
\97L
\8cø
2753 if (GikoSys.Setting.UseGobakuCheck) then begin
2754 //
\83\8c\83X
\91\97\90M
2755 if (FThreadItem <> nil) then begin
2756 ThreadItem := GikoForm.GetActiveContent(False);
2757 if (ThreadItem <> nil) then begin
2758 if (FThreadItem <> ThreadItem) then begin
2759 msg := Format(MSG_GOBAKU, ['
\83X
\83\8c\83b
\83h', '
\83X
\83\8c\83b
\83h']);
2760 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2763 if GikoForm.ActiveList is TBBS then begin
2764 if TBBS(GikoForm.ActiveList) <> FThreadItem.ParentBoard.ParentCategory.ParenTBBS then begin
2765 msg := Format(MSG_GOBAKU, ['BBS', '
\83X
\83\8c\83b
\83h
\82Ì
\8f\8a\91®
\82·
\82éBBS']);
2766 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2768 end else if GikoForm.ActiveList is TCategory then begin
2769 if TCategory(GikoForm.ActiveList).FindThreadFromURL(FThreadItem.URL) = nil then begin
2770 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']);
2771 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2773 end else if GikoForm.ActiveList is TBoard then begin
2774 if TBoard(GikoForm.ActiveList) <> FThreadItem.ParentBoard then begin
2775 msg := Format(MSG_GOBAKU, ['
\94Â', '
\83X
\83\8c\83b
\83h
\82Ì
\8f\8a\91®
\82·
\82é
\94Â']);
2776 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2781 //
\83X
\83\8c\82½
\82Ä
2782 if GikoForm.ActiveList is TBBS then begin
2783 if TBBS(GikoForm.ActiveList) <> FBoard.ParentCategory.ParenTBBS then begin
2784 msg := Format(MSG_GOBAKU, ['BBS', '
\94Â
\82Ì
\8f\8a\91®
\82·
\82éBBS']);
2785 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2787 end else if GikoForm.ActiveList is TCategory then begin
2788 if TCategory(GikoForm.ActiveList).FindBoardFromURL(FBoard.URL) = nil then begin
2789 msg := Format(MSG_GOBAKU, ['
\83J
\83e
\83S
\83\8a', '
\94Â
\82Ì
\8f\8a\91®
\82·
\82é
\83J
\83e
\83S
\83\8a']);
2790 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2792 end else if GikoForm.ActiveList is TBoard then begin
2793 if TBoard(GikoForm.ActiveList) <> FBoard then begin
2794 msg := Format(MSG_GOBAKU, ['
\94Â', '
\94Â']);
2795 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2802 procedure TEditorForm.SetFocusEdit;
2804 if (FUseUC = True) then
2810 procedure TEditorForm.SetTextEdit(TextSrc: String);
2812 if (FUseUC = True) then
2813 BodyEditUC.Text := TextSrc
2815 BodyEdit.Text := TextSrc;