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;
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);
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;
131 ApplicationEvents1: TApplicationEvents;
132 ToolButton8: TToolButton;
133 ToolButton9: TToolButton;
134 ShowInputAssistForm: TAction;
135 ReleaseCookieAction: TAction;
137 ContinueModeAction: TAction;
138 ToolButton10: TToolButton;
139 ToolButton11: TToolButton;
140 OpenSendTargetAction: TAction;
141 ReloadTargetAction: TAction;
146 procedure EditorPageChange(Sender: TObject);
147 procedure FormCreate(Sender: TObject);
148 procedure BrowserStatusTextChange(Sender: TObject;
149 const Text: WideString);
150 procedure FormClose(Sender: TObject; var Action: TCloseAction);
151 procedure FormDestroy(Sender: TObject);
152 procedure SendActionExecute(Sender: TObject);
153 procedure SaveActionExecute(Sender: TObject);
154 procedure AbortActionExecute(Sender: TObject);
155 procedure CloseActionExecute(Sender: TObject);
156 procedure UndoActionExecute(Sender: TObject);
157 procedure CutActionExecute(Sender: TObject);
158 procedure CopyActionExecute(Sender: TObject);
159 procedure PasteActionExecute(Sender: TObject);
160 procedure SendActionUpdate(Sender: TObject);
161 procedure SaveActionUpdate(Sender: TObject);
162 procedure CloseActionUpdate(Sender: TObject);
163 procedure UndoActionUpdate(Sender: TObject);
164 procedure CutActionUpdate(Sender: TObject);
165 procedure CopyActionUpdate(Sender: TObject);
166 procedure PasteActionUpdate(Sender: TObject);
167 procedure TopActionExecute(Sender: TObject);
168 procedure TopActionUpdate(Sender: TObject);
169 procedure SageCheckBoxClick(Sender: TObject);
170 procedure MailComboBoxChange(Sender: TObject);
171 procedure TransActionExecute(Sender: TObject);
172 procedure TransActionUpdate(Sender: TObject);
173 procedure IdLogDebugReceive(ASender: TIdConnectionIntercept;
175 procedure IdLogDebugSend(ASender: TIdConnectionIntercept;
177 procedure SelectAllActionExecute(Sender: TObject);
178 procedure StatusBarResize(Sender: TObject);
179 procedure FormActivate(Sender: TObject);
180 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
181 procedure QuotePasteActionExecute(Sender: TObject);
182 procedure SpaceToNBSPActionExecute(Sender: TObject);
183 procedure AmpToCharRefActionExecute(Sender: TObject);
184 procedure BoardTopClick(Sender: TObject);
185 procedure GetSETTINGTXTActionExecute(Sender: TObject);
186 procedure GetTitlePictureActionUpdate(Sender: TObject);
187 procedure GetTitlePictureActionExecute(Sender: TObject);
188 procedure GetHeadTXTActionExecute(Sender: TObject);
189 procedure CalcCapacityActionExecute(Sender: TObject);
190 procedure LocalRuleClick(Sender: TObject);
191 procedure FormDeactivate(Sender: TObject);
192 procedure LocalRuleBrowseClick(Sender: TObject);
193 procedure SaveNameMailActionExecute(Sender: TObject);
194 procedure BeLogInOutEActionExecute(Sender: TObject);
195 procedure BeLogInOutEActionUpdate(Sender: TObject);
196 procedure UpdateSambaActionUpdate(Sender: TObject);
197 procedure UpdateSambaActionExecute(Sender: TObject);
198 procedure InputAssistActionExecute(Sender: TObject);
199 procedure ApplicationEvents1Message(var Msg: tagMSG;
200 var Handled: Boolean);
201 procedure ShowInputAssistFormExecute(Sender: TObject);
202 procedure ReleaseCookieActionExecute(Sender: TObject);
203 procedure GetSETTINGTXTActionUpdate(Sender: TObject);
204 procedure GetHeadTXTActionUpdate(Sender: TObject);
205 procedure ContinueModeActionExecute(Sender: TObject);
206 procedure ContinueModeActionUpdate(Sender: TObject);
207 procedure OpenSendTargetActionExecute(Sender: TObject);
208 procedure ReloadTargetActionExecute(Sender: TObject);
210 FThreadItem: TThreadItem;
212 FNameComboEdit: THandle;
213 FMailComboEdit: THandle;
216 FStatusCode: Integer;
217 FDebugStrReceive: string;
218 FDebugStrSend: string;
220 FInputAssistKey: String; ///<
\93ü
\97Í
\83A
\83V
\83X
\83g
\82Ì
\83L
\81[
221 FResistWords: TStringList; ///<
\93ü
\97Í
\83A
\83V
\83X
\83g
\82Ì
\8e«
\8f\91\82©
\82ç
\82Ì
\8c\9f\8dõ
\8c\8b\89Ê
222 FSambaTimer: TSambaTimer; ///< Samba
\91Î
\8dô
\82Ì
\83^
\83C
\83}
\81[
224 function Check: Boolean;
225 procedure SetNameList(sName, sMail: string);
226 procedure Send(const ACOOKIE: string; const SPID: string; const PON: string; FirstWriting: Boolean);
227 function GetActiveControlHandle: THandle;
228 procedure GetSendData(Source: TStringStream);
229 procedure SaveSendFile;
230 procedure SetContent(Content: string; ABrowser: TWebBrowser);
231 function GetResultType(ResponseText: string): TGikoResultType;
232 ///
\96{
\95¶
\82Ì
\8eæ
\93¾
233 function GetBody : string;
234 //IdHttp
\82Ì
\8f\89\8aú
\89»
235 procedure InitIdHTTP(http: TIdHTTP);
236 procedure ShowBoardInformation(ABoard: TBoard; AMemo: TMemo);
237 function GetTitlePictureURL(body: TStringList; ABoard: TBoard): string;
238 procedure ShowTitlePicture();
239 function GetFusianaName(body: TStringList; ABoard: TBoard): String;
240 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
241 procedure OnGestureStart(Sender: TObject);
242 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
243 procedure OnGestureMove(Sender: TObject);
244 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
245 procedure OnGestureEnd(Sender: TObject);
246 //HEAD.TXT
\8e©
\93®
\95\
\8e¦
247 procedure ShowBoardHead(ABoard: TBoard; AMemo: TMemo);
248 //LocalFusianaTrapAlart
249 function LFusianaGet(const s: String): Boolean;
250 // Cookie
\82Ì
\8eæ
\93¾
251 procedure GetCookie(Rawtext: String; ABoard: TBoard);
252 // hidden
\83f
\81[
\83^
\8eæ
\93¾
253 procedure GetHiddenParameter(Rawtext: String; ABoard: TBoard);
254 //!
\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
255 procedure InputAssistMenuClick(Sender: TObject);
256 //! TMemo
\82Ì
\83J
\81[
\83\
\83\8b\88Ê
\92u
\82É
\95¶
\8e\9a\97ñ
\91}
\93ü
257 procedure InsertText(Memo: TMemo; Text: String);
258 //!
\91\97\90M
\92\86\8e~
259 procedure CancelSend(ABoard: TBoard; ASysMenu: HMENU);
260 //! Samba
\83^
\83C
\83}
\81[
\83C
\83x
\83\93\83g
261 procedure SambaTimer(Sender: TObject);
262 //!
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82Æ
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
263 procedure SetWindowRect;
264 //!
\8ag
\92£
\83^
\83u
\90Ý
\92è
265 procedure SetExtraTab;
267 function GetBoard : TBoard;
268 //! URL
\82Ì
\83f
\81[
\83^
\82ðstream
\82É
\8eæ
\82è
\8d\9e\82Þ
269 procedure GetWebData(const URL: string; const RefURL: string;
270 Modified: TDateTime; stream: TStream);
271 //! GikoForm
\82É
\90V
\92\85\83\81\83b
\83Z
\81[
\83W
\82ð
\92Ç
\89Á
\82·
\82é
272 procedure AddFormMessageNew(icon: TGikoMessageIcon);
273 //!
\83\8d\81[
\83J
\83\8bfusiana
\83g
\83\89\83b
\83v
274 function isLocalFusianaTrap: Boolean;
275 //!
\83\8d\81[
\83J
\83\8bfusiana
\83g
\83\89\83b
\83v
276 function isRemoteFusianaTrap: Boolean;
277 //! Header
\95¶
\8e\9a\97ñ
\8eæ
\93¾
278 function getHeaderStr(const ACOOKIE: string; const SPID : string;
279 const PON : string; Board : TBoard) : string;
280 //! fusiana
\8cx
\8d\90\83_
\83C
\83A
\83\8d\83O
281 function FusianaMsgBox: Integer;
282 //! sent.ini
\83t
\83@
\83C
\83\8b\82Ì
\90¶
\90¬
283 function CreateSentIniFile: TMemIniFile;
284 //!
\8cë
\94\9a\83`
\83F
\83b
\83N
285 function isGobaku: Boolean;
287 procedure CreateParams(var Params: TCreateParams); override;
291 procedure SetThreadItem(Item: TThreadItem);
292 procedure SetBoard(Item: TBoard);
293 procedure UpdateSambaStatus;
294 property BBSID: string read FBBSID write FBBSID;
300 Giko, ItemDownload, MojuUtils, IdGlobal, GikoMessage, Imm,
301 InputAssistDataModule, InputAssist, HTMLCreate;
303 CAPTION_NAME_NEW: string = '
\83M
\83R
\83i
\83r
\83X
\83\8c\97§
\82Ä
\83G
\83f
\83B
\83^';
304 CAPTION_NAME_RES: string = '
\83M
\83R
\83i
\83r
\83\8c\83X
\83G
\83f
\83B
\83^';
306 //
\83G
\83f
\83B
\83b
\83g
\83E
\83B
\83\93\83h
\83E
\82ð
\89E
\89º
\82É
\82¸
\82ç
\82µ
\82Ä
\8aJ
\82
\88Ú
\93®
\97Ê
310 //DAX
\82³
\82ñ±Ø¶ÞÄ!(
\81L
\81¤
\81M)
311 READCGI_ERR = '-ERR';
312 READCGI_INCR = '-INCR';
314 READCGI_PARTIAL = '+PARTIAL';
315 READCGI_ERR_FOUND_KAKO = '-ERR
\89ß
\8b\8e\83\8d\83O
\91q
\8cÉ
\82Å
\94
\8c©';
316 READCGI_ERR_NOT_HTML = '-ERR html
\89»
\91Ò
\82¿';
317 READCGI_ERR_NOT_FOUND = '-ERR
\82»
\82ñ
\82È
\94Âor
\83X
\83\8c\83b
\83h
\82È
\82¢
\82Å
\82·
\81B';
318 READCGI_ERR_ABONE = '-ERR
\82Ç
\82±
\82©
\82Å
\82 \82Ú
\81[
\82ñ
\82ª
\82 \82Á
\82½
\82Ý
\82½
\82¢
\82Å
\82·
\81B';
319 READCGI_ERR_TIMEOUT = '-ERR
\8ew
\92è
\8e\9e\8aÔ
\82ª
\89ß
\82¬
\82Ü
\82µ
\82½
\81B';
320 READCGI_ERR_CANTUSE = '-ERR
\82à
\82¤
\81@
\82Â
\82©
\82¦
\82Ü
\82¹
\82ñ';
321 RES2CH_TRUE = '<!-- 2ch_X:true -->';
322 RES2CH_FALSE = '<!-- 2ch_X:false -->';
323 RES2CH_ERROR = '<!-- 2ch_X:error -->';
324 RES2CH_CHECK = '<!-- 2ch_X:check -->';
325 RES2CH_COOKIE = '<!-- 2ch_X:cookie -->';
329 StartPos, EndPos: Integer;
334 {constructor TEditorForm.Create(AOwner: TComponent; Item: TBoard);
336 inherited Create(AOwner);
339 procedure TEditorForm.CreateParams(var Params: TCreateParams);
342 if FormStyle in [fsNormal, fsStayOnTop] then
343 if BorderStyle in [bsSingle, bsSizeable] then begin
344 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
345 Params.WndParent := 0;
349 {procedure TEditorForm.CreateParams(var Params: TCreateParams);
351 inherited CreateParams(Params);
352 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
355 procedure TEditorForm.FormCreate(Sender: TObject);
358 FSambaTimer := TSambaTimer.Create(Self);
359 FSambaTimer.Interval := 0;
360 Browser.Navigate('about:blank');
361 TitlePictureBrowser.Navigate('about:blank');
362 WebBrowser1.Navigate('about:blank');
366 //
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\90Ý
\92è
369 EditorPage.ActivePage := EditorTab;
370 FNameComboEdit := GetWindow(NameComboBox.Handle, GW_CHILD);
371 FMailComboEdit := GetWindow(MailComboBox.Handle, GW_CHILD);
372 NameComboBox.Items.Assign(GikoSys.Setting.NameList);
373 MailComboBox.Items.Assign(GikoSys.Setting.MailList);
375 //
\94¼
\93§
\96¾
\97\98\97p
\89Â
\94\
\90Ý
\92è
376 TransAction.Enabled := GikoSys.CanUser32DLL;
378 //
\83E
\83B
\83\93\83h
\83E
\82Ì
\83X
\83e
\83C
\8fó
\91Ô
379 if GikoSys.Setting.EditWindowStay then begin //
\83X
\83e
\83C
\8fó
\91Ô
380 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
381 TopAction.Checked := true;
382 TopToolButton.Down := true;
383 end else begin //
\83X
\83e
\83C
\82µ
\82È
\82¢
384 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
385 TopAction.Checked := false;
386 TopToolButton.Down := false;
389 //
\83E
\83B
\83\93\83h
\83E
\82Ì
\94¼
\93§
\96¾
\8fó
\91Ô
390 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Ô
392 TransAction.Checked := true;
393 TransToolButton.Down := true;
394 end else begin //
\95s
\93§
\96¾
396 TransAction.Checked := false;
397 TransToolButton.Down := false;
399 //
\94¼
\93§
\96¾
\8fó
\91Ô
\82Ì
\95Û
\91¶
400 GikoSys.Setting.EditWindowTranslucent := TransAction.Checked;
402 SpaceToNBSPAction.Checked := GikoSys.Setting.SpaceToNBSP;
403 AmpToCharRefAction.Checked := GikoSys.Setting.AmpToCharRef;
404 //
\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è
407 //
\83L
\81[
\90Ý
\92è
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
408 GikoSys.LoadKeySetting(ActionList, GikoSys.GetEditorKeyFileName);
409 SaveNameMailAction.Checked := True;
411 procedure TEditorForm.SetBoard(Item: TBoard);
414 Caption := CAPTION_NAME_NEW + ' - [' + Item.Title + ']';
415 NameComboBox.Text := FBoard.KotehanName;
416 MailComboBox.Text := FBoard.KotehanMail;
417 SageCheckBox.Checked := AnsiPos('sage', MailComboBox.Text) <> 0;
418 TitlePanel.Visible := True;
420 if (FSambaTimer.SetBoard(FBoard) >= 0) then begin
423 FSambaTimer.OnTimer := SambaTimer;
426 ShowBoardInformation(FBoard, BoardInformationMemo);
430 procedure TEditorForm.SetThreadItem(Item: TThreadItem);
433 Caption := CAPTION_NAME_RES + ' - [' + FThreadItem.Title + ']';
434 NameComboBox.Text := FThreadItem.ParentBoard.KotehanName;
435 MailComboBox.Text := FThreadItem.ParentBoard.KotehanMail;
436 SageCheckBox.Checked := AnsiPos('sage', MailComboBox.Text) <> 0;
437 TitlePanel.Visible := False;
439 if (FSambaTimer.SetBoard(FThreadItem.ParentBoard) >= 0) then begin
442 FSambaTimer.OnTimer := SambaTimer;
445 ShowBoardInformation(FThreadItem.ParentBoard, BoardInformationMemo);
449 function TEditorForm.GetBody : string;
458 body := BodyEdit.Text;
459 if AmpToCharRefAction.Checked then
460 // &
\82Ì
\92u
\8a·
\82Í
\88ê
\94Ô
\8dÅ
\8f\89\82É
\82â
\82é
\82±
\82Æ
461 body := CustomStringReplace( body, '&', '&' );
462 if SpaceToNBSPAction.Checked then begin
464 tail := p + Length( body );
466 while p < tail do begin
473 tmp := tmp + ' ';
474 until (len mod TAB_LENGTH) = 0;
479 tmp := tmp + p^; Inc( p );
485 tmp := tmp + ' ';
491 //
\8eÀ
\91Ì
\8eQ
\8fÆ
\82Í 1
\95¶
\8e\9a\95ª
496 while p < tail do begin
497 if p^ in ['a'..'z', 'A'..'Z', '0'..'9', '#'] then begin
499 end else if p^ = ';' then begin
511 if p^ in kYofKanji then begin
512 tmp := tmp + p^; Inc( p );
513 tmp := tmp + p^; Inc( p );
516 tmp := tmp + p^; Inc( p );
528 procedure TEditorForm.SetFont;
530 BodyEdit.Font.Name := GikoSys.Setting.EditorFontName;
531 BodyEdit.Font.Size := GikoSys.Setting.EditorFontSize;
532 BodyEdit.Font.Color := GikoSys.Setting.EditorFontColor;
533 BodyEdit.Color := GikoSys.Setting.EditorBackColor;
536 procedure TEditorForm.Preview;
545 if FThreadItem = nil then begin
547 Title := THTMLCreate.RepHtml(TitleEdit.Text);
549 No := IntToStr(FThreadItem.Count + 1);
550 Title := THTMLCreate.RepHtml(FThreadItem.Title);
554 Namae := THTMLCreate.RepHtml(NameComboBox.Text);
555 Mail := THTMLCreate.RepHtml(MailComboBox.Text);
556 Body := THTMLCreate.RepHtml(Body);
557 Body := CustomStringReplace(Body, #13#10, '<br>', False);
560 if Trim(Namae) = '' then
561 Namae := '
\96¼
\96³
\82µ
\82³
\82ñ';
563 s := THTMLCreate.CreatePreviewHTML(Title, No, Mail, Namae, Body);
565 SetContent(s, Browser);
568 procedure TEditorForm.EditorPageChange(Sender: TObject);
573 tmpBoard := GetBoard;
575 if tmpBoard = nil then Exit;
577 if EditorPage.ActivePage = PreviewTab then begin
579 end else if EditorPage.ActivePage = RocalRuleTab then begin
580 if not FileExists(tmpBoard.GETHEADTXTFileName) then begin
581 LocalEdit.Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\96¢
\8eæ
\93¾';
584 ShowBoardHead(tmpBoard, LocalEdit);
586 Browser.Navigate('about:blank');
590 procedure TEditorForm.BrowserStatusTextChange(Sender: TObject;
591 const Text: WideString);
593 if EditorPage.ActivePage = PreviewTab then begin
594 StatusBar.Panels[0].Text := Text;
596 StatusBar.Panels[0].Text := '';
600 function TEditorForm.Check: Boolean;
602 REQUIRED: string = '
\82ª
\93ü
\97Í
\82³
\82ê
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B';
603 ERROR: string = '
\83G
\83\89\81[';
613 if (not GikoSys.Setting.UseMachineTime) and
614 ((Board.LastGetTime = 0) or
615 (Board.LastGetTime = ZERO_DATE)) then begin
616 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
617 + '
\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¢';
618 MsgBox(Handle, Msg, ERROR, MB_OK or MB_ICONSTOP);
620 end else if BodyEdit.Text = '' then begin
621 Msg := '
\96{
\95¶' + REQUIRED;
622 MsgBox(Handle, Msg, ERROR, MB_OK or MB_ICONSTOP);
624 end else if (FBoard <> nil) and (Trim(TitleEdit.Text) = '') then begin
625 Msg := '
\83^
\83C
\83g
\83\8b' + REQUIRED;
626 MsgBox(Handle, Msg, ERROR, MB_OK or MB_ICONSTOP);
629 if (not GikoSys.Dolib.Connected) and (AnsiPos('
\81\9c', NameComboBox.Text) <> 0) then begin
630 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
631 + '
\82±
\82Ì
\82Ü
\82Ü
\91\97\90M
\82µ
\82Ä
\82à
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
632 rc := MsgBox(Handle, Msg, '
\8am
\94F', MB_YESNO or MB_ICONQUESTION);
633 Result := (rc = IDYES);
638 procedure TEditorForm.FormClose(Sender: TObject; var Action: TCloseAction);
643 procedure TEditorForm.FormDestroy(Sender: TObject);
645 wp: TWindowPlacement;
649 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
650 wp.length := sizeof(wp);
651 GetWindowPlacement(Handle, @wp);
653 GikoSys.Setting.EditWindowTop := wp.rcNormalPosition.Top;
654 GikoSys.Setting.EditWindowLeft := wp.rcNormalPosition.Left;
655 GikoSys.Setting.EditWindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
656 GikoSys.Setting.EditWindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
657 GikoSys.Setting.EditWindowMax := WindowState = wsMaximized;
658 //GikoSys.Setting.EditWindowStay := FormStyle = fsStayOnTop; //
\83X
\83e
\83C
\8fó
\91Ô
\82Ì
\95Û
\91¶
659 GikoSys.Setting.EditWindowTranslucent := TransAction.Checked; //
\94¼
\93§
\96¾
\8fó
\91Ô
\82Ì
\95Û
\91¶
663 procedure TEditorForm.SetNameList(sName, sMail: string);
665 if SaveNameMailAction.Checked then begin
666 if Trim(sName) <> '' then begin
667 if GikoSys.Setting.NameList.IndexOf(sName) = -1 then
668 GikoSys.Setting.NameList.Insert(0, sName);
670 if Trim(sMail) <> '' then begin
671 if GikoSys.Setting.MailList.IndexOf(sMail) = -1 then
672 GikoSys.Setting.MailList.Insert(0, sMail);
677 function TEditorForm.GetActiveControlHandle: THandle;
679 if EditorPage.ActivePage = EditorTab then begin
680 if ActiveControl = NameComboBox then
681 Result := FNameComboEdit
682 else if ActiveControl = MailComboBox then
683 Result := FMailComboEdit
684 else if ActiveControl = BodyEdit then
685 Result := BodyEdit.Handle
686 else if ActiveControl = TitleEdit then
687 Result := TitleEdit.Handle
690 end else if Editorpage.ActivePage = BoardInformationTab then begin
691 if ActiveControl = BoardInformationMemo then
692 Result := BoardInformationMemo.Handle
695 end else if Editorpage.ActivePage = RocalRuleTab then begin
696 if ActiveCOntrol = LocalEdit then
697 Result := LocalEdit.Handle
704 procedure TEditorForm.SetContent(Content: string; ABrowser: TWebBrowser);
708 if Assigned(ABrowser.ControlInterface.Document) then begin
709 doc := OleVariant(ABrowser.Document);
712 doc.charset := 'Shift_JIS';
717 procedure TEditorForm.InitIdHTTP(http: TIdHTTP);
720 http.ProxyParams.BasicAuthentication := False;
721 if GikoSys.Setting.WriteProxy then begin
722 http.ProxyParams.ProxyServer := GikoSys.Setting.WriteProxyAddress;
723 http.ProxyParams.ProxyPort := GikoSys.Setting.WriteProxyPort;
724 http.ProxyParams.ProxyUsername := GikoSys.Setting.WriteProxyUserID;
725 http.ProxyParams.ProxyPassword := GikoSys.Setting.WriteProxyPassword;
726 if GikoSys.Setting.ReadProxyUserID <> '' then
727 http.ProxyParams.BasicAuthentication := True;
729 http.ProxyParams.ProxyServer := '';
730 http.ProxyParams.ProxyPort := 80;
731 http.ProxyParams.ProxyUsername := '';
732 http.ProxyParams.ProxyPassword := '';
734 Indy.Request.UserAgent := GikoSys.GetUserAgent;
735 Indy.Request.AcceptEncoding := '';
737 //!
\91\97\90M
\92\86\8e~
\82Ì
\82½
\82ß
\82Ì
\83\81\83j
\83\85\81[
\82Ì
\8dÄ
\90¶
738 procedure TEditorForm.CancelSend(ABoard: TBoard; ASysMenu: HMENU);
743 EnableMenuItem(ASysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
747 procedure TEditorForm.Send( const ACOOKIE: string; const SPID: string;
748 const PON: string; FirstWriting: Boolean);
750 TextStream: TStringStream;
751 Source: TStringStream;
752 ResponseText: string;
754 State: TGikoDownloadState;
755 ResultType: TGikoResultType;
759 {Protocol,Host, Path, Document, Port, Bookmark : String;}
767 if FThreadItem = nil then begin
768 URL := FBoard.GetSendURL;
769 Indy.Request.Referer := GikoSys.UrlToServer(FBoard.URL) + 'test/bbs.cgi';
771 URL := FThreadItem.GetSendURL;
772 Indy.Request.Referer := FThreadItem.URL;
775 sysMenu := GetSystemMenu( Handle, false );
776 EnableMenuItem( sysMenu, SC_CLOSE, MF_GRAYED );
778 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
781 Indy.Request.CustomHeaders.Clear;
782 // Indy.Request.CacheControl := 'no-cache';
783 Indy.Request.CustomHeaders.Add('Pragma: no-cache');
784 Indy.Request.AcceptLanguage := 'ja';
785 Indy.Request.Accept := 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*';
786 Indy.Request.ContentType := 'application/x-www-form-urlencoded';
787 Indy.Request.CustomHeaders.Add(getHeaderStr(ACOOKIE, SPID, PON, Board));
788 TextStream := TStringStream.Create('');
789 Source := TStringStream.Create('');
792 FDebugStrReceive := '';
795 if (FirstWriting) then begin
796 //
\83t
\83V
\83A
\83i
\83g
\83\89\83b
\83v
\8cx
\8d\90(LocalMode) by
\92è
\8aú
\95Ö
797 if (isLocalFusianaTrap) then begin
798 CancelSend( Board, SysMenu );
801 //
\83t
\83V
\83A
\83i
\83g
\83\89\83b
\83v
\8cx
\8d\90(Remote)
802 if (isRemoteFusianaTrap) then begin
803 CancelSend( Board, SysMenu );
806 //
\8cë
\94\9a\83`
\83F
\83b
\83N
807 if (isGobaku) then begin
808 CancelSend( Board, SysMenu );
814 IdAntiFreeze.Active := True;
816 Indy.Post(URL, Source, TextStream);
818 IdAntiFreeze.Active := False;
820 ResponseText := TextStream.DataString;
822 ResultType := GetResultType(ResponseText);
825 if ResultType = grtOK then begin
826 if (GikoSys.Setting.UseSamba) and (FSambaTimer.Enabled) then
828 FSambaTimer.WriteSambaTime(Now());
830 State := gdsComplete;
831 end else if ResultType = grtCookie then begin
832 //
\83\8b\81[
\83v
\96h
\8e~
833 if not FirstWriting then
834 raise Exception.Create('');
836 MsgResult := MsgBox( Handle,
837 '
\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 +
838 '
\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 +
839 '
\91S
\90Ó
\94C
\82ð
\95\89\82¤
\82±
\82Æ
\82ð
\8f³
\91ø
\82µ
\82Ä
\8f\91\82«
\8d\9e\82Ý
\82Ü
\82·
\82©
\81H',
841 MB_YESNO or MB_ICONQUESTION);
843 if MsgResult = IDYES then begin
844 GetCookie(Indy.Response.RawHeaders.Text, Board);
845 if (Board.Is2ch) then begin
846 GetHiddenParameter(ResponseText, Board);
849 if (Board.SPID = '') and (Board.PON = '') and (Board.Cookie = '') then
850 raise Exception.Create('');
852 //
\82à
\82¤
\88ê
\89ñ
\82±
\82Ì
\83\81\83\
\83b
\83h
853 Send(Board.Cookie, Board.SPID, Board.PON, False);
856 CancelSend( Board, SysMenu );
859 end else if ResultType = grtCheck then begin
860 //
\83\8b\81[
\83v
\96h
\8e~
861 if not FirstWriting then
862 raise Exception.Create('');
864 MsgResult := MsgBox( Handle,
865 '
\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 +
866 '
\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 +
867 '
\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 +
868 '
\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 +
870 '
\91S
\90Ó
\94C
\82ð
\95\89\82¤
\82±
\82Æ
\82ð
\8f³
\91ø
\82µ
\82Ä
\8f\91\82«
\8d\9e\82Ý
\82Ü
\82·
\82©
\81H',
872 MB_YESNO or MB_ICONQUESTION);
874 if MsgResult = IDYES then begin
875 GetCookie(Indy.Response.RawHeaders.Text, Board);
876 if (Board.Is2ch) then begin
877 GetHiddenParameter(ResponseText, Board);
880 if (Board.SPID = '') and (Board.PON = '') and (Board.Cookie = '') then
881 raise Exception.Create('');
883 Send(Board.Cookie, Board.SPID, Board.PON, False);
886 CancelSend( Board, SysMenu );
890 if (GikoSys.Setting.UseSamba) and (FSambaTimer.Enabled) then
892 FSambaTimer.WriteSambaTime(Now());
896 raise Exception.Create('');
899 on E: EIdConnectException do begin
901 ResponseText := '<html><body>'
902 + '<div>
\90Ú
\91±
\82ª
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½<br>'
903 + '
\89ñ
\90ü
\82â
\83v
\83\8d\83L
\83V
\82Ì
\8fó
\91Ô
\82ð
\92²
\82×
\82Ä
\82
\82¾
\82³
\82¢<br></div>'
904 + '<br><br><div>' + E.Message + '</div>'
907 on E: Exception do begin
910 FDebugStrReceive := AnsiReplaceText(FDebugStrReceive, '<', '<');
911 FDebugStrReceive := AnsiReplaceText(FDebugStrReceive, '>', '>');
912 FDebugStrSend := AnsiReplaceText(FDebugStrSend, '<', '<');
913 FDebugStrSend := AnsiReplaceText(FDebugStrSend, '>', '>');
915 ResponseText := '<html><body>' + TextStream.DataString;
916 ResponseText := AnsiReplaceText(ResponseText, '</body>', '');
917 ResponseText := AnsiReplaceText(ResponseText, '</html>', '');
918 ResponseText := ResponseText + '<hr><div align="left"><pre>';
919 ResponseText := ResponseText + '<b>
\82±
\82±
\82©
\82ç
\83M
\83R
\83i
\83r
\82Ì
\8fî
\95ñ</b>'#13#10;
920 ResponseText := ResponseText + #13#10'
\81\9c\91\97\90M'#13#10;
921 ResponseText := ResponseText + FDebugStrSend;
922 ResponseText := ResponseText + #13#10'
\81\9c\8eó
\90M'#13#10;
923 ResponseText := ResponseText + FDebugStrReceive;
924 ResponseText := ResponseText + '</pre></div></body></html>';
927 FStatusCode := Indy.ResponseCode;
933 //sysMenu := GetSystemMenu( Handle, true );
934 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
938 //
\94ñ
\8cö
\8e®
\83M
\83R
\83i
\83r
\94Â
\82È
\82Ç
\82Ì2ch
\8cÝ
\8a·
\83X
\83N
\83\8a\83v
\83g
\97p
939 //2ch
\88È
\8aO
\82Å
\82©
\82ÂResponceCode
\82ª302Found
\82Å
\8f\91\82«
\8d\9e\82Ý
\8a®
\97¹
940 //if (not Board.Is2ch) and (FStatusCode = 302) then begin
941 if FStatusCode = 302 then begin
942 GikoForm.PlaySound('ResEnd');
944 AddFormMessageNew( gmiOK );
945 if (not ContinueModeAction.Enabled) or (not ContinueModeAction.Checked) then begin
950 if State = gdsComplete then begin
951 GikoForm.PlaySound('ResEnd');
953 AddFormMessageNew( gmiOK );
954 if (not ContinueModeAction.Enabled) or (not ContinueModeAction.Checked) then begin
957 end else if State = gdsError then begin
958 AddFormMessageNew( gmiOK );
959 EditorPage.ActivePage := PreviewTab;
960 SetContent(ResponseText, Browser);
961 end else if State = gdsAbort then begin
962 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiSAD);
965 function TEditorForm.GetResultType(ResponseText: string): TGikoResultType;
967 if AnsiPos('
\8f\91\82«
\82±
\82Ý
\82ª
\8fI
\82í
\82è
\82Ü
\82µ
\82½', ResponseText) <> 0 then
969 else if (AnsiPos('
\83N
\83b
\83L
\81[
\82ª
\82È
\82¢
\82©
\8aú
\8cÀ
\90Ø
\82ê
\82Å
\82·', ResponseText) > 0) or
970 (AnsiPos('<title>
\83N
\83b
\83L
\81[
\8am
\94F
\81I</title>', ResponseText) > 0) or
971 (AnsiPos('<title>
\81¡
\83N
\83b
\83L
\81[
\8am
\94F
\81I
\81¡</title>', ResponseText) > 0) or
972 //(AnsiPos('
\83N
\83b
\83L
\81[
\8am
\94F', ResponseText) > 0) or
973 (AnsiPos(RES2CH_COOKIE, ResponseText) > 0) then
975 else if (AnsiPos('<font size=+2 color=#FF0000>
\8f\91\82«
\8d\9e\82Ý
\83`
\83F
\83b
\83N
\81I </font>', ResponseText) > 0) or
976 (AnsiPos('<title>
\81¡
\8f\91\82«
\8d\9e\82Ý
\8am
\94F
\82µ
\82Ü
\82·
\81¡</title>', ResponseText) > 0) or
977 (AnsiPos('<title>
\93\8a\8de
\8am
\94F</title>', ResponseText) > 0) or
978 (AnsiPos('<b>
\8f\91\82«
\82±
\82Ý
\8am
\94F</b>', ResponseText) > 0) or
979 (AnsiPos('="../test/subbbs.cgi">', ResponseText) > 0) or
980 (AnsiPos(RES2CH_FALSE, ResponseText) > 0) then
982 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
983 (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
990 procedure TEditorForm.GetSendData(Source: TStringStream);
1001 if GikoSys.Setting.UseMachineTime then begin
1002 if GikoSys.Setting.TimeAdjust then
1003 Adjust := Gikosys.Setting.TimeAdjustSec
1005 Adjust := GikoSys.Setting.TimeAdjustSec * -1;
1006 SendTime := GikoSys.DateTimeToInt(Now) - (9 * 60 * 60) + Adjust
1008 if (Board.LastGetTime = 0) or (Board.LastGetTime = ZERO_DATE) then
1009 SendTime := GikoSys.DateTimeToInt(Now)
1011 SendTime := GikoSys.DateTimeToInt(Board.LastGetTime);
1016 SessionID := GikoSys.Dolib.SessionID;
1017 if SessionID <> '' then
1018 s := 'sid=' + HttpEncode(SessionID) + '&'
1021 s := s + 'subject=&'
1022 + 'FROM=' + HttpEncode(NameComboBox.Text) + '&'
1023 + 'mail=' + HttpEncode(MailComboBox.Text) + '&'
1024 + 'MESSAGE=' + HttpEncode(body) + '&'
1025 + 'bbs=' + Board.BBSID + '&'
1026 + 'time=' + IntToStr(SendTime) + '&';
1028 if FThreadItem = nil then begin
1029 s := s + 'subject=' + HttpEncode(TitleEdit.Text) + '&';
1030 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;
1032 s := s + 'key=' + ChangeFileExt(FThreadItem.FileName, '') + '&';
1033 s := s + 'submit=' + HttpEncode('
\8f\91\82«
\8d\9e\82Þ') + #13#10;
1035 Source.WriteString(s);
1038 procedure TEditorForm.SaveSendFile;
1043 ini := CreateSentIniFile;
1044 if (ini <> nil) then begin
1046 sDate := IntToStr(GikoSys.DateTimeToInt(Now));
1048 ini.WriteString(sDate, 'Name', NameComboBox.Text);
1049 ini.WriteString(sDate, 'EMail', MailComboBox.Text);
1050 ini.WriteString(sDate, 'Body', HttpEncode(BodyEdit.Text));
1051 ini.WriteInteger(sDate, 'Status', FStatusCode);
1052 ini.WriteDateTime(sDate, 'Date', Now);
1053 if FThreadItem = nil then begin
1054 ini.WriteString(sDate, 'Title', MojuUtils.Sanitize(TitleEdit.Text));
1055 //ini.WriteString(sDate, 'BBS', FBoard.BBSID);
1056 ini.WriteString(sDate, 'URL', FBoard.URL);
1057 ini.WriteInteger(sDate, 'NewThread', 1);
1059 ini.WriteString(sDate, 'Title', FThreadItem.Title);
1060 //ini.WriteString(sDate, 'BBS', FThreadItem.ParentBoard.BBSID);
1061 ini.WriteString(sDate, 'URL', FThreadItem.URL);
1062 ini.WriteString(sDate, 'Key', ChangeFileExt(FThreadItem.FileName, ''));
1071 function TEditorForm.CreateSentIniFile: TMemIniFile;
1073 maxSize, fileSize, i: Integer;
1078 maxSize := GikoSys.Setting.SentIniFileSize * 1024 * 1024;
1079 //
\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·
1080 if (maxSize > 0) then begin
1081 fileSize := GikoSys.GetFileSize(GikoSys.Setting.GetSentFileName);
1082 //
\8dÅ
\91å
\83T
\83C
\83Y
\82ð
\92´
\82¦
\82Ä
\82¢
\82½
\8fê
\8d\87\82Í
\83\8a\83l
\81[
\83\80\82·
\82é
1083 if (fileSize >= maxSize) then begin
1085 //
\8d¡
\82Ì
\8e\9e\8d\8f\82ð
\83t
\83@
\83C
\83\8b\96¼
\82Ì
\8cã
\82ë
\82É
\82Â
\82¯
\82é
1087 // 10
\89ñ
\88È
\8fã
\8e¸
\94s
\82µ
\82½
\82ç
\82 \82«
\82ç
\82ß
\82é
1088 if (i > 10) then break;
1089 DateTimeToString(newName, 'yyhhnnsszzz', Now());
1091 until RenameFile(GikoSys.Setting.GetSentFileName,
1092 GikoSys.Setting.GetSentFileName + '.' + newName);
1094 Result := TMemIniFile.Create(GikoSys.Setting.GetSentFileName);
1097 procedure TEditorForm.SendActionExecute(Sender: TObject);
1099 TITLE_SAMBA : string = 'Samba24
\8cx
\8d\90';
1104 state : TGikoDownloadState;
1111 SendAction.Enabled := False;
1112 Application.ProcessMessages;
1113 if not Check then Exit;
1117 if FThreadItem = nil then begin
1118 rc := GikoUtil.MsgBox(Handle,
1119 '
\81u' + Board.Title + '
\81v
\94Â
\82É
\90V
\82µ
\82¢
\83X
\83\8c\83b
\83h
\97§
\82Ä
\82Ü
\82·'#13#10#13#10
1120 + '
\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
1121 + '
\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
1122 + '
\81u
\82Í
\82¢
\81v
\82ð
\89\9f\82·
\82Æ
\91\97\90M
\82µ
\82Ü
\82·',
1124 MB_ICONQUESTION or MB_YESNO);
1125 if rc <> ID_YES then
1129 SetNameList(NameComboBox.Text, MailComboBox.Text);
1130 if (KotehanCheckBox.Enabled) and (KotehanCheckBox.Checked) then begin
1131 Board.KotehanName := NameComboBox.Text;
1132 Board.KotehanMail := MailComboBox.Text;
1135 if Board.IsBoardPlugInAvailable then begin
1138 if FThreadItem = nil then begin
1139 //
\83X
\83\8c\97§
\82Ä
1140 state := TGikoDownloadState( Board.BoardPlugIn.CreateThread(
1141 DWORD( Board ), TitleEdit.Text, NameComboBox.Text, MailComboBox.Text, body ) );
1143 if state = gdsComplete then begin
1144 GikoForm.PlaySound('ResEnd');
1146 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, gmiOK);
1149 end else if State = gdsError then begin
1150 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmSureError), nil, gmiNG);
1151 end else if State = gdsAbort then begin
1152 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiNG);
1156 state := TGikoDownloadState( FThreadItem.ParentBoard.BoardPlugIn.WriteThread(
1157 DWORD( FThreadItem ), NameComboBox.Text, MailComboBox.Text, body ) );
1159 if state = gdsComplete then begin
1160 GikoForm.PlaySound('ResEnd');
1162 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, gmiOK);
1165 end else if State = gdsError then begin
1166 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmResError), nil, gmiOK);
1167 end else if State = gdsAbort then begin
1168 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
1172 if not FSambaTimer.Enabled then begin
1173 if CompareDateTime(Board.Expires ,Now) <= 0 then begin
1178 Send(Board.Cookie, Board.SPID, Board.PON, True);
1180 if not FSambaTimer.CheckSambaTime(Now()) then begin
1181 rc := GikoUtil.MsgBox(Handle,
1182 '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
1183 + '
\91\97\90M
\82ð
\92\86\8e~
\82µ
\82Ü
\82·
\82©
\81H' + #13#10
1184 + '(
\81u
\82¢
\82¢
\82¦
\81v
\82¾
\82Æ
\91\97\90M
\82µ
\82Ü
\82·)', TITLE_SAMBA,
1185 MB_YESNO or MB_ICONQUESTION);
1186 if rc = IDYES then begin
1190 if rc = IDNO then begin
1191 rc2 := GikoUtil.MsgBox(Handle,
1192 '
\96{
\93\96\82É
\91\97\90M
\82µ
\82Ü
\82·
\82©
\81H',
1194 MB_YESNO or MB_ICONQUESTION);
1195 if rc2 = IDNO then begin
1201 if CompareDateTime(Board.Expires ,Now) <= 0 then begin
1206 Send(Board.Cookie, Board.SPID, Board.PON, True);
1211 if FSambaTimer.Enabled then begin
1212 FNow := FSambaTimer.Update;
1217 procedure TEditorForm.SaveActionExecute(Sender: TObject);
1222 procedure TEditorForm.CloseActionExecute(Sender: TObject);
1227 procedure TEditorForm.UndoActionExecute(Sender: TObject);
1229 SendMessage(GetActiveControlHandle, WM_UNDO, 0, 0);
1232 procedure TEditorForm.CutActionExecute(Sender: TObject);
1234 SendMessage(GetActiveControlHandle, WM_CUT, 0, 0);
1237 procedure TEditorForm.CopyActionExecute(Sender: TObject);
1239 SendMessage(GetActiveControlHandle, WM_COPY, 0, 0);
1242 procedure TEditorForm.PasteActionExecute(Sender: TObject);
1244 SendMessage(GetActiveControlHandle, WM_PASTE, 0, 0);
1247 procedure TEditorForm.SelectAllActionExecute(Sender: TObject);
1249 SendMessage(GetActiveControlHandle, EM_SETSEL, 0, GetWindowTextLength(GetActiveControlHandle));
1252 procedure TEditorForm.TopActionExecute(Sender: TObject); //
\83E
\83B
\83\93\83h
\83E
\8dÅ
\91O
\96Ê(Stay)
\83{
\83^
\83\93\82Ì
\8f\88\97\9d
1254 if not (fsShowing in Self.FormState) then begin
1255 if TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
1256 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
1257 GikoSys.Setting.EditWindowStay := true;
1258 end else begin //
\83X
\83e
\83C
\8fó
\91Ô
\89ð
\8f\9c
1259 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
1260 GikoSys.Setting.EditWindowStay := false;
1262 //
\83X
\83e
\83C
\8fó
\91Ô
\82Ì
\95Û
\91¶
1263 //GikoSys.Setting.EditWindowStay := FormStyle = fsStayOnTop;
1267 procedure TEditorForm.AbortActionExecute(Sender: TObject);
1272 procedure TEditorForm.SendActionUpdate(Sender: TObject);
1274 SendAction.Enabled := not FWork;
1277 procedure TEditorForm.SaveActionUpdate(Sender: TObject);
1279 SaveAction.Enabled := False;
1282 procedure TEditorForm.CloseActionUpdate(Sender: TObject);
1284 CloseAction.Enabled := not FWork;
1287 procedure TEditorForm.UndoActionUpdate(Sender: TObject);
1289 UndoAction.Enabled := (GetActiveControlHandle <> 0)
1290 and (SendMessage(GetActiveControlHandle, EM_CANUNDO, 0, 0) <> 0)
1294 procedure TEditorForm.CutActionUpdate(Sender: TObject);
1296 Selection: TSelection;
1299 AHandle := GetActiveControlHandle;
1300 SendMessage(AHandle, EM_GETSEL, Longint(@Selection.StartPos), Longint(@Selection.EndPos));
1301 CutAction.Enabled := (AHandle <> 0)
1302 and ((Selection.EndPos - Selection.StartPos) <> 0)
1306 procedure TEditorForm.CopyActionUpdate(Sender: TObject);
1308 Selection: TSelection;
1311 AHandle := GetActiveControlHandle;
1312 SendMessage(AHandle, EM_GETSEL, Longint(@Selection.StartPos), Longint(@Selection.EndPos));
1313 CopyAction.Enabled := (AHandle <> 0)
1314 and ((Selection.EndPos - Selection.StartPos) <> 0)
1318 procedure TEditorForm.PasteActionUpdate(Sender: TObject);
1320 PasteAction.Enabled := (GetActiveControlHandle <> 0)
1321 and (Clipboard.HasFormat(CF_TEXT))
1325 procedure TEditorForm.TopActionUpdate(Sender: TObject);
1327 TopAction.Enabled := not FWork;
1330 procedure TEditorForm.SageCheckBoxClick(Sender: TObject);
1332 if SageCheckBox.Checked then begin
1333 if AnsiPos('sage', MailComboBox.Text) = 0 then
1334 MailComboBox.Text := 'sage' + MailComboBox.Text;
1336 if AnsiPos('sage', MailComboBox.Text) <> 0 then
1337 MailComboBox.Text := StringReplace(MailComboBox.Text, 'sage', '', [rfReplaceAll]);
1341 procedure TEditorForm.MailComboBoxChange(Sender: TObject);
1343 if AnsiPos('sage', MailComboBox.Text) = 0 then
1344 SageCheckBox.Checked := False
1346 SageCheckBox.Checked := True;
1349 procedure TEditorForm.IdLogDebugReceive(ASender: TIdConnectionIntercept;
1352 StringStream: TStringStream;
1354 StringStream := TStringStream.Create('');
1356 StringStream.CopyFrom(AStream, AStream.Size);
1357 FDebugStrReceive := FDebugStrReceive + StringStream.DataString;
1363 procedure TEditorForm.IdLogDebugSend(ASender: TIdConnectionIntercept;
1366 StringStream: TStringStream;
1368 StringStream := TStringStream.Create('');
1370 StringStream.CopyFrom(AStream, AStream.Size);
1371 FDebugStrSend := FDebugStrSend + StringStream.DataString;
1377 procedure TEditorForm.TransActionExecute(Sender: TObject);
1379 AlphaBlend := TransAction.Checked;
1380 //
\94¼
\93§
\96¾
\8fó
\91Ô
\82Ì
\95Û
\91¶
1381 GikoSys.Setting.EditWindowTranslucent := TransAction.Checked;
1384 procedure TEditorForm.TransActionUpdate(Sender: TObject);
1386 TransAction.Enabled := not FWork;
1388 //StatusBar
\82ÌPanels[0]
\82Ì
\95\9d\82ð
\89Â
\95Ï
\81B
\8ec
\82è
\82ð
\8cÅ
\92è
\82É
\82·
\82é
1389 procedure TEditorForm.StatusBarResize(Sender: TObject);
1391 StatusBar.Panels[0].Width := StatusBar.Width
1392 - StatusBar.Panels[1].Width - StatusBar.Panels[2].Width;
1396 //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Þ
1397 procedure TEditorForm.FormActivate(Sender: TObject);
1399 if ( FSambaTimer.Enabled ) and ( FThreadItem <> nil ) then
1401 FNow := FSambaTimer.Update;
1403 if GikoSys.Setting.GestureEnabled then begin
1404 GikoSys.Setting.Gestures.ClearGesture;
1405 GikoSys.Setting.Gestures.LoadGesture(
1406 GikoSys.Setting.GetGestureFileName, ActionList );
1407 MouseGesture.UnHook;
1408 MouseGesture.OnGestureStart := OnGestureStart;
1409 MouseGesture.OnGestureMove := OnGestureMove;
1410 MouseGesture.OnGestureEnd := OnGestureEnd;
1411 MouseGesture.SetHook( Handle );
1414 procedure TEditorForm.FormCloseQuery(Sender: TObject;
1415 var CanClose: Boolean);
1417 CanClose := not FWork;
1420 procedure TEditorForm.QuotePasteActionExecute(Sender: TObject);
1427 quote := GikoSys.GetOEIndentChar;
1428 s := TStringList.Create;
1430 s.Text := Clipboard.AsText;
1432 for i := s.Count - 1 downto 0 do
1433 s[ i ] := quote + s[ i ];
1435 BodyEdit.SelText := s.Text;
1442 procedure TEditorForm.SpaceToNBSPActionExecute(Sender: TObject);
1444 GikoSys.Setting.SpaceToNBSP := SpaceToNBSPAction.Checked;
1445 if EditorPage.ActivePage = PreviewTab then
1449 procedure TEditorForm.AmpToCharRefActionExecute(Sender: TObject);
1451 GikoSys.Setting.AmpToCharRef := AmpToCharRefAction.Checked;
1452 if EditorPage.ActivePage = PreviewTab then
1456 procedure TEditorForm.BoardTopClick(Sender: TObject);
1460 ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
1462 BoardtopTab.TabVisible := BoardTop.Checked;
1463 ini.WriteBool('EditorForm', 'BoardTopTab', BoardtopTab.TabVisible);
1471 procedure TEditorForm.GetSETTINGTXTActionExecute(Sender: TObject);
1473 memStream: TMemoryStream;
1474 URL, RefURL: string;
1475 settingBody: TStringList;
1478 if not FWork then begin
1481 tmpBoard := GetBoard;
1482 if tmpBoard <> nil then begin
1484 RefURL := tmpBoard.URL;
1485 if RefURL[Length(RefURL)] <> '/' then
1486 URL := RefURL + '/' + 'SETTING.TXT'
1488 URL := RefURL + 'SETTING.TXT';
1489 Screen.Cursor := crHourGlass;
1490 memStream := TMemoryStream.Create;
1493 StatusBar.Panels[0].Text := 'SETTING.TXT
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86';
1494 GetWebData(URL, RefURL, tmpBoard.SETTINGTXTTime, memStream);
1495 if( Indy.ResponseCode = 200 ) then begin
1496 settingBody := TStringList.Create;
1498 memStream.Seek(0, soFromBeginning);
1499 settingBody.LoadFromStream(memStream);
1500 settingBody.SaveToFile(tmpBoard.GetSETTINGTXTFileName);
1501 tmpBoard.SETTINGTXTTime := Indy.Response.LastModified;
1502 tmpBoard.IsSETTINGTXT := true;
1503 tmpBoard.TitlePictureURL := GetTitlePictureURL(settingBody, tmpBoard);
1504 tmpBoard.Modified := true;
1508 StatusBar.Panels[0].Text := 'SETTING.TXT
\8eæ
\93¾
\8a®
\97¹(' + IntToStr(Indy.ResponseCode) + ')';
1511 on E: EIdException do begin
1512 if( AnsiPos('304', E.Message) > 0 ) then
1513 StatusBar.Panels[0].Text := 'SETTING.TXT
\8dX
\90V
\96³
\82µ(' + IntToStr(Indy.ResponseCode) + ')'
1515 StatusBar.Panels[0].Text := 'SETTING.TXT
\8eæ
\93¾
\83G
\83\89\81[(' + IntToStr(Indy.ResponseCode) + ')';
1520 Screen.Cursor := crDefault;
1522 ShowBoardInformation(tmpBoard, BoardInformationMemo);
1528 procedure TEditorForm.ShowBoardInformation(ABoard: TBoard; AMemo: TMemo);
1533 AMemo.Lines.Add('[SETTING.TXT]');
1534 if ABoard.IsSETTINGTXT then begin
1535 if FileExists(ABoard.GetSETTINGTXTFileName) then begin
1536 AMemo.Lines.Add(DateTimeToStr(ABoard.SETTINGTXTTime) + '
\8dX
\90V');
1537 body := TStringList.Create;
1539 body.LoadFromFile(ABoard.GetSETTINGTXTFileName);
1540 AMemo.Lines.AddStrings(body);
1545 ABoard.IsSETTINGTXT := false;
1546 ABoard.SETTINGTXTTime := ZERO_DATE;
1547 AMemo.Lines.Add('Local
\82É
\95Û
\91¶
\82³
\82ê
\82½SETTING.TXT
\82ª
\8c©
\82Â
\82©
\82è
\82Ü
\82¹
\82ñ');
1548 AMemo.Lines.Add('
\83\81\83j
\83\85\81[
\82æ
\82è
\8dÄ
\8eæ
\93¾
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
1551 AMemo.Lines.Add('SETTING.TXT
\82ð
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B');
1552 AMemo.Lines.Add('
\83\81\83j
\83\85\81[
\82æ
\82è
\8eæ
\93¾
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
1555 function TEditorForm.GetTitlePictureURL(body: TStringList; ABoard: TBoard): string;
1556 //BBS_TITLE_PICTURE=
1563 for i := 0 to body.Count - 1 do begin
1564 if (AnsiPos('BBS_TITLE_PICTURE=', body[i]) > 0) or
1565 (AnsiPos('BBS_FIGUREHEAD=', body[i]) > 0) then begin
1567 Delete(tmp, 1, AnsiPos('=', tmp));
1568 if AnsiPos('../', tmp) > 0 then begin
1569 tmp := CustomStringReplace(tmp, '../', GikoSys.UrlToServer(ABoard.URL));
1577 procedure TEditorForm.GetTitlePictureActionUpdate(Sender: TObject);
1579 if FThreadItem = nil then
1580 GetTitlePictureAction.Enabled := FBoard.IsSETTINGTXT
1582 GetTitlePictureAction.Enabled := FThreadItem.ParentBoard.IsSETTINGTXT;
1584 if GetTitlePictureAction.Enabled Then begin
1585 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
1586 GetTitlePictureAction.Enabled := not FWork;
1590 procedure TEditorForm.GetTitlePictureActionExecute(Sender: TObject);
1592 memStream: TMemoryStream;
1599 memStream := TMemoryStream.Create;
1601 tmpBoard := GetBoard;
1603 if (tmpBoard <> nil) and (tmpBoard.TitlePictureURL <> '') then begin
1604 StatusBar.Panels[0].Text := '
\94Â
\83g
\83b
\83v
\89æ
\91\9c\83_
\83E
\83\93\83\8d\81[
\83h
\92\86';
1605 Screen.Cursor := crHourGlass;
1607 // URL
\82ð
\8ew
\92è
\82µ
\82Ä
\83\81\83\82\83\8a\82É
\93Ç
\82Ý
\8d\9e\82Þ
1608 GetWebData(tmpBoard.TitlePictureURL, tmpBoard.URL,
1609 ZERO_DATE, memStream);
1610 if Indy.ResponseCode = 200 then begin
1611 memStream.SaveToFile(tmpBoard.GetTitlePictureFileName);
1613 tmpBoard.Modified := true;
1615 StatusBar.Panels[0].Text := '
\94Â
\83g
\83b
\83v
\89æ
\91\9c (' + IntToStr(Indy.ResponseCode) + ')';
1622 Screen.Cursor := crDefault;
1626 \brief URL
\82Ì
\83f
\81[
\83^
\82ðstream
\82É
\93Ç
\82Ý
\8d\9e\82Þ
1627 \param URL
\93Ç
\82Ý
\8d\9e\82Þ
\90æ
1628 \param RefURL referer
\82É
\90Ý
\92è
\82·
\82é
1629 \param Modified Modified
\82É
\90Ý
\92è
\82·
\82é
1630 \param stream
\93Ç
\82Ý
\8d\9e\82ñ
\82¾
\83f
\81[
\83^
\82Ì
\95Û
\91¶
\90æ
1632 procedure TEditorForm.GetWebData(const URL: string; const RefURL: string;
1633 Modified: TDateTime; stream: TStream);
1636 Indy.Request.Referer := RefURL;
1637 Indy.Request.LastModified := Modified;
1639 IdAntiFreeze.Active := True;
1641 Indy.Get(URL, stream);
1643 IdAntiFreeze.Active := False;
1647 procedure TEditorForm.ShowTitlePicture();
1652 tmpBoard := GetBoard;
1654 if FileExists(tmpBoard.GetTitlePictureFileName) then begin
1655 TitlePictureBrowser.Navigate(tmpBoard.GetTitlePictureFileName);
1657 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';
1658 SetContent(s, TitlePictureBrowser);
1662 function TEditorForm.GetFusianaName(body: TStringList; ABoard: TBoard): String;
1667 for i := 0 to body.Count - 1 do begin
1668 if (AnsiPos('BBS_NONAME_NAME=', body[i]) > 0) then begin
1670 Delete(tmp, 1, AnsiPos('=', tmp));
1677 procedure TEditorForm.GetHeadTXTActionExecute(Sender: TObject);
1679 URL, RefURL: string;
1680 settingBody: TStringList;
1682 memStream: TMemoryStream;
1684 if not FWork then begin
1687 tmpBoard := GetBoard;
1688 if (tmpBoard <> nil) then begin
1690 RefURL := tmpBoard.URL;
1691 if RefURL[Length(RefURL)] <> '/' then
1692 URL := RefURL + '/' + 'head.txt'
1694 URL := RefURL + 'head.txt';
1696 Screen.Cursor := crHourGlass;
1697 memStream := TMemoryStream.Create;
1699 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';
1701 GetWebData(URL, RefURL, tmpBoard.HEADTXTTime, memStream);
1702 if( Indy.ResponseCode = 200 ) then begin
1703 settingBody := TStringList.Create;
1705 memStream.Seek(0, soFromBeginning);
1706 settingBody.LoadFromStream(memStream);
1707 settingBody.Insert(0, '<HTML lang="ja"><HEAD>');
1708 settingBody.Insert(1, '<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">');
1709 settingBody.Insert(2, '<TITLE>' + tmpBoard.Title + '</TITLE>');
1710 settingBody.Insert(3, '<base href="' + RefURL + '"></HEAD><BODY>');
1711 settingBody.Add('</BODY></HTML>');
1712 settingBody.SaveToFile(tmpBoard.GETHEADTXTFileName);
1713 tmpBoard.HEADTXTTime := Indy.Response.LastModified;
1714 tmpBoard.IsHEADTXT := true;
1715 tmpBoard.Modified := true;
1719 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾
\8a®
\97¹(' + IntToStr(Indy.ResponseCode) + ')';
1722 on E: EIdException do begin
1723 if( AnsiPos('304', E.Message) > 0 ) then
1724 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8dX
\90V
\96³
\82µ(' + IntToStr(Indy.ResponseCode) + ')'
1726 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾
\83G
\83\89\81[(' + IntToStr(Indy.ResponseCode) + ')';
1731 Screen.Cursor := crDefault;
1733 if tmpBoard.IsHEADTXT then begin
1734 ShowBoardHead(tmpboard, LocalEdit);
1742 procedure TEditorForm.CalcCapacityActionExecute(Sender: TObject);
1748 //
\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
1751 if Board.BoardPlugIn <> nil then
1752 body := CustomStringReplace(body, #13#10, '<br>')
1754 body := CustomStringReplace(body, #13#10, ' <br> ');
1755 StatusBar.Panels[0].Text := '
\97e
\97Ê:' + IntToStr(Length(body)) + ' byte';
1758 procedure TEditorForm.LocalRuleClick(Sender: TObject);
1762 ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
1764 RocalRuleTab.TabVisible := LocalRule.Checked;
1765 ini.WriteBool('EditorForm', 'LocalRuleTab', RocalRuleTab.TabVisible);
1772 procedure TEditorForm.FormDeactivate(Sender: TObject);
1774 if GikoSys.Setting.GestureEnabled then begin
1775 GikoSys.Setting.Gestures.ClearGesture;
1776 MouseGesture.UnHook;
1777 MouseGesture.OnGestureStart := nil;
1778 MouseGesture.OnGestureMove := nil;
1779 MouseGesture.OnGestureEnd := nil;
1783 procedure TEditorForm.OnGestureStart(Sender: TObject);
1788 procedure TEditorForm.OnGestureMove(Sender: TObject);
1794 s := MouseGesture.GetGestureStr;
1796 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
1797 if Action <> nil then
1798 ActStr := '
\81i' + Action.Caption + '
\81j';
1799 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
1800 StatusBar.Panels[0].Text := s;
1803 procedure TEditorForm.OnGestureEnd(Sender: TObject);
1808 s := MouseGesture.GetGestureStr;
1810 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
1811 if Action <> nil then
1813 StatusBar.Panels[0].Text := '';
1816 procedure TEditorForm.ShowBoardHead(ABoard: TBoard; AMemo: TMemo);
1821 //http://www.campus.ne.jp/~ishigami/CREATION/TECHNIC/WEBAP-2.htm
1822 WebBrowser1.Navigate(ABoard.GETHEADTXTFileName);
1823 //
\83\8c\83^
\83\8a\83\93\83O
\82ª
\92x
\82·
\82¬
\82ÄTXT
\82É
\88Ú
\82¹
\82È
\82¢
\81B
\82Ê
\82é
\82Ûorz
1824 //
\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
1825 //
\82±
\82ê
\82Å
\82¢
\82¯
\82Ü
\82µ
\82½
\81B
\82 \82è
\82ª
\82Æ
\82¤
\82²
\82´
\82¢
\82Ü
\82µ
\82½
\81B
1826 while (WebBrowser1.ReadyState <> READYSTATE_COMPLETE) and
1827 (WebBrowser1.ReadyState <> READYSTATE_INTERACTIVE) do begin
1828 Application.ProcessMessages;
1833 range := OleVariant(WebBrowser1.Document).body.createTextRange;
1834 LocalEdit.Text := range.text;
1839 procedure TEditorForm.LocalRuleBrowseClick(Sender: TObject);
1849 URL := ABoard.GETHEADTXTFileName;
1850 GikoSys.OpenBrowser(URL, gbtAuto);
1853 procedure TEditorForm.SaveNameMailActionExecute(Sender: TObject);
1855 SaveNameMailAction.Checked := not SaveNameMailAction.Checked;
1856 KotehanCheckBox.Enabled := SaveNameMailAction.Checked;
1859 function TEditorForm.LFusianaGet(const s: String): Boolean;
1861 FUSIANA = 'fusianasan';
1865 i := AnsiPos(FUSIANA, s);
1869 procedure TEditorForm.BeLogInOutEActionExecute(Sender: TObject);
1871 GikoSys.Setting.BeLogin := not GikoSys.Setting.BeLogin;
1874 procedure TEditorForm.BeLogInOutEActionUpdate(Sender: TObject);
1876 if (GikoSys.Setting.BeUserID <> '') and (GikoSys.Setting.BeCode <> '') then begin
1877 if (GikoSys.Setting.BeLogin) then BeLogInOutEAction.Checked := true
1878 else BeLogInOutEAction.Checked := false;
1879 BeLogInOutEAction.Enabled := true
1881 BeLogInOutEAction.Enabled := false;
1884 // Cookie
\82Ì
\8eæ
\93¾
1885 procedure TEditorForm.GetCookie(Rawtext: String; ABoard: TBoard);
1887 COOKIE_MARK = 'Set-Cookie:';
1890 EXPIRES_MARK = 'expires=';
1895 curCookies : TStringList;
1896 tmpCookieName : string;
1898 // 2008.12.14
\96³
\8fð
\8c\8f\83N
\83\8a\83A
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢ by
\82à
\82¶
\82ã
1899 curCookies := TStringList.Create;
1900 curCookies.Delimiter := ';';
1901 curCookies.DelimitedText := ABoard.Cookie;
1902 ABoard.Cookie := '';
1904 while (AnsiPos(COOKIE_MARK, Rawtext) > 0 ) do begin
1905 tmp := Copy(Rawtext, AnsiPos(COOKIE_MARK, Rawtext) + Length(COOKIE_MARK), Length(Rawtext));
1906 Delete(Rawtext, 1, AnsiPos('Set-Cookie', Rawtext)+ Length(COOKIE_MARK));
1907 //Cookie
\82ð
\90Ø
\82è
\8fo
\82·
1908 val := Trim(GikoSys.GetTokenIndex(tmp, ';', 0));
1909 if( AnsiPos(VAL_SPID, val) > 0 ) then begin
1910 ABoard.SPID := Copy(val, AnsiPos(VAL_SPID, val) + Length(VAL_SPID), Length(val));
1911 end else if( AnsiPos(VAL_PON, val) > 0 ) then begin
1912 ABoard.PON := Copy(val, AnsiPos(VAL_PON, val) + Length(VAL_PON), Length(val));
1914 //
\8aù
\91¶
\82ÌCookie
\82Ì
\8fê
\8d\87\82Í
\92l
\82¾
\82¯
\95t
\82¯
\91Ö
\82¦
\82é
1915 pos := AnsiPos('=', val);
1916 if pos > 0 then begin
1917 tmpCookieName := Copy(val, 0, pos - 1);
1918 for i := 0 to curCookies.Count - 1 do begin
1919 if (curCookies.IndexOfName(tmpCookieName) >= 0) then begin
1920 curCookies.Values[tmpCookieName] := Copy(val, pos + 1, Length(val));
1921 tmpCookieName := '';
1925 if (tmpCookieName <> '') then begin
1926 curCookies.Add(val);
1929 //tmpCookie := tmpCookie + val + '; ';
1931 //expires
\82ð
\90Ø
\82è
\8fo
\82·
1932 val := Trim(GikoSys.GetTokenIndex(tmp, ';', 1));
1933 if( AnsiPos(EXPIRES_MARK, val) > 0) then begin
1934 Delete(val, 1, AnsiPos(EXPIRES_MARK, val) + Length(EXPIRES_MARK) - 1);
1935 ABoard.Expires := GMTToLocalDateTime(val);
1938 for i := 0 to curCookies.Count - 1 do begin
1939 if (curCookies.Strings[i] <> '') then begin
1940 ABoard.Cookie := ABoard.Cookie + curCookies.Strings[i] + '; ';
1948 //! hidden
\83f
\81[
\83^
\8eæ
\93¾
1949 procedure TEditorForm.GetHiddenParameter(Rawtext: String; ABoard: TBoard);
1951 INPUT_MARK = '<input type=hidden' ; //
\91å
\95¶
\8e\9a\8f¬
\95¶
\8e\9a\82Î
\82ç
\82Î
\82ç
\82È
\82±
\82Æ
\82É
\92\8d\88Ó
1952 VALUE_MARK = 'value=' ; //
\91å
\95¶
\8e\9a\8f¬
\95¶
\8e\9a\82Î
\82ç
\82Î
\82ç
\82È
\82±
\82Æ
\82É
\92\8d\88Ó
1953 NAME_MARK = 'name=' ; //
\91å
\95¶
\8e\9a\8f¬
\95¶
\8e\9a\82Î
\82ç
\82Î
\82ç
\82È
\82±
\82Æ
\82É
\92\8d\88Ó
1954 IGNORE_NAMES : array[0..6] of String =
1955 ('subject', 'from', 'mail', 'message', 'bbs', 'time', 'key');
1957 tmp, line, name, value, lname : String;
1958 pos, pose, i : Integer;
1960 tmp := AnsiLowerCase(Rawtext);
1961 pos := AnsiPos(INPUT_MARK, tmp);
1962 while (pos > 0 ) do begin
1963 tmp := Copy(Rawtext, pos + Length(INPUT_MARK), Length(tmp));
1964 Delete(Rawtext, 1, pos+ Length(INPUT_MARK) - 1);
1965 pose := AnsiPos('>', tmp);
1966 // name=xxx value=yyy
\82ª
\90Ø
\82è
\8fo
\82³
\82ê
\82é
1967 line := Copy(tmp, 1, pose - 1);
1970 pos := AnsiPos(NAME_MARK, tmp);
1971 if (pos > 0) then begin
1972 name := Copy(Rawtext, pos + Length(NAME_MARK), Length(line));
1973 //
\94¼
\8ap"
\82Å
\8en
\82Ü
\82Á
\82Ä
\82¢
\82é
\82©
1974 if AnsiPos('"', name) = 1 then begin
1975 //
\94¼
\8ap"
\82Ü
\82Å
\82ð
\83R
\83s
\81[
1977 pose := AnsiPos('"', name);
1978 if (pose > 0) then begin
1979 Delete(name, pose, Length(name));
1981 pose := AnsiPos(' ', name);
1982 if (pose > 0) then begin
1983 Delete(name, pose, Length(name));
1987 pose := AnsiPos(' ', name);
1988 if (pose > 0) then begin
1989 Delete(name, pose, Length(name));
1993 lname := AnsiLowerCase(name);
1994 for i := 0 to Length(IGNORE_NAMES) do begin
1995 if lname = IGNORE_NAMES[i] then begin
2000 pos := AnsiPos(VALUE_MARK, tmp);
2001 if (name <> '') and (pos > 0) then begin
2002 value := Copy(Rawtext, pos + Length(VALUE_MARK), Length(line));
2003 //
\94¼
\8ap"
\82Å
\8en
\82Ü
\82Á
\82Ä
\82¢
\82é
\82©
2004 if AnsiPos('"', value) = 1 then begin
2005 //
\94¼
\8ap"
\82Ü
\82Å
\82ð
\83R
\83s
\81[
2006 Delete(value, 1, 1);
2007 pose := AnsiPos('"', value);
2008 if (pose > 0) then begin
2009 Delete(value, pose, Length(value));
2011 pose := AnsiPos(' ', value);
2012 if (pose > 0) then begin
2013 Delete(value, pose, Length(value));
2017 pose := AnsiPos(' ', value);
2018 if (pose > 0) then begin
2019 Delete(value, pose, Length(name));
2023 if (name <> '') then begin
2024 ABoard.Cookie := ABoard.Cookie + name + '=' + value + '; ';
2027 Delete(tmp, 1, Length(line));
2028 Delete(Rawtext, 1, Length(line));
2029 pos := AnsiPos(INPUT_MARK, tmp);
2033 //!
\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
2034 procedure TEditorForm.UpdateSambaActionUpdate(Sender: TObject);
2036 UpdateSambaAction.Enabled := FSambaTimer.Enabled;
2039 //!
\83T
\83\93\83o
\8dX
\90V
\83A
\83N
\83V
\83\87\83\93
2040 procedure TEditorForm.UpdateSambaActionExecute(Sender: TObject);
2045 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
2046 input := ZenToHan(input);
2047 if GikoSys.IsNumeric(input) then begin
2048 FSambaTimer.UpdateSambaSetting(StrToInt(input));
2050 //
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81ASamba
\83^
\83C
\83}
\81[
\82ð
\8dX
\90V
\82·
\82é
2051 for i := 0 to Screen.FormCount - 1 do begin
2052 if Screen.Forms[i] is TEditorForm then begin
2053 TEditorForm(Screen.Forms[i]).FSambaTimer.Update;
2054 TEditorForm(Screen.Forms[i]).UpdateSambaStatus;
2058 ShowMessage('
\90\94\92l
\82ð
\93ü
\97Í
\82µ
\82Ä
\82
\82¾
\82³
\82¢');
2059 UpdateSambaActionExecute(Sender);
2064 procedure TEditorForm.UpdateSambaStatus;
2066 if (FSambaTimer.Enabled) then begin
2067 StatusBar.Panels[2].Text
2068 := 'Samba24
\8bK
\92è
\92l' + IntToStr(FSambaTimer.SambaInterval);
2072 procedure TEditorForm.InputAssistActionExecute(Sender: TObject);
2078 TextWidth, ItemWidth, tmpWidth: Integer;
2080 if FInputAssistKey = '' then Exit;
2082 InputAssistPopupMenu.Items.Clear;
2084 if (FResistWords = nil) then begin
2085 FResistWords := TStringList.Create;
2090 if (GetKeyState( VK_SHIFT ) < 0) then begin
2091 //
\83V
\83t
\83g
\82ª
\89\9f\82³
\82ê
\82Ä
\82¢
\82ê
\82Î
\81A
\83L
\81[
\82Å
\8en
\82Ü
\82é
\83J
\83e
\83S
\83\8a
2093 InputAssistDM.GetStartWithCategoryResistWords(
2094 FInputAssistKey, FResistWords);
2096 //
\83V
\83t
\83g
\82ª
\96³
\82¢
\82Ì
\82Å
\81A
\83L
\81[
\82Å
\8en
\82Ü
\82é
\83L
\81[
2098 InputAssistDM.GetStartWithKeyResistWords(
2099 FInputAssistKey, FResistWords);
2101 Bitmap := TBitmap.Create;
2103 Bitmap.Canvas.Font.Assign(BodyEdit.Font);
2104 //
\83}
\81[
\83W
\83\935px
2105 TextWidth := Bitmap.Canvas.TextWidth(FInputAssistKey) + 5;
2107 for i := 0 to count - 1 do begin
2108 item := TMenuItem.Create(nil);
2109 item.Break := mbNone;
2110 item.Caption := FResistWords[i];
2112 item.OnClick := InputAssistMenuClick;
2113 InputAssistPopupMenu.Items.Add(item);
2115 tmpWidth := Bitmap.Canvas.TextWidth(Item.Caption);
2116 if (tmpWidth > ItemWidth) then begin
2117 ItemWidth := tmpWidth;
2124 if (count > 0) then begin
2126 point.X := point.X + Self.Left + (Self.Width - BodyEdit.Width) div 2;
2127 point.Y := point.Y + Self.Top + (Self.Height - Self.ClientHeight);
2129 if Screen.DesktopWidth >
2130 (point.X + TextWidth + ItemWidth) then begin
2131 InputAssistPopupMenu.Popup(
2132 point.X + TextWidth,
2133 point.Y + EditorPage.Top + EditorPage.TabHeight + BodyEdit.Top);
2135 InputAssistPopupMenu.Popup(
2136 point.X - TextWidth - ItemWidth,
2137 point.Y + EditorPage.Top + EditorPage.TabHeight + BodyEdit.Top);
2142 procedure TEditorForm.InputAssistMenuClick(Sender: TObject);
2147 if not (Sender is TMenuItem) then Exit;
2149 if (FResistWords <> nil) then begin
2152 TResistWord(FResistWords.Objects[TMenuItem(Sender).Tag]).GetText;
2156 IMC := ImmGetContext(BodyEdit.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
2158 ImmNotifyIME(IMC, NI_COMPOSITIONSTR, CPS_CANCEL, 0);
2160 ImmReleaseContext(BodyEdit.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
2164 FInputAssistKey := '';
2166 InsertText(BodyEdit, text);
2169 //! TMemo
\82Ì
\83J
\81[
\83\
\83\8b\88Ê
\92u
\82É
\95¶
\8e\9a\97ñ
\91}
\93ü
2170 procedure TEditorForm.InsertText(Memo: TMemo; Text: String);
2172 line, sel, pos: Integer;
2173 left, right : String;
2175 Memo.Lines.BeginUpdate;
2176 line := SendMessage(Memo.Handle,EM_LINEFROMCHAR,-1,0); //
\8ds
2177 sel := Memo.SelStart;
2178 pos := sel - SendMessage(Memo.Handle, EM_LINEINDEX, -1, 0); //
\8c\85
2179 if (pos > 0) then begin
2180 left := Copy(Memo.Lines[line], 0, pos);
2184 right := Copy(Memo.Lines[line], pos + 1, Length(Memo.Lines[line]));
2185 Memo.Lines.Strings[line] := left + Text + right;
2186 Memo.Lines.EndUpdate;
2187 //
\81@
\83L
\83\83\83\8c\83b
\83g
\82Ì
\88Ê
\92u
\82ð
\8dX
\90V
\82·
\82é
2188 Memo.SelStart := sel + Length(text);
2189 //
\83L
\83\83\83\8c\83b
\83g
\82Ì
\88Ê
\92u
\82Ü
\82Å
\83X
\83N
\83\8d\81[
\83\8b
2190 Memo.Perform(EM_SCROLLCARET, 0, 0);
2194 procedure TEditorForm.ApplicationEvents1Message(var Msg: tagMSG;
2195 var Handled: Boolean);
2202 if (Self.Active) then begin
2204 //
\83L
\81[
\89\9f\89º
\82Ì
\82Ý
\8eó
\82¯
\8eæ
\82é
2207 //
\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é
2208 if (EditorPage.ActivePageIndex = 0)
2209 and (GetKeyState( VK_CONTROL ) < 0) then begin
2210 wmMsg.Msg := Msg.message;
2211 wmMsg.CharCode := Word(Msg.wParam);
2212 wmMsg.KeyData := Msg.lParam;
2213 if (wmMsg.CharCode = 229) and (wmMsg.KeyData = 3735553) then begin
2214 IMC := ImmGetContext(BodyEdit.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
2215 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
2216 if (Len > 0) then begin
2217 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
2218 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
2219 SetLength(Str, Len);
2220 FInputAssistKey := Str;
2221 InputAssistActionExecute(nil);
2224 ImmReleaseContext(BodyEdit.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
2233 procedure TEditorForm.ShowInputAssistFormExecute(Sender: TObject);
2235 form : TInputAssistForm;
2237 form := TInputAssistForm.Create(nil);
2239 if TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
2240 SetWindowPos(form.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2242 form.SetUpFromEditor;
2243 if (form.ShowModal = mrOk) then begin
2244 InsertText(BodyEdit, form.GetInsertText);
2250 //! Cookie
\8fî
\95ñ
\8dí
\8f\9c
2251 procedure TEditorForm.ReleaseCookieActionExecute(Sender: TObject);
2255 //
\83X
\83\8c\83b
\83h
\82ª
\96³
\82¢
\81@
\83X
\83\8c\97§
\82Ä
\82Ì
\82Æ
\82«
\82ÍFBoard
\82ð
\92¼
\90Ú
\8eg
\82¤
2258 //
\83N
\83b
\83L
\81[
\82Ì
\8fî
\95ñ
\82ð
\8eÌ
\82Ä
\82é
2262 // 0
\82É
\8aª
\82«
\96ß
\82·
2265 //!
\94Â
\8fî
\95ñ
\8eæ
\93¾Update
\83C
\83x
\83\93\83g
2266 procedure TEditorForm.GetSETTINGTXTActionUpdate(Sender: TObject);
2268 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
2269 GetSETTINGTXTAction.Enabled := not FWork;
2271 //!
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾Update
\83C
\83x
\83\93\83g
2272 procedure TEditorForm.GetHeadTXTActionUpdate(Sender: TObject);
2274 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
2275 GetSETTINGTXTAction.Enabled := not FWork;
2278 //! Samba
\83^
\83C
\83}
\81[
\83C
\83x
\83\93\83g
2279 procedure TEditorForm.SambaTimer(Sender: TObject);
2282 if FSambaTimer.WriteDeta = ZERO_DATE then
2283 StatusBar.Panels[1].Text := '
\8f\89\8f\91'
2285 FNow := IncMilliSecond(FNow, 500);
2286 StatusBar.Panels[1].Text :=
2287 Format('%8.0f
\95b
\8co
\89ß', [SecondSpan(FNow, FSambaTimer.WriteDeta)]);
2291 \brief
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82Æ
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
2293 procedure TEditorForm.SetWindowRect;
2295 wp: TWindowPlacement;
2297 //
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\90Ý
\92è
2298 wp.length := sizeof(wp);
2299 wp.rcNormalPosition.Top := GikoSys.Setting.EditWindowTop;
2300 wp.rcNormalPosition.Left := GikoSys.Setting.EditWindowLeft;
2302 wp.rcNormalPosition.Bottom := GikoSys.Setting.EditWindowTop + GikoSys.Setting.EditWindowHeight;
2303 wp.rcNormalPosition.Right := GikoSys.Setting.EditWindowLeft + GikoSys.Setting.EditWindowWidth;
2304 wp.showCmd := SW_HIDE;
2305 SetWindowPlacement(Handle, @wp);
2307 if GikoSys.Setting.EditWindowMax then begin
2308 WindowState := wsMaximized;
2311 //
\83E
\83B
\83\93\83h
\83E
\82ª
\89æ
\96Ê
\8aO
\82È
\82ç
\89æ
\96Ê
\93à
\82É
\88Ú
\93®
\82·
\82é
2312 if (Left + Width) > Screen.Width then begin
2315 if (Top + Height) > Screen.Height then begin
2318 if Left < 0 then begin
2321 if Top < 0 then begin
2325 //
\8c»
\8dÝ
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82ð
\95Û
\91¶
2326 GikoSys.Setting.EditWindowTop := Top + WINDOWMOVE_V; //
\8e\9f\82É
\8aJ
\82
\83E
\83B
\83\93\83h
\83E
\82Í
2327 GikoSys.Setting.EditWindowLeft := Left + WINDOWMOVE_H; //
\81@
\81@
\81@
\89E
\8eÎ
\82ß
\89º
\82É
\82¸
\82ç
\82·
2328 //
\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·
2329 if GikoSys.Setting.EditWindowHeight < 144 then begin
2332 if GikoSys.Setting.EditWindowWidth < 144 then begin
2337 \brief
\8ag
\92£
\83^
\83u
\90Ý
\92è
2339 procedure TEditorForm.SetExtraTab;
2341 SECTION = 'EditorForm';
2345 ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
2347 BoardtopTab.TabVisible := ini.Readbool(SECTION, 'BoardTopTab', False);
2348 BoardTop.Checked := BoardtopTab.TabVisible;
2349 RocalRuleTab.TabVisible := ini.ReadBool(SECTION, 'LocalRuleTab', False);
2350 LocalRule.Checked := RocalRuleTab.TabVisible;
2357 \return
\83\8c\83X
\83G
\83f
\83B
\83^
\82ª
\93\8a\8de
\82µ
\82æ
\82¤
\82Æ
\82µ
\82Ä
\82¢
\82é
\94Â
2359 function TEditorForm.GetBoard : TBoard;
2361 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ªnull
\82Ì
\8e\9e\82ÍFBoard
2362 if FThreadItem = nil then begin
2365 Result := FThreadItem.ParentBoard;
2369 \brief GikoForm
\82É
\83\81\83b
\83Z
\81[
\83W
\82ð
\92Ç
\89Á
\82·
\82é
2370 \param icon
\83\81\83b
\83Z
\81[
\83W
\82É
\82Â
\82
\83A
\83C
\83R
\83\93
2372 procedure TEditorForm.AddFormMessageNew(icon: TGikoMessageIcon);
2374 if FThreadItem = nil then begin
2375 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, icon)
2377 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, icon);
2382 \brief
\83\8d\81[
\83J
\83\8bfusiana
\83g
\83\89\83b
\83v
2383 \return true:
\91\97\90M
\92\86\8e~ false:
\91\97\90M
2385 function TEditorForm.isLocalFusianaTrap: Boolean;
2390 if GikoSys.Setting.LocalTrapAtt then begin
2391 Namae := THTMLCreate.RepHtml(NameComboBox.Text);
2392 if (LFusianaGet(Namae)) or (Namae = '
\8eR
\8dè
\8fÂ') then begin
2393 if FusianaMsgBox = IDNO then begin
2400 \brief
\83\8a\83\82\81[
\83gfusiana
\83g
\83\89\83b
\83v
2401 \return true:
\91\97\90M
\92\86\8e~ false:
\91\97\90M
2403 function TEditorForm.isRemoteFusianaTrap: Boolean;
2411 Namae := THTMLCreate.RepHtml(NameComboBox.Text);
2412 if (GikoSys.Setting.RemoteTrapAtt) and (Length(Namae) = 0) then begin
2415 if Board = nil then Exit;
2417 if not FileExists(Board.GetSETTINGTXTFileName) then begin
2418 //Setting.txt
\82ª
\82È
\82©
\82Á
\82½
\82ç
\8eæ
\93¾
2419 //
\8eI
\82É
\95\89\89×
\82ª
\82©
\82©
\82è
\82»
\82¤...
2421 GetSETTINGTXTAction.Execute;
2427 if FileExists(Board.GetSETTINGTXTFileName) then begin
2428 body := TStringList.Create;
2430 body.LoadFromFile(Board.GetSETTINGTXTFileName);
2431 Remote := GetFusianaName(body, Board);
2437 if LFusianaGet(Remote) then begin
2438 if FusianaMsgBox = IDNO then begin
2445 \brief Header
\95¶
\8e\9a\97ñ
\8eæ
\93¾
2446 \param ACOOKIE Cookie
2450 \return Header
\95¶
\8e\9a\97ñ
2452 function TEditorForm.getHeaderStr(const ACOOKIE: string; const SPID : string;
2453 const PON : string; Board : TBoard) : string;
2457 Result := Result + 'SPID=' + SPID + '; ';
2459 Result := Result + 'PON=' + PON + '; ';
2461 //
\83z
\83X
\83g
\82ª2ch
\82Å
\81ABe
\82ÉLogin
\82µ
\82Ä
\82¢
\82ê
\82ÎBE
\82Ì
\83f
\81[
\83^
\82ð
\91\97\82é
2462 //GikoSys.ParseURI( URL, Protocol,Host, Path, Document, Port, Bookmark );
2463 //if GikoSys.Is2chHost(Host) and GikoSys.Setting.BeLogin then
2464 if (Board.Is2ch) then begin
2465 //
\8cÅ
\92è
\82Ì
\83N
\83b
\83L
\81[
\82ª
\82 \82ê
\82Î
\90H
\82í
\82¹
\82é
2466 if Length(GikoSys.Setting.FixedCookie) > 0 then begin
2467 //
\83z
\83X
\83g
\82ª2ch
\82Ì
\8fê
\8d\87\81C
\8cÅ
\92è
\82Ì
\83N
\83b
\83L
\81[
\82ð
\90H
\82í
\82¹
\82é
2468 Result := Result + GikoSys.Setting.FixedCookie + '; ';
2470 if (GikoSys.Setting.BeLogin) then begin
2471 Result := Result + 'MDMD=' + GikoSys.Setting.BeCode + '; '
2472 + 'DMDM=' + GikoSys.Setting.BeUserID + '; ';
2476 Result := 'Cookie: ' + Result + 'NAME=' + NameComboBox.Text + '; MAIL=' + MailComboBox.Text;
2480 \brief fusiana
\8cx
\8d\90\83_
\83C
\83A
\83\8d\83O
2481 \return IDYES
\8f\91\82«
\8d\9e\82Þ IDNO
\92\86\8e~
2483 function TEditorForm.FusianaMsgBox: Integer;
2485 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 +
2486 '
\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' +
2487 #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';
2489 Result := MsgBox(Handle, MSG_FUSIANA, '
\8fî
\95ñ',
2490 MB_YESNO or MB_ICONQUESTION);
2493 \brief
\98A
\93\8a\83\82\81[
\83hON/OFF
\90Ø
\82è
\91Ö
\82¦
2495 procedure TEditorForm.ContinueModeActionExecute(Sender: TObject);
2497 ContinueModeAction.Checked := not ContinueModeAction.Checked;
2500 \brief
\98A
\93\8a\83\82\81[
\83h
\8dX
\90V
\8f\88\97\9d
2502 procedure TEditorForm.ContinueModeActionUpdate(Sender: TObject);
2504 //
\83X
\83\8c\82½
\82Ä
\82Ì
\82Æ
\82«
\82Í
\96³
\8cø
2505 ContinueModeAction.Enabled := FThreadItem <> nil;
2508 \brief
\8f\91\82«
\8d\9e\82Þ
\94Â/
\83X
\83\8c\83b
\83h
\82ð
\95\
\8e¦
\82·
\82é
2510 procedure TEditorForm.OpenSendTargetActionExecute(Sender: TObject);
2512 if (FThreadItem <> nil) then begin
2513 //
\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É
2514 //
\91O
\96Ê
\82Å
\8cÅ
\92è
\82·
\82é
2515 if not (fsShowing in Self.FormState) then begin
2516 //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
2517 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2520 //
\83X
\83\8c\83b
\83h
2521 GikoForm.InsertBrowserTab(FThreadItem, True);
2523 if not TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\89ð
\8f\9c
2524 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2530 GikoForm.SelectTreeNode(
2534 procedure TEditorForm.ReloadTargetActionExecute(Sender: TObject);
2536 if (FThreadItem <> nil) then begin
2537 //
\83X
\83\8c\83b
\83h
2538 //
\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É
2539 //
\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é)
2540 if not (fsShowing in Self.FormState) then begin
2541 //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
2542 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2545 GikoForm.DownloadContent(FThreadItem);
2547 if not TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\89ð
\8f\9c
2548 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2554 GikoForm.DownloadList(GetBoard);
2557 //!
\8cë
\94\9a\83`
\83F
\83b
\83N
2558 function TEditorForm.isGobaku: Boolean;
2560 MSG_GOBAKU : string =
2561 '
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é%s
\82Æ
\93\8a\8de
\90æ
\82Ì%s
\82ª
\88Ù
\82È
\82è
\82Ü
\82·
\81B'#13#10 +
2562 '
\82±
\82Ì
\82Ü
\82Ü
\8f\91\82«
\8d\9e\82Ý
\82Ü
\82·
\82©
\81H';
2564 ThreadItem : TThreadItem;
2569 //
\83I
\83v
\83V
\83\87\83\93\97L
\8cø
\82©
\82Â
\83\8c\83X
\91\97\90M
\82Å
\82Ì
\82Ý
\97L
\8cø
2570 if (GikoSys.Setting.UseGobakuCheck) then begin
2571 //
\83\8c\83X
\91\97\90M
2572 if (FThreadItem <> nil) then begin
2573 ThreadItem := GikoForm.GetActiveContent(False);
2574 if (ThreadItem <> nil) then begin
2575 if (FThreadItem <> ThreadItem) then begin
2576 msg := Format(MSG_GOBAKU, ['
\83X
\83\8c\83b
\83h', '
\83X
\83\8c\83b
\83h']);
2577 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2580 if GikoForm.ActiveList is TBBS then begin
2581 if TBBS(GikoForm.ActiveList) <> FThreadItem.ParentBoard.ParentCategory.ParenTBBS then begin
2582 msg := Format(MSG_GOBAKU, ['BBS', '
\83X
\83\8c\83b
\83h
\82Ì
\8f\8a\91®
\82·
\82éBBS']);
2583 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2585 end else if GikoForm.ActiveList is TCategory then begin
2586 if TCategory(GikoForm.ActiveList).FindThreadFromURL(FThreadItem.URL) = nil then begin
2587 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']);
2588 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2590 end else if GikoForm.ActiveList is TBoard then begin
2591 if TBoard(GikoForm.ActiveList) <> FThreadItem.ParentBoard then begin
2592 msg := Format(MSG_GOBAKU, ['
\94Â', '
\83X
\83\8c\83b
\83h
\82Ì
\8f\8a\91®
\82·
\82é
\94Â']);
2593 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2598 //
\83X
\83\8c\82½
\82Ä
2599 if GikoForm.ActiveList is TBBS then begin
2600 if TBBS(GikoForm.ActiveList) <> FBoard.ParentCategory.ParenTBBS then begin
2601 msg := Format(MSG_GOBAKU, ['BBS', '
\94Â
\82Ì
\8f\8a\91®
\82·
\82éBBS']);
2602 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2604 end else if GikoForm.ActiveList is TCategory then begin
2605 if TCategory(GikoForm.ActiveList).FindBoardFromURL(FBoard.URL) = nil then begin
2606 msg := Format(MSG_GOBAKU, ['
\83J
\83e
\83S
\83\8a', '
\94Â
\82Ì
\8f\8a\91®
\82·
\82é
\83J
\83e
\83S
\83\8a']);
2607 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;
2609 end else if GikoForm.ActiveList is TBoard then begin
2610 if TBoard(GikoForm.ActiveList) <> FBoard then begin
2611 msg := Format(MSG_GOBAKU, ['
\94Â', '
\94Â']);
2612 Result := MsgBox(Handle, msg, '
\8fî
\95ñ', MB_YESNO or MB_ICONQUESTION) = IDNO;