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 FGestures : TMouseGesture;
209 FInputAssistKey: String; ///<
\93ü
\97Í
\83A
\83V
\83X
\83g
\82Ì
\83L
\81[
210 FResistWords: TStringList; ///<
\93ü
\97Í
\83A
\83V
\83X
\83g
\82Ì
\8e«
\8f\91\82©
\82ç
\82Ì
\8c\9f\8dõ
\8c\8b\89Ê
211 FSambaTimer: TSambaTimer; ///< Samba
\91Î
\8dô
\82Ì
\83^
\83C
\83}
\81[
213 function Check: Boolean;
214 procedure SetNameList(sName, sMail: string);
215 procedure Send(const ACOOKIE: string; const SPID: string; const PON: string; FirstWriting: Boolean);
216 function GetActiveControlHandle: THandle;
217 procedure GetSendData(Source: TStringStream);
218 procedure SaveSendFile;
219 procedure SetContent(Content: string; ABrowser: TWebBrowser);
220 function GetResultType(ResponseText: string): TGikoResultType;
221 ///
\96{
\95¶
\82Ì
\8eæ
\93¾
222 function GetBody : string;
223 //IdHttp
\82Ì
\8f\89\8aú
\89»
224 procedure InitIdHTTP(http: TIdHTTP);
225 procedure ShowBoardInformation(ABoard: TBoard; AMemo: TMemo);
226 function GetTitlePictureURL(body: TStringList; ABoard: TBoard): string;
227 procedure ShowTitlePicture();
228 function GetFusianaName(body: TStringList; ABoard: TBoard): String;
229 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
230 procedure OnGestureStart(Sender: TObject);
231 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
232 procedure OnGestureMove(Sender: TObject);
233 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
234 procedure OnGestureEnd(Sender: TObject);
235 //HEAD.TXT
\8e©
\93®
\95\
\8e¦
236 procedure ShowBoardHead(ABoard: TBoard; AMemo: TMemo);
237 //LocalFusianaTrapAlart
238 function LFusianaGet(s: String): Boolean;
239 // Cookie
\82Ì
\8eæ
\93¾
240 procedure GetCookie(Rawtext: String; ABoard: TBoard);
241 //!
\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
242 procedure InputAssistMenuClick(Sender: TObject);
243 //! TMemo
\82Ì
\83J
\81[
\83\
\83\8b\88Ê
\92u
\82É
\95¶
\8e\9a\97ñ
\91}
\93ü
244 procedure InsertText(Memo: TMemo; Text: String);
245 //!
\91\97\90M
\92\86\8e~
246 procedure CancelSend(ABoard: TBoard; ASysMenu: HMENU);
247 //! Samba
\83^
\83C
\83}
\81[
\83C
\83x
\83\93\83g
248 procedure SambaTimer(Sender: TObject);
249 //!
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82Æ
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
250 procedure SetWindowRect;
251 //!
\8ag
\92£
\83^
\83u
\90Ý
\92è
252 procedure SetExtraTab;
254 function GetBoard : TBoard;
255 //! URL
\82Ì
\83f
\81[
\83^
\82ðstream
\82É
\8eæ
\82è
\8d\9e\82Þ
256 procedure GetWebData(const URL: string; const RefURL: string;
257 Modified: TDateTime; stream: TStream);
258 //! GikoForm
\82É
\90V
\92\85\83\81\83b
\83Z
\81[
\83W
\82ð
\92Ç
\89Á
\82·
\82é
259 procedure AddFormMessageNew(icon: TGikoMessageIcon);
260 //!
\83\8d\81[
\83J
\83\8bfusiana
\83g
\83\89\83b
\83v
261 function isLocalFusianaTrap(const MSG: string): Boolean;
262 //!
\83\8d\81[
\83J
\83\8bfusiana
\83g
\83\89\83b
\83v
263 function isRemoteFusianaTrap(const MSG: string): Boolean;
264 //! Header
\95¶
\8e\9a\97ñ
\8eæ
\93¾
265 function getHeaderStr(const ACOOKIE: string; const SPID : string;
266 const PON : string; Board : TBoard) : string;
268 procedure CreateParams(var Params: TCreateParams); override;
272 procedure SetThreadItem(Item: TThreadItem);
273 procedure SetBoard(Item: TBoard);
274 procedure UpdateSambaStatus;
275 property BBSID: string read FBBSID write FBBSID;
281 Giko, ItemDownload, MojuUtils, IdGlobal, GikoMessage, Imm,
282 InputAssistDataModule, InputAssist, HTMLCreate;
284 CAPTION_NAME_NEW: string = '
\83M
\83R
\83i
\83r
\83X
\83\8c\97§
\82Ä
\83G
\83f
\83B
\83^';
285 CAPTION_NAME_RES: string = '
\83M
\83R
\83i
\83r
\83\8c\83X
\83G
\83f
\83B
\83^';
287 //
\83G
\83f
\83B
\83b
\83g
\83E
\83B
\83\93\83h
\83E
\82ð
\89E
\89º
\82É
\82¸
\82ç
\82µ
\82Ä
\8aJ
\82
\88Ú
\93®
\97Ê
291 //DAX
\82³
\82ñ±Ø¶ÞÄ!(
\81L
\81¤
\81M)
292 READCGI_ERR = '-ERR';
293 READCGI_INCR = '-INCR';
295 READCGI_PARTIAL = '+PARTIAL';
296 READCGI_ERR_FOUND_KAKO = '-ERR
\89ß
\8b\8e\83\8d\83O
\91q
\8cÉ
\82Å
\94
\8c©';
297 READCGI_ERR_NOT_HTML = '-ERR html
\89»
\91Ò
\82¿';
298 READCGI_ERR_NOT_FOUND = '-ERR
\82»
\82ñ
\82È
\94Âor
\83X
\83\8c\83b
\83h
\82È
\82¢
\82Å
\82·
\81B';
299 READCGI_ERR_ABONE = '-ERR
\82Ç
\82±
\82©
\82Å
\82 \82Ú
\81[
\82ñ
\82ª
\82 \82Á
\82½
\82Ý
\82½
\82¢
\82Å
\82·
\81B';
300 READCGI_ERR_TIMEOUT = '-ERR
\8ew
\92è
\8e\9e\8aÔ
\82ª
\89ß
\82¬
\82Ü
\82µ
\82½
\81B';
301 READCGI_ERR_CANTUSE = '-ERR
\82à
\82¤
\81@
\82Â
\82©
\82¦
\82Ü
\82¹
\82ñ';
302 RES2CH_TRUE = '<!-- 2ch_X:true -->';
303 RES2CH_FALSE = '<!-- 2ch_X:false -->';
304 RES2CH_ERROR = '<!-- 2ch_X:error -->';
305 RES2CH_CHECK = '<!-- 2ch_X:check -->';
306 RES2CH_COOKIE = '<!-- 2ch_X:cookie -->';
310 StartPos, EndPos: Integer;
315 {constructor TEditorForm.Create(AOwner: TComponent; Item: TBoard);
317 inherited Create(AOwner);
320 procedure TEditorForm.CreateParams(var Params: TCreateParams);
323 if FormStyle in [fsNormal, fsStayOnTop] then
324 if BorderStyle in [bsSingle, bsSizeable] then begin
325 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
326 Params.WndParent := 0;
330 {procedure TEditorForm.CreateParams(var Params: TCreateParams);
332 inherited CreateParams(Params);
333 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
336 procedure TEditorForm.FormCreate(Sender: TObject);
339 FSambaTimer := TSambaTimer.Create(Self);
340 FSambaTimer.Interval := 0;
341 Browser.Navigate('about:blank');
342 TitlePictureBrowser.Navigate('about:blank');
346 //
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\90Ý
\92è
349 EditorPage.ActivePage := EditorTab;
350 FNameComboEdit := GetWindow(NameComboBox.Handle, GW_CHILD);
351 FMailComboEdit := GetWindow(MailComboBox.Handle, GW_CHILD);
352 NameComboBox.Items.Assign(GikoSys.Setting.NameList);
353 MailComboBox.Items.Assign(GikoSys.Setting.MailList);
355 //
\94¼
\93§
\96¾
\97\98\97p
\89Â
\94\
\90Ý
\92è
356 TransAction.Enabled := GikoSys.CanUser32DLL;
358 //
\83E
\83B
\83\93\83h
\83E
\82Ì
\83X
\83e
\83C
\8fó
\91Ô
359 if GikoSys.Setting.EditWindowStay then begin //
\83X
\83e
\83C
\8fó
\91Ô
360 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
361 TopAction.Checked := true;
362 TopToolButton.Down := true;
363 end else begin //
\83X
\83e
\83C
\82µ
\82È
\82¢
364 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
365 TopAction.Checked := false;
366 TopToolButton.Down := false;
369 //
\83E
\83B
\83\93\83h
\83E
\82Ì
\94¼
\93§
\96¾
\8fó
\91Ô
370 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Ô
372 TransAction.Checked := true;
373 TransToolButton.Down := true;
374 end else begin //
\95s
\93§
\96¾
376 TransAction.Checked := false;
377 TransToolButton.Down := false;
379 //
\94¼
\93§
\96¾
\8fó
\91Ô
\82Ì
\95Û
\91¶
380 GikoSys.Setting.EditWindowTranslucent := TransAction.Checked;
382 SpaceToNBSPAction.Checked := GikoSys.Setting.SpaceToNBSP;
383 AmpToCharRefAction.Checked := GikoSys.Setting.AmpToCharRef;
384 //
\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è
387 //
\83L
\81[
\90Ý
\92è
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
388 GikoSys.LoadKeySetting(ActionList, GikoSys.GetEditorKeyFileName);
389 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\82Ì
\83C
\83\93\83X
\83g
\81[
\83\8b
390 if GikoSys.Setting.GestureEnabled then begin
392 FGestures := TMouseGesture.Create;
393 GikoSys.Setting.Gestures.ClearGesture;
395 GikoSys.Setting.Gestures.LoadGesture(
396 GikoSys.Setting.GetGestureFileName, ActionList );
397 MouseGesture.OnGestureStart := OnGestureStart;
398 MouseGesture.OnGestureMove := OnGestureMove;
399 MouseGesture.OnGestureEnd := OnGestureEnd;
400 MouseGesture.SetHook( Handle );
402 SaveNameMailAction.Checked := True;
404 procedure TEditorForm.SetBoard(Item: TBoard);
407 Caption := CAPTION_NAME_NEW + ' - [' + Item.Title + ']';
408 NameComboBox.Text := FBoard.KotehanName;
409 MailComboBox.Text := FBoard.KotehanMail;
410 SageCheckBox.Checked := AnsiPos('sage', MailComboBox.Text) <> 0;
411 TitlePanel.Visible := True;
413 if (FSambaTimer.SetBoard(FBoard) >= 0) then begin
416 FSambaTimer.OnTimer := SambaTimer;
419 ShowBoardInformation(FBoard, BoardInformationMemo);
423 procedure TEditorForm.SetThreadItem(Item: TThreadItem);
426 Caption := CAPTION_NAME_RES + ' - [' + FThreadItem.Title + ']';
427 NameComboBox.Text := FThreadItem.ParentBoard.KotehanName;
428 MailComboBox.Text := FThreadItem.ParentBoard.KotehanMail;
429 SageCheckBox.Checked := AnsiPos('sage', MailComboBox.Text) <> 0;
430 TitlePanel.Visible := False;
432 if (FSambaTimer.SetBoard(FThreadItem.ParentBoard) >= 0) then begin
435 FSambaTimer.OnTimer := SambaTimer;
438 ShowBoardInformation(FThreadItem.ParentBoard, BoardInformationMemo);
442 function TEditorForm.GetBody : string;
451 body := BodyEdit.Text;
452 if AmpToCharRefAction.Checked then
453 // &
\82Ì
\92u
\8a·
\82Í
\88ê
\94Ô
\8dÅ
\8f\89\82É
\82â
\82é
\82±
\82Æ
454 body := CustomStringReplace( body, '&', '&' );
455 if SpaceToNBSPAction.Checked then begin
457 tail := p + Length( body );
459 while p < tail do begin
466 tmp := tmp + ' ';
467 until (len mod TAB_LENGTH) = 0;
472 tmp := tmp + p^; Inc( p );
478 tmp := tmp + ' ';
484 //
\8eÀ
\91Ì
\8eQ
\8fÆ
\82Í 1
\95¶
\8e\9a\95ª
489 while p < tail do begin
490 if p^ in ['a'..'z', 'A'..'Z', '0'..'9', '#'] then begin
492 end else if p^ = ';' then begin
504 if p^ in kYofKanji then begin
505 tmp := tmp + p^; Inc( p );
506 tmp := tmp + p^; Inc( p );
509 tmp := tmp + p^; Inc( p );
521 procedure TEditorForm.SetFont;
523 BodyEdit.Font.Name := GikoSys.Setting.EditorFontName;
524 BodyEdit.Font.Size := GikoSys.Setting.EditorFontSize;
525 BodyEdit.Font.Color := GikoSys.Setting.EditorFontColor;
526 BodyEdit.Color := GikoSys.Setting.EditorBackColor;
529 procedure TEditorForm.Preview;
538 if FThreadItem = nil then begin
540 Title := THTMLCreate.RepHtml(TitleEdit.Text);
542 No := IntToStr(FThreadItem.Count + 1);
543 Title := THTMLCreate.RepHtml(FThreadItem.Title);
547 Namae := THTMLCreate.RepHtml(NameComboBox.Text);
548 Mail := THTMLCreate.RepHtml(MailComboBox.Text);
549 Body := THTMLCreate.RepHtml(Body);
550 Body := CustomStringReplace(Body, #13#10, '<br>', False);
553 if Trim(Namae) = '' then
554 Namae := '
\96¼
\96³
\82µ
\82³
\82ñ';
556 s := THTMLCreate.CreatePreviewHTML(Title, No, Mail, Namae, Body);
558 SetContent(s, Browser);
561 procedure TEditorForm.EditorPageChange(Sender: TObject);
566 tmpBoard := GetBoard;
568 if tmpBoard = nil then Exit;
570 if EditorPage.ActivePage = PreviewTab then begin
572 end else if EditorPage.ActivePage = RocalRuleTab then begin
573 if not FileExists(tmpBoard.GETHEADTXTFileName) then begin
574 LocalEdit.Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\96¢
\8eæ
\93¾';
577 ShowBoardHead(tmpBoard, LocalEdit);
579 Browser.Navigate('about:blank');
583 procedure TEditorForm.BrowserStatusTextChange(Sender: TObject;
584 const Text: WideString);
586 if EditorPage.ActivePage = PreviewTab then begin
587 StatusBar.Panels[0].Text := Text;
589 StatusBar.Panels[0].Text := '';
593 function TEditorForm.Check: Boolean;
595 REQUIRED: string = '
\82ª
\93ü
\97Í
\82³
\82ê
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B';
596 ERROR: string = '
\83G
\83\89\81[';
606 if (not GikoSys.Setting.UseMachineTime) and
607 ((Board.LastGetTime = 0) or
608 (Board.LastGetTime = ZERO_DATE)) then begin
609 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
610 + '
\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¢';
611 MsgBox(Handle, Msg, ERROR, MB_OK or MB_ICONSTOP);
613 end else if BodyEdit.Text = '' then begin
614 Msg := '
\96{
\95¶' + REQUIRED;
615 MsgBox(Handle, Msg, ERROR, MB_OK or MB_ICONSTOP);
617 end else if (FBoard <> nil) and (Trim(TitleEdit.Text) = '') then begin
618 Msg := '
\83^
\83C
\83g
\83\8b' + REQUIRED;
619 MsgBox(Handle, Msg, ERROR, MB_OK or MB_ICONSTOP);
622 if (not GikoSys.Dolib.Connected) and (AnsiPos('
\81\9c', NameComboBox.Text) <> 0) then begin
623 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
624 + '
\82±
\82Ì
\82Ü
\82Ü
\91\97\90M
\82µ
\82Ä
\82à
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
625 rc := MsgBox(Handle, Msg, '
\8am
\94F', MB_YESNO or MB_ICONQUESTION);
626 Result := (rc = IDYES);
631 procedure TEditorForm.FormClose(Sender: TObject; var Action: TCloseAction);
637 procedure TEditorForm.FormDestroy(Sender: TObject);
639 wp: TWindowPlacement;
641 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
642 wp.length := sizeof(wp);
643 GetWindowPlacement(Handle, @wp);
645 GikoSys.Setting.EditWindowTop := wp.rcNormalPosition.Top;
646 GikoSys.Setting.EditWindowLeft := wp.rcNormalPosition.Left;
647 GikoSys.Setting.EditWindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
648 GikoSys.Setting.EditWindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
649 GikoSys.Setting.EditWindowMax := WindowState = wsMaximized;
650 //GikoSys.Setting.EditWindowStay := FormStyle = fsStayOnTop; //
\83X
\83e
\83C
\8fó
\91Ô
\82Ì
\95Û
\91¶
651 GikoSys.Setting.EditWindowTranslucent := TransAction.Checked; //
\94¼
\93§
\96¾
\8fó
\91Ô
\82Ì
\95Û
\91¶
657 procedure TEditorForm.SetNameList(sName, sMail: string);
659 if SaveNameMailAction.Checked then begin
660 if Trim(sName) <> '' then begin
661 if GikoSys.Setting.NameList.IndexOf(sName) = -1 then
662 GikoSys.Setting.NameList.Insert(0, sName);
664 if Trim(sMail) <> '' then begin
665 if GikoSys.Setting.MailList.IndexOf(sMail) = -1 then
666 GikoSys.Setting.MailList.Insert(0, sMail);
671 function TEditorForm.GetActiveControlHandle: THandle;
673 if EditorPage.ActivePage = EditorTab then begin
674 if ActiveControl = NameComboBox then
675 Result := FNameComboEdit
676 else if ActiveControl = MailComboBox then
677 Result := FMailComboEdit
678 else if ActiveControl = BodyEdit then
679 Result := BodyEdit.Handle
680 else if ActiveControl = TitleEdit then
681 Result := TitleEdit.Handle
684 end else if Editorpage.ActivePage = BoardInformationTab then begin
685 if ActiveControl = BoardInformationMemo then
686 Result := BoardInformationMemo.Handle
689 end else if Editorpage.ActivePage = RocalRuleTab then begin
690 if ActiveCOntrol = LocalEdit then
691 Result := LocalEdit.Handle
698 procedure TEditorForm.SetContent(Content: string; ABrowser: TWebBrowser);
702 if ABrowser.Document <> nil then begin
703 doc := Idispatch( olevariant(ABrowser.ControlInterface).Document) as IHTMLDocument2;
706 doc.charset := 'Shift_JIS';
711 procedure TEditorForm.InitIdHTTP(http: TIdHTTP);
714 http.ProxyParams.BasicAuthentication := False;
715 if GikoSys.Setting.WriteProxy then begin
716 http.ProxyParams.ProxyServer := GikoSys.Setting.WriteProxyAddress;
717 http.ProxyParams.ProxyPort := GikoSys.Setting.WriteProxyPort;
718 http.ProxyParams.ProxyUsername := GikoSys.Setting.WriteProxyUserID;
719 http.ProxyParams.ProxyPassword := GikoSys.Setting.WriteProxyPassword;
720 if GikoSys.Setting.ReadProxyUserID <> '' then
721 http.ProxyParams.BasicAuthentication := True;
723 http.ProxyParams.ProxyServer := '';
724 http.ProxyParams.ProxyPort := 80;
725 http.ProxyParams.ProxyUsername := '';
726 http.ProxyParams.ProxyPassword := '';
728 Indy.Request.UserAgent := GikoSys.GetUserAgent;
729 Indy.Request.AcceptEncoding := '';
731 //!
\91\97\90M
\92\86\8e~
\82Ì
\82½
\82ß
\82Ì
\83\81\83j
\83\85\81[
\82Ì
\8dÄ
\90¶
732 procedure TEditorForm.CancelSend(ABoard: TBoard; ASysMenu: HMENU);
737 EnableMenuItem(ASysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
741 procedure TEditorForm.Send( const ACOOKIE: string; const SPID: string;
742 const PON: string; FirstWriting: Boolean);
744 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 +
745 '
\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' +
746 #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';
748 TextStream: TStringStream;
749 Source: TStringStream;
750 ResponseText: string;
752 State: TGikoDownloadState;
753 ResultType: TGikoResultType;
757 {Protocol,Host, Path, Document, Port, Bookmark : String;}
765 if FThreadItem = nil then begin
766 URL := FBoard.GetSendURL;
767 Indy.Request.Referer := GikoSys.UrlToServer(FBoard.URL) + 'test/bbs.cgi';
769 URL := FThreadItem.GetSendURL;
770 Indy.Request.Referer := FThreadItem.URL;
773 sysMenu := GetSystemMenu( Handle, false );
774 EnableMenuItem( sysMenu, SC_CLOSE, MF_GRAYED );
776 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
779 Indy.Request.CustomHeaders.Clear;
780 // Indy.Request.CacheControl := 'no-cache';
781 Indy.Request.CustomHeaders.Add('Pragma: no-cache');
782 Indy.Request.AcceptLanguage := 'ja';
783 Indy.Request.Accept := 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*';
784 Indy.Request.ContentType := 'application/x-www-form-urlencoded';
785 Indy.Request.CustomHeaders.Add(getHeaderStr(ACOOKIE, SPID, PON, Board));
786 TextStream := TStringStream.Create('');
787 Source := TStringStream.Create('');
790 FDebugStrReceive := '';
793 if (FirstWriting) then begin
794 //
\83t
\83V
\83A
\83i
\83g
\83\89\83b
\83v
\8cx
\8d\90(LocalMode) by
\92è
\8aú
\95Ö
795 if (isLocalFusianaTrap(MSG_FUSIANA)) then begin
796 CancelSend( Board, SysMenu );
799 //
\83t
\83V
\83A
\83i
\83g
\83\89\83b
\83v
\8cx
\8d\90(Remote)
800 if (isRemoteFusianaTrap(MSG_FUSIANA)) then begin
801 CancelSend( Board, SysMenu );
807 IdAntiFreeze.Active := True;
809 Indy.Post(URL, Source, TextStream);
811 IdAntiFreeze.Active := False;
813 ResponseText := TextStream.DataString;
815 ResultType := GetResultType(ResponseText);
818 if ResultType = grtOK then begin
819 if (GikoSys.Setting.UseSamba) and (FSambaTimer.Enabled) then
821 FSambaTimer.WriteSambaTime(Now());
823 State := gdsComplete;
824 end else if ResultType = grtCookie then begin
825 //
\83\8b\81[
\83v
\96h
\8e~
826 if not FirstWriting then
827 raise Exception.Create('');
829 MsgResult := MsgBox( Handle,
830 '
\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 +
831 '
\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 +
832 '
\91S
\90Ó
\94C
\82ð
\95\89\82¤
\82±
\82Æ
\82ð
\8f³
\91ø
\82µ
\82Ä
\8f\91\82«
\8d\9e\82Ý
\82Ü
\82·
\82©
\81H',
834 MB_YESNO or MB_ICONQUESTION);
836 if MsgResult = IDYES then begin
837 GetCookie(Indy.Response.RawHeaders.Text, Board);
839 if (Board.SPID = '') and (Board.PON = '') and (Board.Cookie = '') then
840 raise Exception.Create('');
842 //
\82à
\82¤
\88ê
\89ñ
\82±
\82Ì
\83\81\83\
\83b
\83h
843 Send(Board.Cookie, Board.SPID, Board.PON, False);
846 CancelSend( Board, SysMenu );
849 end else if ResultType = grtCheck then begin
850 //
\83\8b\81[
\83v
\96h
\8e~
851 if not FirstWriting then
852 raise Exception.Create('');
854 MsgResult := MsgBox( Handle,
855 '
\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 +
856 '
\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 +
857 '
\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 +
858 '
\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 +
860 '
\91S
\90Ó
\94C
\82ð
\95\89\82¤
\82±
\82Æ
\82ð
\8f³
\91ø
\82µ
\82Ä
\8f\91\82«
\8d\9e\82Ý
\82Ü
\82·
\82©
\81H',
862 MB_YESNO or MB_ICONQUESTION);
864 if MsgResult = IDYES then begin
865 GetCookie(Indy.Response.RawHeaders.Text, Board);
867 if (Board.SPID = '') and (Board.PON = '') and (Board.Cookie = '') then
868 raise Exception.Create('');
870 Send(Board.Cookie, Board.SPID, Board.PON, False);
873 CancelSend( Board, SysMenu );
877 if (GikoSys.Setting.UseSamba) and (FSambaTimer.Enabled) then
879 FSambaTimer.WriteSambaTime(Now());
883 raise Exception.Create('');
886 on E: EIdConnectException do begin
888 ResponseText := '<html><body>'
889 + '<div>
\90Ú
\91±
\82ª
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½<br>'
890 + '
\89ñ
\90ü
\82â
\83v
\83\8d\83L
\83V
\82Ì
\8fó
\91Ô
\82ð
\92²
\82×
\82Ä
\82
\82¾
\82³
\82¢<br></div>'
891 + '<br><br><div>' + E.Message + '</div>'
894 on E: Exception do begin
897 FDebugStrReceive := AnsiReplaceText(FDebugStrReceive, '<', '<');
898 FDebugStrReceive := AnsiReplaceText(FDebugStrReceive, '>', '>');
899 FDebugStrSend := AnsiReplaceText(FDebugStrSend, '<', '<');
900 FDebugStrSend := AnsiReplaceText(FDebugStrSend, '>', '>');
902 ResponseText := '<html><body>' + TextStream.DataString;
903 ResponseText := AnsiReplaceText(ResponseText, '</body>', '');
904 ResponseText := AnsiReplaceText(ResponseText, '</html>', '');
905 ResponseText := ResponseText + '<hr><div align="left"><pre>';
906 ResponseText := ResponseText + '<b>
\82±
\82±
\82©
\82ç
\83M
\83R
\83i
\83r
\82Ì
\8fî
\95ñ</b>'#13#10;
907 ResponseText := ResponseText + #13#10'
\81\9c\91\97\90M'#13#10;
908 ResponseText := ResponseText + FDebugStrSend;
909 ResponseText := ResponseText + #13#10'
\81\9c\8eó
\90M'#13#10;
910 ResponseText := ResponseText + FDebugStrReceive;
911 ResponseText := ResponseText + '</pre></div></body></html>';
914 FStatusCode := Indy.ResponseCode;
920 //sysMenu := GetSystemMenu( Handle, true );
921 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
925 //
\94ñ
\8cö
\8e®
\83M
\83R
\83i
\83r
\94Â
\82È
\82Ç
\82Ì2ch
\8cÝ
\8a·
\83X
\83N
\83\8a\83v
\83g
\97p
926 //2ch
\88È
\8aO
\82Å
\82©
\82ÂResponceCode
\82ª302Found
\82Å
\8f\91\82«
\8d\9e\82Ý
\8a®
\97¹
927 //if (not Board.Is2ch) and (FStatusCode = 302) then begin
928 if FStatusCode = 302 then begin
929 GikoForm.PlaySound('ResEnd');
931 AddFormMessageNew( gmiOK );
935 if State = gdsComplete then begin
936 GikoForm.PlaySound('ResEnd');
938 AddFormMessageNew( gmiOK );
940 end else if State = gdsError then begin
941 AddFormMessageNew( gmiOK );
942 EditorPage.ActivePage := PreviewTab;
943 SetContent(ResponseText, Browser);
944 end else if State = gdsAbort then begin
945 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiSAD);
948 function TEditorForm.GetResultType(ResponseText: string): TGikoResultType;
950 if AnsiPos('
\8f\91\82«
\82±
\82Ý
\82ª
\8fI
\82í
\82è
\82Ü
\82µ
\82½', ResponseText) <> 0 then
952 else if (AnsiPos('
\83N
\83b
\83L
\81[
\82ª
\82È
\82¢
\82©
\8aú
\8cÀ
\90Ø
\82ê
\82Å
\82·', ResponseText) > 0) or
953 (AnsiPos('<title>
\83N
\83b
\83L
\81[
\8am
\94F
\81I</title>', ResponseText) > 0) or
954 (AnsiPos('<title>
\81¡
\83N
\83b
\83L
\81[
\8am
\94F
\81I
\81¡</title>', ResponseText) > 0) or
955 //(AnsiPos('
\83N
\83b
\83L
\81[
\8am
\94F', ResponseText) > 0) or
956 (AnsiPos(RES2CH_COOKIE, ResponseText) > 0) then
958 else if (AnsiPos('<font size=+2 color=#FF0000>
\8f\91\82«
\8d\9e\82Ý
\83`
\83F
\83b
\83N
\81I </font>', ResponseText) > 0) or
959 (AnsiPos('<title>
\81¡
\8f\91\82«
\8d\9e\82Ý
\8am
\94F
\82µ
\82Ü
\82·
\81¡</title>', ResponseText) > 0) or
960 (AnsiPos('<title>
\93\8a\8de
\8am
\94F</title>', ResponseText) > 0) or
961 (AnsiPos('<b>
\8f\91\82«
\82±
\82Ý
\8am
\94F</b>', ResponseText) > 0) or
962 (AnsiPos('="../test/subbbs.cgi">', ResponseText) > 0) or
963 (AnsiPos(RES2CH_FALSE, ResponseText) > 0) then
965 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
966 (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
973 procedure TEditorForm.GetSendData(Source: TStringStream);
984 if GikoSys.Setting.UseMachineTime then begin
985 if GikoSys.Setting.TimeAdjust then
986 Adjust := Gikosys.Setting.TimeAdjustSec
988 Adjust := GikoSys.Setting.TimeAdjustSec * -1;
989 SendTime := GikoSys.DateTimeToInt(Now) - (9 * 60 * 60) + Adjust
991 if (Board.LastGetTime = 0) or (Board.LastGetTime = ZERO_DATE) then
992 SendTime := GikoSys.DateTimeToInt(Now)
994 SendTime := GikoSys.DateTimeToInt(Board.LastGetTime);
999 SessionID := GikoSys.Dolib.SessionID;
1000 if SessionID <> '' then
1001 s := 'sid=' + HttpEncode(SessionID) + '&'
1004 s := s + 'subject=&'
1005 + 'FROM=' + HttpEncode(NameComboBox.Text) + '&'
1006 + 'mail=' + HttpEncode(MailComboBox.Text) + '&'
1007 + 'MESSAGE=' + HttpEncode(body) + '&'
1008 + 'bbs=' + Board.BBSID + '&'
1009 + 'time=' + IntToStr(SendTime) + '&';
1011 if FThreadItem = nil then begin
1012 s := s + 'subject=' + HttpEncode(TitleEdit.Text) + '&';
1013 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;
1015 s := s + 'key=' + ChangeFileExt(FThreadItem.FileName, '') + '&';
1016 s := s + 'submit=' + HttpEncode('
\8f\91\82«
\8d\9e\82Þ') + #13#10;
1018 Source.WriteString(s);
1021 procedure TEditorForm.SaveSendFile;
1026 ini := TMemIniFile.Create(GikoSys.GetSentFileName);
1028 sDate := IntToStr(GikoSys.DateTimeToInt(Now));
1030 ini.WriteString(sDate, 'Name', NameComboBox.Text);
1031 ini.WriteString(sDate, 'EMail', MailComboBox.Text);
1032 ini.WriteString(sDate, 'Body', HttpEncode(BodyEdit.Text));
1033 ini.WriteInteger(sDate, 'Status', FStatusCode);
1034 ini.WriteDateTime(sDate, 'Date', Now);
1035 if FThreadItem = nil then begin
1036 ini.WriteString(sDate, 'Title', MojuUtils.Sanitize(TitleEdit.Text));
1037 ini.WriteString(sDate, 'BBS', FBoard.BBSID);
1038 ini.WriteInteger(sDate, 'NewThread', 1);
1040 ini.WriteString(sDate, 'Title', FThreadItem.Title);
1041 ini.WriteString(sDate, 'BBS', FThreadItem.ParentBoard.BBSID);
1042 ini.WriteString(sDate, 'Key', ChangeFileExt(FThreadItem.FileName, ''));
1051 procedure TEditorForm.SendActionExecute(Sender: TObject);
1053 TITLE_SAMBA : string = 'Samba24
\8cx
\8d\90';
1058 state : TGikoDownloadState;
1065 SendAction.Enabled := False;
1066 Application.ProcessMessages;
1067 if not Check then Exit;
1071 if FThreadItem = nil then begin
1072 rc := GikoUtil.MsgBox(Handle,
1073 '
\81u' + Board.Title + '
\81v
\94Â
\82É
\90V
\82µ
\82¢
\83X
\83\8c\83b
\83h
\97§
\82Ä
\82Ü
\82·'#13#10#13#10
1074 + '
\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
1075 + '
\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
1076 + '
\81u
\82Í
\82¢
\81v
\82ð
\89\9f\82·
\82Æ
\91\97\90M
\82µ
\82Ü
\82·',
1078 MB_ICONQUESTION or MB_YESNO);
1079 if rc <> ID_YES then
1083 SetNameList(NameComboBox.Text, MailComboBox.Text);
1084 if (KotehanCheckBox.Enabled) and (KotehanCheckBox.Checked) then begin
1085 Board.KotehanName := NameComboBox.Text;
1086 Board.KotehanMail := MailComboBox.Text;
1089 if Board.IsBoardPlugInAvailable then begin
1092 if FThreadItem = nil then begin
1093 //
\83X
\83\8c\97§
\82Ä
1094 state := TGikoDownloadState( Board.BoardPlugIn.CreateThread(
1095 DWORD( Board ), TitleEdit.Text, NameComboBox.Text, MailComboBox.Text, body ) );
1097 if state = gdsComplete then begin
1098 GikoForm.PlaySound('ResEnd');
1100 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, gmiOK);
1103 end else if State = gdsError then begin
1104 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmSureError), nil, gmiNG);
1105 end else if State = gdsAbort then begin
1106 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiNG);
1110 state := TGikoDownloadState( FThreadItem.ParentBoard.BoardPlugIn.WriteThread(
1111 DWORD( FThreadItem ), NameComboBox.Text, MailComboBox.Text, body ) );
1113 if state = gdsComplete then begin
1114 GikoForm.PlaySound('ResEnd');
1116 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, gmiOK);
1119 end else if State = gdsError then begin
1120 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmResError), nil, gmiOK);
1121 end else if State = gdsAbort then begin
1122 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
1126 if not FSambaTimer.Enabled then begin
1127 if CompareDateTime(Board.Expires ,Now) <= 0 then begin
1132 Send(Board.Cookie, Board.SPID, Board.PON, True);
1134 if not FSambaTimer.CheckSambaTime(Now()) then begin
1135 rc := GikoUtil.MsgBox(Handle,
1136 '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
1137 + '
\91\97\90M
\82ð
\92\86\8e~
\82µ
\82Ü
\82·
\82©
\81H' + #13#10
1138 + '(
\81u
\82¢
\82¢
\82¦
\81v
\82¾
\82Æ
\91\97\90M
\82µ
\82Ü
\82·)', TITLE_SAMBA,
1139 MB_YESNO or MB_ICONQUESTION);
1140 if rc = IDYES then begin
1144 if rc = IDNO then begin
1145 rc2 := GikoUtil.MsgBox(Handle,
1146 '
\96{
\93\96\82É
\91\97\90M
\82µ
\82Ü
\82·
\82©
\81H',
1148 MB_YESNO or MB_ICONQUESTION);
1149 if rc2 = IDNO then begin
1155 if CompareDateTime(Board.Expires ,Now) <= 0 then begin
1160 Send(Board.Cookie, Board.SPID, Board.PON, True);
1165 if FSambaTimer.Enabled then begin
1166 FNow := FSambaTimer.Update;
1171 procedure TEditorForm.SaveActionExecute(Sender: TObject);
1176 procedure TEditorForm.CloseActionExecute(Sender: TObject);
1181 procedure TEditorForm.UndoActionExecute(Sender: TObject);
1183 SendMessage(GetActiveControlHandle, WM_UNDO, 0, 0);
1186 procedure TEditorForm.CutActionExecute(Sender: TObject);
1188 SendMessage(GetActiveControlHandle, WM_CUT, 0, 0);
1191 procedure TEditorForm.CopyActionExecute(Sender: TObject);
1193 SendMessage(GetActiveControlHandle, WM_COPY, 0, 0);
1196 procedure TEditorForm.PasteActionExecute(Sender: TObject);
1198 SendMessage(GetActiveControlHandle, WM_PASTE, 0, 0);
1201 procedure TEditorForm.SelectAllActionExecute(Sender: TObject);
1203 SendMessage(GetActiveControlHandle, EM_SETSEL, 0, GetWindowTextLength(GetActiveControlHandle));
1206 procedure TEditorForm.TopActionExecute(Sender: TObject); //
\83E
\83B
\83\93\83h
\83E
\8dÅ
\91O
\96Ê(Stay)
\83{
\83^
\83\93\82Ì
\8f\88\97\9d
1208 if not (fsShowing in Self.FormState) then begin
1209 if TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
1210 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
1211 GikoSys.Setting.EditWindowStay := true;
1212 end else begin //
\83X
\83e
\83C
\8fó
\91Ô
\89ð
\8f\9c
1213 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
1214 GikoSys.Setting.EditWindowStay := false;
1216 //
\83X
\83e
\83C
\8fó
\91Ô
\82Ì
\95Û
\91¶
1217 //GikoSys.Setting.EditWindowStay := FormStyle = fsStayOnTop;
1221 procedure TEditorForm.AbortActionExecute(Sender: TObject);
1226 procedure TEditorForm.SendActionUpdate(Sender: TObject);
1228 SendAction.Enabled := not FWork;
1231 procedure TEditorForm.SaveActionUpdate(Sender: TObject);
1233 SaveAction.Enabled := False;
1236 procedure TEditorForm.CloseActionUpdate(Sender: TObject);
1238 CloseAction.Enabled := not FWork;
1241 procedure TEditorForm.UndoActionUpdate(Sender: TObject);
1243 UndoAction.Enabled := (GetActiveControlHandle <> 0)
1244 and (SendMessage(GetActiveControlHandle, EM_CANUNDO, 0, 0) <> 0)
1248 procedure TEditorForm.CutActionUpdate(Sender: TObject);
1250 Selection: TSelection;
1253 AHandle := GetActiveControlHandle;
1254 SendMessage(AHandle, EM_GETSEL, Longint(@Selection.StartPos), Longint(@Selection.EndPos));
1255 CutAction.Enabled := (AHandle <> 0)
1256 and ((Selection.EndPos - Selection.StartPos) <> 0)
1260 procedure TEditorForm.CopyActionUpdate(Sender: TObject);
1262 Selection: TSelection;
1265 AHandle := GetActiveControlHandle;
1266 SendMessage(AHandle, EM_GETSEL, Longint(@Selection.StartPos), Longint(@Selection.EndPos));
1267 CopyAction.Enabled := (AHandle <> 0)
1268 and ((Selection.EndPos - Selection.StartPos) <> 0)
1272 procedure TEditorForm.PasteActionUpdate(Sender: TObject);
1274 PasteAction.Enabled := (GetActiveControlHandle <> 0)
1275 and (Clipboard.HasFormat(CF_TEXT))
1279 procedure TEditorForm.TopActionUpdate(Sender: TObject);
1281 TopAction.Enabled := not FWork;
1284 procedure TEditorForm.SageCheckBoxClick(Sender: TObject);
1286 if SageCheckBox.Checked then begin
1287 if AnsiPos('sage', MailComboBox.Text) = 0 then
1288 MailComboBox.Text := 'sage' + MailComboBox.Text;
1290 if AnsiPos('sage', MailComboBox.Text) <> 0 then
1291 MailComboBox.Text := StringReplace(MailComboBox.Text, 'sage', '', [rfReplaceAll]);
1295 procedure TEditorForm.MailComboBoxChange(Sender: TObject);
1297 if AnsiPos('sage', MailComboBox.Text) = 0 then
1298 SageCheckBox.Checked := False
1300 SageCheckBox.Checked := True;
1303 procedure TEditorForm.IdLogDebugReceive(ASender: TIdConnectionIntercept;
1306 StringStream: TStringStream;
1308 StringStream := TStringStream.Create('');
1310 StringStream.CopyFrom(AStream, AStream.Size);
1311 FDebugStrReceive := FDebugStrReceive + StringStream.DataString;
1317 procedure TEditorForm.IdLogDebugSend(ASender: TIdConnectionIntercept;
1320 StringStream: TStringStream;
1322 StringStream := TStringStream.Create('');
1324 StringStream.CopyFrom(AStream, AStream.Size);
1325 FDebugStrSend := FDebugStrSend + StringStream.DataString;
1331 procedure TEditorForm.TransActionExecute(Sender: TObject);
1333 AlphaBlend := TransAction.Checked;
1334 //
\94¼
\93§
\96¾
\8fó
\91Ô
\82Ì
\95Û
\91¶
1335 GikoSys.Setting.EditWindowTranslucent := TransAction.Checked;
1338 procedure TEditorForm.TransActionUpdate(Sender: TObject);
1340 TransAction.Enabled := not FWork;
1342 //StatusBar
\82ÌPanels[0]
\82Ì
\95\9d\82ð
\89Â
\95Ï
\81B
\8ec
\82è
\82ð
\8cÅ
\92è
\82É
\82·
\82é
1343 procedure TEditorForm.StatusBarResize(Sender: TObject);
1345 StatusBar.Panels[0].Width := StatusBar.Width
1346 - StatusBar.Panels[1].Width - StatusBar.Panels[2].Width;
1350 //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Þ
1351 procedure TEditorForm.FormActivate(Sender: TObject);
1353 if ( FSambaTimer.Enabled ) and ( FThreadItem <> nil ) then
1355 FNow := FSambaTimer.Update;
1357 if GikoSys.Setting.GestureEnabled then begin
1358 GikoSys.Setting.Gestures.ClearGesture;
1359 GikoSys.Setting.Gestures.LoadGesture(
1360 GikoSys.Setting.GetGestureFileName, ActionList );
1361 MouseGesture.UnHook;
1362 MouseGesture.OnGestureStart := OnGestureStart;
1363 MouseGesture.OnGestureMove := OnGestureMove;
1364 MouseGesture.OnGestureEnd := OnGestureEnd;
1365 MouseGesture.SetHook( Handle );
1368 procedure TEditorForm.FormCloseQuery(Sender: TObject;
1369 var CanClose: Boolean);
1371 CanClose := not FWork;
1374 procedure TEditorForm.QuotePasteActionExecute(Sender: TObject);
1381 quote := GikoSys.GetOEIndentChar;
1382 s := TStringList.Create;
1384 s.Text := Clipboard.AsText;
1386 for i := s.Count - 1 downto 0 do
1387 s[ i ] := quote + s[ i ];
1389 BodyEdit.SelText := s.Text;
1396 procedure TEditorForm.SpaceToNBSPActionExecute(Sender: TObject);
1398 GikoSys.Setting.SpaceToNBSP := SpaceToNBSPAction.Checked;
1399 if EditorPage.ActivePage = PreviewTab then
1403 procedure TEditorForm.AmpToCharRefActionExecute(Sender: TObject);
1405 GikoSys.Setting.AmpToCharRef := AmpToCharRefAction.Checked;
1406 if EditorPage.ActivePage = PreviewTab then
1410 procedure TEditorForm.BoardTopClick(Sender: TObject);
1414 ini := TIniFile.Create(GikoSys.Setting.GetFileName);
1416 BoardtopTab.TabVisible := BoardTop.Checked;
1417 ini.WriteBool('EditorForm', 'BoardTopTab', BoardtopTab.TabVisible);
1424 procedure TEditorForm.GetSETTINGTXTActionExecute(Sender: TObject);
1426 memStream: TMemoryStream;
1427 URL, RefURL: string;
1428 settingBody: TStringList;
1431 if not FWork then begin
1434 tmpBoard := GetBoard;
1435 if tmpBoard <> nil then begin
1437 RefURL := tmpBoard.URL;
1438 if RefURL[Length(RefURL)] <> '/' then
1439 URL := RefURL + '/' + 'SETTING.TXT'
1441 URL := RefURL + 'SETTING.TXT';
1442 Screen.Cursor := crHourGlass;
1443 memStream := TMemoryStream.Create;
1446 StatusBar.Panels[0].Text := 'SETTING.TXT
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86';
1447 GetWebData(URL, RefURL, tmpBoard.SETTINGTXTTime, memStream);
1448 if( Indy.ResponseCode = 200 ) then begin
1449 settingBody := TStringList.Create;
1451 memStream.Seek(0, soFromBeginning);
1452 settingBody.LoadFromStream(memStream);
1453 settingBody.SaveToFile(tmpBoard.GetSETTINGTXTFileName);
1454 tmpBoard.SETTINGTXTTime := Indy.Response.LastModified;
1455 tmpBoard.IsSETTINGTXT := true;
1456 tmpBoard.TitlePictureURL := GetTitlePictureURL(settingBody, tmpBoard);
1457 tmpBoard.Modified := true;
1461 StatusBar.Panels[0].Text := 'SETTING.TXT
\8eæ
\93¾
\8a®
\97¹(' + IntToStr(Indy.ResponseCode) + ')';
1464 on E: EIdException do begin
1465 if( AnsiPos('304', E.Message) > 0 ) then
1466 StatusBar.Panels[0].Text := 'SETTING.TXT
\8dX
\90V
\96³
\82µ(' + IntToStr(Indy.ResponseCode) + ')'
1468 StatusBar.Panels[0].Text := 'SETTING.TXT
\8eæ
\93¾
\83G
\83\89\81[(' + IntToStr(Indy.ResponseCode) + ')';
1473 Screen.Cursor := crDefault;
1475 ShowBoardInformation(tmpBoard, BoardInformationMemo);
1481 procedure TEditorForm.ShowBoardInformation(ABoard: TBoard; AMemo: TMemo);
1486 AMemo.Lines.Add('[SETTING.TXT]');
1487 if ABoard.IsSETTINGTXT then begin
1488 if FileExists(ABoard.GetSETTINGTXTFileName) then begin
1489 AMemo.Lines.Add(DateTimeToStr(ABoard.SETTINGTXTTime) + '
\8dX
\90V');
1490 body := TStringList.Create;
1492 body.LoadFromFile(ABoard.GetSETTINGTXTFileName);
1493 AMemo.Lines.AddStrings(body);
1498 ABoard.IsSETTINGTXT := false;
1499 ABoard.SETTINGTXTTime := ZERO_DATE;
1500 AMemo.Lines.Add('Local
\82É
\95Û
\91¶
\82³
\82ê
\82½SETTING.TXT
\82ª
\8c©
\82Â
\82©
\82è
\82Ü
\82¹
\82ñ');
1501 AMemo.Lines.Add('
\83\81\83j
\83\85\81[
\82æ
\82è
\8dÄ
\8eæ
\93¾
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
1504 AMemo.Lines.Add('SETTING.TXT
\82ð
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B');
1505 AMemo.Lines.Add('
\83\81\83j
\83\85\81[
\82æ
\82è
\8eæ
\93¾
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
1508 function TEditorForm.GetTitlePictureURL(body: TStringList; ABoard: TBoard): string;
1509 //BBS_TITLE_PICTURE=
1516 for i := 0 to body.Count - 1 do begin
1517 if (AnsiPos('BBS_TITLE_PICTURE=', body[i]) > 0) or
1518 (AnsiPos('BBS_FIGUREHEAD=', body[i]) > 0) then begin
1520 Delete(tmp, 1, AnsiPos('=', tmp));
1521 if AnsiPos('../', tmp) > 0 then begin
1522 tmp := CustomStringReplace(tmp, '../', GikoSys.UrlToServer(ABoard.URL));
1530 procedure TEditorForm.GetTitlePictureActionUpdate(Sender: TObject);
1532 if FThreadItem = nil then
1533 GetTitlePictureAction.Enabled := FBoard.IsSETTINGTXT
1535 GetTitlePictureAction.Enabled := FThreadItem.ParentBoard.IsSETTINGTXT;
1537 if GetTitlePictureAction.Enabled Then begin
1538 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
1539 GetTitlePictureAction.Enabled := not FWork;
1543 procedure TEditorForm.GetTitlePictureActionExecute(Sender: TObject);
1545 memStream: TMemoryStream;
1552 memStream := TMemoryStream.Create;
1554 tmpBoard := GetBoard;
1556 if (tmpBoard <> nil) and (tmpBoard.TitlePictureURL <> '') then begin
1557 StatusBar.Panels[0].Text := '
\94Â
\83g
\83b
\83v
\89æ
\91\9c\83_
\83E
\83\93\83\8d\81[
\83h
\92\86';
1558 Screen.Cursor := crHourGlass;
1560 // URL
\82ð
\8ew
\92è
\82µ
\82Ä
\83\81\83\82\83\8a\82É
\93Ç
\82Ý
\8d\9e\82Þ
1561 GetWebData(tmpBoard.TitlePictureURL, tmpBoard.URL,
1562 ZERO_DATE, memStream);
1563 if Indy.ResponseCode = 200 then begin
1564 memStream.SaveToFile(tmpBoard.GetTitlePictureFileName);
1566 tmpBoard.Modified := true;
1568 StatusBar.Panels[0].Text := '
\94Â
\83g
\83b
\83v
\89æ
\91\9c (' + IntToStr(Indy.ResponseCode) + ')';
1575 Screen.Cursor := crDefault;
1579 \brief URL
\82Ì
\83f
\81[
\83^
\82ðstream
\82É
\93Ç
\82Ý
\8d\9e\82Þ
1580 \param URL
\93Ç
\82Ý
\8d\9e\82Þ
\90æ
1581 \param RefURL referer
\82É
\90Ý
\92è
\82·
\82é
1582 \param Modified Modified
\82É
\90Ý
\92è
\82·
\82é
1583 \param stream
\93Ç
\82Ý
\8d\9e\82ñ
\82¾
\83f
\81[
\83^
\82Ì
\95Û
\91¶
\90æ
1585 procedure TEditorForm.GetWebData(const URL: string; const RefURL: string;
1586 Modified: TDateTime; stream: TStream);
1589 Indy.Request.Referer := RefURL;
1590 Indy.Request.LastModified := Modified;
1592 IdAntiFreeze.Active := True;
1594 Indy.Get(URL, stream);
1596 IdAntiFreeze.Active := False;
1600 procedure TEditorForm.ShowTitlePicture();
1605 tmpBoard := GetBoard;
1607 if FileExists(tmpBoard.GetTitlePictureFileName) then begin
1608 TitlePictureBrowser.Navigate(tmpBoard.GetTitlePictureFileName);
1610 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';
1611 SetContent(s, TitlePictureBrowser);
1615 function TEditorForm.GetFusianaName(body: TStringList; ABoard: TBoard): String;
1620 for i := 0 to body.Count - 1 do begin
1621 if (AnsiPos('BBS_NONAME_NAME=', body[i]) > 0) then begin
1623 Delete(tmp, 1, AnsiPos('=', tmp));
1630 procedure TEditorForm.GetHeadTXTActionExecute(Sender: TObject);
1632 URL, RefURL: string;
1633 settingBody: TStringList;
1635 memStream: TMemoryStream;
1637 if not FWork then begin
1640 tmpBoard := GetBoard;
1641 if (tmpBoard <> nil) then begin
1643 RefURL := tmpBoard.URL;
1644 if RefURL[Length(RefURL)] <> '/' then
1645 URL := RefURL + '/' + 'head.txt'
1647 URL := RefURL + 'head.txt';
1649 Screen.Cursor := crHourGlass;
1650 memStream := TMemoryStream.Create;
1652 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';
1654 GetWebData(URL, RefURL, tmpBoard.HEADTXTTime, memStream);
1655 if( Indy.ResponseCode = 200 ) then begin
1656 settingBody := TStringList.Create;
1658 memStream.Seek(0, soFromBeginning);
1659 settingBody.LoadFromStream(memStream);
1660 settingBody.Insert(0, '<HTML lang="ja"><HEAD>');
1661 settingBody.Insert(1, '<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">');
1662 settingBody.Insert(2, '<TITLE>' + tmpBoard.Title + '</TITLE>');
1663 settingBody.Insert(3, '<base href="' + RefURL + '"></HEAD><BODY>');
1664 settingBody.Add('</BODY></HTML>');
1665 settingBody.SaveToFile(tmpBoard.GETHEADTXTFileName);
1666 tmpBoard.HEADTXTTime := Indy.Response.LastModified;
1667 tmpBoard.IsHEADTXT := true;
1668 tmpBoard.Modified := true;
1672 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾
\8a®
\97¹(' + IntToStr(Indy.ResponseCode) + ')';
1675 on E: EIdException do begin
1676 if( AnsiPos('304', E.Message) > 0 ) then
1677 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8dX
\90V
\96³
\82µ(' + IntToStr(Indy.ResponseCode) + ')'
1679 StatusBar.Panels[0].Text := '
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾
\83G
\83\89\81[(' + IntToStr(Indy.ResponseCode) + ')';
1684 Screen.Cursor := crDefault;
1686 if tmpBoard.IsHEADTXT then begin
1687 ShowBoardHead(tmpboard, LocalEdit);
1695 procedure TEditorForm.CalcCapacityActionExecute(Sender: TObject);
1701 //
\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
1704 if Board.BoardPlugIn <> nil then
1705 body := CustomStringReplace(body, #13#10, '<br>')
1707 body := CustomStringReplace(body, #13#10, ' <br> ');
1708 StatusBar.Panels[0].Text := '
\97e
\97Ê:' + IntToStr(Length(body)) + ' byte';
1711 procedure TEditorForm.LocalRuleClick(Sender: TObject);
1715 ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
1717 RocalRuleTab.TabVisible := LocalRule.Checked;
1718 ini.WriteBool('EditorForm', 'LocalRuleTab', RocalRuleTab.TabVisible);
1725 procedure TEditorForm.FormDeactivate(Sender: TObject);
1727 if GikoSys.Setting.GestureEnabled then begin
1728 MouseGesture.UnHook;
1729 //MouseGesture.SetHook( GikoForm.Handle );
1734 procedure TEditorForm.OnGestureStart(Sender: TObject);
1739 procedure TEditorForm.OnGestureMove(Sender: TObject);
1745 s := MouseGesture.GetGestureStr;
1747 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
1748 if Action <> nil then
1749 ActStr := '
\81i' + Action.Caption + '
\81j';
1750 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
1751 StatusBar.Panels[0].Text := s;
1754 procedure TEditorForm.OnGestureEnd(Sender: TObject);
1759 s := MouseGesture.GetGestureStr;
1760 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
1761 if Action <> nil then
1763 StatusBar.Panels[0].Text := '';
1766 procedure TEditorForm.ShowBoardHead(ABoard: TBoard; AMemo: TMemo);
1768 wDoc, WTex, le: OLEVariant;
1771 //http://www.campus.ne.jp/~ishigami/CREATION/TECHNIC/WEBAP-2.htm
1772 WebBrowser1.Navigate(ABoard.GETHEADTXTFileName,le,le,le,le);
1773 //
\83\8c\83^
\83\8a\83\93\83O
\82ª
\92x
\82·
\82¬
\82ÄTXT
\82É
\88Ú
\82¹
\82È
\82¢
\81B
\82Ê
\82é
\82Ûorz
1774 //
\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
1775 //
\82±
\82ê
\82Å
\82¢
\82¯
\82Ü
\82µ
\82½
\81B
\82 \82è
\82ª
\82Æ
\82¤
\82²
\82´
\82¢
\82Ü
\82µ
\82½
\81B
1776 while (WebBrowser1.ReadyState <> READYSTATE_COMPLETE) and
1777 (WebBrowser1.ReadyState <> READYSTATE_INTERACTIVE) do begin
1778 Application.ProcessMessages;
1780 wDoc := WebBrowser1.Document;
1781 wTex := wDoc.body.createTextRange;
1782 LocalEdit.Text := wTex.text;
1785 procedure TEditorForm.LocalRuleBrowseClick(Sender: TObject);
1792 if ABoard = nil then Exit;
1794 URL := ABoard.GETHEADTXTFileName;
1795 GikoSys.OpenBrowser(URL, gbtAuto);
1798 procedure TEditorForm.SaveNameMailActionExecute(Sender: TObject);
1800 SaveNameMailAction.Checked := not SaveNameMailAction.Checked;
1801 KotehanCheckBox.Enabled := SaveNameMailAction.Checked;
1804 function TEditorForm.LFusianaGet(s: String): Boolean;
1808 i := AnsiPos('fusianasan', s);
1809 if (i > 0) then Result := True else Result := False;
1812 procedure TEditorForm.BeLogInOutEActionExecute(Sender: TObject);
1814 GikoSys.Setting.BeLogin := not GikoSys.Setting.BeLogin;
1817 procedure TEditorForm.BeLogInOutEActionUpdate(Sender: TObject);
1819 if (GikoSys.Setting.BeUserID <> '') and (GikoSys.Setting.BeCode <> '') then begin
1820 if (GikoSys.Setting.BeLogin) then BeLogInOutEAction.Checked := true
1821 else BeLogInOutEAction.Checked := false;
1822 BeLogInOutEAction.Enabled := true
1824 BeLogInOutEAction.Enabled := false;
1827 // Cookie
\82Ì
\8eæ
\93¾
1828 procedure TEditorForm.GetCookie(Rawtext: String; ABoard: TBoard);
1830 COOKIE_MARK = 'Set-Cookie:';
1833 EXPIRES_MARK = 'expires=';
1839 ABoard.Cookie := '';
1840 while (AnsiPos(COOKIE_MARK, Rawtext) > 0 ) do begin
1842 tmp := Copy(Rawtext, AnsiPos(COOKIE_MARK, Rawtext) + Length(COOKIE_MARK), Length(Rawtext));
1843 Delete(Rawtext, 1, AnsiPos('Set-Cookie', Rawtext)+ Length(COOKIE_MARK));
1844 //Cookie
\82ð
\90Ø
\82è
\8fo
\82·
1845 val := Trim(GikoSys.GetTokenIndex(tmp, ';', 0));
1846 if( AnsiPos(VAL_SPID, val) > 0 ) then begin
1847 ABoard.SPID := Copy(val, AnsiPos(VAL_SPID, val) + Length(VAL_SPID), Length(val));
1848 end else if( AnsiPos(VAL_PON, val) > 0 ) then begin
1849 ABoard.PON := Copy(val, AnsiPos(VAL_PON, val) + Length(VAL_PON), Length(val));
1851 ABoard.Cookie := ABoard.Cookie + val + '; ';
1853 //expires
\82ð
\90Ø
\82è
\8fo
\82·
1854 val := Trim(GikoSys.GetTokenIndex(tmp, ';', 1));
1855 if( AnsiPos(EXPIRES_MARK, val) > 0) then begin
1856 Delete(val, 1, AnsiPos(EXPIRES_MARK, val) + Length(EXPIRES_MARK) - 1);
1857 ABoard.Expires := GMTToLocalDateTime(val);
1863 //!
\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
1864 procedure TEditorForm.UpdateSambaActionUpdate(Sender: TObject);
1866 UpdateSambaAction.Enabled := FSambaTimer.Enabled;
1869 //!
\83T
\83\93\83o
\8dX
\90V
\83A
\83N
\83V
\83\87\83\93
1870 procedure TEditorForm.UpdateSambaActionExecute(Sender: TObject);
1875 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
1876 input := ZenToHan(input);
1877 if GikoSys.IsNumeric(input) then begin
1878 FSambaTimer.UpdateSambaSetting(StrToInt(input));
1880 //
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81ASamba
\83^
\83C
\83}
\81[
\82ð
\8dX
\90V
\82·
\82é
1881 for i := 0 to Screen.FormCount - 1 do begin
1882 if Screen.Forms[i] is TEditorForm then begin
1883 TEditorForm(Screen.Forms[i]).FSambaTimer.Update;
1884 TEditorForm(Screen.Forms[i]).UpdateSambaStatus;
1888 ShowMessage('
\90\94\92l
\82ð
\93ü
\97Í
\82µ
\82Ä
\82
\82¾
\82³
\82¢');
1889 UpdateSambaActionExecute(Sender);
1894 procedure TEditorForm.UpdateSambaStatus;
1896 if (FSambaTimer.Enabled) then begin
1897 StatusBar.Panels[2].Text
1898 := 'Samba24
\8bK
\92è
\92l' + IntToStr(FSambaTimer.SambaInterval);
1902 procedure TEditorForm.InputAssistActionExecute(Sender: TObject);
1908 TextWidth, ItemWidth, tmpWidth: Integer;
1910 if FInputAssistKey = '' then Exit;
1912 InputAssistPopupMenu.Items.Clear;
1914 if (FResistWords = nil) then begin
1915 FResistWords := TStringList.Create;
1920 if (GetKeyState( VK_SHIFT ) < 0) then begin
1921 //
\83V
\83t
\83g
\82ª
\89\9f\82³
\82ê
\82Ä
\82¢
\82ê
\82Î
\81A
\83L
\81[
\82Å
\8en
\82Ü
\82é
\83J
\83e
\83S
\83\8a
1923 InputAssistDM.GetStartWithCategoryResistWords(
1924 FInputAssistKey, FResistWords);
1926 //
\83V
\83t
\83g
\82ª
\96³
\82¢
\82Ì
\82Å
\81A
\83L
\81[
\82Å
\8en
\82Ü
\82é
\83L
\81[
1928 InputAssistDM.GetStartWithKeyResistWords(
1929 FInputAssistKey, FResistWords);
1931 Bitmap := TBitmap.Create;
1933 Bitmap.Canvas.Font.Assign(BodyEdit.Font);
1934 //
\83}
\81[
\83W
\83\935px
1935 TextWidth := Bitmap.Canvas.TextWidth(FInputAssistKey) + 5;
1937 for i := 0 to count - 1 do begin
1938 item := TMenuItem.Create(nil);
1939 item.Break := mbNone;
1940 item.Caption := FResistWords[i];
1942 item.OnClick := InputAssistMenuClick;
1943 InputAssistPopupMenu.Items.Add(item);
1945 tmpWidth := Bitmap.Canvas.TextWidth(Item.Caption);
1946 if (tmpWidth > ItemWidth) then begin
1947 ItemWidth := tmpWidth;
1954 if (count > 0) then begin
1956 point.X := point.X + Self.Left + (Self.Width - BodyEdit.Width) div 2;
1957 point.Y := point.Y + Self.Top + (Self.Height - Self.ClientHeight);
1959 if Screen.DesktopWidth >
1960 (point.X + TextWidth + ItemWidth) then begin
1961 InputAssistPopupMenu.Popup(
1962 point.X + TextWidth,
1963 point.Y + EditorPage.Top + EditorPage.TabHeight + BodyEdit.Top);
1965 InputAssistPopupMenu.Popup(
1966 point.X - TextWidth - ItemWidth,
1967 point.Y + EditorPage.Top + EditorPage.TabHeight + BodyEdit.Top);
1972 procedure TEditorForm.InputAssistMenuClick(Sender: TObject);
1977 if not (Sender is TMenuItem) then Exit;
1979 if (FResistWords <> nil) then begin
1982 TResistWord(FResistWords.Objects[TMenuItem(Sender).Tag]).GetText;
1986 IMC := ImmGetContext(BodyEdit.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
1988 ImmNotifyIME(IMC, NI_COMPOSITIONSTR, CPS_CANCEL, 0);
1990 ImmReleaseContext(BodyEdit.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
1994 FInputAssistKey := '';
1996 InsertText(BodyEdit, text);
1999 //! TMemo
\82Ì
\83J
\81[
\83\
\83\8b\88Ê
\92u
\82É
\95¶
\8e\9a\97ñ
\91}
\93ü
2000 procedure TEditorForm.InsertText(Memo: TMemo; Text: String);
2002 line, sel, pos: Integer;
2003 left, right : String;
2005 Memo.Lines.BeginUpdate;
2006 line := SendMessage(Memo.Handle,EM_LINEFROMCHAR,-1,0); //
\8ds
2007 sel := Memo.SelStart;
2008 pos := sel - SendMessage(Memo.Handle, EM_LINEINDEX, -1, 0); //
\8c\85
2009 if (pos > 0) then begin
2010 left := Copy(Memo.Lines[line], 0, pos);
2014 right := Copy(Memo.Lines[line], pos + 1, Length(Memo.Lines[line]));
2015 Memo.Lines.Strings[line] := left + Text + right;
2016 Memo.Lines.EndUpdate;
2017 //
\81@
\83L
\83\83\83\8c\83b
\83g
\82Ì
\88Ê
\92u
\82ð
\8dX
\90V
\82·
\82é
2018 Memo.SelStart := sel + Length(text);
2019 //
\83L
\83\83\83\8c\83b
\83g
\82Ì
\88Ê
\92u
\82Ü
\82Å
\83X
\83N
\83\8d\81[
\83\8b
2020 Memo.Perform(EM_SCROLLCARET, 0, 0);
2024 procedure TEditorForm.ApplicationEvents1Message(var Msg: tagMSG;
2025 var Handled: Boolean);
2032 if (Self.Active) then begin
2034 //
\83L
\81[
\89\9f\89º
\82Ì
\82Ý
\8eó
\82¯
\8eæ
\82é
2037 //
\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é
2038 if (EditorPage.ActivePageIndex = 0)
2039 and (GetKeyState( VK_CONTROL ) < 0) then begin
2040 wmMsg.Msg := Msg.message;
2041 wmMsg.CharCode := Word(Msg.wParam);
2042 wmMsg.KeyData := Msg.lParam;
2043 if (wmMsg.CharCode = 229) and (wmMsg.KeyData = 3735553) then begin
2044 IMC := ImmGetContext(BodyEdit.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
2045 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
2046 if (Len > 0) then begin
2047 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
2048 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
2049 SetLength(Str, Len);
2050 FInputAssistKey := Str;
2051 InputAssistActionExecute(nil);
2054 ImmReleaseContext(BodyEdit.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
2063 procedure TEditorForm.ShowInputAssistFormExecute(Sender: TObject);
2065 form : TInputAssistForm;
2067 form := TInputAssistForm.Create(nil);
2069 if TopAction.Checked then begin //
\83X
\83e
\83C
\8fó
\91Ô
\82É
\90Ý
\92è
2070 SetWindowPos(form.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
2072 form.SetUpFromEditor;
2073 if (form.ShowModal = mrOk) then begin
2074 InsertText(BodyEdit, form.GetInsertText);
2080 //! Cookie
\8fî
\95ñ
\8dí
\8f\9c
2081 procedure TEditorForm.ReleaseCookieActionExecute(Sender: TObject);
2085 //
\83X
\83\8c\83b
\83h
\82ª
\96³
\82¢
\81@
\83X
\83\8c\97§
\82Ä
\82Ì
\82Æ
\82«
\82ÍFBoard
\82ð
\92¼
\90Ú
\8eg
\82¤
2088 //
\83N
\83b
\83L
\81[
\82Ì
\8fî
\95ñ
\82ð
\8eÌ
\82Ä
\82é
2092 // 0
\82É
\8aª
\82«
\96ß
\82·
2095 //!
\94Â
\8fî
\95ñ
\8eæ
\93¾Update
\83C
\83x
\83\93\83g
2096 procedure TEditorForm.GetSETTINGTXTActionUpdate(Sender: TObject);
2098 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
2099 GetSETTINGTXTAction.Enabled := not FWork;
2101 //!
\83\8d\81[
\83J
\83\8b\83\8b\81[
\83\8b\8eæ
\93¾Update
\83C
\83x
\83\93\83g
2102 procedure TEditorForm.GetHeadTXTActionUpdate(Sender: TObject);
2104 //
\8eÀ
\8ds
\92\86\82Í
\8eÀ
\8ds
\95s
\89Â
2105 GetSETTINGTXTAction.Enabled := not FWork;
2108 //! Samba
\83^
\83C
\83}
\81[
\83C
\83x
\83\93\83g
2109 procedure TEditorForm.SambaTimer(Sender: TObject);
2112 if FSambaTimer.WriteDeta = ZERO_DATE then
2113 StatusBar.Panels[1].Text := '
\8f\89\8f\91'
2115 FNow := IncMilliSecond(FNow, 500);
2116 StatusBar.Panels[1].Text :=
2117 Format('%8.0f
\95b
\8co
\89ß', [SecondSpan(FNow, FSambaTimer.WriteDeta)]);
2121 \brief
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82Æ
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
2123 procedure TEditorForm.SetWindowRect;
2125 wp: TWindowPlacement;
2127 //
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\90Ý
\92è
2128 wp.length := sizeof(wp);
2129 wp.rcNormalPosition.Top := GikoSys.Setting.EditWindowTop;
2130 wp.rcNormalPosition.Left := GikoSys.Setting.EditWindowLeft;
2132 wp.rcNormalPosition.Bottom := GikoSys.Setting.EditWindowTop + GikoSys.Setting.EditWindowHeight;
2133 wp.rcNormalPosition.Right := GikoSys.Setting.EditWindowLeft + GikoSys.Setting.EditWindowWidth;
2134 wp.showCmd := SW_HIDE;
2135 SetWindowPlacement(Handle, @wp);
2137 if GikoSys.Setting.EditWindowMax then begin
2138 WindowState := wsMaximized;
2141 //
\83E
\83B
\83\93\83h
\83E
\82ª
\89æ
\96Ê
\8aO
\82È
\82ç
\89æ
\96Ê
\93à
\82É
\88Ú
\93®
\82·
\82é
2142 if (Left + Width) > Screen.Width then begin
2145 if (Top + Height) > Screen.Height then begin
2148 if Left < 0 then begin
2151 if Top < 0 then begin
2155 //
\8c»
\8dÝ
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82ð
\95Û
\91¶
2156 GikoSys.Setting.EditWindowTop := Top + WINDOWMOVE_V; //
\8e\9f\82É
\8aJ
\82
\83E
\83B
\83\93\83h
\83E
\82Í
2157 GikoSys.Setting.EditWindowLeft := Left + WINDOWMOVE_H; //
\81@
\81@
\81@
\89E
\8eÎ
\82ß
\89º
\82É
\82¸
\82ç
\82·
2158 //
\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·
2159 if GikoSys.Setting.EditWindowHeight < 144 then begin
2162 if GikoSys.Setting.EditWindowWidth < 144 then begin
2167 \brief
\8ag
\92£
\83^
\83u
\90Ý
\92è
2169 procedure TEditorForm.SetExtraTab;
2171 SECTION = 'EditorForm';
2175 ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
2177 BoardtopTab.TabVisible := ini.Readbool(SECTION, 'BoardTopTab', False);
2178 BoardTop.Checked := BoardtopTab.TabVisible;
2179 RocalRuleTab.TabVisible := ini.ReadBool(SECTION, 'LocalRuleTab', False);
2180 LocalRule.Checked := RocalRuleTab.TabVisible;
2187 \return
\83\8c\83X
\83G
\83f
\83B
\83^
\82ª
\93\8a\8de
\82µ
\82æ
\82¤
\82Æ
\82µ
\82Ä
\82¢
\82é
\94Â
2189 function TEditorForm.GetBoard : TBoard;
2191 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ªnull
\82Ì
\8e\9e\82ÍFBoard
2192 if FThreadItem = nil then begin
2195 Result := FThreadItem.ParentBoard;
2199 \brief GikoForm
\82É
\83\81\83b
\83Z
\81[
\83W
\82ð
\92Ç
\89Á
\82·
\82é
2200 \param icon
\83\81\83b
\83Z
\81[
\83W
\82É
\82Â
\82
\83A
\83C
\83R
\83\93
2202 procedure TEditorForm.AddFormMessageNew(icon: TGikoMessageIcon);
2204 if FThreadItem = nil then begin
2205 GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, icon)
2207 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, icon);
2212 \brief
\83\8d\81[
\83J
\83\8bfusiana
\83g
\83\89\83b
\83v
2213 \param MSG
\83\81\83b
\83Z
\81[
\83W
\83_
\83C
\83A
\83\8d\83O
\82Ì
\83\81\83b
\83Z
\81[
\83W
2214 \return true:
\91\97\90M
\92\86\8e~ false:
\91\97\90M
2216 function TEditorForm.isLocalFusianaTrap(const MSG: string): Boolean;
2218 MsgResult : Integer;
2222 if GikoSys.Setting.LocalTrapAtt then begin
2223 Namae := THTMLCreate.RepHtml(NameComboBox.Text);
2224 if (LFusianaGet(Namae))
2225 or ((Namae = '
\8eR
\8dè
\8fÂ') or (Namae = 'fusianasan')) then begin
2226 MsgResult := MsgBox( Handle, MSG, '
\8fî
\95ñ',
2227 MB_YESNO or MB_ICONQUESTION);
2228 if MsgResult = IDNO then begin
2235 \brief
\83\8d\81[
\83J
\83\8bfusiana
\83g
\83\89\83b
\83v
2236 \param MSG
\83\81\83b
\83Z
\81[
\83W
\83_
\83C
\83A
\83\8d\83O
\82Ì
\83\81\83b
\83Z
\81[
\83W
2237 \return true:
\91\97\90M
\92\86\8e~ false:
\91\97\90M
2239 function TEditorForm.isRemoteFusianaTrap(const MSG: string): Boolean;
2245 MsgResult : Integer;
2248 Namae := THTMLCreate.RepHtml(NameComboBox.Text);
2249 if (GikoSys.Setting.RemoteTrapAtt) and (Length(Namae) = 0) then begin
2252 if Board = nil then Exit;
2254 if not FileExists(Board.GetSETTINGTXTFileName) then begin
2255 //Setting.txt
\82ª
\82È
\82©
\82Á
\82½
\82ç
\8eæ
\93¾
2256 //
\8eI
\82É
\95\89\89×
\82ª
\82©
\82©
\82è
\82»
\82¤...
2258 GetSETTINGTXTAction.Execute;
2264 if FileExists(Board.GetSETTINGTXTFileName) then begin
2265 body := TStringList.Create;
2267 body.LoadFromFile(Board.GetSETTINGTXTFileName);
2268 Remote := GetFusianaName(body, Board);
2274 if (Remote = 'fusianasan') then begin
2275 MsgResult := MsgBox(
2276 Handle, MSG, '
\8fî
\95ñ',
2277 MB_YESNO or MB_ICONQUESTION);
2278 if MsgResult = IDNO then begin
2285 \brief Header
\95¶
\8e\9a\97ñ
\8eæ
\93¾
2286 \param ACOOKIE Cookie
2290 \return Header
\95¶
\8e\9a\97ñ
2292 function TEditorForm.getHeaderStr(const ACOOKIE: string; const SPID : string;
2293 const PON : string; Board : TBoard) : string;
2297 Result := Result + 'SPID=' + SPID + '; ';
2299 Result := Result + 'PON=' + PON + '; ';
2301 //
\83z
\83X
\83g
\82ª2ch
\82Å
\81ABe
\82ÉLogin
\82µ
\82Ä
\82¢
\82ê
\82ÎBE
\82Ì
\83f
\81[
\83^
\82ð
\91\97\82é
2302 //GikoSys.ParseURI( URL, Protocol,Host, Path, Document, Port, Bookmark );
2303 //if GikoSys.Is2chHost(Host) and GikoSys.Setting.BeLogin then
2304 if (Board.Is2ch) then begin
2305 //
\8cÅ
\92è
\82Ì
\83N
\83b
\83L
\81[
\82ª
\82 \82ê
\82Î
\90H
\82í
\82¹
\82é
2306 if Length(GikoSys.Setting.FixedCookie) > 0 then begin
2307 //
\83z
\83X
\83g
\82ª2ch
\82Ì
\8fê
\8d\87\81C
\8cÅ
\92è
\82Ì
\83N
\83b
\83L
\81[
\82ð
\90H
\82í
\82¹
\82é
2308 Result := Result + GikoSys.Setting.FixedCookie + '; ';
2310 if (GikoSys.Setting.BeLogin) then begin
2311 Result := Result + 'MDMD=' + GikoSys.Setting.BeCode + '; '
2312 + 'DMDM=' + GikoSys.Setting.BeUserID + '; ';
2317 Result := 'Cookie: ' + Result + 'NAME=' + NameComboBox.Text + '; MAIL=' + MailComboBox.Text;