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;
138 procedure EditorPageChange(Sender: TObject);
139 procedure FormCreate(Sender: TObject);
140 procedure BrowserStatusTextChange(Sender: TObject;
141 const Text: WideString);
142 procedure FormClose(Sender: TObject; var Action: TCloseAction);
143 procedure FormDestroy(Sender: TObject);
144 procedure SendActionExecute(Sender: TObject);
145 procedure SaveActionExecute(Sender: TObject);
146 procedure AbortActionExecute(Sender: TObject);
147 procedure CloseActionExecute(Sender: TObject);
148 procedure UndoActionExecute(Sender: TObject);
149 procedure CutActionExecute(Sender: TObject);
150 procedure CopyActionExecute(Sender: TObject);
151 procedure PasteActionExecute(Sender: TObject);
152 procedure SendActionUpdate(Sender: TObject);
153 procedure SaveActionUpdate(Sender: TObject);
154 procedure CloseActionUpdate(Sender: TObject);
155 procedure UndoActionUpdate(Sender: TObject);
156 procedure CutActionUpdate(Sender: TObject);
157 procedure CopyActionUpdate(Sender: TObject);
158 procedure PasteActionUpdate(Sender: TObject);
159 procedure TopActionExecute(Sender: TObject);
160 procedure TopActionUpdate(Sender: TObject);
161 procedure SageCheckBoxClick(Sender: TObject);
162 procedure MailComboBoxChange(Sender: TObject);
163 procedure TransActionExecute(Sender: TObject);
164 procedure TransActionUpdate(Sender: TObject);
165 procedure IdLogDebugReceive(ASender: TIdConnectionIntercept;
167 procedure IdLogDebugSend(ASender: TIdConnectionIntercept;
169 procedure SelectAllActionExecute(Sender: TObject);
170 procedure StatusBarResize(Sender: TObject);
171 procedure FormActivate(Sender: TObject);
172 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
173 procedure QuotePasteActionExecute(Sender: TObject);
174 procedure SpaceToNBSPActionExecute(Sender: TObject);
175 procedure AmpToCharRefActionExecute(Sender: TObject);
176 procedure BoardTopClick(Sender: TObject);
177 procedure GetSETTINGTXTActionExecute(Sender: TObject);
178 procedure GetTitlePictureActionUpdate(Sender: TObject);
179 procedure GetTitlePictureActionExecute(Sender: TObject);
180 procedure GetHeadTXTActionExecute(Sender: TObject);
181 procedure CalcCapacityActionExecute(Sender: TObject);
182 procedure LocalRuleClick(Sender: TObject);
183 procedure FormDeactivate(Sender: TObject);
184 procedure LocalRuleBrowseClick(Sender: TObject);
185 procedure SaveNameMailActionExecute(Sender: TObject);
186 procedure BeLogInOutEActionExecute(Sender: TObject);
187 procedure BeLogInOutEActionUpdate(Sender: TObject);
188 procedure UpdateSambaActionUpdate(Sender: TObject);
189 procedure UpdateSambaActionExecute(Sender: TObject);
190 procedure InputAssistActionExecute(Sender: TObject);
191 procedure ApplicationEvents1Message(var Msg: tagMSG;
192 var Handled: Boolean);
193 procedure ShowInputAssistFormExecute(Sender: TObject);
194 procedure ReleaseCookieActionExecute(Sender: TObject);
195 procedure GetSETTINGTXTActionUpdate(Sender: TObject);
196 procedure GetHeadTXTActionUpdate(Sender: TObject);
198 FThreadItem: TThreadItem;
200 FNameComboEdit: THandle;
201 FMailComboEdit: THandle;
204 FStatusCode: Integer;
205 FDebugStrReceive: string;
206 FDebugStrSend: string;
208 FInputAssistKey: String; ///<
\93ü
\97Í
\83A
\83V
\83X
\83g
\82Ì
\83L
\81[
209 FResistWords: TStringList; ///<
\93ü
\97Í
\83A
\83V
\83X
\83g
\82Ì
\8e«
\8f\91\82©
\82ç
\82Ì
\8c\9f\8dõ
\8c\8b\89Ê
210 FSambaTimer: TSambaTimer; ///< Samba
\91Î
\8dô
\82Ì
\83^
\83C
\83}
\81[
212 function Check: Boolean;
213 procedure SetNameList(sName, sMail: string);
214 procedure Send(const ACOOKIE: string; const SPID: string; const PON: string; FirstWriting: Boolean);
215 function GetActiveControlHandle: THandle;
216 procedure GetSendData(Source: TStringStream);
217 procedure SaveSendFile;
218 procedure SetContent(Content: string; ABrowser: TWebBrowser);
219 function GetResultType(ResponseText: string): TGikoResultType;
220 ///
\96{
\95¶
\82Ì
\8eæ
\93¾
221 function GetBody : string;
222 //IdHttp
\82Ì
\8f\89\8aú
\89»
223 procedure InitIdHTTP(http: TIdHTTP);
224 procedure ShowBoardInformation(ABoard: TBoard; AMemo: TMemo);
225 function GetTitlePictureURL(body: TStringList; ABoard: TBoard): string;
226 procedure ShowTitlePicture();
227 function GetFusianaName(body: TStringList; ABoard: TBoard): String;
228 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
229 procedure OnGestureStart(Sender: TObject);
230 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
231 procedure OnGestureMove(Sender: TObject);
232 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
233 procedure OnGestureEnd(Sender: TObject);
234 //HEAD.TXT
\8e©
\93®
\95\
\8e¦
235 procedure ShowBoardHead(ABoard: TBoard; AMemo: TMemo);
236 //LocalFusianaTrapAlart
237 function LFusianaGet(const s: String): Boolean;
238 // Cookie
\82Ì
\8eæ
\93¾
239 procedure GetCookie(Rawtext: String; ABoard: TBoard);
240 //!
\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
241 procedure InputAssistMenuClick(Sender: TObject);
242 //! TMemo
\82Ì
\83J
\81[
\83\
\83\8b\88Ê
\92u
\82É
\95¶
\8e\9a\97ñ
\91}
\93ü
243 procedure InsertText(Memo: TMemo; Text: String);
244 //!
\91\97\90M
\92\86\8e~
245 procedure CancelSend(ABoard: TBoard; ASysMenu: HMENU);
246 //! Samba
\83^
\83C
\83}
\81[
\83C
\83x
\83\93\83g
247 procedure SambaTimer(Sender: TObject);
248 //!
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82Æ
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
249 procedure SetWindowRect;
250 //!
\8ag
\92£
\83^
\83u
\90Ý
\92è
251 procedure SetExtraTab;
253 function GetBoard : TBoard;
254 //! URL
\82Ì
\83f
\81[
\83^
\82ðstream
\82É
\8eæ
\82è
\8d\9e\82Þ
255 procedure GetWebData(const URL: string; const RefURL: string;
256 Modified: TDateTime; stream: TStream);
257 //! GikoForm
\82É
\90V
\92\85\83\81\83b
\83Z
\81[
\83W
\82ð
\92Ç
\89Á
\82·
\82é
258 procedure AddFormMessageNew(icon: TGikoMessageIcon);
259 //!
\83\8d\81[
\83J
\83\8bfusiana
\83g
\83\89\83b
\83v
260 function isLocalFusianaTrap: Boolean;
261 //!
\83\8d\81[
\83J
\83\8bfusiana
\83g
\83\89\83b
\83v
262 function isRemoteFusianaTrap: Boolean;
263 //! Header
\95¶
\8e\9a\97ñ
\8eæ
\93¾
264 function getHeaderStr(const ACOOKIE: string; const SPID : string;
265 const PON : string; Board : TBoard) : string;
266 //! fusiana
\8cx
\8d\90\83_
\83C
\83A
\83\8d\83O
267 function FusianaMsgBox: Integer;
268 //! sent.ini
\83t
\83@
\83C
\83\8b\82Ì
\90¶
\90¬
269 function CreateSentIniFile: TMemIniFile;
271 procedure CreateParams(var Params: TCreateParams); override;
275 procedure SetThreadItem(Item: TThreadItem);
276 procedure SetBoard(Item: TBoard);
277 procedure UpdateSambaStatus;
278 property BBSID: string read FBBSID write FBBSID;
284 Giko, ItemDownload, MojuUtils, IdGlobal, GikoMessage, Imm,
285 InputAssistDataModule, InputAssist, HTMLCreate;
287 CAPTION_NAME_NEW: string = '
\83M
\83R
\83i
\83r
\83X
\83\8c\97§
\82Ä
\83G
\83f
\83B
\83^';
288 CAPTION_NAME_RES: string = '
\83M
\83R
\83i
\83r
\83\8c\83X
\83G
\83f
\83B
\83^';
290 //
\83G
\83f
\83B
\83b
\83g
\83E
\83B
\83\93\83h
\83E
\82ð
\89E
\89º
\82É
\82¸
\82ç
\82µ
\82Ä
\8aJ
\82
\88Ú
\93®
\97Ê
294 //DAX
\82³
\82ñ±Ø¶ÞÄ!(
\81L
\81¤
\81M)
295 READCGI_ERR = '-ERR';
296 READCGI_INCR = '-INCR';
298 READCGI_PARTIAL = '+PARTIAL';
299 READCGI_ERR_FOUND_KAKO = '-ERR
\89ß
\8b\8e\83\8d\83O
\91q
\8cÉ
\82Å
\94
\8c©';
300 READCGI_ERR_NOT_HTML = '-ERR html
\89»
\91Ò
\82¿';
301 READCGI_ERR_NOT_FOUND = '-ERR
\82»
\82ñ
\82È
\94Âor
\83X
\83\8c\83b
\83h
\82È
\82¢
\82Å
\82·
\81B';
302 READCGI_ERR_ABONE = '-ERR
\82Ç
\82±
\82©
\82Å
\82 \82Ú
\81[
\82ñ
\82ª
\82 \82Á
\82½
\82Ý
\82½
\82¢
\82Å
\82·
\81B';
303 READCGI_ERR_TIMEOUT = '-ERR
\8ew
\92è
\8e\9e\8aÔ
\82ª
\89ß
\82¬
\82Ü
\82µ
\82½
\81B';
304 READCGI_ERR_CANTUSE = '-ERR
\82à
\82¤
\81@
\82Â
\82©
\82¦
\82Ü
\82¹
\82ñ';
305 RES2CH_TRUE = '<!-- 2ch_X:true -->';
306 RES2CH_FALSE = '<!-- 2ch_X:false -->';
307 RES2CH_ERROR = '<!-- 2ch_X:error -->';
308 RES2CH_CHECK = '<!-- 2ch_X:check -->';
309 RES2CH_COOKIE = '<!-- 2ch_X:cookie -->';
313 StartPos, EndPos: Integer;
318 {constructor TEditorForm.Create(AOwner: TComponent; Item: TBoard);
320 inherited Create(AOwner);
323 procedure TEditorForm.CreateParams(var Params: TCreateParams);
326 if FormStyle in [fsNormal, fsStayOnTop] then
327 if BorderStyle in [bsSingle, bsSizeable] then begin
328 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
329 Params.WndParent := 0;
333 {procedure TEditorForm.CreateParams(var Params: TCreateParams);
335 inherited CreateParams(Params);
336 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
339 procedure TEditorForm.FormCreate(Sender: TObject);
342 FSambaTimer := TSambaTimer.Create(Self);
343 FSambaTimer.Interval := 0;
344 Browser.Navigate('about:blank');
345 TitlePictureBrowser.Navigate('about:blank');
349 //
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\90Ý
\92è
352 EditorPage.ActivePage := EditorTab;
353 FNameComboEdit := GetWindow(NameComboBox.Handle, GW_CHILD);
354 FMailComboEdit := GetWindow(MailComboBox.Handle, GW_CHILD);
355 NameComboBox.Items.Assign(GikoSys.Setting.NameList);
356 MailComboBox.Items.Assign(GikoSys.Setting.MailList);
358 //
\94¼
\93§
\96¾
\97\98\97p
\89Â
\94\
\90Ý
\92è
359 TransAction.Enabled := GikoSys.CanUser32DLL;
361 //
\83E
\83B
\83\93\83h
\83E
\82Ì
\83X
\83e
\83C
\8fó
\91Ô
362 if GikoSys.Setting.EditWindowStay then begin //
\83X
\83e
\83C
\8fó
\91Ô
363 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
364 TopAction.Checked := true;
365 TopToolButton.Down := true;
366 end else begin //
\83X
\83e
\83C
\82µ
\82È
\82¢
367 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
368 TopAction.Checked := false;
369 TopToolButton.Down := false;
372 //
\83E
\83B
\83\93\83h
\83E
\82Ì
\94¼
\93§
\96¾
\8fó
\91Ô
373 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Ô
375 TransAction.Checked := true;
376 TransToolButton.Down := true;
377 end else begin //
\95s
\93§
\96¾
379 TransAction.Checked := false;
380 TransToolButton.Down := false;
382 //
\94¼
\93§
\96¾
\8fó
\91Ô
\82Ì
\95Û
\91¶
383 GikoSys.Setting.EditWindowTranslucent := TransAction.Checked;
385 SpaceToNBSPAction.Checked := GikoSys.Setting.SpaceToNBSP;
386 AmpToCharRefAction.Checked := GikoSys.Setting.AmpToCharRef;
387 //
\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è
390 //
\83L
\81[
\90Ý
\92è
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
391 GikoSys.LoadKeySetting(ActionList, GikoSys.GetEditorKeyFileName);
392 SaveNameMailAction.Checked := True;
394 procedure TEditorForm.SetBoard(Item: TBoard);
397 Caption := CAPTION_NAME_NEW + ' - [' + Item.Title + ']';
398 NameComboBox.Text := FBoard.KotehanName;
399 MailComboBox.Text := FBoard.KotehanMail;
400 SageCheckBox.Checked := AnsiPos('sage', MailComboBox.Text) <> 0;
401 TitlePanel.Visible := True;
403 if (FSambaTimer.SetBoard(FBoard) >= 0) then begin
406 FSambaTimer.OnTimer := SambaTimer;
409 ShowBoardInformation(FBoard, BoardInformationMemo);
413 procedure TEditorForm.SetThreadItem(Item: TThreadItem);
416 Caption := CAPTION_NAME_RES + ' - [' + FThreadItem.Title + ']';
417 NameComboBox.Text := FThreadItem.ParentBoard.KotehanName;
418 MailComboBox.Text := FThreadItem.ParentBoard.KotehanMail;
419 SageCheckBox.Checked := AnsiPos('sage', MailComboBox.Text) <> 0;
420 TitlePanel.Visible := False;
422 if (FSambaTimer.SetBoard(FThreadItem.ParentBoard) >= 0) then begin
425 FSambaTimer.OnTimer := SambaTimer;
428 ShowBoardInformation(FThreadItem.ParentBoard, BoardInformationMemo);
432 function TEditorForm.GetBody : string;
441 body := BodyEdit.Text;
442 if AmpToCharRefAction.Checked then
443 // &
\82Ì
\92u
\8a·
\82Í
\88ê
\94Ô
\8dÅ
\8f\89\82É
\82â
\82é
\82±
\82Æ
444 body := CustomStringReplace( body, '&', '&' );
445 if SpaceToNBSPAction.Checked then begin
447 tail := p + Length( body );
449 while p < tail do begin
456 tmp := tmp + ' ';
457 until (len mod TAB_LENGTH) = 0;
462 tmp := tmp + p^; Inc( p );
468 tmp := tmp + ' ';
474 //
\8eÀ
\91Ì
\8eQ
\8fÆ
\82Í 1
\95¶
\8e\9a\95ª
479 while p < tail do begin
480 if p^ in ['a'..'z', 'A'..'Z', '0'..'9', '#'] then begin
482 end else if p^ = ';' then begin
494 if p^ in kYofKanji then begin
495 tmp := tmp + p^; Inc( p );
496 tmp := tmp + p^; Inc( p );
499 tmp := tmp + p^; Inc( p );
511 procedure TEditorForm.SetFont;
513 BodyEdit.Font.Name := GikoSys.Setting.EditorFontName;
514 BodyEdit.Font.Size := GikoSys.Setting.EditorFontSize;
515 BodyEdit.Font.Color := GikoSys.Setting.EditorFontColor;
516 BodyEdit.Color := GikoSys.Setting.EditorBackColor;
519 procedure TEditorForm.Preview;
528 if FThreadItem = nil then begin
530 Title := THTMLCreate.RepHtml(TitleEdit.Text);
532 No := IntToStr(FThreadItem.Count + 1);
533 Title := THTMLCreate.RepHtml(FThreadItem.Title);
537 Namae := THTMLCreate.RepHtml(NameComboBox.Text);
538 Mail := THTMLCreate.RepHtml(MailComboBox.Text);
539 Body := THTMLCreate.RepHtml(Body);
540 Body := CustomStringReplace(Body, #13#10, '<br>', False);
543 if Trim(Namae) = '' then
544 Namae := '
\96¼
\96³
\82µ
\82³
\82ñ';
546 s := THTMLCreate.CreatePreviewHTML(Title, No, Mail, Namae, Body);
548 SetContent(s, Browser);
551 procedure TEditorForm.EditorPageChange(Sender: TObject);
556 tmpBoard := GetBoard;
558 if tmpBoard = nil then Exit;
560 if EditorPage.ActivePage = PreviewTab then begin
562 end else if EditorPage.ActivePage = RocalRuleTab then begin
563 if not FileExists(tmpBoard.GETHEADTXTFileName) then begin
564 LocalEdit.Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\96¢
\8eæ
\93¾';
567 ShowBoardHead(tmpBoard, LocalEdit);
569 Browser.Navigate('about:blank');
573 procedure TEditorForm.BrowserStatusTextChange(Sender: TObject;
574 const Text: WideString);
576 if EditorPage.ActivePage = PreviewTab then begin
577 StatusBar.Panels[0].Text := Text;
579 StatusBar.Panels[0].Text := '';
583 function TEditorForm.Check: Boolean;
585 REQUIRED: string = '
\82ª
\93ü
\97Í
\82³
\82ê
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B';
586 ERROR: string = '
\83G
\83\89\81[';
596 if (not GikoSys.Setting.UseMachineTime) and
597 ((Board.LastGetTime = 0) or
598 (Board.LastGetTime = ZERO_DATE)) then begin
599 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
600 + '
\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¢';
601 MsgBox(Handle, Msg, ERROR, MB_OK or MB_ICONSTOP);
603 end else if BodyEdit.Text = '' then begin
604 Msg := '
\96{
\95¶' + REQUIRED;
605 MsgBox(Handle, Msg, ERROR, MB_OK or MB_ICONSTOP);
607 end else if (FBoard <> nil) and (Trim(TitleEdit.Text) = '') then begin
608 Msg := '
\83^
\83C
\83g
\83\8b' + REQUIRED;
609 MsgBox(Handle, Msg, ERROR, MB_OK or MB_ICONSTOP);
612 if (not GikoSys.Dolib.Connected) and (AnsiPos('
\81\9c', NameComboBox.Text) <> 0) then begin
613 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
614 + '
\82±
\82Ì
\82Ü
\82Ü
\91\97\90M
\82µ
\82Ä
\82à
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
615 rc := MsgBox(Handle, Msg, '
\8am
\94F', MB_YESNO or MB_ICONQUESTION);
616 Result := (rc = IDYES);
621 procedure TEditorForm.FormClose(Sender: TObject; var Action: TCloseAction);
626 procedure TEditorForm.FormDestroy(Sender: TObject);
628 wp: TWindowPlacement;
632 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
633 wp.length := sizeof(wp);
634 GetWindowPlacement(Handle, @wp);
636 GikoSys.Setting.EditWindowTop := wp.rcNormalPosition.Top;
637 GikoSys.Setting.EditWindowLeft := wp.rcNormalPosition.Left;
638 GikoSys.Setting.EditWindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
639 GikoSys.Setting.EditWindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
640 GikoSys.Setting.EditWindowMax := WindowState = wsMaximized;
641 //GikoSys.Setting.EditWindowStay := FormStyle = fsStayOnTop; //
\83X
\83e
\83C
\8fó
\91Ô
\82Ì
\95Û
\91¶
642 GikoSys.Setting.EditWindowTranslucent := TransAction.Checked; //
\94¼
\93§
\96¾
\8fó
\91Ô
\82Ì
\95Û
\91¶
646 procedure TEditorForm.SetNameList(sName, sMail: string);
648 if SaveNameMailAction.Checked then begin
649 if Trim(sName) <> '' then begin
650 if GikoSys.Setting.NameList.IndexOf(sName) = -1 then
651 GikoSys.Setting.NameList.Insert(0, sName);
653 if Trim(sMail) <> '' then begin
654 if GikoSys.Setting.MailList.IndexOf(sMail) = -1 then
655 GikoSys.Setting.MailList.Insert(0, sMail);
660 function TEditorForm.GetActiveControlHandle: THandle;
662 if EditorPage.ActivePage = EditorTab then begin
663 if ActiveControl = NameComboBox then
664 Result := FNameComboEdit
665 else if ActiveControl = MailComboBox then
666 Result := FMailComboEdit
667 else if ActiveControl = BodyEdit then
668 Result := BodyEdit.Handle
669 else if ActiveControl = TitleEdit then
670 Result := TitleEdit.Handle
673 end else if Editorpage.ActivePage = BoardInformationTab then begin
674 if ActiveControl = BoardInformationMemo then
675 Result := BoardInformationMemo.Handle
678 end else if Editorpage.ActivePage = RocalRuleTab then begin
679 if ActiveCOntrol = LocalEdit then
680 Result := LocalEdit.Handle
687 procedure TEditorForm.SetContent(Content: string; ABrowser: TWebBrowser);
691 if ABrowser.Document <> nil then begin
692 doc := Idispatch( olevariant(ABrowser.ControlInterface).Document) as IHTMLDocument2;
695 doc.charset := 'Shift_JIS';
700 procedure TEditorForm.InitIdHTTP(http: TIdHTTP);
703 http.ProxyParams.BasicAuthentication := False;
704 if GikoSys.Setting.WriteProxy then begin
705 http.ProxyParams.ProxyServer := GikoSys.Setting.WriteProxyAddress;
706 http.ProxyParams.ProxyPort := GikoSys.Setting.WriteProxyPort;
707 http.ProxyParams.ProxyUsername := GikoSys.Setting.WriteProxyUserID;
708 http.ProxyParams.ProxyPassword := GikoSys.Setting.WriteProxyPassword;
709 if GikoSys.Setting.ReadProxyUserID <> '' then
710 http.ProxyParams.BasicAuthentication := True;
712 http.ProxyParams.ProxyServer := '';
713 http.ProxyParams.ProxyPort := 80;
714 http.ProxyParams.ProxyUsername := '';
715 http.ProxyParams.ProxyPassword := '';
717 Indy.Request.UserAgent := GikoSys.GetUserAgent;
718 Indy.Request.AcceptEncoding := '';
720 //!
\91\97\90M
\92\86\8e~
\82Ì
\82½
\82ß
\82Ì
\83\81\83j
\83\85\81[
\82Ì
\8dÄ
\90¶
721 procedure TEditorForm.CancelSend(ABoard: TBoard; ASysMenu: HMENU);
726 EnableMenuItem(ASysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
730 procedure TEditorForm.Send( const ACOOKIE: string; const SPID: string;
731 const PON: string; FirstWriting: Boolean);
733 TextStream: TStringStream;
734 Source: TStringStream;
735 ResponseText: string;
737 State: TGikoDownloadState;
738 ResultType: TGikoResultType;
742 {Protocol,Host, Path, Document, Port, Bookmark : String;}
750 if FThreadItem = nil then begin
751 URL := FBoard.GetSendURL;
752 Indy.Request.Referer := GikoSys.UrlToServer(FBoard.URL) + 'test/bbs.cgi';
754 URL := FThreadItem.GetSendURL;
755 Indy.Request.Referer := FThreadItem.URL;
758 sysMenu := GetSystemMenu( Handle, false );
759 EnableMenuItem( sysMenu, SC_CLOSE, MF_GRAYED );
761 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
764 Indy.Request.CustomHeaders.Clear;
765 // Indy.Request.CacheControl := 'no-cache';
766 Indy.Request.CustomHeaders.Add('Pragma: no-cache');
767 Indy.Request.AcceptLanguage := 'ja';
768 Indy.Request.Accept := 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*';
769 Indy.Request.ContentType := 'application/x-www-form-urlencoded';
770 Indy.Request.CustomHeaders.Add(getHeaderStr(ACOOKIE, SPID, PON, Board));
771 TextStream := TStringStream.Create('');
772 Source := TStringStream.Create('');
775 FDebugStrReceive := '';
778 if (FirstWriting) then begin
779 //
\83t
\83V
\83A
\83i
\83g
\83\89\83b
\83v
\8cx
\8d\90(LocalMode) by
\92è
\8aú
\95Ö
780 if (isLocalFusianaTrap) then begin
781 CancelSend( Board, SysMenu );
784 //
\83t
\83V
\83A
\83i
\83g
\83\89\83b
\83v
\8cx
\8d\90(Remote)
785 if (isRemoteFusianaTrap) then begin
786 CancelSend( Board, SysMenu );
792 IdAntiFreeze.Active := True;
794 Indy.Post(URL, Source, TextStream);
796 IdAntiFreeze.Active := False;
798 ResponseText := TextStream.DataString;
800 ResultType := GetResultType(ResponseText);
803 if ResultType = grtOK then begin
804 if (GikoSys.Setting.UseSamba) and (FSambaTimer.Enabled) then
806 FSambaTimer.WriteSambaTime(Now());
808 State := gdsComplete;
809 end else if ResultType = grtCookie then begin
810 //
\83\8b\81[
\83v
\96h
\8e~
811 if not FirstWriting then
812 raise Exception.Create('');
814 MsgResult := MsgBox( Handle,
815 '
\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 +
816 '
\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 +
817 '
\91S
\90Ó
\94C
\82ð
\95\89\82¤
\82±
\82Æ
\82ð
\8f³
\91ø
\82µ
\82Ä
\8f\91\82«
\8d\9e\82Ý
\82Ü
\82·
\82©
\81H',
819 MB_YESNO or MB_ICONQUESTION);
821 if MsgResult = IDYES then begin
822 GetCookie(Indy.Response.RawHeaders.Text, Board);
824 if (Board.SPID = '') and (Board.PON = '') and (Board.Cookie = '') then
825 raise Exception.Create('');
827 //
\82à
\82¤
\88ê
\89ñ
\82±
\82Ì
\83\81\83\
\83b
\83h
828 Send(Board.Cookie, Board.SPID, Board.PON, False);
831 CancelSend( Board, SysMenu );
834 end else if ResultType = grtCheck then begin
835 //
\83\8b\81[
\83v
\96h
\8e~
836 if not FirstWriting then
837 raise Exception.Create('');
839 MsgResult := MsgBox( Handle,
840 '
\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 +
841 '
\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 +
842 '
\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 +
843 '
\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 +
845 '
\91S
\90Ó
\94C
\82ð
\95\89\82¤
\82±
\82Æ
\82ð
\8f³
\91ø
\82µ
\82Ä
\8f\91\82«
\8d\9e\82Ý
\82Ü
\82·
\82©
\81H',
847 MB_YESNO or MB_ICONQUESTION);
849 if MsgResult = IDYES then begin
850 GetCookie(Indy.Response.RawHeaders.Text, Board);
852 if (Board.SPID = '') and (Board.PON = '') and (Board.Cookie = '') then
853 raise Exception.Create('');
855 Send(Board.Cookie, Board.SPID, Board.PON, False);
858 CancelSend( Board, SysMenu );
862 if (GikoSys.Setting.UseSamba) and (FSambaTimer.Enabled) then
864 FSambaTimer.WriteSambaTime(Now());
868 raise Exception.Create('');
871 on E: EIdConnectException do begin
873 ResponseText := '<html><body>'
874 + '<div>
\90Ú
\91±
\82ª
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½<br>'
875 + '
\89ñ
\90ü
\82â
\83v
\83\8d\83L
\83V
\82Ì
\8fó
\91Ô
\82ð
\92²
\82×
\82Ä
\82
\82¾
\82³
\82¢<br></div>'
876 + '<br><br><div>' + E.Message + '</div>'
879 on E: Exception do begin
882 FDebugStrReceive := AnsiReplaceText(FDebugStrReceive, '<', '<');
883 FDebugStrReceive := AnsiReplaceText(FDebugStrReceive, '>', '>');
884 FDebugStrSend := AnsiReplaceText(FDebugStrSend, '<', '<');
885 FDebugStrSend := AnsiReplaceText(FDebugStrSend, '>', '>');
887 ResponseText := '<html><body>' + TextStream.DataString;
888 ResponseText := AnsiReplaceText(ResponseText, '</body>', '');
889 ResponseText := AnsiReplaceText(ResponseText, '</html>', '');
890 ResponseText := ResponseText + '<hr><div align="left"><pre>';
891 ResponseText := ResponseText + '<b>
\82±
\82±
\82©
\82ç
\83M
\83R
\83i
\83r
\82Ì
\8fî
\95ñ</b>'#13#10;
892 ResponseText := ResponseText + #13#10'
\81\9c\91\97\90M'#13#10;
893 ResponseText := ResponseText + FDebugStrSend;
894 ResponseText := ResponseText + #13#10'
\81\9c\8eó
\90M'#13#10;
895 ResponseText := ResponseText + FDebugStrReceive;
896 ResponseText := ResponseText + '</pre></div></body></html>';
899 FStatusCode := Indy.ResponseCode;
905 //sysMenu := GetSystemMenu( Handle, true );
906 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
910 //
\94ñ
\8cö
\8e®
\83M
\83R
\83i
\83r
\94Â
\82È
\82Ç
\82Ì2ch
\8cÝ
\8a·
\83X
\83N
\83\8a\83v
\83g
\97p
911 //2ch
\88È
\8aO
\82Å
\82©
\82ÂResponceCode
\82ª302Found
\82Å
\8f\91\82«
\8d\9e\82Ý
\8a®
\97¹
912 //if (not Board.Is2ch) and (FStatusCode = 302) then begin
913 if FStatusCode = 302 then begin
914 GikoForm.PlaySound('ResEnd');
916 AddFormMessageNew( gmiOK );
920 if State = gdsComplete then begin
921 GikoForm.PlaySound('ResEnd');
923 AddFormMessageNew( gmiOK );
925 end else if State = gdsError then begin
926 AddFormMessageNew( gmiOK );
927 EditorPage.ActivePage := PreviewTab;
928 SetContent(ResponseText, Browser);
929 end else if State = gdsAbort then begin
930 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiSAD);
933 function TEditorForm.GetResultType(ResponseText: string): TGikoResultType;
935 if AnsiPos('
\8f\91\82«
\82±
\82Ý
\82ª
\8fI
\82í
\82è
\82Ü
\82µ
\82½', ResponseText) <> 0 then
937 else if (AnsiPos('
\83N
\83b
\83L
\81[
\82ª
\82È
\82¢
\82©
\8aú
\8cÀ
\90Ø
\82ê
\82Å
\82·', ResponseText) > 0) or
938 (AnsiPos('<title>
\83N
\83b
\83L
\81[
\8am
\94F
\81I</title>', ResponseText) > 0) or
939 (AnsiPos('<title>
\81¡
\83N
\83b
\83L
\81[
\8am
\94F
\81I
\81¡</title>', ResponseText) > 0) or
940 //(AnsiPos('
\83N
\83b
\83L
\81[
\8am
\94F', ResponseText) > 0) or
941 (AnsiPos(RES2CH_COOKIE, ResponseText) > 0) then
943 else if (AnsiPos('<font size=+2 color=#FF0000>
\8f\91\82«
\8d\9e\82Ý
\83`
\83F
\83b
\83N
\81I </font>', ResponseText) > 0) or
944 (AnsiPos('<title>
\81¡
\8f\91\82«
\8d\9e\82Ý
\8am
\94F
\82µ
\82Ü
\82·
\81¡</title>', ResponseText) > 0) or
945 (AnsiPos('<title>
\93\8a\8de
\8am
\94F</title>', ResponseText) > 0) or
946 (AnsiPos('<b>
\8f\91\82«
\82±
\82Ý
\8am
\94F</b>', ResponseText) > 0) or
947 (AnsiPos('="../test/subbbs.cgi">', ResponseText) > 0) or
948 (AnsiPos(RES2CH_FALSE, ResponseText) > 0) then
950 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
951 (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
958 procedure TEditorForm.GetSendData(Source: TStringStream);
969 if GikoSys.Setting.UseMachineTime then begin
970 if GikoSys.Setting.TimeAdjust then
971 Adjust := Gikosys.Setting.TimeAdjustSec
973 Adjust := GikoSys.Setting.TimeAdjustSec * -1;
974 SendTime := GikoSys.DateTimeToInt(Now) - (9 * 60 * 60) + Adjust
976 if (Board.LastGetTime = 0) or (Board.LastGetTime = ZERO_DATE) then
977 SendTime := GikoSys.DateTimeToInt(Now)
979 SendTime := GikoSys.DateTimeToInt(Board.LastGetTime);
984 SessionID := GikoSys.Dolib.SessionID;
985 if SessionID <> '' then
986 s := 'sid=' + HttpEncode(SessionID) + '&'
990 + 'FROM=' + HttpEncode(NameComboBox.Text) + '&'
991 + 'mail=' + HttpEncode(MailComboBox.Text) + '&'
992 + 'MESSAGE=' + HttpEncode(body) + '&'
993 + 'bbs=' + Board.BBSID + '&'
994 + 'time=' + IntToStr(SendTime) + '&';
996 if FThreadItem = nil then begin
997 s := s + 'subject=' + HttpEncode(TitleEdit.Text) + '&';
998 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;
1000 s := s + 'key=' + ChangeFileExt(FThreadItem.FileName, '') + '&';
1001 s := s + 'submit=' + HttpEncode('
\8f\91\82«
\8d\9e\82Þ') + #13#10;
1003 Source.WriteString(s);
1006 procedure TEditorForm.SaveSendFile;
1011 ini := CreateSentIniFile;
1012 if (ini <> nil) then begin
1014 sDate := IntToStr(GikoSys.DateTimeToInt(Now));
1016 ini.WriteString(sDate, 'Name', NameComboBox.Text);
1017 ini.WriteString(sDate, 'EMail', MailComboBox.Text);
1018 ini.WriteString(sDate, 'Body', HttpEncode(BodyEdit.Text));
1019 ini.WriteInteger(sDate, 'Status', FStatusCode);
1020 ini.WriteDateTime(sDate, 'Date', Now);
1021 if FThreadItem = nil then begin
1022 ini.WriteString(sDate, 'Title', MojuUtils.Sanitize(TitleEdit.Text));
1023 //ini.WriteString(sDate, 'BBS', FBoard.BBSID);
1024 ini.WriteString(sDate, 'URL', FBoard.URL);
1025 ini.WriteInteger(sDate, 'NewThread', 1);
1027 ini.WriteString(sDate, 'Title', FThreadItem.Title);
1028 //ini.WriteString(sDate, 'BBS', FThreadItem.ParentBoard.BBSID);
1029 ini.WriteString(sDate, 'URL', FThreadItem.URL);
1030 ini.WriteString(sDate, 'Key', ChangeFileExt(FThreadItem.FileName, ''));
1039 function TEditorForm.CreateSentIniFile: TMemIniFile;
1041 maxSize, fileSize, i: Integer;
1046 maxSize := GikoSys.Setting.SentIniFileSize * 1024 * 1024;
1047 //
\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·
1048 if (maxSize > 0) then begin
1049 fileSize := GikoSys.GetFileSize(GikoSys.Setting.GetSentFileName);
1050 //
\8dÅ
\91å
\83T
\83C
\83Y
\82ð
\92´
\82¦
\82Ä
\82¢
\82½
\8fê
\8d\87\82Í
\83\8a\83l
\81[
\83\80\82·
\82é
1051 if (fileSize >= maxSize) then begin
1053 //
\8d¡
\82Ì
\8e\9e\8d\8f\82ð
\83t
\83@
\83C
\83\8b\96¼
\82Ì
\8cã
\82ë
\82É
\82Â
\82¯
\82é
1055 // 10
\89ñ
\88È
\8fã
\8e¸
\94s
\82µ
\82½
\82ç
\82 \82«
\82ç
\82ß
\82é
1056 if (i > 10) then break;
1057 DateTimeToString(newName, 'yyhhnnsszzz', Now());
1059 until RenameFile(GikoSys.Setting.GetSentFileName,
1060 GikoSys.Setting.GetSentFileName + '.' + newName);
1062 Result := TMemIniFile.Create(GikoSys.Setting.GetSentFileName);
1065 procedure TEditorForm.SendActionExecute(Sender: TObject);
1067 TITLE_SAMBA : string = 'Samba24
\8cx
\8d\90';
1072 state : TGikoDownloadState;
1079 SendAction.Enabled := False;
1080 Application.ProcessMessages;
1081 if not Check then Exit;
1085 if FThreadItem = nil then begin
1086 rc := GikoUtil.MsgBox(Handle,
1087 '
\81u' + Board.Title + '
\81v
\94Â
\82É
\90V
\82µ
\82¢
\83X
\83\8c\83b
\83h
\97§
\82Ä
\82Ü
\82·'#13#10#13#10
1088 + '
\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
1089 + '
\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
1090 + '
\81u
\82Í
\82¢
\81v
\82ð
\89\9f\82·
\82Æ
\91\97\90M
\82µ
\82Ü
\82·',
1092 MB_ICONQUESTION or MB_YESNO);
1093 if rc <> ID_YES then
1097 SetNameList(NameComboBox.Text, MailComboBox.Text);
1098 if (KotehanCheckBox.Enabled) and (KotehanCheckBox.Checked) then begin
1099 Board.KotehanName := NameComboBox.Text;
1100 Board.KotehanMail := MailComboBox.Text;
1103 if Board.IsBoardPlugInAvailable then begin
1106 if FThreadItem = nil then begin
1107 //
\83X
\83\8c\97§
\82Ä
1108 state := TGikoDownloadState( Board.BoardPlugIn.CreateThread(
1109 DWORD( Board ), TitleEdit.Text, NameComboBox.Text, MailComboBox.Text, body ) );
1111 if state = gdsComplete then begin
1112 GikoForm.PlaySound('ResEnd');
1114 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, gmiOK);
1117 end else if State = gdsError then begin
1118 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmSureError), nil, gmiNG);
1119 end else if State = gdsAbort then begin
1120 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiNG);
1124 state := TGikoDownloadState( FThreadItem.ParentBoard.BoardPlugIn.WriteThread(
1125 DWORD( FThreadItem ), NameComboBox.Text, MailComboBox.Text, body ) );
1127 if state = gdsComplete then begin
1128 GikoForm.PlaySound('ResEnd');
1130 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, gmiOK);
1133 end else if State = gdsError then begin
1134 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmResError), nil, gmiOK);
1135 end else if State = gdsAbort then begin
1136 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
1140 if not FSambaTimer.Enabled then begin
1141 if CompareDateTime(Board.Expires ,Now) <= 0 then begin
1146 Send(Board.Cookie, Board.SPID, Board.PON, True);
1148 if not FSambaTimer.CheckSambaTime(Now()) then begin
1149 rc := GikoUtil.MsgBox(Handle,
1150 '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
1151 + '
\91\97\90M
\82ð
\92\86\8e~
\82µ
\82Ü
\82·
\82©
\81H' + #13#10
1152 + '(
\81u
\82¢
\82¢
\82¦
\81v
\82¾
\82Æ
\91\97\90M
\82µ
\82Ü
\82·)', TITLE_SAMBA,
1153 MB_YESNO or MB_ICONQUESTION);
1154 if rc = IDYES then begin
1158 if rc = IDNO then begin
1159 rc2 := GikoUtil.MsgBox(Handle,
1160 '
\96{
\93\96\82É
\91\97\90M
\82µ
\82Ü
\82·
\82©
\81H',
1162 MB_YESNO or MB_ICONQUESTION);
1163 if rc2 = IDNO then begin
1169 if CompareDateTime(Board.Expires ,Now) <= 0 then begin
1174 Send(Board.Cookie, Board.SPID, Board.PON, True);
1179 if FSambaTimer.Enabled then begin
1180 FNow := FSambaTimer.Update;
1185 procedure TEditorForm.SaveActionExecute(Sender: TObject);
1190 procedure TEditorForm.CloseActionExecute(Sender: TObject);
1195 procedure TEditorForm.UndoActionExecute(Sender: TObject);
1197 SendMessage(GetActiveControlHandle, WM_UNDO, 0, 0);
1200 procedure TEditorForm.CutActionExecute(Sender: TObject);
1202 SendMessage(GetActiveControlHandle, WM_CUT, 0, 0);
1205 procedure TEditorForm.CopyActionExecute(Sender: TObject);
1207 SendMessage(GetActiveControlHandle, WM_COPY, 0, 0);
1210 procedure TEditorForm.PasteActionExecute(Sender: TObject);
1212 SendMessage(GetActiveControlHandle, WM_PASTE, 0, 0);
1215 procedure TEditorForm.SelectAllActionExecute(Sender: TObject);
1217 SendMessage(GetActiveControlHandle, EM_SETSEL, 0, GetWindowTextLength(GetActiveControlHandle));
1220 procedure TEditorForm.TopActionExecute(Sender: TObject); //
\83E
\83B
\83\93\83h
\83E
\8dÅ
\91O
\96Ê(Stay)
\83{
\83^
\83\93\82Ì
\8f\88\97\9d
1222 if not (fsShowing in Self.FormState) then begin
1223 if TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
1224 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
1225 GikoSys.Setting.EditWindowStay := true;
1226 end else begin //
\83X
\83e
\83C
\8fó
\91Ô
\89ð
\8f\9c
1227 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
1228 GikoSys.Setting.EditWindowStay := false;
1230 //
\83X
\83e
\83C
\8fó
\91Ô
\82Ì
\95Û
\91¶
1231 //GikoSys.Setting.EditWindowStay := FormStyle = fsStayOnTop;
1235 procedure TEditorForm.AbortActionExecute(Sender: TObject);
1240 procedure TEditorForm.SendActionUpdate(Sender: TObject);
1242 SendAction.Enabled := not FWork;
1245 procedure TEditorForm.SaveActionUpdate(Sender: TObject);
1247 SaveAction.Enabled := False;
1250 procedure TEditorForm.CloseActionUpdate(Sender: TObject);
1252 CloseAction.Enabled := not FWork;
1255 procedure TEditorForm.UndoActionUpdate(Sender: TObject);
1257 UndoAction.Enabled := (GetActiveControlHandle <> 0)
1258 and (SendMessage(GetActiveControlHandle, EM_CANUNDO, 0, 0) <> 0)
1262 procedure TEditorForm.CutActionUpdate(Sender: TObject);
1264 Selection: TSelection;
1267 AHandle := GetActiveControlHandle;
1268 SendMessage(AHandle, EM_GETSEL, Longint(@Selection.StartPos), Longint(@Selection.EndPos));
1269 CutAction.Enabled := (AHandle <> 0)
1270 and ((Selection.EndPos - Selection.StartPos) <> 0)
1274 procedure TEditorForm.CopyActionUpdate(Sender: TObject);
1276 Selection: TSelection;
1279 AHandle := GetActiveControlHandle;
1280 SendMessage(AHandle, EM_GETSEL, Longint(@Selection.StartPos), Longint(@Selection.EndPos));
1281 CopyAction.Enabled := (AHandle <> 0)
1282 and ((Selection.EndPos - Selection.StartPos) <> 0)
1286 procedure TEditorForm.PasteActionUpdate(Sender: TObject);
1288 PasteAction.Enabled := (GetActiveControlHandle <> 0)
1289 and (Clipboard.HasFormat(CF_TEXT))
1293 procedure TEditorForm.TopActionUpdate(Sender: TObject);
1295 TopAction.Enabled := not FWork;
1298 procedure TEditorForm.SageCheckBoxClick(Sender: TObject);
1300 if SageCheckBox.Checked then begin
1301 if AnsiPos('sage', MailComboBox.Text) = 0 then
1302 MailComboBox.Text := 'sage' + MailComboBox.Text;
1304 if AnsiPos('sage', MailComboBox.Text) <> 0 then
1305 MailComboBox.Text := StringReplace(MailComboBox.Text, 'sage', '', [rfReplaceAll]);
1309 procedure TEditorForm.MailComboBoxChange(Sender: TObject);
1311 if AnsiPos('sage', MailComboBox.Text) = 0 then
1312 SageCheckBox.Checked := False
1314 SageCheckBox.Checked := True;
1317 procedure TEditorForm.IdLogDebugReceive(ASender: TIdConnectionIntercept;
1320 StringStream: TStringStream;
1322 StringStream := TStringStream.Create('');
1324 StringStream.CopyFrom(AStream, AStream.Size);
1325 FDebugStrReceive := FDebugStrReceive + StringStream.DataString;
1331 procedure TEditorForm.IdLogDebugSend(ASender: TIdConnectionIntercept;
1334 StringStream: TStringStream;
1336 StringStream := TStringStream.Create('');
1338 StringStream.CopyFrom(AStream, AStream.Size);
1339 FDebugStrSend := FDebugStrSend + StringStream.DataString;
1345 procedure TEditorForm.TransActionExecute(Sender: TObject);
1347 AlphaBlend := TransAction.Checked;
1348 //
\94¼
\93§
\96¾
\8fó
\91Ô
\82Ì
\95Û
\91¶
1349 GikoSys.Setting.EditWindowTranslucent := TransAction.Checked;
1352 procedure TEditorForm.TransActionUpdate(Sender: TObject);
1354 TransAction.Enabled := not FWork;
1356 //StatusBar
\82ÌPanels[0]
\82Ì
\95\9d\82ð
\89Â
\95Ï
\81B
\8ec
\82è
\82ð
\8cÅ
\92è
\82É
\82·
\82é
1357 procedure TEditorForm.StatusBarResize(Sender: TObject);
1359 StatusBar.Panels[0].Width := StatusBar.Width
1360 - StatusBar.Panels[1].Width - StatusBar.Panels[2].Width;
1364 //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Þ
1365 procedure TEditorForm.FormActivate(Sender: TObject);
1367 if ( FSambaTimer.Enabled ) and ( FThreadItem <> nil ) then
1369 FNow := FSambaTimer.Update;
1371 if GikoSys.Setting.GestureEnabled then begin
1372 GikoSys.Setting.Gestures.ClearGesture;
1373 GikoSys.Setting.Gestures.LoadGesture(
1374 GikoSys.Setting.GetGestureFileName, ActionList );
1375 MouseGesture.UnHook;
1376 MouseGesture.OnGestureStart := OnGestureStart;
1377 MouseGesture.OnGestureMove := OnGestureMove;
1378 MouseGesture.OnGestureEnd := OnGestureEnd;
1379 MouseGesture.SetHook( Handle );
1382 procedure TEditorForm.FormCloseQuery(Sender: TObject;
1383 var CanClose: Boolean);
1385 CanClose := not FWork;
1388 procedure TEditorForm.QuotePasteActionExecute(Sender: TObject);
1395 quote := GikoSys.GetOEIndentChar;
1396 s := TStringList.Create;
1398 s.Text := Clipboard.AsText;
1400 for i := s.Count - 1 downto 0 do
1401 s[ i ] := quote + s[ i ];
1403 BodyEdit.SelText := s.Text;
1410 procedure TEditorForm.SpaceToNBSPActionExecute(Sender: TObject);
1412 GikoSys.Setting.SpaceToNBSP := SpaceToNBSPAction.Checked;
1413 if EditorPage.ActivePage = PreviewTab then
1417 procedure TEditorForm.AmpToCharRefActionExecute(Sender: TObject);
1419 GikoSys.Setting.AmpToCharRef := AmpToCharRefAction.Checked;
1420 if EditorPage.ActivePage = PreviewTab then
1424 procedure TEditorForm.BoardTopClick(Sender: TObject);
1428 ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
1430 BoardtopTab.TabVisible := BoardTop.Checked;
1431 ini.WriteBool('EditorForm', 'BoardTopTab', BoardtopTab.TabVisible);
1439 procedure TEditorForm.GetSETTINGTXTActionExecute(Sender: TObject);
1441 memStream: TMemoryStream;
1442 URL, RefURL: string;
1443 settingBody: TStringList;
1446 if not FWork then begin
1449 tmpBoard := GetBoard;
1450 if tmpBoard <> nil then begin
1452 RefURL := tmpBoard.URL;
1453 if RefURL[Length(RefURL)] <> '/' then
1454 URL := RefURL + '/' + 'SETTING.TXT'
1456 URL := RefURL + 'SETTING.TXT';
1457 Screen.Cursor := crHourGlass;
1458 memStream := TMemoryStream.Create;
1461 StatusBar.Panels[0].Text := 'SETTING.TXT
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86';
1462 GetWebData(URL, RefURL, tmpBoard.SETTINGTXTTime, memStream);
1463 if( Indy.ResponseCode = 200 ) then begin
1464 settingBody := TStringList.Create;
1466 memStream.Seek(0, soFromBeginning);
1467 settingBody.LoadFromStream(memStream);
1468 settingBody.SaveToFile(tmpBoard.GetSETTINGTXTFileName);
1469 tmpBoard.SETTINGTXTTime := Indy.Response.LastModified;
1470 tmpBoard.IsSETTINGTXT := true;
1471 tmpBoard.TitlePictureURL := GetTitlePictureURL(settingBody, tmpBoard);
1472 tmpBoard.Modified := true;
1476 StatusBar.Panels[0].Text := 'SETTING.TXT
\8eæ
\93¾
\8a®
\97¹(' + IntToStr(Indy.ResponseCode) + ')';
1479 on E: EIdException do begin
1480 if( AnsiPos('304', E.Message) > 0 ) then
1481 StatusBar.Panels[0].Text := 'SETTING.TXT
\8dX
\90V
\96³
\82µ(' + IntToStr(Indy.ResponseCode) + ')'
1483 StatusBar.Panels[0].Text := 'SETTING.TXT
\8eæ
\93¾
\83G
\83\89\81[(' + IntToStr(Indy.ResponseCode) + ')';
1488 Screen.Cursor := crDefault;
1490 ShowBoardInformation(tmpBoard, BoardInformationMemo);
1496 procedure TEditorForm.ShowBoardInformation(ABoard: TBoard; AMemo: TMemo);
1501 AMemo.Lines.Add('[SETTING.TXT]');
1502 if ABoard.IsSETTINGTXT then begin
1503 if FileExists(ABoard.GetSETTINGTXTFileName) then begin
1504 AMemo.Lines.Add(DateTimeToStr(ABoard.SETTINGTXTTime) + '
\8dX
\90V');
1505 body := TStringList.Create;
1507 body.LoadFromFile(ABoard.GetSETTINGTXTFileName);
1508 AMemo.Lines.AddStrings(body);
1513 ABoard.IsSETTINGTXT := false;
1514 ABoard.SETTINGTXTTime := ZERO_DATE;
1515 AMemo.Lines.Add('Local
\82É
\95Û
\91¶
\82³
\82ê
\82½SETTING.TXT
\82ª
\8c©
\82Â
\82©
\82è
\82Ü
\82¹
\82ñ');
1516 AMemo.Lines.Add('
\83\81\83j
\83\85\81[
\82æ
\82è
\8dÄ
\8eæ
\93¾
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
1519 AMemo.Lines.Add('SETTING.TXT
\82ð
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B');
1520 AMemo.Lines.Add('
\83\81\83j
\83\85\81[
\82æ
\82è
\8eæ
\93¾
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
1523 function TEditorForm.GetTitlePictureURL(body: TStringList; ABoard: TBoard): string;
1524 //BBS_TITLE_PICTURE=
1531 for i := 0 to body.Count - 1 do begin
1532 if (AnsiPos('BBS_TITLE_PICTURE=', body[i]) > 0) or
1533 (AnsiPos('BBS_FIGUREHEAD=', body[i]) > 0) then begin
1535 Delete(tmp, 1, AnsiPos('=', tmp));
1536 if AnsiPos('../', tmp) > 0 then begin
1537 tmp := CustomStringReplace(tmp, '../', GikoSys.UrlToServer(ABoard.URL));
1545 procedure TEditorForm.GetTitlePictureActionUpdate(Sender: TObject);
1547 if FThreadItem = nil then
1548 GetTitlePictureAction.Enabled := FBoard.IsSETTINGTXT
1550 GetTitlePictureAction.Enabled := FThreadItem.ParentBoard.IsSETTINGTXT;
1552 if GetTitlePictureAction.Enabled Then begin
1553 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
1554 GetTitlePictureAction.Enabled := not FWork;
1558 procedure TEditorForm.GetTitlePictureActionExecute(Sender: TObject);
1560 memStream: TMemoryStream;
1567 memStream := TMemoryStream.Create;
1569 tmpBoard := GetBoard;
1571 if (tmpBoard <> nil) and (tmpBoard.TitlePictureURL <> '') then begin
1572 StatusBar.Panels[0].Text := '
\94Â
\83g
\83b
\83v
\89æ
\91\9c\83_
\83E
\83\93\83\8d\81[
\83h
\92\86';
1573 Screen.Cursor := crHourGlass;
1575 // URL
\82ð
\8ew
\92è
\82µ
\82Ä
\83\81\83\82\83\8a\82É
\93Ç
\82Ý
\8d\9e\82Þ
1576 GetWebData(tmpBoard.TitlePictureURL, tmpBoard.URL,
1577 ZERO_DATE, memStream);
1578 if Indy.ResponseCode = 200 then begin
1579 memStream.SaveToFile(tmpBoard.GetTitlePictureFileName);
1581 tmpBoard.Modified := true;
1583 StatusBar.Panels[0].Text := '
\94Â
\83g
\83b
\83v
\89æ
\91\9c (' + IntToStr(Indy.ResponseCode) + ')';
1590 Screen.Cursor := crDefault;
1594 \brief URL
\82Ì
\83f
\81[
\83^
\82ðstream
\82É
\93Ç
\82Ý
\8d\9e\82Þ
1595 \param URL
\93Ç
\82Ý
\8d\9e\82Þ
\90æ
1596 \param RefURL referer
\82É
\90Ý
\92è
\82·
\82é
1597 \param Modified Modified
\82É
\90Ý
\92è
\82·
\82é
1598 \param stream
\93Ç
\82Ý
\8d\9e\82ñ
\82¾
\83f
\81[
\83^
\82Ì
\95Û
\91¶
\90æ
1600 procedure TEditorForm.GetWebData(const URL: string; const RefURL: string;
1601 Modified: TDateTime; stream: TStream);
1604 Indy.Request.Referer := RefURL;
1605 Indy.Request.LastModified := Modified;
1607 IdAntiFreeze.Active := True;
1609 Indy.Get(URL, stream);
1611 IdAntiFreeze.Active := False;
1615 procedure TEditorForm.ShowTitlePicture();
1620 tmpBoard := GetBoard;
1622 if FileExists(tmpBoard.GetTitlePictureFileName) then begin
1623 TitlePictureBrowser.Navigate(tmpBoard.GetTitlePictureFileName);
1625 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';
1626 SetContent(s, TitlePictureBrowser);
1630 function TEditorForm.GetFusianaName(body: TStringList; ABoard: TBoard): String;
1635 for i := 0 to body.Count - 1 do begin
1636 if (AnsiPos('BBS_NONAME_NAME=', body[i]) > 0) then begin
1638 Delete(tmp, 1, AnsiPos('=', tmp));
1645 procedure TEditorForm.GetHeadTXTActionExecute(Sender: TObject);
1647 URL, RefURL: string;
1648 settingBody: TStringList;
1650 memStream: TMemoryStream;
1652 if not FWork then begin
1655 tmpBoard := GetBoard;
1656 if (tmpBoard <> nil) then begin
1658 RefURL := tmpBoard.URL;
1659 if RefURL[Length(RefURL)] <> '/' then
1660 URL := RefURL + '/' + 'head.txt'
1662 URL := RefURL + 'head.txt';
1664 Screen.Cursor := crHourGlass;
1665 memStream := TMemoryStream.Create;
1667 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';
1669 GetWebData(URL, RefURL, tmpBoard.HEADTXTTime, memStream);
1670 if( Indy.ResponseCode = 200 ) then begin
1671 settingBody := TStringList.Create;
1673 memStream.Seek(0, soFromBeginning);
1674 settingBody.LoadFromStream(memStream);
1675 settingBody.Insert(0, '<HTML lang="ja"><HEAD>');
1676 settingBody.Insert(1, '<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">');
1677 settingBody.Insert(2, '<TITLE>' + tmpBoard.Title + '</TITLE>');
1678 settingBody.Insert(3, '<base href="' + RefURL + '"></HEAD><BODY>');
1679 settingBody.Add('</BODY></HTML>');
1680 settingBody.SaveToFile(tmpBoard.GETHEADTXTFileName);
1681 tmpBoard.HEADTXTTime := Indy.Response.LastModified;
1682 tmpBoard.IsHEADTXT := true;
1683 tmpBoard.Modified := true;
1687 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾
\8a®
\97¹(' + IntToStr(Indy.ResponseCode) + ')';
1690 on E: EIdException do begin
1691 if( AnsiPos('304', E.Message) > 0 ) then
1692 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8dX
\90V
\96³
\82µ(' + IntToStr(Indy.ResponseCode) + ')'
1694 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾
\83G
\83\89\81[(' + IntToStr(Indy.ResponseCode) + ')';
1699 Screen.Cursor := crDefault;
1701 if tmpBoard.IsHEADTXT then begin
1702 ShowBoardHead(tmpboard, LocalEdit);
1710 procedure TEditorForm.CalcCapacityActionExecute(Sender: TObject);
1716 //
\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
1719 if Board.BoardPlugIn <> nil then
1720 body := CustomStringReplace(body, #13#10, '<br>')
1722 body := CustomStringReplace(body, #13#10, ' <br> ');
1723 StatusBar.Panels[0].Text := '
\97e
\97Ê:' + IntToStr(Length(body)) + ' byte';
1726 procedure TEditorForm.LocalRuleClick(Sender: TObject);
1730 ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
1732 RocalRuleTab.TabVisible := LocalRule.Checked;
1733 ini.WriteBool('EditorForm', 'LocalRuleTab', RocalRuleTab.TabVisible);
1740 procedure TEditorForm.FormDeactivate(Sender: TObject);
1742 if GikoSys.Setting.GestureEnabled then begin
1743 GikoSys.Setting.Gestures.ClearGesture;
1744 MouseGesture.UnHook;
1745 MouseGesture.OnGestureStart := nil;
1746 MouseGesture.OnGestureMove := nil;
1747 MouseGesture.OnGestureEnd := nil;
1751 procedure TEditorForm.OnGestureStart(Sender: TObject);
1756 procedure TEditorForm.OnGestureMove(Sender: TObject);
1762 s := MouseGesture.GetGestureStr;
1764 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
1765 if Action <> nil then
1766 ActStr := '
\81i' + Action.Caption + '
\81j';
1767 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
1768 StatusBar.Panels[0].Text := s;
1771 procedure TEditorForm.OnGestureEnd(Sender: TObject);
1776 s := MouseGesture.GetGestureStr;
1778 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
1779 if Action <> nil then
1781 StatusBar.Panels[0].Text := '';
1784 procedure TEditorForm.ShowBoardHead(ABoard: TBoard; AMemo: TMemo);
1786 wDoc, WTex, le: OLEVariant;
1789 //http://www.campus.ne.jp/~ishigami/CREATION/TECHNIC/WEBAP-2.htm
1790 WebBrowser1.Navigate(ABoard.GETHEADTXTFileName,le,le,le,le);
1791 //
\83\8c\83^
\83\8a\83\93\83O
\82ª
\92x
\82·
\82¬
\82ÄTXT
\82É
\88Ú
\82¹
\82È
\82¢
\81B
\82Ê
\82é
\82Ûorz
1792 //
\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
1793 //
\82±
\82ê
\82Å
\82¢
\82¯
\82Ü
\82µ
\82½
\81B
\82 \82è
\82ª
\82Æ
\82¤
\82²
\82´
\82¢
\82Ü
\82µ
\82½
\81B
1794 while (WebBrowser1.ReadyState <> READYSTATE_COMPLETE) and
1795 (WebBrowser1.ReadyState <> READYSTATE_INTERACTIVE) do begin
1796 Application.ProcessMessages;
1798 wDoc := WebBrowser1.Document;
1799 wTex := wDoc.body.createTextRange;
1800 LocalEdit.Text := wTex.text;
1803 procedure TEditorForm.LocalRuleBrowseClick(Sender: TObject);
1810 if ABoard = nil then Exit;
1812 URL := ABoard.GETHEADTXTFileName;
1813 GikoSys.OpenBrowser(URL, gbtAuto);
1816 procedure TEditorForm.SaveNameMailActionExecute(Sender: TObject);
1818 SaveNameMailAction.Checked := not SaveNameMailAction.Checked;
1819 KotehanCheckBox.Enabled := SaveNameMailAction.Checked;
1822 function TEditorForm.LFusianaGet(const s: String): Boolean;
1824 FUSIANA = 'fusianasan';
1828 i := AnsiPos(FUSIANA, s);
1832 procedure TEditorForm.BeLogInOutEActionExecute(Sender: TObject);
1834 GikoSys.Setting.BeLogin := not GikoSys.Setting.BeLogin;
1837 procedure TEditorForm.BeLogInOutEActionUpdate(Sender: TObject);
1839 if (GikoSys.Setting.BeUserID <> '') and (GikoSys.Setting.BeCode <> '') then begin
1840 if (GikoSys.Setting.BeLogin) then BeLogInOutEAction.Checked := true
1841 else BeLogInOutEAction.Checked := false;
1842 BeLogInOutEAction.Enabled := true
1844 BeLogInOutEAction.Enabled := false;
1847 // Cookie
\82Ì
\8eæ
\93¾
1848 procedure TEditorForm.GetCookie(Rawtext: String; ABoard: TBoard);
1850 COOKIE_MARK = 'Set-Cookie:';
1853 EXPIRES_MARK = 'expires=';
1859 ABoard.Cookie := '';
1860 while (AnsiPos(COOKIE_MARK, Rawtext) > 0 ) do begin
1862 tmp := Copy(Rawtext, AnsiPos(COOKIE_MARK, Rawtext) + Length(COOKIE_MARK), Length(Rawtext));
1863 Delete(Rawtext, 1, AnsiPos('Set-Cookie', Rawtext)+ Length(COOKIE_MARK));
1864 //Cookie
\82ð
\90Ø
\82è
\8fo
\82·
1865 val := Trim(GikoSys.GetTokenIndex(tmp, ';', 0));
1866 if( AnsiPos(VAL_SPID, val) > 0 ) then begin
1867 ABoard.SPID := Copy(val, AnsiPos(VAL_SPID, val) + Length(VAL_SPID), Length(val));
1868 end else if( AnsiPos(VAL_PON, val) > 0 ) then begin
1869 ABoard.PON := Copy(val, AnsiPos(VAL_PON, val) + Length(VAL_PON), Length(val));
1871 ABoard.Cookie := ABoard.Cookie + val + '; ';
1873 //expires
\82ð
\90Ø
\82è
\8fo
\82·
1874 val := Trim(GikoSys.GetTokenIndex(tmp, ';', 1));
1875 if( AnsiPos(EXPIRES_MARK, val) > 0) then begin
1876 Delete(val, 1, AnsiPos(EXPIRES_MARK, val) + Length(EXPIRES_MARK) - 1);
1877 ABoard.Expires := GMTToLocalDateTime(val);
1883 //!
\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
1884 procedure TEditorForm.UpdateSambaActionUpdate(Sender: TObject);
1886 UpdateSambaAction.Enabled := FSambaTimer.Enabled;
1889 //!
\83T
\83\93\83o
\8dX
\90V
\83A
\83N
\83V
\83\87\83\93
1890 procedure TEditorForm.UpdateSambaActionExecute(Sender: TObject);
1895 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
1896 input := ZenToHan(input);
1897 if GikoSys.IsNumeric(input) then begin
1898 FSambaTimer.UpdateSambaSetting(StrToInt(input));
1900 //
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81ASamba
\83^
\83C
\83}
\81[
\82ð
\8dX
\90V
\82·
\82é
1901 for i := 0 to Screen.FormCount - 1 do begin
1902 if Screen.Forms[i] is TEditorForm then begin
1903 TEditorForm(Screen.Forms[i]).FSambaTimer.Update;
1904 TEditorForm(Screen.Forms[i]).UpdateSambaStatus;
1908 ShowMessage('
\90\94\92l
\82ð
\93ü
\97Í
\82µ
\82Ä
\82
\82¾
\82³
\82¢');
1909 UpdateSambaActionExecute(Sender);
1914 procedure TEditorForm.UpdateSambaStatus;
1916 if (FSambaTimer.Enabled) then begin
1917 StatusBar.Panels[2].Text
1918 := 'Samba24
\8bK
\92è
\92l' + IntToStr(FSambaTimer.SambaInterval);
1922 procedure TEditorForm.InputAssistActionExecute(Sender: TObject);
1928 TextWidth, ItemWidth, tmpWidth: Integer;
1930 if FInputAssistKey = '' then Exit;
1932 InputAssistPopupMenu.Items.Clear;
1934 if (FResistWords = nil) then begin
1935 FResistWords := TStringList.Create;
1940 if (GetKeyState( VK_SHIFT ) < 0) then begin
1941 //
\83V
\83t
\83g
\82ª
\89\9f\82³
\82ê
\82Ä
\82¢
\82ê
\82Î
\81A
\83L
\81[
\82Å
\8en
\82Ü
\82é
\83J
\83e
\83S
\83\8a
1943 InputAssistDM.GetStartWithCategoryResistWords(
1944 FInputAssistKey, FResistWords);
1946 //
\83V
\83t
\83g
\82ª
\96³
\82¢
\82Ì
\82Å
\81A
\83L
\81[
\82Å
\8en
\82Ü
\82é
\83L
\81[
1948 InputAssistDM.GetStartWithKeyResistWords(
1949 FInputAssistKey, FResistWords);
1951 Bitmap := TBitmap.Create;
1953 Bitmap.Canvas.Font.Assign(BodyEdit.Font);
1954 //
\83}
\81[
\83W
\83\935px
1955 TextWidth := Bitmap.Canvas.TextWidth(FInputAssistKey) + 5;
1957 for i := 0 to count - 1 do begin
1958 item := TMenuItem.Create(nil);
1959 item.Break := mbNone;
1960 item.Caption := FResistWords[i];
1962 item.OnClick := InputAssistMenuClick;
1963 InputAssistPopupMenu.Items.Add(item);
1965 tmpWidth := Bitmap.Canvas.TextWidth(Item.Caption);
1966 if (tmpWidth > ItemWidth) then begin
1967 ItemWidth := tmpWidth;
1974 if (count > 0) then begin
1976 point.X := point.X + Self.Left + (Self.Width - BodyEdit.Width) div 2;
1977 point.Y := point.Y + Self.Top + (Self.Height - Self.ClientHeight);
1979 if Screen.DesktopWidth >
1980 (point.X + TextWidth + ItemWidth) then begin
1981 InputAssistPopupMenu.Popup(
1982 point.X + TextWidth,
1983 point.Y + EditorPage.Top + EditorPage.TabHeight + BodyEdit.Top);
1985 InputAssistPopupMenu.Popup(
1986 point.X - TextWidth - ItemWidth,
1987 point.Y + EditorPage.Top + EditorPage.TabHeight + BodyEdit.Top);
1992 procedure TEditorForm.InputAssistMenuClick(Sender: TObject);
1997 if not (Sender is TMenuItem) then Exit;
1999 if (FResistWords <> nil) then begin
2002 TResistWord(FResistWords.Objects[TMenuItem(Sender).Tag]).GetText;
2006 IMC := ImmGetContext(BodyEdit.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
2008 ImmNotifyIME(IMC, NI_COMPOSITIONSTR, CPS_CANCEL, 0);
2010 ImmReleaseContext(BodyEdit.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
2014 FInputAssistKey := '';
2016 InsertText(BodyEdit, text);
2019 //! TMemo
\82Ì
\83J
\81[
\83\
\83\8b\88Ê
\92u
\82É
\95¶
\8e\9a\97ñ
\91}
\93ü
2020 procedure TEditorForm.InsertText(Memo: TMemo; Text: String);
2022 line, sel, pos: Integer;
2023 left, right : String;
2025 Memo.Lines.BeginUpdate;
2026 line := SendMessage(Memo.Handle,EM_LINEFROMCHAR,-1,0); //
\8ds
2027 sel := Memo.SelStart;
2028 pos := sel - SendMessage(Memo.Handle, EM_LINEINDEX, -1, 0); //
\8c\85
2029 if (pos > 0) then begin
2030 left := Copy(Memo.Lines[line], 0, pos);
2034 right := Copy(Memo.Lines[line], pos + 1, Length(Memo.Lines[line]));
2035 Memo.Lines.Strings[line] := left + Text + right;
2036 Memo.Lines.EndUpdate;
2037 //
\81@
\83L
\83\83\83\8c\83b
\83g
\82Ì
\88Ê
\92u
\82ð
\8dX
\90V
\82·
\82é
2038 Memo.SelStart := sel + Length(text);
2039 //
\83L
\83\83\83\8c\83b
\83g
\82Ì
\88Ê
\92u
\82Ü
\82Å
\83X
\83N
\83\8d\81[
\83\8b
2040 Memo.Perform(EM_SCROLLCARET, 0, 0);
2044 procedure TEditorForm.ApplicationEvents1Message(var Msg: tagMSG;
2045 var Handled: Boolean);
2052 if (Self.Active) then begin
2054 //
\83L
\81[
\89\9f\89º
\82Ì
\82Ý
\8eó
\82¯
\8eæ
\82é
2057 //
\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é
2058 if (EditorPage.ActivePageIndex = 0)
2059 and (GetKeyState( VK_CONTROL ) < 0) then begin
2060 wmMsg.Msg := Msg.message;
2061 wmMsg.CharCode := Word(Msg.wParam);
2062 wmMsg.KeyData := Msg.lParam;
2063 if (wmMsg.CharCode = 229) and (wmMsg.KeyData = 3735553) then begin
2064 IMC := ImmGetContext(BodyEdit.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
2065 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
2066 if (Len > 0) then begin
2067 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
2068 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
2069 SetLength(Str, Len);
2070 FInputAssistKey := Str;
2071 InputAssistActionExecute(nil);
2074 ImmReleaseContext(BodyEdit.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
2083 procedure TEditorForm.ShowInputAssistFormExecute(Sender: TObject);
2085 form : TInputAssistForm;
2087 form := TInputAssistForm.Create(nil);
2089 if TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
2090 SetWindowPos(form.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2092 form.SetUpFromEditor;
2093 if (form.ShowModal = mrOk) then begin
2094 InsertText(BodyEdit, form.GetInsertText);
2100 //! Cookie
\8fî
\95ñ
\8dí
\8f\9c
2101 procedure TEditorForm.ReleaseCookieActionExecute(Sender: TObject);
2105 //
\83X
\83\8c\83b
\83h
\82ª
\96³
\82¢
\81@
\83X
\83\8c\97§
\82Ä
\82Ì
\82Æ
\82«
\82ÍFBoard
\82ð
\92¼
\90Ú
\8eg
\82¤
2108 //
\83N
\83b
\83L
\81[
\82Ì
\8fî
\95ñ
\82ð
\8eÌ
\82Ä
\82é
2112 // 0
\82É
\8aª
\82«
\96ß
\82·
2115 //!
\94Â
\8fî
\95ñ
\8eæ
\93¾Update
\83C
\83x
\83\93\83g
2116 procedure TEditorForm.GetSETTINGTXTActionUpdate(Sender: TObject);
2118 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
2119 GetSETTINGTXTAction.Enabled := not FWork;
2121 //!
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾Update
\83C
\83x
\83\93\83g
2122 procedure TEditorForm.GetHeadTXTActionUpdate(Sender: TObject);
2124 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
2125 GetSETTINGTXTAction.Enabled := not FWork;
2128 //! Samba
\83^
\83C
\83}
\81[
\83C
\83x
\83\93\83g
2129 procedure TEditorForm.SambaTimer(Sender: TObject);
2132 if FSambaTimer.WriteDeta = ZERO_DATE then
2133 StatusBar.Panels[1].Text := '
\8f\89\8f\91'
2135 FNow := IncMilliSecond(FNow, 500);
2136 StatusBar.Panels[1].Text :=
2137 Format('%8.0f
\95b
\8co
\89ß', [SecondSpan(FNow, FSambaTimer.WriteDeta)]);
2141 \brief
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82Æ
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
2143 procedure TEditorForm.SetWindowRect;
2145 wp: TWindowPlacement;
2147 //
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\90Ý
\92è
2148 wp.length := sizeof(wp);
2149 wp.rcNormalPosition.Top := GikoSys.Setting.EditWindowTop;
2150 wp.rcNormalPosition.Left := GikoSys.Setting.EditWindowLeft;
2152 wp.rcNormalPosition.Bottom := GikoSys.Setting.EditWindowTop + GikoSys.Setting.EditWindowHeight;
2153 wp.rcNormalPosition.Right := GikoSys.Setting.EditWindowLeft + GikoSys.Setting.EditWindowWidth;
2154 wp.showCmd := SW_HIDE;
2155 SetWindowPlacement(Handle, @wp);
2157 if GikoSys.Setting.EditWindowMax then begin
2158 WindowState := wsMaximized;
2161 //
\83E
\83B
\83\93\83h
\83E
\82ª
\89æ
\96Ê
\8aO
\82È
\82ç
\89æ
\96Ê
\93à
\82É
\88Ú
\93®
\82·
\82é
2162 if (Left + Width) > Screen.Width then begin
2165 if (Top + Height) > Screen.Height then begin
2168 if Left < 0 then begin
2171 if Top < 0 then begin
2175 //
\8c»
\8dÝ
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82ð
\95Û
\91¶
2176 GikoSys.Setting.EditWindowTop := Top + WINDOWMOVE_V; //
\8e\9f\82É
\8aJ
\82
\83E
\83B
\83\93\83h
\83E
\82Í
2177 GikoSys.Setting.EditWindowLeft := Left + WINDOWMOVE_H; //
\81@
\81@
\81@
\89E
\8eÎ
\82ß
\89º
\82É
\82¸
\82ç
\82·
2178 //
\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·
2179 if GikoSys.Setting.EditWindowHeight < 144 then begin
2182 if GikoSys.Setting.EditWindowWidth < 144 then begin
2187 \brief
\8ag
\92£
\83^
\83u
\90Ý
\92è
2189 procedure TEditorForm.SetExtraTab;
2191 SECTION = 'EditorForm';
2195 ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
2197 BoardtopTab.TabVisible := ini.Readbool(SECTION, 'BoardTopTab', False);
2198 BoardTop.Checked := BoardtopTab.TabVisible;
2199 RocalRuleTab.TabVisible := ini.ReadBool(SECTION, 'LocalRuleTab', False);
2200 LocalRule.Checked := RocalRuleTab.TabVisible;
2207 \return
\83\8c\83X
\83G
\83f
\83B
\83^
\82ª
\93\8a\8de
\82µ
\82æ
\82¤
\82Æ
\82µ
\82Ä
\82¢
\82é
\94Â
2209 function TEditorForm.GetBoard : TBoard;
2211 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ªnull
\82Ì
\8e\9e\82ÍFBoard
2212 if FThreadItem = nil then begin
2215 Result := FThreadItem.ParentBoard;
2219 \brief GikoForm
\82É
\83\81\83b
\83Z
\81[
\83W
\82ð
\92Ç
\89Á
\82·
\82é
2220 \param icon
\83\81\83b
\83Z
\81[
\83W
\82É
\82Â
\82
\83A
\83C
\83R
\83\93
2222 procedure TEditorForm.AddFormMessageNew(icon: TGikoMessageIcon);
2224 if FThreadItem = nil then begin
2225 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, icon)
2227 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, icon);
2232 \brief
\83\8d\81[
\83J
\83\8bfusiana
\83g
\83\89\83b
\83v
2233 \return true:
\91\97\90M
\92\86\8e~ false:
\91\97\90M
2235 function TEditorForm.isLocalFusianaTrap: Boolean;
2240 if GikoSys.Setting.LocalTrapAtt then begin
2241 Namae := THTMLCreate.RepHtml(NameComboBox.Text);
2242 if (LFusianaGet(Namae)) or (Namae = '
\8eR
\8dè
\8fÂ') then begin
2243 if FusianaMsgBox = IDNO then begin
2250 \brief
\83\8a\83\82\81[
\83gfusiana
\83g
\83\89\83b
\83v
2251 \return true:
\91\97\90M
\92\86\8e~ false:
\91\97\90M
2253 function TEditorForm.isRemoteFusianaTrap: Boolean;
2261 Namae := THTMLCreate.RepHtml(NameComboBox.Text);
2262 if (GikoSys.Setting.RemoteTrapAtt) and (Length(Namae) = 0) then begin
2265 if Board = nil then Exit;
2267 if not FileExists(Board.GetSETTINGTXTFileName) then begin
2268 //Setting.txt
\82ª
\82È
\82©
\82Á
\82½
\82ç
\8eæ
\93¾
2269 //
\8eI
\82É
\95\89\89×
\82ª
\82©
\82©
\82è
\82»
\82¤...
2271 GetSETTINGTXTAction.Execute;
2277 if FileExists(Board.GetSETTINGTXTFileName) then begin
2278 body := TStringList.Create;
2280 body.LoadFromFile(Board.GetSETTINGTXTFileName);
2281 Remote := GetFusianaName(body, Board);
2287 if LFusianaGet(Remote) then begin
2288 if FusianaMsgBox = IDNO then begin
2295 \brief Header
\95¶
\8e\9a\97ñ
\8eæ
\93¾
2296 \param ACOOKIE Cookie
2300 \return Header
\95¶
\8e\9a\97ñ
2302 function TEditorForm.getHeaderStr(const ACOOKIE: string; const SPID : string;
2303 const PON : string; Board : TBoard) : string;
2307 Result := Result + 'SPID=' + SPID + '; ';
2309 Result := Result + 'PON=' + PON + '; ';
2311 //
\83z
\83X
\83g
\82ª2ch
\82Å
\81ABe
\82ÉLogin
\82µ
\82Ä
\82¢
\82ê
\82ÎBE
\82Ì
\83f
\81[
\83^
\82ð
\91\97\82é
2312 //GikoSys.ParseURI( URL, Protocol,Host, Path, Document, Port, Bookmark );
2313 //if GikoSys.Is2chHost(Host) and GikoSys.Setting.BeLogin then
2314 if (Board.Is2ch) then begin
2315 //
\8cÅ
\92è
\82Ì
\83N
\83b
\83L
\81[
\82ª
\82 \82ê
\82Î
\90H
\82í
\82¹
\82é
2316 if Length(GikoSys.Setting.FixedCookie) > 0 then begin
2317 //
\83z
\83X
\83g
\82ª2ch
\82Ì
\8fê
\8d\87\81C
\8cÅ
\92è
\82Ì
\83N
\83b
\83L
\81[
\82ð
\90H
\82í
\82¹
\82é
2318 Result := Result + GikoSys.Setting.FixedCookie + '; ';
2320 if (GikoSys.Setting.BeLogin) then begin
2321 Result := Result + 'MDMD=' + GikoSys.Setting.BeCode + '; '
2322 + 'DMDM=' + GikoSys.Setting.BeUserID + '; ';
2327 Result := 'Cookie: ' + Result + 'NAME=' + NameComboBox.Text + '; MAIL=' + MailComboBox.Text;
2331 \brief fusiana
\8cx
\8d\90\83_
\83C
\83A
\83\8d\83O
2332 \return IDYES
\8f\91\82«
\8d\9e\82Þ IDNO
\92\86\8e~
2334 function TEditorForm.FusianaMsgBox: Integer;
2336 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 +
2337 '
\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' +
2338 #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';
2340 Result := MsgBox(Handle, MSG_FUSIANA, '
\8fî
\95ñ',
2341 MB_YESNO or MB_ICONQUESTION);