• R/O
  • HTTP
  • SSH
  • HTTPS

gikonavi: Commit


Commit MetaInfo

Revision9602669bae51b1f1818810c4aee25f3c48365912 (tree)
Time2007-01-22 02:43:45
Authorcvs2git <cvs2git>
Commitercvs2git

Log Message

This commit was manufactured by cvs2svn to create tag 'v1_54_0_680'.

Change Summary

Incremental Difference

--- a/BrowserRecord.pas
+++ b/BrowserRecord.pas
@@ -162,34 +162,20 @@ var
162162 PtrGUID: PGUID;
163163 begin
164164 if (Self.Browser <> nil) and (Self.Browser.Document <> nil) then begin
165- //ブラウザがデータの読み込み中の時は読み込みを待つ
166- while (Self.Browser.ReadyState <> READYSTATE_COMPLETE) and
167- (Self.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
168- Sleep(1);
169- Application.ProcessMessages;
170- end;
171- vaIn := 0;
172- vaOut := 0;
173165 New(PtrGUID);
174166 PtrGUID^ := CGID_WebBrowser;
175- try
176- try
177- if Self.Browser.Document
178- .QueryInterface(IOleCommandTarget, CmdTarget)
179- = S_OK then begin
180- if CmdTarget <> nil then begin
181- try
182- CmdTarget.Exec(PtrGUID, HTMLID_FIND, 0, vaIn, vaOut);
183- finally
184- CmdTarget._Release;
185- end;
186- end;
187- end;
188- except
189- end;
190- finally
191- Dispose(PtrGUID);
192- end;
167+ try
168+ Self.Browser.Document.QueryInterface(IOleCommandTarget, CmdTarget);
169+ if CmdTarget <> nil then begin
170+ try
171+ CmdTarget.Exec(PtrGUID, HTMLID_FIND, 0, vaIn, vaOut);
172+ finally
173+ CmdTarget._Release;
174+ end;
175+ end;
176+ except
177+ end;
178+ Dispose(PtrGUID);
193179 end;
194180 end;
195181
--- a/Editor.pas
+++ b/Editor.pas
@@ -212,12 +212,14 @@ type
212212 procedure Preview;
213213 function Check: Boolean;
214214 procedure SetNameList(sName, sMail: string);
215- procedure Send(const ACOOKIE: string; const SPID: string; const PON: string; FirstWriting: Boolean);
215+ procedure Send(ACOOKIE: string; SPID: string; PON: string; FirstWriting: Boolean);
216216 function GetActiveControlHandle: THandle;
217217 procedure GetSendData(Source: TStringStream);
218218 procedure SaveSendFile;
219219 procedure SetContent(Content: string; ABrowser: TWebBrowser);
220220 function GetResultType(ResponseText: string): TGikoResultType;
221+ /// 引用符の取得
222+ function GetOEIndentChar : string;
221223 /// 本文の取得
222224 function GetBody : string;
223225 //IdHttpの初期化
@@ -235,7 +237,7 @@ type
235237 //HEAD.TXT自動表示
236238 procedure ShowBoardHead(ABoard: TBoard; AMemo: TMemo);
237239 //LocalFusianaTrapAlart
238- function LFusianaGet(const s: String): Boolean;
240+ function LFusianaGet(s: String): Boolean;
239241 // Cookieの取得
240242 procedure GetCookie(Rawtext: String; ABoard: TBoard);
241243 //! 入力アシストのポップアップメニューのクリックイベント
@@ -246,26 +248,6 @@ type
246248 procedure CancelSend(ABoard: TBoard; ASysMenu: HMENU);
247249 //! Sambaタイマーイベント
248250 procedure SambaTimer(Sender: TObject);
249- //! ウィンドウの位置とサイズの設定
250- procedure SetWindowRect;
251- //! 拡張タブ設定
252- procedure SetExtraTab;
253- //! 板取得
254- function GetBoard : TBoard;
255- //! URLのデータをstreamに取り込む
256- procedure GetWebData(const URL: string; const RefURL: string;
257- Modified: TDateTime; stream: TStream);
258- //! GikoFormに新着メッセージを追加する
259- procedure AddFormMessageNew(icon: TGikoMessageIcon);
260- //! ローカルfusianaトラップ
261- function isLocalFusianaTrap: Boolean;
262- //! ローカルfusianaトラップ
263- function isRemoteFusianaTrap: Boolean;
264- //! Header文字列取得
265- function getHeaderStr(const ACOOKIE: string; const SPID : string;
266- const PON : string; Board : TBoard) : string;
267- //! fusiana警告ダイアログ
268- function FusianaMsgBox: Integer;
269251 protected
270252 procedure CreateParams(var Params: TCreateParams); override;
271253 public
@@ -336,6 +318,10 @@ begin
336318 end;}
337319
338320 procedure TEditorForm.FormCreate(Sender: TObject);
321+var
322+ wp: TWindowPlacement;
323+ hUser32 : HINST;
324+ ini: TIniFile;
339325 begin
340326 FWork := False;
341327 FSambaTimer := TSambaTimer.Create(Self);
@@ -346,7 +332,38 @@ begin
346332 FThreadItem := nil;
347333
348334 //ウィンドウの位置設定
349- SetWindowRect;
335+ wp.length := sizeof(wp);
336+ wp.rcNormalPosition.Top := GikoSys.Setting.EditWindowTop;
337+ wp.rcNormalPosition.Left := GikoSys.Setting.EditWindowLeft;
338+
339+ wp.rcNormalPosition.Bottom := GikoSys.Setting.EditWindowTop + GikoSys.Setting.EditWindowHeight;
340+ wp.rcNormalPosition.Right := GikoSys.Setting.EditWindowLeft + GikoSys.Setting.EditWindowWidth;
341+ wp.showCmd := SW_HIDE;
342+ SetWindowPlacement(Handle, @wp);
343+
344+ if GikoSys.Setting.EditWindowMax then
345+ WindowState := wsMaximized;
346+
347+ //ウィンドウが画面外なら画面内に移動する
348+ if (Left + Width) > Screen.Width then
349+// Left := Screen.Width - Width;
350+ Left := 0;
351+ if (Top + Height) > Screen.Height then
352+// Top := Screen.Height - Height;
353+ Top := 0;
354+ if Left < 0 then
355+ Left := 0;
356+ if Top < 0 then
357+ Top := 0;
358+
359+ //現在のウィンドウの位置を保存
360+ GikoSys.Setting.EditWindowTop := Top + WINDOWMOVE_V; // 次に開くウィンドウは
361+ GikoSys.Setting.EditWindowLeft := Left + WINDOWMOVE_H; //    右斜め下にずらす
362+ //ウィンドウの幅と高さが小さすぎいれば元に戻す
363+ if GikoSys.Setting.EditWindowHeight < 144 then
364+ Height := 400;
365+ if GikoSys.Setting.EditWindowWidth < 144 then
366+ Width := 640;
350367
351368 EditorPage.ActivePage := EditorTab;
352369 FNameComboEdit := GetWindow(NameComboBox.Handle, GW_CHILD);
@@ -354,8 +371,20 @@ begin
354371 NameComboBox.Items.Assign(GikoSys.Setting.NameList);
355372 MailComboBox.Items.Assign(GikoSys.Setting.MailList);
356373 SetFont;
357- // 半透明利用可能設定
358- TransAction.Enabled := GikoSys.CanUser32DLL;
374+ hUser32 := 0;
375+ try
376+ try
377+ hUser32 := LoadLibrary('User32.dll');
378+ if hUser32 <> 0 then
379+ TransAction.Enabled := true
380+ else
381+ TransAction.Enabled := false;
382+ except
383+ TransAction.Enabled := false;
384+ end;
385+ finally
386+ FreeLibrary(hUser32);
387+ end;
359388
360389 // ウィンドウのステイ状態
361390 if GikoSys.Setting.EditWindowStay then begin // ステイ状態
@@ -383,9 +412,17 @@ begin
383412
384413 SpaceToNBSPAction.Checked := GikoSys.Setting.SpaceToNBSP;
385414 AmpToCharRefAction.Checked := GikoSys.Setting.AmpToCharRef;
386- // ローカルルール+板トップ画像のタブの設定
387- SetExtraTab;
388415
416+ ini := TIniFile.Create(GikoSys.Setting.GetFileName);
417+
418+ try
419+ BoardtopTab.TabVisible := ini.Readbool('EditorForm', 'BoardTopTab', False);
420+ BoardTop.Checked := BoardtopTab.TabVisible;
421+ RocalRuleTab.TabVisible := ini.ReadBool('EditorForm', 'LocalRuleTab', False);
422+ LocalRule.Checked := RocalRuleTab.TabVisible;
423+ finally
424+ ini.Free;
425+ end;
389426 // キー設定の読み込み
390427 GikoSys.LoadKeySetting(ActionList, GikoSys.GetEditorKeyFileName);
391428 // マウスジェスチャーのインストール
@@ -403,6 +440,7 @@ begin
403440 end;
404441 SaveNameMailAction.Checked := True;
405442 end;
443+
406444 procedure TEditorForm.SetBoard(Item: TBoard);
407445 begin
408446 FBoard := Item;
@@ -564,8 +602,10 @@ procedure TEditorForm.EditorPageChange(Sender: TObject);
564602 var
565603 tmpBoard: TBoard;
566604 begin
567-
568- tmpBoard := GetBoard;
605+ if FThreadItem = nil then
606+ tmpBoard := FBoard
607+ else
608+ tmpBoard := FThreadItem.ParentBoard;
569609
570610 if tmpBoard = nil then Exit;
571611
@@ -602,8 +642,10 @@ var
602642 Board: TBoard;
603643 begin
604644 Result := True;
605-
606- Board := GetBoard;
645+ if FThreadItem = nil then
646+ Board := FBoard
647+ else
648+ Board := FThreadItem.ParentBoard;
607649
608650 if (not GikoSys.Setting.UseMachineTime) and
609651 ((Board.LastGetTime = 0) or
@@ -740,33 +782,77 @@ begin
740782 DrawMenuBar(Handle);
741783 end;
742784
743-procedure TEditorForm.Send( const ACOOKIE: string; const SPID: string;
744- const PON: string; FirstWriting: Boolean);
785+procedure TEditorForm.Send(ACOOKIE: string; SPID: string; PON: string; FirstWriting: Boolean);
786+const
787+ MSG_FUSIANA : string = 'リモートホストを表示する機能が使われています'#13#10 +
788+ 'もしも間違ってこの方法でホストが表示されたとしても、自己責任なので削除依頼には応じません。' +
789+ #13#10#13#10'責任を負うことを承諾して書き込みますか?';
745790 var
746791 TextStream: TStringStream;
747792 Source: TStringStream;
748793 ResponseText: string;
749794 URL: string;
795+ RefURL: string;
750796 State: TGikoDownloadState;
751797 ResultType: TGikoResultType;
752798 MsgResult: Integer;
799+ Cookie: string;
753800 Board: TBoard;
754801 sysMenu : HMENU;
802+ //fusianasanトラップ by定期便
803+ Namae : String;
804+ body : TStringList;
805+ Remote : String;
806+ ABoard : TBoard;
755807 {Protocol,Host, Path, Document, Port, Bookmark : String;}
756808 begin
757809 FAbort := False;
758810 State := gdsError;
759- Board := GetBoard;
811+ Namae := THTMLCreate.RepHtml(NameComboBox.Text);
812+ if FThreadItem = nil then
813+ Board := FBoard
814+ else
815+ Board := FThreadItem.ParentBoard;
760816
761817
818+// tmpRawheader := '';
762819 InitIdHTTP(Indy);
763820 if FThreadItem = nil then begin
764821 URL := FBoard.GetSendURL;
765- Indy.Request.Referer := GikoSys.UrlToServer(FBoard.URL) + 'test/bbs.cgi';
822+ RefURL := GikoSys.UrlToServer(FBoard.URL) + 'test/bbs.cgi';
766823 end else begin
767824 URL := FThreadItem.GetSendURL;
768- Indy.Request.Referer := FThreadItem.URL;
825+ RefURL := FThreadItem.URL;
769826 end;
827+// Indy.Request.UserAgent := GikoSys.GetUserAgent;
828+ Indy.Request.Referer := RefURL;
829+// Indy.Request.AcceptEncoding := '';
830+
831+ Cookie := '';
832+ if ACOOKIE <> '' then
833+ Cookie := ACOOKIE;
834+ if SPID <> '' then
835+ Cookie := Cookie + 'SPID=' + SPID + '; ';
836+ if PON <> '' then
837+ Cookie := Cookie + 'PON=' + PON + '; ';
838+
839+ //ホストが2chで、BeにLoginしていればBEのデータを送る
840+ //GikoSys.ParseURI( URL, Protocol,Host, Path, Document, Port, Bookmark );
841+ //if GikoSys.Is2chHost(Host) and GikoSys.Setting.BeLogin then
842+ if (Board.Is2ch) then begin
843+ // 固定のクッキーがあれば食わせる
844+ if Length(GikoSys.Setting.FixedCookie) > 0 then begin
845+ // ホストが2chの場合,固定のクッキーを食わせる
846+ Cookie := Cookie + GikoSys.Setting.FixedCookie + '; ';
847+ end;
848+ if (GikoSys.Setting.BeLogin) then begin
849+ Cookie := Cookie + 'MDMD=' + GikoSys.Setting.BeCode + '; '
850+ + 'DMDM=' + GikoSys.Setting.BeUserID + '; ';
851+ end;
852+
853+ end;
854+
855+ Cookie := 'Cookie: ' + Cookie + 'NAME=' + NameComboBox.Text + '; MAIL=' + MailComboBox.Text;
770856
771857 sysMenu := GetSystemMenu( Handle, false );
772858 EnableMenuItem( sysMenu, SC_CLOSE, MF_GRAYED );
@@ -780,7 +866,7 @@ begin
780866 Indy.Request.AcceptLanguage := 'ja';
781867 Indy.Request.Accept := 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*';
782868 Indy.Request.ContentType := 'application/x-www-form-urlencoded';
783- Indy.Request.CustomHeaders.Add(getHeaderStr(ACOOKIE, SPID, PON, Board));
869+ Indy.Request.CustomHeaders.Add(Cookie);
784870 TextStream := TStringStream.Create('');
785871 Source := TStringStream.Create('');
786872 try
@@ -790,15 +876,67 @@ begin
790876
791877 if (FirstWriting) then begin
792878 //フシアナトラップ警告(LocalMode) by 定期便
793- if (isLocalFusianaTrap) then begin
794- CancelSend( Board, SysMenu );
795- Exit;
796- end;
797- //フシアナトラップ警告(Remote)
798- if (isRemoteFusianaTrap) then begin
799- CancelSend( Board, SysMenu );
800- Exit;
801- end;
879+ if GikoSys.Setting.LocalTrapAtt then begin
880+ if LFusianaGet(Namae) then begin
881+ MsgResult := MsgBox( Handle, MSG_FUSIANA, '情報',
882+ MB_YESNO or MB_ICONQUESTION);
883+ if MsgResult = IDNO then begin
884+ CancelSend( Board, SysMenu );
885+ Exit;
886+ end;
887+ end;
888+ if ((Namae = '山崎渉') or (Namae = 'fusianasan')) then begin
889+ MsgResult := MsgBox(Handle, MSG_FUSIANA, '情報',
890+ MB_YESNO or MB_ICONQUESTION);
891+ if MsgResult = IDNO then begin
892+ CancelSend( Board, SysMenu );
893+ Exit;
894+ end;
895+ end;
896+ end;
897+
898+ if GikoSys.Setting.RemoteTrapAtt then begin
899+ if FThreadItem = nil then
900+ ABoard := FBoard
901+ else
902+ ABoard := FThreadItem.ParentBoard;
903+
904+ if ABoard = nil then Exit;
905+
906+ if FileExists(ABoard.GetSETTINGTXTFileName) then begin
907+ body := TStringList.Create;
908+ try
909+ body.LoadFromFile(ABoard.GetSETTINGTXTFileName);
910+ Remote := GetFusianaName(body, ABoard);
911+ finally
912+ body.Free;
913+ end;
914+ end else begin
915+ //Setting.txtがなかったら取得
916+ //鯖に負荷がかかりそう...
917+ //if not FileExists(ABoard.GetSETTINGTXTFileName) then begin
918+ GetSETTINGTXTAction.Execute;
919+ body := TStringList.Create;
920+ try
921+ if FileExists(ABoard.GetSETTINGTXTFileName) then begin
922+ body.LoadFromFile(ABoard.GetSETTINGTXTFileName);
923+ Remote := GetFusianaName(body, ABoard);
924+ end;
925+ finally
926+ body.Free;
927+ end;
928+ end;
929+
930+ if Remote = 'fusianasan' then begin
931+ MsgResult := MsgBox(
932+ Handle, MSG_FUSIANA, '情報',
933+ MB_YESNO or MB_ICONQUESTION);
934+ if MsgResult = IDNO then begin
935+ CancelSend( Board, SysMenu );
936+ Exit;
937+ end;
938+ end;
939+ end;
802940 end;
803941
804942 GetSendData(Source);
@@ -926,23 +1064,34 @@ begin
9261064 if FStatusCode = 302 then begin
9271065 GikoForm.PlaySound('ResEnd');
9281066 SaveSendFile;
929- AddFormMessageNew( gmiOK );
1067+ if FThreadItem = nil then
1068+ GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, gmiOK)
1069+ else
1070+ GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, gmiOK);
9301071 Close;
9311072 Exit;
9321073 end;
9331074 if State = gdsComplete then begin
9341075 GikoForm.PlaySound('ResEnd');
9351076 SaveSendFile;
936- AddFormMessageNew( gmiOK );
1077+ if FThreadItem = nil then
1078+ GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, gmiOK)
1079+ else
1080+ GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, gmiOK);
9371081 Close;
9381082 end else if State = gdsError then begin
939- AddFormMessageNew( gmiOK );
1083+ if FThreadItem = nil then
1084+ GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, gmiOK)
1085+ else
1086+ GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, gmiOK);
1087+
9401088 EditorPage.ActivePage := PreviewTab;
9411089 SetContent(ResponseText, Browser);
9421090 end else if State = gdsAbort then begin
9431091 GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiSAD);
9441092 end;
9451093 end;
1094+
9461095 function TEditorForm.GetResultType(ResponseText: string): TGikoResultType;
9471096 begin
9481097 if AnsiPos('書きこみが終わりました', ResponseText) <> 0 then
@@ -977,7 +1126,10 @@ var
9771126 Board: TBoard;
9781127 body : string;
9791128 begin
980- Board := GetBoard;
1129+ if FThreadItem = nil then
1130+ Board := FBoard
1131+ else
1132+ Board := FThreadItem.ParentBoard;
9811133
9821134 if GikoSys.Setting.UseMachineTime then begin
9831135 if GikoSys.Setting.TimeAdjust then
@@ -1032,13 +1184,11 @@ begin
10321184 ini.WriteDateTime(sDate, 'Date', Now);
10331185 if FThreadItem = nil then begin
10341186 ini.WriteString(sDate, 'Title', MojuUtils.Sanitize(TitleEdit.Text));
1035- //ini.WriteString(sDate, 'BBS', FBoard.BBSID);
1036- ini.WriteString(sDate, 'URL', FBoard.URL);
1187+ ini.WriteString(sDate, 'BBS', FBoard.BBSID);
10371188 ini.WriteInteger(sDate, 'NewThread', 1);
10381189 end else begin
10391190 ini.WriteString(sDate, 'Title', FThreadItem.Title);
1040- //ini.WriteString(sDate, 'BBS', FThreadItem.ParentBoard.BBSID);
1041- ini.WriteString(sDate, 'URL', FThreadItem.URL);
1191+ ini.WriteString(sDate, 'BBS', FThreadItem.ParentBoard.BBSID);
10421192 ini.WriteString(sDate, 'Key', ChangeFileExt(FThreadItem.FileName, ''));
10431193 end;
10441194
@@ -1066,7 +1216,10 @@ begin
10661216 Application.ProcessMessages;
10671217 if not Check then Exit;
10681218
1069- Board := GetBoard;
1219+ if FThreadItem = nil then
1220+ Board := FBoard
1221+ else
1222+ Board := FThreadItem.ParentBoard;
10701223
10711224 if FThreadItem = nil then begin
10721225 rc := GikoUtil.MsgBox(Handle,
@@ -1371,6 +1524,39 @@ begin
13711524 CanClose := not FWork;
13721525 end;
13731526
1527+function TEditorForm.GetOEIndentChar : string;
1528+var
1529+ regKey : TRegistry;
1530+ Identities : string;
1531+ IndentChar : DWORD;
1532+const
1533+ DEFAULT_CHAR = '> ';
1534+ OE_MAIL_PATH = '\Software\Microsoft\Outlook Express\5.0\Mail';
1535+ INDENT_CHAR = 'Indent Char';
1536+begin
1537+
1538+ Result := DEFAULT_CHAR;
1539+ regKey := TRegistry.Create;
1540+ try
1541+ try
1542+ regKey.RootKey := HKEY_CURRENT_USER;
1543+ if not regKey.OpenKey( 'Identities', False ) then
1544+ Exit;
1545+ Identities := regKey.ReadString( 'Default User ID' );
1546+ if Identities = '' then
1547+ Exit;
1548+ if not regKey.OpenKey( Identities + OE_MAIL_PATH, False ) then
1549+ Exit;
1550+ IndentChar := regKey.ReadInteger( INDENT_CHAR );
1551+ Result := Char( IndentChar ) + ' ';
1552+ except
1553+ end;
1554+ finally
1555+ regKey.Free;
1556+ end;
1557+
1558+end;
1559+
13741560 procedure TEditorForm.QuotePasteActionExecute(Sender: TObject);
13751561 var
13761562 s : TStringList;
@@ -1378,7 +1564,7 @@ var
13781564 quote : string;
13791565 begin
13801566
1381- quote := GikoSys.GetOEIndentChar;
1567+ quote := GetOEIndentChar;
13821568 s := TStringList.Create;
13831569 try
13841570 s.Text := Clipboard.AsText;
@@ -1423,59 +1609,68 @@ end;
14231609
14241610 procedure TEditorForm.GetSETTINGTXTActionExecute(Sender: TObject);
14251611 var
1426- memStream: TMemoryStream;
14271612 URL, RefURL: string;
14281613 settingBody: TStringList;
14291614 tmpBoard: TBoard;
14301615 begin
1431- if not FWork then begin
1432- FWork := True;
1433-
1434- tmpBoard := GetBoard;
1435- if tmpBoard <> nil then begin
1436-
1437- RefURL := tmpBoard.URL;
1438- if RefURL[Length(RefURL)] <> '/' then
1439- URL := RefURL + '/' + 'SETTING.TXT'
1440- else
1441- URL := RefURL + 'SETTING.TXT';
1442- Screen.Cursor := crHourGlass;
1443- memStream := TMemoryStream.Create;
1444- try
1445- try
1446- StatusBar.Panels[0].Text := 'SETTING.TXTダウンロード中';
1447- GetWebData(URL, RefURL, tmpBoard.SETTINGTXTTime, memStream);
1448- if( Indy.ResponseCode = 200 ) then begin
1449- settingBody := TStringList.Create;
1450- try
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;
1458- finally
1459- settingBody.Free;
1460- end;
1461- StatusBar.Panels[0].Text := 'SETTING.TXT取得完了(' + IntToStr(Indy.ResponseCode) + ')';
1462- end;
1463- except
1464- on E: EIdException do begin
1465- if( AnsiPos('304', E.Message) > 0 ) then
1466- StatusBar.Panels[0].Text := 'SETTING.TXT更新無し(' + IntToStr(Indy.ResponseCode) + ')'
1467- else
1468- StatusBar.Panels[0].Text := 'SETTING.TXT取得エラー(' + IntToStr(Indy.ResponseCode) + ')';
1469- end;
1470- end;
1471- finally
1472- memStream.Free;
1473- Screen.Cursor := crDefault;
1474- end;
1475- ShowBoardInformation(tmpBoard, BoardInformationMemo);
1476- end;
1477- FWork := False;
1478- end;
1616+
1617+ if FWork then begin
1618+ Exit;
1619+ end;
1620+
1621+ FWork := True;
1622+
1623+ InitIdHTTP(Indy);
1624+ if FThreadItem = nil then
1625+ tmpBoard := FBoard
1626+ else
1627+ tmpBoard := FThreadItem.ParentBoard;
1628+
1629+ if tmpBoard = nil then Exit;
1630+
1631+ RefURL := tmpBoard.URL;
1632+ if RefURL[Length(RefURL)] <> '/' then
1633+ URL := RefURL + '/' + 'SETTING.TXT'
1634+ else
1635+ URL := RefURL + 'SETTING.TXT';
1636+
1637+ Indy.Request.LastModified := tmpBoard.SETTINGTXTTime;
1638+ Indy.Request.Referer := RefURL;
1639+ Screen.Cursor := crHourGlass;
1640+ settingBody := TStringList.Create;
1641+ try
1642+ StatusBar.Panels[0].Text := 'SETTING.TXTダウンロード中';
1643+ try
1644+ IdAntiFreeze.Active := True;
1645+ try
1646+ settingBody.Text := Indy.Get(URL);
1647+ finally
1648+ IdAntiFreeze.Active := False;
1649+ end;
1650+ if( Indy.ResponseCode = 200 ) then begin
1651+ settingBody.SaveToFile(tmpBoard.GetSETTINGTXTFileName);
1652+ tmpBoard.SETTINGTXTTime := Indy.Response.LastModified;
1653+ tmpBoard.IsSETTINGTXT := true;
1654+ tmpBoard.TitlePictureURL := GetTitlePictureURL(settingBody, tmpBoard);
1655+ tmpBoard.Modified := true;
1656+ StatusBar.Panels[0].Text := 'SETTING.TXT取得完了(' + IntToStr(Indy.ResponseCode) + ')';
1657+ end;
1658+ except
1659+ on E: EIdException do begin
1660+ if( AnsiPos('304', E.Message) > 0 ) then
1661+ StatusBar.Panels[0].Text := 'SETTING.TXT更新無し(' + IntToStr(Indy.ResponseCode) + ')'
1662+ else
1663+ StatusBar.Panels[0].Text := 'SETTING.TXT取得エラー(' + IntToStr(Indy.ResponseCode) + ')';
1664+ end;
1665+ end;
1666+ finally
1667+ settingBody.Free;
1668+ Screen.Cursor := crDefault;
1669+ FWork := False;
1670+ end;
1671+ ShowBoardInformation(tmpBoard, BoardInformationMemo);
1672+
1673+
14791674 end;
14801675
14811676 procedure TEditorForm.ShowBoardInformation(ABoard: TBoard; AMemo: TMemo);
@@ -1549,60 +1744,51 @@ begin
15491744 Exit;
15501745
15511746 FWork := True;
1747+
1748+ InitIdHTTP(Indy);
15521749 memStream := TMemoryStream.Create;
15531750 try
1554- tmpBoard := GetBoard;
1751+ if FThreadItem = nil then
1752+ tmpBoard := FBoard
1753+ else
1754+ tmpBoard := FThreadItem.ParentBoard;
15551755
1556- if (tmpBoard <> nil) and (tmpBoard.TitlePictureURL <> '') then begin
1756+ Indy.Request.Referer := tmpBoard.URL;
1757+ if tmpBoard.TitlePictureURL <> '' then begin
15571758 StatusBar.Panels[0].Text := '板トップ画像ダウンロード中';
15581759 Screen.Cursor := crHourGlass;
15591760 try
1560- // URLを指定してメモリに読み込む
1561- GetWebData(tmpBoard.TitlePictureURL, tmpBoard.URL,
1562- ZERO_DATE, memStream);
1761+ IdAntiFreeze.Active := True;
1762+ try
1763+ Indy.Get(tmpBoard.TitlePictureURL, memStream);
1764+ finally
1765+ IdAntiFreeze.Active := False;
1766+ end;
15631767 if Indy.ResponseCode = 200 then begin
15641768 memStream.SaveToFile(tmpBoard.GetTitlePictureFileName);
15651769 ShowTitlePicture();
15661770 tmpBoard.Modified := true;
15671771 end;
1568- StatusBar.Panels[0].Text := '板トップ画像 (' + IntToStr(Indy.ResponseCode) + ')';
15691772 except
15701773 end;
15711774 end;
15721775 finally
1573- memStream.Free;
1574- FWork := False;
15751776 Screen.Cursor := crDefault;
1777+ StatusBar.Panels[0].Text := '板トップ画像 (' + IntToStr(Indy.ResponseCode) + ')';
1778+ memStream.Free;
15761779 end;
1577-end;
1578-{
1579-\brief URLのデータをstreamに読み込む
1580-\param URL 読み込む先
1581-\param RefURL refererに設定する
1582-\param Modified Modifiedに設定する
1583-\param stream 読み込んだデータの保存先
1584-}
1585-procedure TEditorForm.GetWebData(const URL: string; const RefURL: string;
1586- Modified: TDateTime; stream: TStream);
1587-begin
1588- InitIdHTTP(Indy);
1589- Indy.Request.Referer := RefURL;
1590- Indy.Request.LastModified := Modified;
1591-
1592- IdAntiFreeze.Active := True;
1593- try
1594- Indy.Get(URL, stream);
1595- finally
1596- IdAntiFreeze.Active := False;
1597- end;
15981780
1781+ FWork := False;
15991782 end;
16001783 procedure TEditorForm.ShowTitlePicture();
16011784 var
16021785 tmpBoard: TBoard;
16031786 s: String;
16041787 begin
1605- tmpBoard := GetBoard;
1788+ if FThreadItem = nil then
1789+ tmpBoard := FBoard
1790+ else
1791+ tmpBoard := FThreadItem.ParentBoard;
16061792
16071793 if FileExists(tmpBoard.GetTitlePictureFileName) then begin
16081794 TitlePictureBrowser.Navigate(tmpBoard.GetTitlePictureFileName);
@@ -1632,63 +1818,71 @@ var
16321818 URL, RefURL: string;
16331819 settingBody: TStringList;
16341820 tmpBoard: TBoard;
1635- memStream: TMemoryStream;
16361821 begin
1637- if not FWork then begin
1822+ if FWork then
1823+ Exit;
16381824 FWork := True;
16391825
1640- tmpBoard := GetBoard;
1641- if (tmpBoard <> nil) then begin
1642-
1643- RefURL := tmpBoard.URL;
1644- if RefURL[Length(RefURL)] <> '/' then
1645- URL := RefURL + '/' + 'head.txt'
1646- else
1647- URL := RefURL + 'head.txt';
1648-
1649- Screen.Cursor := crHourGlass;
1650- memStream := TMemoryStream.Create;
1651- try
1652- StatusBar.Panels[0].Text := 'ローカルルール(head.txt)ダウンロード中';
1653- try
1654- GetWebData(URL, RefURL, tmpBoard.HEADTXTTime, memStream);
1655- if( Indy.ResponseCode = 200 ) then begin
1656- settingBody := TStringList.Create;
1657- try
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;
1669- finally
1670- settingBody.Free;
1671- end;
1672- StatusBar.Panels[0].Text := 'ローカルルール取得完了(' + IntToStr(Indy.ResponseCode) + ')';
1673- end;
1674- except
1675- on E: EIdException do begin
1676- if( AnsiPos('304', E.Message) > 0 ) then
1677- StatusBar.Panels[0].Text := 'ローカルルール更新無し(' + IntToStr(Indy.ResponseCode) + ')'
1678- else
1679- StatusBar.Panels[0].Text := 'ローカルルール取得エラー(' + IntToStr(Indy.ResponseCode) + ')';
1680- end;
1681- end;
1682- finally
1683- memStream.Free;
1684- Screen.Cursor := crDefault;
1685- end;
1686- if tmpBoard.IsHEADTXT then begin
1687- ShowBoardHead(tmpboard, LocalEdit);
1688- end;
1689- end;
1826+ InitIdHTTP(Indy);
1827+ if FThreadItem = nil then
1828+ tmpBoard := FBoard
1829+ else
1830+ tmpBoard := FThreadItem.ParentBoard;
1831+
1832+ if tmpBoard = nil then Exit;
1833+
1834+ RefURL := tmpBoard.URL;
1835+ if RefURL[Length(RefURL)] <> '/' then
1836+ URL := RefURL + '/' + 'head.txt'
1837+ else
1838+ URL := RefURL + 'head.txt';
1839+
1840+ if FileExists(tmpBoard.GETHEADTXTFileName) then
1841+ Indy.Request.LastModified := tmpBoard.HEADTXTTime
1842+ else
1843+ Indy.Request.LastModified := ZERO_DATE;
1844+
1845+ Indy.Request.Referer := RefURL;
1846+ Screen.Cursor := crHourGlass;
1847+ settingBody := TStringList.Create;
1848+ try
1849+ StatusBar.Panels[0].Text := 'ローカルルール(head.txt)ダウンロード中';
1850+ try
1851+ IdAntiFreeze.Active := True;
1852+ try
1853+ settingBody.Text := Indy.Get(URL);
1854+ finally
1855+ IdAntiFreeze.Active := False;
1856+ end;
1857+ if( Indy.ResponseCode = 200 ) then begin
1858+ settingBody.Insert(0, '<HTML lang="ja"><HEAD>');
1859+ settingBody.Insert(1, '<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">');
1860+ settingBody.Insert(2, '<TITLE>' + tmpBoard.Title + '</TITLE>');
1861+ settingBody.Insert(3, '<base href="' + RefURL + '"></HEAD><BODY>');
1862+ settingBody.Add('</BODY></HTML>');
1863+ settingBody.SaveToFile(tmpBoard.GETHEADTXTFileName);
1864+ tmpBoard.HEADTXTTime := Indy.Response.LastModified;
1865+ tmpBoard.IsHEADTXT := true;
1866+ tmpBoard.Modified := true;
1867+ StatusBar.Panels[0].Text := 'ローカルルール取得完了(' + IntToStr(Indy.ResponseCode) + ')';
1868+ end;
1869+ except
1870+ on E: EIdException do begin
1871+ if( AnsiPos('304', E.Message) > 0 ) then
1872+ StatusBar.Panels[0].Text := 'ローカルルール更新無し(' + IntToStr(Indy.ResponseCode) + ')'
1873+ else
1874+ StatusBar.Panels[0].Text := 'ローカルルール取得エラー(' + IntToStr(Indy.ResponseCode) + ')';
1875+ end;
1876+ end;
1877+ finally
1878+ settingBody.Free;
1879+ Screen.Cursor := crDefault;
16901880 FWork := False;
1691- end;
1881+ end;
1882+ if tmpBoard.IsHEADTXT then begin
1883+ ShowBoardHead(tmpboard, LocalEdit);
1884+ end;
1885+
16921886
16931887 end;
16941888
@@ -1699,7 +1893,10 @@ var
16991893 begin
17001894 body := GetBody;
17011895 //どうも、改行分ずれてたっぽいけど、本当かよく分からない。
1702- Board := GetBoard;
1896+ if FThreadItem = nil then
1897+ Board := FBoard
1898+ else
1899+ Board := FThreadItem.ParentBoard;
17031900
17041901 if Board.BoardPlugIn <> nil then
17051902 body := CustomStringReplace(body, #13#10, '<br>')
@@ -1710,13 +1907,12 @@ end;
17101907
17111908 procedure TEditorForm.LocalRuleClick(Sender: TObject);
17121909 var
1713- ini: TMemIniFile;
1910+ ini: TIniFile;
17141911 begin
1715- ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
1912+ ini := TIniFile.Create(GikoSys.Setting.GetFileName);
17161913 try
17171914 RocalRuleTab.TabVisible := LocalRule.Checked;
17181915 ini.WriteBool('EditorForm', 'LocalRuleTab', RocalRuleTab.TabVisible);
1719- ini.UpdateFile;
17201916 finally
17211917 ini.Free;
17221918 end;
@@ -1757,7 +1953,6 @@ var
17571953 Action: TAction;
17581954 begin
17591955 s := MouseGesture.GetGestureStr;
1760- MouseGesture.Clear;
17611956 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
17621957 if Action <> nil then
17631958 Action.Execute;
@@ -1788,7 +1983,10 @@ var
17881983 URL: String;
17891984 ABoard: TBoard;
17901985 begin
1791- ABoard := GetBoard;
1986+ if FThreadItem = nil then
1987+ ABoard := FBoard
1988+ else
1989+ ABoard := FThreadItem.ParentBoard;
17921990
17931991 if ABoard = nil then Exit;
17941992
@@ -1802,14 +2000,12 @@ begin
18022000 KotehanCheckBox.Enabled := SaveNameMailAction.Checked;
18032001 end;
18042002
1805-function TEditorForm.LFusianaGet(const s: String): Boolean;
1806-const
1807- FUSIANA = 'fusianasan';
2003+function TEditorForm.LFusianaGet(s: String): Boolean;
18082004 var
18092005 i: Integer;
18102006 begin
1811- i := AnsiPos(FUSIANA, s);
1812- Result := (i > 0);
2007+ i := AnsiPos('fusianasan', s);
2008+ if (i > 0) then Result := True else Result := False;
18132009 end;
18142010
18152011 procedure TEditorForm.BeLogInOutEActionExecute(Sender: TObject);
@@ -2086,7 +2282,11 @@ var
20862282 Board : TBoard;
20872283 begin
20882284 // スレッドが無い スレ立てのときはFBoardを直接使う
2089- Board := GetBoard;
2285+ if FThreadItem = nil then begin
2286+ Board := FBoard
2287+ end else begin
2288+ Board := FThreadItem.ParentBoard;
2289+ end;
20902290
20912291 // クッキーの情報を捨てる
20922292 Board.Cookie := '';
@@ -2120,208 +2320,5 @@ begin
21202320 Format('%8.0f秒経過', [SecondSpan(FNow, FSambaTimer.WriteDeta)]);
21212321 end;
21222322 end;
2123-{
2124-\brief ウィンドウの位置とサイズの設定
2125-}
2126-procedure TEditorForm.SetWindowRect;
2127-var
2128- wp: TWindowPlacement;
2129-begin
2130- //ウィンドウの位置設定
2131- wp.length := sizeof(wp);
2132- wp.rcNormalPosition.Top := GikoSys.Setting.EditWindowTop;
2133- wp.rcNormalPosition.Left := GikoSys.Setting.EditWindowLeft;
2134-
2135- wp.rcNormalPosition.Bottom := GikoSys.Setting.EditWindowTop + GikoSys.Setting.EditWindowHeight;
2136- wp.rcNormalPosition.Right := GikoSys.Setting.EditWindowLeft + GikoSys.Setting.EditWindowWidth;
2137- wp.showCmd := SW_HIDE;
2138- SetWindowPlacement(Handle, @wp);
2139-
2140- if GikoSys.Setting.EditWindowMax then begin
2141- WindowState := wsMaximized;
2142- end;
2143-
2144- //ウィンドウが画面外なら画面内に移動する
2145- if (Left + Width) > Screen.Width then begin
2146- Left := 0;
2147- end;
2148- if (Top + Height) > Screen.Height then begin
2149- Top := 0;
2150- end;
2151- if Left < 0 then begin
2152- Left := 0;
2153- end;
2154- if Top < 0 then begin
2155- Top := 0;
2156- end;
2157-
2158- //現在のウィンドウの位置を保存
2159- GikoSys.Setting.EditWindowTop := Top + WINDOWMOVE_V; // 次に開くウィンドウは
2160- GikoSys.Setting.EditWindowLeft := Left + WINDOWMOVE_H; //    右斜め下にずらす
2161- //ウィンドウの幅と高さが小さすぎいれば元に戻す
2162- if GikoSys.Setting.EditWindowHeight < 144 then begin
2163- Height := 400;
2164- end;
2165- if GikoSys.Setting.EditWindowWidth < 144 then begin
2166- Width := 640;
2167- end;
2168-end;
2169-{
2170-\brief 拡張タブ設定
2171-}
2172-procedure TEditorForm.SetExtraTab;
2173-const
2174- SECTION = 'EditorForm';
2175-var
2176- ini: TMemIniFile;
2177-begin
2178- ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
2179- try
2180- BoardtopTab.TabVisible := ini.Readbool(SECTION, 'BoardTopTab', False);
2181- BoardTop.Checked := BoardtopTab.TabVisible;
2182- RocalRuleTab.TabVisible := ini.ReadBool(SECTION, 'LocalRuleTab', False);
2183- LocalRule.Checked := RocalRuleTab.TabVisible;
2184- finally
2185- ini.Free;
2186- end;
2187-end;
2188-{
2189-\brief 板取得
2190-\return レスエディタが投稿しようとしている板
2191-}
2192-function TEditorForm.GetBoard : TBoard;
2193-begin
2194- // スレッドアイテムがnullの時はFBoard
2195- if FThreadItem = nil then begin
2196- Result := FBoard;
2197- end else begin
2198- Result := FThreadItem.ParentBoard;
2199- end;
2200-end;
2201-{
2202-\brief GikoFormにメッセージを追加する
2203-\param icon メッセージにつくアイコン
2204-}
2205-procedure TEditorForm.AddFormMessageNew(icon: TGikoMessageIcon);
2206-begin
2207- if FThreadItem = nil then begin
2208- GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, icon)
2209- end else begin
2210- GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, icon);
2211- end;
2212-
2213-end;
2214-{
2215-\brief ローカルfusianaトラップ
2216-\return true:送信中止 false:送信
2217-}
2218-function TEditorForm.isLocalFusianaTrap: Boolean;
2219-var
2220- Namae : string;
2221-begin
2222- Result := False;
2223- if GikoSys.Setting.LocalTrapAtt then begin
2224- Namae := THTMLCreate.RepHtml(NameComboBox.Text);
2225- if (LFusianaGet(Namae)) or (Namae = '山崎渉') then begin
2226- if FusianaMsgBox = IDNO then begin
2227- Result := True;
2228- end;
2229- end;
2230- end;
2231-end;
2232-{
2233-\brief リモートfusianaトラップ
2234-\return true:送信中止 false:送信
2235-}
2236-function TEditorForm.isRemoteFusianaTrap: Boolean;
2237-var
2238- Namae : string;
2239- Board : TBoard;
2240- Remote: string;
2241- body : TStringList;
2242-begin
2243- Result := False;
2244- Namae := THTMLCreate.RepHtml(NameComboBox.Text);
2245- if (GikoSys.Setting.RemoteTrapAtt) and (Length(Namae) = 0) then begin
2246- Board := GetBoard;
2247-
2248- if Board = nil then Exit;
2249-
2250- if not FileExists(Board.GetSETTINGTXTFileName) then begin
2251- //Setting.txtがなかったら取得
2252- //鯖に負荷がかかりそう...
2253- try
2254- GetSETTINGTXTAction.Execute;
2255- except
2256- end;
2257- end;
2258-
2259- Remote := '';
2260- if FileExists(Board.GetSETTINGTXTFileName) then begin
2261- body := TStringList.Create;
2262- try
2263- body.LoadFromFile(Board.GetSETTINGTXTFileName);
2264- Remote := GetFusianaName(body, Board);
2265- finally
2266- body.Free;
2267- end;
2268- end;
2269-
2270- if LFusianaGet(Remote) then begin
2271- if FusianaMsgBox = IDNO then begin
2272- Result := True;
2273- end;
2274- end;
2275- end;
2276-end;
2277-{
2278-\brief Header文字列取得
2279-\param ACOOKIE Cookie
2280-\param SPID SPID
2281-\param PON PON
2282-\param Board 板
2283-\return Header文字列
2284-}
2285-function TEditorForm.getHeaderStr(const ACOOKIE: string; const SPID : string;
2286- const PON : string; Board : TBoard) : string;
2287-begin
2288- Result := ACOOKIE;
2289- if SPID <> '' then
2290- Result := Result + 'SPID=' + SPID + '; ';
2291- if PON <> '' then
2292- Result := Result + 'PON=' + PON + '; ';
2293-
2294- //ホストが2chで、BeにLoginしていればBEのデータを送る
2295- //GikoSys.ParseURI( URL, Protocol,Host, Path, Document, Port, Bookmark );
2296- //if GikoSys.Is2chHost(Host) and GikoSys.Setting.BeLogin then
2297- if (Board.Is2ch) then begin
2298- // 固定のクッキーがあれば食わせる
2299- if Length(GikoSys.Setting.FixedCookie) > 0 then begin
2300- // ホストが2chの場合,固定のクッキーを食わせる
2301- Result := Result + GikoSys.Setting.FixedCookie + '; ';
2302- end;
2303- if (GikoSys.Setting.BeLogin) then begin
2304- Result := Result + 'MDMD=' + GikoSys.Setting.BeCode + '; '
2305- + 'DMDM=' + GikoSys.Setting.BeUserID + '; ';
2306- end;
2307-
2308- end;
2309-
2310- Result := 'Cookie: ' + Result + 'NAME=' + NameComboBox.Text + '; MAIL=' + MailComboBox.Text;
2311-
2312-end;
2313-{
2314-\brief fusiana警告ダイアログ
2315-\return IDYES 書き込む IDNO 中止
2316-}
2317-function TEditorForm.FusianaMsgBox: Integer;
2318-const
2319- MSG_FUSIANA : string = 'リモートホストを表示する機能が使われています'#13#10 +
2320- 'もしも間違ってこの方法でホストが表示されたとしても、自己責任なので削除依頼には応じません。' +
2321- #13#10#13#10'責任を負うことを承諾して書き込みますか?';
2322-begin
2323- Result := MsgBox(Handle, MSG_FUSIANA, '情報',
2324- MB_YESNO or MB_ICONQUESTION);
2325-end;
23262323
23272324 end.
--- a/FavoriteArrange.pas
+++ b/FavoriteArrange.pas
@@ -249,7 +249,6 @@ begin
249249 if (folder1 = nil) and (folder2 <> nil) then begin
250250 Result := -1;
251251 end else begin
252- Result := 0;
253252 if (folder1 <> nil) and (folder2 <> nil) then begin
254253 Result := CompareStr(Node1.Text, Node2.Text);
255254 end else
--- a/Gesture.pas
+++ b/Gesture.pas
@@ -25,6 +25,7 @@ type
2525 function CheckAction(Message: Integer; x, y: Integer): Boolean;
2626 procedure AddAction(sx, sy: Integer);
2727 function AddGesture(Item: string): Integer;
28+ procedure ClearGesture;
2829 function Get(Index: integer): string;
2930 procedure Put(Index: integer; Item: string);
3031 public
@@ -36,7 +37,6 @@ type
3637 property GestureCount: Integer read GetGestureCount;
3738 property Margin: Integer read FMargin write FMargin;
3839 function GetGestureStr: string;
39- procedure Clear;
4040 property OnGestureStart: TNotifyEvent read FOnGestureStart write FOnGestureStart;
4141 property OnGestureMove: TNotifyEvent read FOnGestureMove write FOnGestureMove;
4242 property OnGestureEnd: TNotifyEvent read FOnGestureEnd write FOnGestureEnd;
@@ -49,9 +49,6 @@ var
4949
5050 implementation
5151
52-uses
53- GikoSystem;
54-
5552 constructor TMouseGesture.Create;
5653 begin
5754 inherited;
@@ -65,7 +62,7 @@ end;
6562 destructor TMouseGesture.Destroy;
6663 begin
6764 UnHook;
68- Clear;
65+ ClearGesture;
6966 FGestureItemList.Free;
7067 inherited;
7168 end;
@@ -119,8 +116,8 @@ begin
119116 //マウスジェスチャーの対象と違うときは、開放する
120117 if (hwnd <> 0) and (hwnd <> FHandle) then begin
121118 ReleaseCapture;
122- SetCapture(FHandle);
123119 end;
120+ SetCapture(FHandle);
124121 dp := Point(x - FLastPoint.X, y - FLastPoint.Y);
125122 sp := Point(Sign(dp.X), Sign(dp.Y));
126123 if (dp.X * dp.X + dp.Y * dp.Y) > (FMargin * FMargin) then begin
@@ -133,19 +130,11 @@ begin
133130 FLastTime := GetTickCount;
134131 FLastPoint := Point(x, y);
135132 end;
136- Result := True;
137- end;
133+ Result := True;
134+ end;
138135 end;
139136 WM_RBUTTONDOWN: begin
140- if (not FCancelMode) then begin
141- if ( GikoSys.Setting.GestureIgnoreContext ) then begin
142- //今マウスをキャプチャーしているのを得る
143- hwnd := GetCapture;
144- //マウスジェスチャーの対象と違うときは、開放する
145- if (hwnd <> 0) and (hwnd <> FHandle) then begin
146- Exit;
147- end;
148- end;
137+ if not FCancelMode then begin
149138 FBeginGesture := True;
150139 FLastTime := 0;
151140 FLastPoint := Point(x, y);
@@ -161,11 +150,9 @@ begin
161150 FBeginGesture := False;
162151 ReleaseCapture;
163152 if FGestureItemList.Count <> 0 then begin
164- if Assigned(FOnGestureEnd) then begin
153+ if Assigned(FOnGestureEnd) then
165154 FOnGestureEnd(Self);
166- end else begin
167- Clear;
168- end;
155+ ClearGesture;
169156 end else begin
170157 FCancelMode := True;
171158 //ジェスチャーじゃなかった場合、マウスDOWN,UPをエミュレート
@@ -241,7 +228,7 @@ begin
241228 end;
242229
243230 //ジェスチャーをクリアする
244-procedure TMouseGesture.Clear;
231+procedure TMouseGesture.ClearGesture;
245232 begin
246233 FGestureItemList.Clear;
247234 end;
--- a/Giko.dfm
+++ b/Giko.dfm
@@ -4478,9 +4478,6 @@ object GikoForm: TGikoForm
44784478 object B4: TMenuItem
44794479 Action = GikoDM.NewBoardAction
44804480 end
4481- object N80: TMenuItem
4482- Action = GikoDM.NewBoardSearchAction
4483- end
44844481 object N7: TMenuItem
44854482 Caption = '-'
44864483 end
--- a/Giko.pas
+++ b/Giko.pas
@@ -19,14 +19,14 @@ uses
1919 HintWindow, GikoCoolBar, GikoListView, Search, ExternalBoardManager,
2020 ExternalBoardPlugInMain, StdActns, Variants, ExtActns,IdTCPConnection,
2121 IdBaseComponent, IdTCPClient, AppEvnts, BrowserRecord, MoveHistoryItem,
22- ShellAPI,Preview, HistoryList;
22+ ShellAPI,Preview;
2323
2424 const
2525 NGWORDNAME_PANEL = 3;
2626 THREADSIZE_PANEL = 2;
2727
2828 type
29-
29+ TGikoTreeType = (gttNone, gtt2ch, gttHistory, gttFavorite);
3030 TToolBarSettingSenderType = (tssNone, tssMain, tssList, tssBrowser);
3131 TMinimizeType = (mtNone, mtMinimizing, mtMinimized);
3232 TResizeType = (rtNone, rtResizing);
@@ -416,7 +416,6 @@ type
416416 N79: TMenuItem;
417417 HTML1: TMenuItem;
418418 DAT4: TMenuItem;
419- N80: TMenuItem;
420419 procedure FormCreate(Sender: TObject);
421420 procedure FormDestroy(Sender: TObject);
422421 procedure BrowserStatusTextChange(Sender: TObject;
@@ -570,7 +569,7 @@ type
570569 FActiveList: TObject;
571570 FActiveContent: TBrowserRecord; //
572571 FActiveBBS : TBBS;
573- FHistoryList: THistoryList; //ヒストリリスト
572+ FHistoryList: TList; //ヒストリリスト
574573 FTreeType: TGikoTreeType;
575574 FWorkCount: Integer;
576575 FNameCookie: string;
@@ -723,9 +722,14 @@ type
723722 procedure SetListViewType(AViewType: TGikoViewType); overload;
724723 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
725724 procedure PlaySound(SoundEventName: string);
725+ function AddHistory( FavItem: TFavoriteThreadItem ): Boolean;
726+ procedure ClearHistory;
727+ procedure SaveHistory;
728+ procedure LoadHistory;
726729 procedure ShowBBSTree( inBBS : TBBS );
727730 procedure ShowBBSTreeOld( inBBS : TBBS );
728731 procedure ShowHistoryTree;
732+ procedure SetHistoryTreeNode;
729733 procedure AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
730734 procedure SetBrowserTabState;
731735 procedure SetToolBarPopup;
@@ -848,6 +852,8 @@ const
848852 DandD_THRESHOLD = 5; //D&Dの閾値(pixcel)
849853 //プレビューファイル名
850854 HTML_FILE_NAME = 'temp_preview.html';
855+ ITEM_ICON_THREADLOG1 = 6; //スレアイコン(ログあり)
856+ ITEM_ICON_THREADLOG2 = 7; //スレアイコン(ログあり)
851857 //メッセージID
852858 USER_TREECLICK = WM_USER + 2000;
853859 USER_RESIZED = WM_USER + 2001;
@@ -1132,11 +1138,10 @@ begin
11321138
11331139
11341140 // ヒストリリスト(LoadHistory よりも先に行うこと)
1135- FHistoryList := THistoryList.Create;
1141+ FHistoryList := TList.Create;
11361142
11371143 // 履歴読み込み
1138- FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1139- TreeView, FTreeType);
1144+ LoadHistory;
11401145
11411146 //お気に入り読み込み
11421147 FavoriteDM.SetFavTreeView(FavoriteTreeView);
@@ -1611,12 +1616,12 @@ begin
16111616
16121617 //ヒストリリスト保存
16131618 try
1614- FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1619+ SaveHistory;
16151620 except
16161621 end;
16171622 try
16181623 try
1619- FHistoryList.Clear;
1624+ ClearHistory;
16201625 except
16211626 end;
16221627 finally
@@ -1762,8 +1767,8 @@ begin
17621767
17631768 //履歴の保存と破棄
17641769 try
1765- FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1766- FHistoryList.Clear;
1770+ SaveHistory;
1771+ ClearHistory;
17671772 except
17681773 end;
17691774
@@ -1814,8 +1819,7 @@ begin
18141819 ShowBBSTree( BBSs[ 0 ] );
18151820
18161821 // 履歴読み込み
1817- FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1818- TreeView, FTreeType);
1822+ LoadHistory;
18191823
18201824 //お気に入り読み込み
18211825 FavoriteDM.ReadFavorite;
@@ -1886,13 +1890,7 @@ begin
18861890 FActiveContent := nil;
18871891 Exit;
18881892 end;
1889- // 前回と同じ場合終了
1890- if (StatusBar.Panels[1].Text = Text2) then begin
1891- {$IFDEF DEBUG}
1892- Writeln('Status Text is not changed!');
1893- {$ENDIF}
1894- Exit;
1895- end;
1893+
18961894 StatusBar.Panels[1].Text := Text2;
18971895
18981896 if FHint <> nil then begin
@@ -1906,8 +1904,6 @@ begin
19061904 if not GikoForm.Active then
19071905 Exit;
19081906
1909-
1910-
19111907 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
19121908 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
19131909
@@ -2543,7 +2539,7 @@ begin
25432539 FBrowsers.Move(BROWSER_COUNT - 1, 0);
25442540 end;
25452541 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2546- if not FHistoryList.AddHistory( favItem, TreeView, FTreeType ) then
2542+ if not AddHistory( favItem ) then
25472543 favItem.Free;
25482544
25492545 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
@@ -3023,10 +3019,209 @@ begin
30233019 end;
30243020 end;
30253021
3026-//履歴から削除
3022+function TGikoForm.AddHistory( favItem : TFavoriteThreadItem ): Boolean;
3023+var
3024+ i: Integer;
3025+ Item: TFavoriteThreadItem;
3026+ Node: TTreeNode;
3027+begin
3028+// Result := False;
3029+// if (GetActiveContent = ThreadItem) and
3030+// (ThreadItem.Count <= ThreadItem.Kokomade) then
3031+// Exit;
3032+// if GetActiveContent = ThreadItem then
3033+// Exit;
3034+
3035+ Result := True;
3036+ if FTreeType = gttHistory then
3037+ TreeView.Selected := nil;
3038+
3039+ for i := 0 to FHistoryList.Count - 1 do begin
3040+ if TObject(FHistoryList[i]) is TFavoriteThreadItem then begin
3041+ Item := TFavoriteThreadItem(FHistoryList[i]);
3042+ if Item.URL = favItem.URL then begin
3043+// SetContent(ThreadItem);
3044+ FHistoryList.Move(i, 0);
3045+ if FTreeType = gttHistory then
3046+ if TreeView.Items.GetFirstNode <> TreeView.Items[ i ] then
3047+ TreeView.Items[ i ].MoveTo( TreeView.Items.GetFirstNode, naInsert );
3048+ Result := false;
3049+ Exit;
3050+ end;
3051+ end;
3052+ end;
3053+
3054+ if FHistoryList.Count > 0 then
3055+ FHistoryList.Insert( 0, favItem )
3056+ else
3057+ FHistoryList.Add( favItem );
3058+// SetContent(ThreadItem);
3059+// while GikoSys.Setting.AddressHistoryCount < FHistoryList.Count do begin
3060+ while GikoSys.Setting.MaxRecordCount < FHistoryList.Count do begin
3061+ i := FHistoryList.Count - 1;
3062+ TObject( FHistoryList.Items[ i ] ).Free;
3063+ FHistoryList.Delete( i );
3064+ end;
3065+
3066+ if FTreeType = gttHistory then begin
3067+ Node := TreeView.Items.Add( nil, favItem.Title );
3068+ Node.MoveTo( TreeView.Items.GetFirstNode, naInsert );
3069+ {
3070+ if favItem.NewArrival then begin
3071+ Node.ImageIndex := ITEM_ICON_THREADNEW1;
3072+ Node.SelectedIndex := ITEM_ICON_THREADNEW2;
3073+ end else begin
3074+ Node.ImageIndex := ITEM_ICON_THREADLOG1;
3075+ Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3076+ end;
3077+ }
3078+ // 負荷をかけたくないので NewArrival のチェックを行わない
3079+ // ※favItem.Item プロパティは dat の読み込みを必要とする
3080+ Node.ImageIndex := ITEM_ICON_THREADLOG1;
3081+ Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3082+ Node.Data := favItem;
3083+ //while GikoSys.Setting.AddressHistoryCount < TreeView.Items.Count do begin
3084+ while GikoSys.Setting.MaxRecordCount < TreeView.Items.Count do begin
3085+ i := TreeView.Items.Count - 1;
3086+ TreeView.Items.Item[ i ].Delete;
3087+ end;
3088+ end;
3089+end;
3090+
30273091 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
3092+var
3093+ i: Integer;
3094+ node: TTreeNode;
3095+begin
3096+ // キャビネットに履歴が表示されていたら、
3097+ // キャビネット内のアイテムも削除する。
3098+ if (FTreeType = gttHistory) then begin
3099+ node := TreeView.Items.GetFirstNode;
3100+ while (node <> nil) do begin
3101+ if ( TFavoriteThreadItem(node.Data).Item = threadItem ) then begin
3102+ TreeView.Items.Delete(node);
3103+ TreeView.Refresh;
3104+ node := nil;
3105+ end else begin
3106+ node := node.GetNext;
3107+ end;
3108+ end;
3109+ end;
3110+ for i := 0 to FHistoryList.Count - 1 do begin
3111+ if threadItem = TFavoriteThreadItem( FHistoryList.Items[i] ).Item then begin
3112+ TFavoriteThreadItem( FHistoryList.Items[ i ] ).Free;
3113+ FHistoryList.Delete(i);
3114+ FHistoryList.Capacity := FHistoryList.Count;
3115+ Break;
3116+ end;
3117+ end;
3118+end;
3119+
3120+procedure TGikoForm.ClearHistory;
3121+var
3122+ i : Integer;
3123+begin
3124+ //FHistoryList.Clear;
3125+
3126+ try
3127+ for i := FHistoryList.Count - 1 downto 0 do begin
3128+ if TObject(FHistoryList[ i ]) is TFavoriteThreadItem then
3129+ TFavoriteThreadItem(FHistoryList[ i ]).Free
3130+ else if TObject(FHistoryList[ i ]) is TFavoriteBoardItem then
3131+ TFavoriteBoardItem(FHistoryList[ i ]).Free;
3132+
3133+ //FHistoryList.Delete(i);
3134+ end;
3135+ except
3136+ end;
3137+
3138+ FHistoryList.Clear;
3139+ FHistoryList.Capacity := FHistoryList.Count;
3140+
3141+end;
3142+
3143+procedure TGikoForm.SaveHistory;
3144+var
3145+ i, bound : Integer;
3146+ saveList : TstringList;
30283147 begin
3029- FHistoryList.DeleteHistory( threadItem, TreeView, TreeType );
3148+
3149+ saveList := TStringList.Create;
3150+ try
3151+ FHistoryList.Pack;
3152+ FHistoryList.Capacity := FHistoryList.Count;
3153+ saveList.Add('<?xml version="1.0" encoding="Shift_JIS" standalone="yes"?>');
3154+ saveList.Add('<address>');
3155+ bound := FHistoryList.Count - 1;
3156+ for i := bound downto 0 do begin
3157+ // title は今のところ使っていない
3158+ saveList.Add(
3159+ '<history url="' + HtmlEncode( TFavoriteThreadItem( FHistoryList[ i ] ).URL ) + '"' +
3160+ ' title="' + HtmlEncode( MojuUtils.Sanitize(TFavoriteThreadItem( FHistoryList[ i ] ).Title )) + '"/>');
3161+ end;
3162+ saveList.Add('</address>');
3163+ saveList.SaveToFile( GikoSys.GetConfigDir + 'History.xml' );
3164+ finally
3165+ saveList.Free;
3166+ end;
3167+
3168+end;
3169+
3170+procedure TGikoForm.LoadHistory;
3171+var
3172+ i, bound : Integer;
3173+ fileName : string;
3174+ XMLDoc : IXMLDocument;
3175+ XMLNode : IXMLNode;
3176+ HistoryNode : IXMLNode;
3177+ s : string;
3178+ favItem : TFavoriteThreadItem;
3179+{$IFDEF DEBUG}
3180+ st, rt : Cardinal;
3181+{$ENDIF}
3182+begin
3183+{$IFDEF DEBUG}
3184+ st := GetTickCount;
3185+{$ENDIF}
3186+
3187+ fileName := GikoSys.GetConfigDir + 'History.xml';
3188+
3189+ if FileExists( fileName ) then begin
3190+ try
3191+ XMLDoc := IXMLDocument.Create;
3192+ //XMLDoc := LoadXMLDocument(FileName);
3193+ LoadXMLDocument(FileName, XMLDoc);
3194+ try
3195+ XMLNode := XMLDoc.DocumentElement;
3196+
3197+ if XMLNode.NodeName = 'address' then begin
3198+ bound := XMLNode.ChildNodes.Count - 1;
3199+ for i := 0 to bound do begin
3200+ HistoryNode := XMLNode.ChildNodes[i];
3201+ if HistoryNode.NodeName = 'history' then begin
3202+ //if FReadCount >= sl.Count then begin
3203+ s := Trim(HistoryNode.Attributes['url']);
3204+ if s <> '' then begin
3205+ favItem := TFavoriteThreadItem.Create(
3206+ s, MojuUtils.UnSanitize(HistoryNode.Attributes[ 'title' ]) );
3207+ if not AddHistory( favItem ) then
3208+ favItem.Free;
3209+ end;
3210+ //end;
3211+ end;
3212+ end;
3213+ end;
3214+ finally
3215+ XMLDoc.Free;
3216+ end;
3217+ except
3218+ end;
3219+ end;
3220+{$IFDEF DEBUG}
3221+ rt := GetTickCount - st;
3222+ Writeln('Runtime(Load Histroy) : ' + IntToStr(rt) + ' ms');
3223+{$ENDIF}
3224+
30303225 end;
30313226
30323227 procedure TGikoForm.ShowBBSTreeOld(
@@ -3188,11 +3383,43 @@ begin
31883383 FTreeType := gttHistory;
31893384 HistoryToolBar.Show;
31903385 FavoriteToolBar.Hide;
3191- FHistoryList.SetTreeNode( TreeView );
3386+ SetHistoryTreeNode;
31923387 CabinetSelectToolButton.Caption := '履歴リスト';
31933388 end;
31943389 end;
31953390
3391+procedure TGikoForm.SetHistoryTreeNode;
3392+var
3393+ i: Integer;
3394+ Node: TTreeNode;
3395+ Item: TFavoriteThreadItem;
3396+begin
3397+ TreeView.Items.BeginUpdate;
3398+ try
3399+ TreeView.Items.Clear;
3400+ for i := 0 to FHistoryList.Count - 1 do begin
3401+ Item := TFavoriteThreadItem(FHistoryList[i]);
3402+ Node := TreeView.Items.Add(nil, Item.Title);
3403+ {
3404+ if Item.Item.NewArrival then begin
3405+ Node.ImageIndex := ITEM_ICON_THREADNEW1;
3406+ Node.SelectedIndex := ITEM_ICON_THREADNEW2;
3407+ end else begin
3408+ Node.ImageIndex := ITEM_ICON_THREADLOG1;
3409+ Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3410+ end;
3411+ }
3412+ // 負荷をかけたくないので NewArrival のチェックを行わない
3413+ // ※Item.Item プロパティは dat の読み込みを必要とする
3414+ Node.ImageIndex := ITEM_ICON_THREADLOG1;
3415+ Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3416+ Node.Data := Item;
3417+ end;
3418+ finally
3419+ TreeView.Items.EndUpdate;
3420+ end;
3421+end;
3422+
31963423 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
31973424 var
31983425 ChangeEvent: TTVChangedEvent;
@@ -3943,7 +4170,6 @@ procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
39434170 var
39444171 idx: Integer;
39454172 begin
3946- FDragWFirst := False;
39474173 idx := BrowserTab.IndexOfTabAt(X, Y);
39484174 if idx <> -1 then
39494175 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
@@ -3958,11 +4184,14 @@ begin
39584184
39594185 TabIdx := BrowserTab.IndexOfTabAt(x, y);
39604186
3961- if ( ssLeft in Shift ) then begin
3962- if (FDragWFirst) then begin
4187+ if ( ssLeft in Shift ) and ( BrowserTab.Style = tsTabs ) then begin
4188+ if FDragWFirst = false then begin
4189+ FDragWFirst := true;
4190+ end else begin
39634191 BrowserTab.EndDrag(false);
39644192 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
3965- end;
4193+ FDragWFirst := false;
4194+ end;
39664195 end else begin
39674196 BrowserTab.EndDrag(false);
39684197 FDragWFirst := false;
@@ -4705,18 +4934,12 @@ begin
47054934
47064935 FPreviewBrowser.PreviewImage(FPreviewURL);
47074936
4708- if ARect.Bottom > Screen.DesktopHeight then begin
4709- OffsetRect(ARect, 0, -(ARect.Bottom - Screen.DesktopHeight));
4710- end;
4711- if (ARect.Right > Screen.DesktopWidth) then begin
4712- OffsetRect(ARect, -(ARect.Right - Screen.DesktopWidth), 0);
4713- end;
4714- if (ARect.Left < Screen.DesktopLeft) then begin
4715- OffsetRect(ARect, +(Screen.DesktopLeft - ARect.Left), 0);
4716- end;
4717- if (ARect.Top < Screen.DesktopTop) then begin
4718- OffsetRect(ARect, 0, (Screen.DesktopTop - ARect.Top));
4719- end;
4937+ if ARect.Bottom > Screen.DesktopHeight then
4938+ ARect.Top := Screen.DesktopHeight - (ARect.Bottom - ARect.Top);
4939+ if ARect.Right > Screen.DesktopWidth then
4940+ ARect.Left := Screen.DesktopWidth - (ARect.Right - ARect.Left);
4941+ if ARect.Left < Screen.DesktopLeft then ARect.Left := Screen.DesktopLeft;
4942+ if ARect.Bottom < Screen.DesktopTop then ARect.Bottom := Screen.DesktopTop;
47204943
47214944 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST,
47224945 ARect.Left, ARect.Top,
@@ -4844,6 +5067,7 @@ begin
48445067 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
48455068 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
48465069 Exit;
5070+ ClearHistory;
48475071 FHistoryList.Clear;
48485072 TreeView.Items.Clear;
48495073 end;
@@ -6054,18 +6278,24 @@ end;
60546278 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
60556279 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
60566280 begin
6057- if FDragWFirst = true then
6281+ if FDragWFirst <> true then begin
60586282 FDragWFirst := false;
6059-
6060- if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6061- if GikoSys.Setting.ListWidthState = glsMin then begin
6062- GikoDM.BrowserMaxAndFocusAction.Execute;
6063- end;
6064- end else begin
6065- if GikoSys.Setting.ListHeightState = glsMin then begin
6066- GikoDM.BrowserMaxAndFocusAction.Execute;
6067- end;
6068- end;
6283+{
6284+ end else if (abs( X - FMouseDownPos.X ) < Mouse.DragThreshold)
6285+ and (abs( Y - FMouseDownPos.Y ) < Mouse.DragThreshold) then begin
6286+(*}
6287+ end else begin
6288+//*)
6289+ if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6290+ if GikoSys.Setting.ListWidthState = glsMin then begin
6291+ GikoDM.BrowserMaxAndFocusAction.Execute;
6292+ end;
6293+ end else begin
6294+ if GikoSys.Setting.ListHeightState = glsMin then begin
6295+ GikoDM.BrowserMaxAndFocusAction.Execute;
6296+ end;
6297+ end;
6298+ end;
60696299 end;
60706300
60716301 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
@@ -6790,7 +7020,6 @@ var
67907020 Action: TAction;
67917021 begin
67927022 s := MouseGesture.GetGestureStr;
6793- MouseGesture.Clear;
67947023 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
67957024 if Action <> nil then
67967025 Action.Execute;
@@ -7139,9 +7368,7 @@ begin
71397368 WM_KEYFIRST..WM_KEYLAST :
71407369 begin
71417370 //キーアップは無視する KeyDownと合わせて2回呼ばれるから
7142- if (Msg.message <> WM_KEYUP)
7143- and (Msg.message <> WM_CHAR)
7144- and (Msg.message <> WM_SYSKEYUP) then begin
7371+ if (Msg.message <> WM_KEYUP) and (Msg.message <> WM_CHAR) then begin
71457372 wmMsg.Msg := Msg.message;
71467373 wmMsg.CharCode := Word(Msg.wParam);
71477374 wmMsg.KeyData := Msg.lParam;
--- a/GikoDataModule.dfm
+++ b/GikoDataModule.dfm
@@ -1,7 +1,7 @@
11 object GikoDM: TGikoDM
22 OldCreateOrder = False
33 OnCreate = DataModuleCreate
4- Left = 514
4+ Left = 660
55 Top = 170
66 Height = 336
77 Width = 286
@@ -1299,18 +1299,6 @@ object GikoDM: TGikoDM
12991299 OnExecute = NewImageLinkToClipBoardActionExecute
13001300 OnUpdate = DependActiveCntentLogActionUpdate
13011301 end
1302- object SetForcusForAddresBarAction: TAction
1303- Category = #12450#12489#12524#12473#12496#12540
1304- Caption = #12450#12489#12524#12473#12496#12540#12395#12501#12457#12540#12459#12473#12434#24403#12390#12427
1305- Hint = #12450#12489#12524#12473#12496#12540#12395#12501#12457#12540#12459#12473#12434#24403#12390#12427
1306- OnExecute = SetForcusForAddresBarActionExecute
1307- end
1308- object NewBoardSearchAction: TAction
1309- Category = #12501#12449#12452#12523
1310- Caption = #31227#36578#26495#26908#32034
1311- Hint = #31227#36578#12375#12390#12356#12427#26495#12398'URL'#12434#26908#32034#12377#12427
1312- OnExecute = NewBoardSearchActionExecute
1313- end
13141302 end
13151303 object ToobarImageList: TImageList
13161304 Left = 44
--- a/GikoDataModule.pas
+++ b/GikoDataModule.pas
@@ -12,7 +12,7 @@ uses
1212 MSHTML_TLB,
1313 {$IFEND}
1414 ComCtrls, BrowserRecord, Graphics, Messages, Setting, Dialogs,
15- ActiveX, MoveHistoryItem, HistoryList;
15+ ActiveX, MoveHistoryItem;
1616
1717 const
1818 CAPTION_NAME: string = 'ギコナビ';
@@ -229,8 +229,6 @@ type
229229 StoredTaskTrayAction: TAction;
230230 AllImageLinkToClipbordAction: TAction;
231231 NewImageLinkToClipBoardAction: TAction;
232- SetForcusForAddresBarAction: TAction;
233- NewBoardSearchAction: TAction;
234232 procedure EditNGActionExecute(Sender: TObject);
235233 procedure ReloadActionExecute(Sender: TObject);
236234 procedure GoFowardActionExecute(Sender: TObject);
@@ -432,8 +430,6 @@ type
432430 procedure RightmostTabSelectActionUpdate(Sender: TObject);
433431 procedure NewImageLinkToClipBoardActionExecute(Sender: TObject);
434432 procedure AllImageLinkToClipbordActionExecute(Sender: TObject);
435- procedure SetForcusForAddresBarActionExecute(Sender: TObject);
436- procedure NewBoardSearchActionExecute(Sender: TObject);
437433 private
438434 { Private 宣言 }
439435 procedure ClearResFilter;
@@ -486,7 +482,7 @@ uses
486482 GikoBayesian, About, ShellAPI,
487483 RoundName, RoundData, Menus, ListViewUtils,
488484 ThreadControl, GikoMessage, InputAssist,
489- DefaultFileManager, Forms, NewBoardURL;
485+ DefaultFileManager, Forms;
490486
491487 const
492488 MSG_ERROR : string = 'エラー';
@@ -4305,36 +4301,6 @@ begin
43054301 end;
43064302 end;
43074303 end;
4308-{
4309-\brief アドレスバーにフォーカスを当てる
4310-\param Sender イベントの発生元
4311-}
4312-procedure TGikoDM.SetForcusForAddresBarActionExecute(Sender: TObject);
4313-begin
4314- if ( GikoForm.AddressToolBar.Visible ) then begin
4315- GikoForm.AddressComboBox.SetFocus;
4316- end
4317-end;
4318-{
4319-\brief 移転した板のURLを取得するダイアグラムを表示する
4320-}
4321-procedure TGikoDM.NewBoardSearchActionExecute(Sender: TObject);
4322-var
4323- form : TNewBoardURLForm;
4324- Msg: string;
4325-begin
4326- if (EditorFormExists) then begin
4327- Msg := 'レスエディタを全て閉じてください';
4328- MsgBox(GikoForm.Handle, Msg, MSG_ERROR, MB_OK or MB_ICONSTOP);
4329- Exit;
4330- end;
4331- form := TNewBoardURLForm.Create(Self);
4332- try
4333- form.ShowModal;
4334- finally
4335- form.Release;
4336- end;
4337-end;
43384304
43394305 end.
43404306
--- a/GikoSystem.pas
+++ b/GikoSystem.pas
@@ -249,10 +249,6 @@ type
249249 function GetGikoMessage(MesType: TGikoMessageListType): String;
250250 //! GMTの時刻をTDateTimeに変換する
251251 function DateStrToDateTime(const DateStr: string): TDateTime;
252- //! User32.dllが利用できるか
253- function CanUser32DLL: Boolean;
254- //! OE引用符取得
255- function GetOEIndentChar : string;
256252 end;
257253
258254 var
@@ -3319,65 +3315,6 @@ begin
33193315 TmpFileList.Free;
33203316 end;
33213317 end;
3322-{
3323-\brief User32.dllが利用できるか
3324-\return Boolean 利用できる場合はTrue
3325-}
3326-function TGikoSys.CanUser32DLL: Boolean;
3327-var
3328- hUser32 : HINST;
3329-begin
3330- Result := False;
3331- hUser32 := 0;
3332- try
3333- try
3334- hUser32 := LoadLibrary('User32.dll');
3335- if hUser32 <> 0 then begin
3336- Result := True;
3337- end;
3338- except
3339- Result := false;
3340- end;
3341- finally
3342- FreeLibrary(hUser32);
3343- end;
3344-end;
3345-{
3346-\brief OE引用符取得
3347-\return OEの引用符(設定されていない場合は'>')
3348-}
3349-function TGikoSys.GetOEIndentChar : string;
3350-var
3351- regKey : TRegistry;
3352- Identities : string;
3353- IndentChar : DWORD;
3354-const
3355- DEFAULT_CHAR = '> ';
3356- OE_MAIL_PATH = '\Software\Microsoft\Outlook Express\5.0\Mail';
3357- INDENT_CHAR = 'Indent Char';
3358-begin
3359-
3360- Result := DEFAULT_CHAR;
3361- regKey := TRegistry.Create;
3362- try
3363- try
3364- regKey.RootKey := HKEY_CURRENT_USER;
3365- if not regKey.OpenKey( 'Identities', False ) then
3366- Exit;
3367- Identities := regKey.ReadString( 'Default User ID' );
3368- if Identities = '' then
3369- Exit;
3370- if not regKey.OpenKey( Identities + OE_MAIL_PATH, False ) then
3371- Exit;
3372- IndentChar := regKey.ReadInteger( INDENT_CHAR );
3373- Result := Char( IndentChar ) + ' ';
3374- except
3375- end;
3376- finally
3377- regKey.Free;
3378- end;
3379-
3380-end;
33813318
33823319 initialization
33833320 GikoSys := TGikoSys.Create;
--- a/HTMLCreate.pas
+++ b/HTMLCreate.pas
@@ -67,7 +67,7 @@ type
6767 dat : boolean; var s : String) : string;
6868 function getNumberString(const str: String;var index :Integer; var dbCharlen: Boolean;
6969 sLen :Integer): String;
70- function isOutsideRange(item: TThreadItem; index: Integer ): Boolean;
70+
7171 public
7272 { Public 宣言 }
7373 procedure AddAnchorTag(PRes: PResRec);
@@ -637,6 +637,7 @@ begin
637637 PRes.FBody := PRes.FBody + res;
638638
639639 end;
640+
640641 //Pluginを利用するBoardのスレッドのHTMLを作成してdocに書き込む
641642 procedure THTMLCreate.CreateUsePluginHTML(html:TBufferedWebBrowser; ThreadItem: TThreadItem; var sTitle: string);
642643 var
@@ -659,9 +660,17 @@ begin
659660 // 1 は必ず表示
660661 if i <> 0 then begin
661662 // 表示範囲を限定
662- if (isOutsideRange(ThreadItem, i)) then begin
663- Continue;
664- end;
663+ case GikoSys.ResRange of
664+ Ord( grrKoko ):
665+ if ThreadItem.Kokomade > (i + 1) then
666+ Continue;
667+ Ord( grrNew ):
668+ if NewReceiveNo > (i + 1) then
669+ Continue;
670+ 10..65535:
671+ if (threadItem.Count - i) > GikoSys.ResRange then
672+ Continue;
673+ end;
665674 end;
666675
667676 // 新着マーク
@@ -756,9 +765,17 @@ begin
756765 // 1 は必ず表示
757766 if i <> 0 then begin
758767 // 表示範囲を限定
759- if (isOutsideRange(ThreadItem, i)) then begin
760- Continue;
761- end;
768+ case GikoSys.ResRange of
769+ Ord( grrKoko ):
770+ if ThreadItem.Kokomade > (i + 1) then
771+ Continue;
772+ Ord( grrNew ):
773+ if NewReceiveNo > (i + 1) then
774+ Continue;
775+ 10..65535:
776+ if (threadItem.Count - i) > GikoSys.ResRange then
777+ Continue;
778+ end;
762779 end;
763780
764781 // 新着マーク
@@ -845,10 +862,18 @@ begin
845862 for i := 0 to ReadList.Count - 1 do begin
846863 // 1 は必ず表示
847864 if i <> 0 then begin
848- // 表示範囲を限定
849- if (isOutsideRange(ThreadItem, i)) then begin
850- Continue;
851- end;
865+ // 表示範囲を限定
866+ case GikoSys.ResRange of
867+ Ord( grrKoko ):
868+ if ThreadItem.Kokomade > (i + 1) then
869+ Continue;
870+ Ord( grrNew ):
871+ if NewReceiveNo > (i + 1) then
872+ Continue;
873+ 10..65535:
874+ if (threadItem.Count - i) > GikoSys.ResRange then
875+ Continue;
876+ end;
852877 end;
853878
854879 if (NewReceiveNo = (i + 1)) or ((NewReceiveNo = 0) and (i = 0)) then begin
@@ -907,9 +932,17 @@ begin
907932 // 1 は必ず表示
908933 if i <> 0 then begin
909934 // 表示範囲を限定
910- if (isOutsideRange(ThreadItem, i)) then begin
911- Continue;
912- end;
935+ case GikoSys.ResRange of
936+ Ord( grrKoko ):
937+ if ThreadItem.Kokomade > (i + 1) then
938+ Continue;
939+ Ord( grrNew ):
940+ if NewReceiveNo > (i + 1) then
941+ Continue;
942+ 10..65535:
943+ if (threadItem.Count - i) > GikoSys.ResRange then
944+ Continue;
945+ end;
913946 end;
914947
915948 if (NewReceiveNo = (i + 1)) or ((NewReceiveNo = 0) and (i = 0)) then begin
@@ -1584,31 +1617,6 @@ begin
15841617 Result := Result + '</BODY></HTML>';
15851618
15861619 end;
1587-{
1588-\brief 表示範囲外レス番号判定処理
1589-\param item 表示スレッド
1590-\param index レス番号
1591-\return ture:表示範囲外 false:表示範囲内
1592-}
1593-function THTMLCreate.isOutsideRange( item: TThreadItem; index: Integer ): Boolean;
1594-begin
1595- Result := False;
1596- // 表示範囲を限定
1597- case GikoSys.ResRange of
1598- Ord( grrKoko ):
1599- if item.Kokomade > (index + 1) then
1600- Result := True;
1601- Ord( grrNew ):
1602- if item.NewReceive > (index + 1) then
1603- Result := True;
1604- 10..65535:
1605- if (GikoSys.Setting.HeadResCount) < (index + 1) then begin
1606- if (item.Count - index) > GikoSys.ResRange then begin
1607- Result := True;
1608- end;
1609- end;
1610- end;
1611-end;
16121620 constructor TBufferedWebBrowser.Create(Browser: TWebBrowser; BuffSize: Integer);
16131621 begin
16141622 inherited Create;
--- a/HistoryList.pas
+++ /dev/null
@@ -1,261 +0,0 @@
1-unit HistoryList;
2-
3-interface
4-
5-uses
6- Windows, Messages, SysUtils, Classes, Graphics, Controls,
7- BoardGroup, Favorite, ComCtrls, GikoXMLDoc;
8-
9-type
10- TGikoTreeType = (gttNone, gtt2ch, gttHistory, gttFavorite);
11-
12- THistoryList = class(TList)
13- public
14- function AddHistory( favItem : TFavoriteThreadItem; TreeView : TTreeView;
15- TreeType: TGikoTreeType): Boolean;
16- procedure DeleteHistory( threadItem: TThreadItem; TreeView : TTreeView;
17- TreeType: TGikoTreeType );
18- procedure Clear; override;
19- procedure SaveToFile(const FileName: String);
20- procedure LoadFromFile(const FileName: String;
21- TreeView : TTreeView; TreeType: TGikoTreeType);
22- procedure SetTreeNode( TreeView : TTreeView );
23-
24- end;
25-
26-
27-implementation
28-
29-uses
30- Giko, GikoSystem, Setting, YofUtils, MojuUtils;
31-
32-const
33- ITEM_ICON_THREADLOG1 = 6; //スレアイコン(ログあり)
34- ITEM_ICON_THREADLOG2 = 7; //スレアイコン(ログあり)
35-
36-
37-function THistoryList.AddHistory(
38- favItem : TFavoriteThreadItem; TreeView : TTreeView;
39- TreeType: TGikoTreeType ): Boolean;
40-var
41- i: Integer;
42- Item: TFavoriteThreadItem;
43- Node: TTreeNode;
44-begin
45- Result := True;
46- if TreeType = gttHistory then
47- TreeView.Selected := nil;
48-
49- for i := 0 to Self.Count - 1 do begin
50- if TObject(Self[i]) is TFavoriteThreadItem then begin
51- Item := TFavoriteThreadItem(Self[i]);
52- if Item.URL = favItem.URL then begin
53- Self.Move(i, 0);
54- if TreeType = gttHistory then
55- if TreeView.Items.GetFirstNode <> TreeView.Items[ i ] then
56- TreeView.Items[ i ].MoveTo( TreeView.Items.GetFirstNode, naInsert );
57- Result := false;
58- Exit;
59- end;
60- end;
61- end;
62-
63- if Self.Count > 0 then
64- Self.Insert( 0, favItem )
65- else
66- Self.Add( favItem );
67-
68- while GikoSys.Setting.MaxRecordCount < Self.Count do begin
69- i := Self.Count - 1;
70- TObject( Self.Items[ i ] ).Free;
71- Self.Delete( i );
72- end;
73-
74- if TreeType = gttHistory then begin
75- Node := TreeView.Items.Add( nil, favItem.Title );
76- Node.MoveTo( TreeView.Items.GetFirstNode, naInsert );
77- {
78- if favItem.NewArrival then begin
79- Node.ImageIndex := ITEM_ICON_THREADNEW1;
80- Node.SelectedIndex := ITEM_ICON_THREADNEW2;
81- end else begin
82- Node.ImageIndex := ITEM_ICON_THREADLOG1;
83- Node.SelectedIndex := ITEM_ICON_THREADLOG2;
84- end;
85- }
86- // 負荷をかけたくないので NewArrival のチェックを行わない
87- // ※favItem.Item プロパティは dat の読み込みを必要とする
88- Node.ImageIndex := ITEM_ICON_THREADLOG1;
89- Node.SelectedIndex := ITEM_ICON_THREADLOG2;
90- Node.Data := favItem;
91- //while GikoSys.Setting.AddressHistoryCount < TreeView.Items.Count do begin
92- while GikoSys.Setting.MaxRecordCount < TreeView.Items.Count do begin
93- i := TreeView.Items.Count - 1;
94- TreeView.Items.Item[ i ].Delete;
95- end;
96- end;
97-end;
98-
99-procedure THistoryList.DeleteHistory( threadItem: TThreadItem;
100- TreeView : TTreeView; TreeType: TGikoTreeType );
101-var
102- i: Integer;
103- node: TTreeNode;
104-begin
105- // キャビネットに履歴が表示されていたら、
106- // キャビネット内のアイテムも削除する。
107- if (TreeType = gttHistory) then begin
108- node := TreeView.Items.GetFirstNode;
109- while (node <> nil) do begin
110- if ( TFavoriteThreadItem(node.Data).Item = threadItem ) then begin
111- TreeView.Items.Delete(node);
112- TreeView.Refresh;
113- node := nil;
114- end else begin
115- node := node.GetNext;
116- end;
117- end;
118- end;
119- for i := 0 to Self.Count - 1 do begin
120- if threadItem = TFavoriteThreadItem( Self.Items[i] ).Item then begin
121- TFavoriteThreadItem( Self.Items[ i ] ).Free;
122- Self.Delete(i);
123- Self.Capacity := Self.Count;
124- Break;
125- end;
126- end;
127-end;
128-
129-procedure THistoryList.Clear;
130-var
131- i : Integer;
132-begin
133- try
134- for i := Self.Count - 1 downto 0 do begin
135- if TObject(Self[ i ]) is TFavoriteThreadItem then
136- TFavoriteThreadItem(Self[ i ]).Free
137- else if TObject(Self[ i ]) is TFavoriteBoardItem then
138- TFavoriteBoardItem(Self[ i ]).Free;
139- end;
140- except
141- end;
142-
143- inherited Clear;
144- Self.Capacity := Self.Count;
145-
146-end;
147-
148-procedure THistoryList.SaveToFile(const FileName: String);
149-var
150- i, bound : Integer;
151- saveList : TstringList;
152-begin
153-
154- saveList := TStringList.Create;
155- try
156- Self.Pack;
157- Self.Capacity := Self.Count;
158- saveList.Add('<?xml version="1.0" encoding="Shift_JIS" standalone="yes"?>');
159- saveList.Add('<address>');
160- bound := Self.Count - 1;
161- for i := bound downto 0 do begin
162- // title は今のところ使っていない
163- saveList.Add(
164- '<history url="' + HtmlEncode( TFavoriteThreadItem( Self[ i ] ).URL ) + '"' +
165- ' title="' + HtmlEncode( MojuUtils.Sanitize(TFavoriteThreadItem( Self[ i ] ).Title )) + '"/>');
166- end;
167- saveList.Add('</address>');
168- saveList.SaveToFile( FileName );
169- finally
170- saveList.Free;
171- end;
172-
173-end;
174-
175-procedure THistoryList.LoadFromFile(const FileName: String;
176- TreeView : TTreeView; TreeType: TGikoTreeType);
177-var
178- i, bound : Integer;
179- XMLDoc : IXMLDocument;
180- XMLNode : IXMLNode;
181- HistoryNode : IXMLNode;
182- s : string;
183- favItem : TFavoriteThreadItem;
184-{$IFDEF DEBUG}
185- st, rt : Cardinal;
186-{$ENDIF}
187-begin
188-{$IFDEF DEBUG}
189- st := GetTickCount;
190-{$ENDIF}
191- if FileExists( FileName ) then begin
192- try
193- XMLDoc := IXMLDocument.Create;
194- //XMLDoc := LoadXMLDocument(FileName);
195- LoadXMLDocument(FileName, XMLDoc);
196- try
197- XMLNode := XMLDoc.DocumentElement;
198-
199- if XMLNode.NodeName = 'address' then begin
200- bound := XMLNode.ChildNodes.Count - 1;
201- for i := 0 to bound do begin
202- HistoryNode := XMLNode.ChildNodes[i];
203- if HistoryNode.NodeName = 'history' then begin
204- //if FReadCount >= sl.Count then begin
205- s := Trim(HistoryNode.Attributes['url']);
206- if s <> '' then begin
207- favItem := TFavoriteThreadItem.Create(
208- s, MojuUtils.UnSanitize(HistoryNode.Attributes[ 'title' ]) );
209- if not AddHistory( favItem, TreeView, TreeType ) then
210- favItem.Free;
211- end;
212- //end;
213- end;
214- end;
215- end;
216- finally
217- XMLDoc.Free;
218- end;
219- except
220- end;
221- end;
222-{$IFDEF DEBUG}
223- rt := GetTickCount - st;
224- Writeln('Runtime(Load Histroy) : ' + IntToStr(rt) + ' ms');
225-{$ENDIF}
226-
227-end;
228-procedure THistoryList.SetTreeNode(
229- TreeView : TTreeView );
230-var
231- i: Integer;
232- Node: TTreeNode;
233- Item: TFavoriteThreadItem;
234-begin
235- TreeView.Items.BeginUpdate;
236- try
237- TreeView.Items.Clear;
238- for i := 0 to Self.Count - 1 do begin
239- Item := TFavoriteThreadItem(Self[i]);
240- Node := TreeView.Items.Add(nil, Item.Title);
241- {
242- if Item.Item.NewArrival then begin
243- Node.ImageIndex := ITEM_ICON_THREADNEW1;
244- Node.SelectedIndex := ITEM_ICON_THREADNEW2;
245- end else begin
246- Node.ImageIndex := ITEM_ICON_THREADLOG1;
247- Node.SelectedIndex := ITEM_ICON_THREADLOG2;
248- end;
249- }
250- // 負荷をかけたくないので NewArrival のチェックを行わない
251- // ※Item.Item プロパティは dat の読み込みを必要とする
252- Node.ImageIndex := ITEM_ICON_THREADLOG1;
253- Node.SelectedIndex := ITEM_ICON_THREADLOG2;
254- Node.Data := Item;
255- end;
256- finally
257- TreeView.Items.EndUpdate;
258- end;
259-end;
260-
261-end.
--- a/InputAssist.dfm
+++ b/InputAssist.dfm
@@ -1,7 +1,7 @@
11 object InputAssistForm: TInputAssistForm
2- Left = 353
3- Top = 196
4- Width = 390
2+ Left = 589
3+ Top = 279
4+ Width = 397
55 Height = 460
66 Caption = #20837#21147#12450#12471#12473#12488#35373#23450
77 Color = clBtnFace
@@ -18,14 +18,14 @@ object InputAssistForm: TInputAssistForm
1818 object Panel1: TPanel
1919 Left = 0
2020 Top = 0
21- Width = 382
21+ Width = 389
2222 Height = 200
2323 Align = alTop
2424 BevelOuter = bvLowered
2525 Caption = 'Panel1'
2626 TabOrder = 0
2727 object Panel5: TPanel
28- Left = 288
28+ Left = 295
2929 Top = 33
3030 Width = 93
3131 Height = 166
@@ -71,15 +71,16 @@ object InputAssistForm: TInputAssistForm
7171 object Panel6: TPanel
7272 Left = 1
7373 Top = 33
74- Width = 287
74+ Width = 294
7575 Height = 166
7676 Align = alClient
7777 BevelOuter = bvNone
78+ Caption = 'Panel6'
7879 TabOrder = 1
7980 object GikoListView1: TGikoListView
8081 Left = 0
8182 Top = 0
82- Width = 287
83+ Width = 294
8384 Height = 166
8485 Align = alClient
8586 Columns = <>
@@ -96,9 +97,10 @@ object InputAssistForm: TInputAssistForm
9697 object Panel7: TPanel
9798 Left = 1
9899 Top = 1
99- Width = 380
100+ Width = 387
100101 Height = 32
101102 Align = alTop
103+ Caption = 'Panel7'
102104 TabOrder = 2
103105 object CategoryComboLabel: TLabel
104106 Left = 12
@@ -132,7 +134,7 @@ object InputAssistForm: TInputAssistForm
132134 object Panel2: TPanel
133135 Left = 0
134136 Top = 200
135- Width = 382
137+ Width = 389
136138 Height = 233
137139 Align = alClient
138140 BevelOuter = bvNone
@@ -141,76 +143,42 @@ object InputAssistForm: TInputAssistForm
141143 object Panel3: TPanel
142144 Left = 0
143145 Top = 0
144- Width = 382
146+ Width = 389
145147 Height = 48
146148 Align = alTop
147149 BevelOuter = bvNone
148150 TabOrder = 0
149- object Splitter: TSplitter
150- Left = 185
151- Top = 0
152- Width = 8
153- Height = 48
154- Cursor = crHSplit
155- Beveled = True
156- end
157- object KeyPanel: TPanel
158- Left = 0
159- Top = 0
160- Width = 185
161- Height = 48
162- Align = alLeft
163- BevelOuter = bvNone
151+ object KeyNameEdit: TLabeledEdit
152+ Left = 8
153+ Top = 21
154+ Width = 161
155+ Height = 20
156+ Hint = #20837#21147#12395#20351#12358#12461#12540#21517
157+ EditLabel.Width = 36
158+ EditLabel.Height = 12
159+ EditLabel.Caption = #12461#12540#21517
160+ LabelPosition = lpAbove
161+ LabelSpacing = 3
164162 TabOrder = 0
165- DesignSize = (
166- 185
167- 48)
168- object KeyNameEdit: TLabeledEdit
169- Left = 8
170- Top = 21
171- Width = 169
172- Height = 20
173- Hint = #20837#21147#12395#20351#12358#12461#12540#21517
174- Anchors = [akLeft, akTop, akRight]
175- EditLabel.Width = 36
176- EditLabel.Height = 12
177- EditLabel.Caption = #12461#12540#21517
178- LabelPosition = lpAbove
179- LabelSpacing = 3
180- TabOrder = 0
181- end
182163 end
183- object CategoryPanel: TPanel
184- Left = 193
185- Top = 0
186- Width = 189
187- Height = 48
188- Align = alClient
189- BevelOuter = bvNone
164+ object CategoryNameEdit: TLabeledEdit
165+ Left = 176
166+ Top = 21
167+ Width = 121
168+ Height = 20
169+ Hint = #20837#21147#12395#20351#12358#12459#12486#12468#12522#21517
170+ EditLabel.Width = 53
171+ EditLabel.Height = 12
172+ EditLabel.Caption = #12459#12486#12468#12522#21517
173+ LabelPosition = lpAbove
174+ LabelSpacing = 3
190175 TabOrder = 1
191- DesignSize = (
192- 189
193- 48)
194- object CategoryNameEdit: TLabeledEdit
195- Left = 8
196- Top = 21
197- Width = 169
198- Height = 20
199- Hint = #20837#21147#12395#20351#12358#12459#12486#12468#12522#21517
200- Anchors = [akLeft, akTop, akRight]
201- EditLabel.Width = 53
202- EditLabel.Height = 12
203- EditLabel.Caption = #12459#12486#12468#12522#21517
204- LabelPosition = lpAbove
205- LabelSpacing = 3
206- TabOrder = 0
207- end
208176 end
209177 end
210178 object Panel4: TPanel
211179 Left = 0
212180 Top = 48
213- Width = 382
181+ Width = 389
214182 Height = 185
215183 Align = alClient
216184 BevelOuter = bvNone
@@ -218,7 +186,7 @@ object InputAssistForm: TInputAssistForm
218186 object GroupBox1: TGroupBox
219187 Left = 0
220188 Top = 0
221- Width = 382
189+ Width = 389
222190 Height = 185
223191 Align = alClient
224192 Caption = #25407#20837#25991#23383#21015
@@ -226,7 +194,7 @@ object InputAssistForm: TInputAssistForm
226194 object TextMemo: TMemo
227195 Left = 2
228196 Top = 14
229- Width = 378
197+ Width = 385
230198 Height = 169
231199 Hint = #25407#20837#12377#12427#25991#23383#21015
232200 Align = alClient
@@ -241,7 +209,92 @@ object InputAssistForm: TInputAssistForm
241209 Top = 192
242210 Bitmap = {
243211 494C010102000400040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
244- 0000000000003600000028000000400000001000000001001000000000000008
212+ 0000000000003600000028000000400000001000000001002000000000000010
213+ 0000000000000000000000000000000000000000000000000000000000000000
214+ 0000000000000000000000000000000000000000000000000000000000000000
215+ 0000000000000000000000000000000000000000000000000000000000000000
216+ 0000000000000000000000000000000000000000000000000000000000000000
217+ 0000000000000000000000000000000000000000000000000000000000000000
218+ 0000000000000000000000000000000000000000000000000000000000000000
219+ 0000000000000000000000000000000000000000000000000000000000000000
220+ 0000000000000000000000000000000000000000000000000000000000000000
221+ 0000000000000000000000000000000000000000000000000000000000000000
222+ 0000000000000000000000000000000000000000000000000000000000000000
223+ 0000000000000000000000000000000000000000000000000000000000000000
224+ 0000000000000000000000000000000000000000000000000000000000000000
225+ 0000000000000000000000000000000000000000000000000000000000000000
226+ 0000000000000000000000000000000000000000000000000000000000000000
227+ 0000000000000000000000000000000000000000000000000000000000000000
228+ 0000000000000000000000000000000000000000000000000000000000000000
229+ 0000000000000000000000000000000000000000000000000000000000000000
230+ 0000000000000000000000000000000000000000000000000000000000000000
231+ 0000000000000000000000000000000000000000000000000000000000000000
232+ 0000000000000000000000000000000000000000000000000000000000000000
233+ 0000000000000000000000000000000000000000000000000000000000000000
234+ 0000000000000000000000000000000000000000000000000000000000000000
235+ 0000000000000000000000000000000000000000000000000000000000000000
236+ 0000000000000000000000000000000000000000000000000000000000000000
237+ 0000000000000000000000000000000000000000000000000000000000000000
238+ 0000000000000000000000000000000000000000000000000000000000000000
239+ 0000000000000000000000000000000000000000000000000000000000000000
240+ 0000000000000000000000000000000000000000000000000000000000000000
241+ 0000000000000000000000000000000000000000000000000000000000000000
242+ 0000000000000000000000000000000000000000000000000000000000000000
243+ 0000000000000000000000000000000000000000000000000000000000000000
244+ 0000000000000000000000000000000000000000000000000000000000000000
245+ 000000000000000000000000000000000000000000000000000000000000FFFF
246+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
247+ 0000000000000000000000000000000000000000000000000000000000000000
248+ 0000000000000000000080808000FFFFFF000000000000000000000000000000
249+ 0000000000000000000000000000000000000000000000000000000000000000
250+ 0000000000000000000000000000000000000000000000000000000000000000
251+ 0000000000000000000000000000000000000000000000000000000000000000
252+ 0000000000000000000000000000000000000000000000000000000000000000
253+ 0000000000000000000000000000000000000000000000000000000000008080
254+ 80008080800000000000000000000000000000000000FFFFFF00FFFFFF000000
255+ 0000000000000000000000000000000000000000000000000000000000000000
256+ 0000000000008080800080808000FFFFFF00FFFFFF0000000000000000000000
257+ 0000000000000000000000000000000000000000000000000000000000000000
258+ 0000000000000000000000000000000000000000000000000000000000000000
259+ 0000000000000000000000000000000000000000000000000000000000000000
260+ 0000000000000000000000000000000000000000000000000000000000000000
261+ 0000000000000000000000000000000000000000000000000000000000000000
262+ 00008080800000000000000000000000000000000000FFFFFF00000000000000
263+ 0000000000000000000000000000000000000000000000000000000000000000
264+ 000000000000808080000000000000000000FFFFFF0000000000000000000000
265+ 0000000000000000000000000000000000000000000000000000000000000000
266+ 0000000000000000000000000000000000000000000000000000000000000000
267+ 0000000000000000000000000000000000000000000000000000000000000000
268+ 0000000000000000000000000000000000000000000000000000000000000000
269+ 0000000000000000000000000000000000000000000000000000000000000000
270+ 000080808000808080000000000000000000FFFFFF00FFFFFF00000000000000
271+ 0000000000000000000000000000000000000000000000000000000000000000
272+ 000080808000808080000000000000000000FFFFFF00FFFFFF00000000000000
273+ 0000000000000000000000000000000000000000000000000000000000000000
274+ 0000000000000000000000000000000000000000000000000000000000000000
275+ 0000000000000000000000000000000000000000000000000000000000000000
276+ 0000000000000000000000000000000000000000000000000000000000000000
277+ 0000000000000000000000000000000000000000000000000000000000000000
278+ 000000000000808080000000000000000000FFFFFF0000000000000000000000
279+ 0000000000000000000000000000000000000000000000000000000000000000
280+ 00008080800000000000000000000000000000000000FFFFFF00000000000000
281+ 0000000000000000000000000000000000000000000000000000000000000000
282+ 0000000000000000000000000000000000000000000000000000000000000000
283+ 0000000000000000000000000000000000000000000000000000000000000000
284+ 0000000000000000000000000000000000000000000000000000000000000000
285+ 0000000000000000000000000000000000000000000000000000000000000000
286+ 0000000000008080800080808000FFFFFF00FFFFFF0000000000000000000000
287+ 0000000000000000000000000000000000000000000000000000000000008080
288+ 80008080800000000000000000000000000000000000FFFFFF00FFFFFF000000
289+ 0000000000000000000000000000000000000000000000000000000000000000
290+ 0000000000000000000000000000000000000000000000000000000000000000
291+ 0000000000000000000000000000000000000000000000000000000000000000
292+ 0000000000000000000000000000000000000000000000000000000000000000
293+ 0000000000000000000000000000000000000000000000000000000000000000
294+ 0000000000000000000080808000FFFFFF000000000000000000000000000000
295+ 0000000000000000000000000000000000000000000000000000000000008080
296+ 8000808080008080800080808000808080008080800080808000808080000000
297+ 0000000000000000000000000000000000000000000000000000000000000000
245298 0000000000000000000000000000000000000000000000000000000000000000
246299 0000000000000000000000000000000000000000000000000000000000000000
247300 0000000000000000000000000000000000000000000000000000000000000000
@@ -258,33 +311,12 @@ object InputAssistForm: TInputAssistForm
258311 0000000000000000000000000000000000000000000000000000000000000000
259312 0000000000000000000000000000000000000000000000000000000000000000
260313 0000000000000000000000000000000000000000000000000000000000000000
261- 000000000000000000000000000000000000000000000000FF7FFF7FFF7FFF7F
262- FF7FFF7FFF7FFF7F000000000000000000000000000000000000000000001042
263- FF7F000000000000000000000000000000000000000000000000000000000000
264314 0000000000000000000000000000000000000000000000000000000000000000
265- 0000000000000000000000000000000000000000000000001042104200000000
266- 00000000FF7FFF7F000000000000000000000000000000000000000010421042
267- FF7FFF7F00000000000000000000000000000000000000000000000000000000
268315 0000000000000000000000000000000000000000000000000000000000000000
269- 0000000000000000000000000000000000000000000000000000104200000000
270- 00000000FF7F0000000000000000000000000000000000000000000010420000
271- 0000FF7F00000000000000000000000000000000000000000000000000000000
272316 0000000000000000000000000000000000000000000000000000000000000000
273- 0000000000000000000000000000000000000000000000000000104210420000
274- 0000FF7FFF7F0000000000000000000000000000000000000000104210420000
275- 0000FF7FFF7F0000000000000000000000000000000000000000000000000000
276317 0000000000000000000000000000000000000000000000000000000000000000
277- 0000000000000000000000000000000000000000000000000000000010420000
278- 0000FF7F00000000000000000000000000000000000000000000104200000000
279- 00000000FF7F0000000000000000000000000000000000000000000000000000
280318 0000000000000000000000000000000000000000000000000000000000000000
281- 0000000000000000000000000000000000000000000000000000000010421042
282- FF7FFF7F00000000000000000000000000000000000000001042104200000000
283- 00000000FF7FFF7F000000000000000000000000000000000000000000000000
284319 0000000000000000000000000000000000000000000000000000000000000000
285- 0000000000000000000000000000000000000000000000000000000000001042
286- FF7F000000000000000000000000000000000000000000001042104210421042
287- 1042104210421042000000000000000000000000000000000000000000000000
288320 0000000000000000000000000000000000000000000000000000000000000000
289321 0000000000000000000000000000000000000000000000000000000000000000
290322 0000000000000000000000000000000000000000000000000000000000000000
--- a/InputAssist.pas
+++ b/InputAssist.pas
@@ -13,6 +13,8 @@ type
1313 Panel2: TPanel;
1414 GikoListView1: TGikoListView;
1515 Panel3: TPanel;
16+ KeyNameEdit: TLabeledEdit;
17+ CategoryNameEdit: TLabeledEdit;
1618 Panel4: TPanel;
1719 TextMemo: TMemo;
1820 ColumnImageList: TImageList;
@@ -36,11 +38,6 @@ type
3638 InsertButton: TButton;
3739 InsertButtonAction: TAction;
3840 CloseAction: TAction;
39- KeyPanel: TPanel;
40- KeyNameEdit: TLabeledEdit;
41- Splitter: TSplitter;
42- CategoryPanel: TPanel;
43- CategoryNameEdit: TLabeledEdit;
4441 procedure FormCreate(Sender: TObject);
4542 procedure GikoListView1SelectItem(Sender: TObject; Item: TListItem;
4643 Selected: Boolean);
--- a/KeySetting.pas
+++ b/KeySetting.pas
@@ -358,7 +358,6 @@ end;
358358 procedure TKeySettingForm.OnGestureEnd(Sender: TObject);
359359 begin
360360 GestureEdit.Text := MouseGesture.GetGestureStr;
361- MouseGesture.Clear;
362361 end;
363362
364363 procedure TKeySettingForm.GestureCheckBoxClick(Sender: TObject);
--- a/KuroutSetting.dfm
+++ b/KuroutSetting.dfm
@@ -1,6 +1,6 @@
11 object KuroutOption: TKuroutOption
2- Left = 319
3- Top = 169
2+ Left = 285
3+ Top = 132
44 Width = 525
55 Height = 457
66 Caption = #35443#32048#35373#23450
@@ -21,8 +21,8 @@ object KuroutOption: TKuroutOption
2121 Top = 0
2222 Width = 517
2323 Height = 393
24- ActivePage = KakikomiTabSheet
25- TabIndex = 2
24+ ActivePage = TabSheet1
25+ TabIndex = 0
2626 TabOrder = 0
2727 object TabSheet1: TTabSheet
2828 Caption = #35443#32048#35373#23450#65297
@@ -422,40 +422,6 @@ object KuroutOption: TKuroutOption
422422 Width = 105
423423 Height = 20
424424 TabOrder = 0
425- OnExit = MoveHistoryMaxEditExit
426- end
427- end
428- object AHandredGroupBox: TGroupBox
429- Left = 16
430- Top = 192
431- Width = 465
432- Height = 65
433- Caption = '100'#12524#12473#34920#31034#35373#23450
434- TabOrder = 2
435- object AHandredLabeledEdit: TLabeledEdit
436- Left = 96
437- Top = 24
438- Width = 73
439- Height = 20
440- EditLabel.Width = 81
441- EditLabel.Height = 12
442- EditLabel.Caption = #20808#38957#34920#31034#12524#12473#25968
443- LabelPosition = lpLeft
444- LabelSpacing = 3
445- TabOrder = 0
446- Text = '1'
447- OnExit = AHandredLabeledEditExit
448- end
449- object UpDown1: TUpDown
450- Left = 169
451- Top = 24
452- Width = 15
453- Height = 20
454- Associate = AHandredLabeledEdit
455- Min = 1
456- Position = 1
457- TabOrder = 1
458- Wrap = False
459425 end
460426 end
461427 end
--- a/KuroutSetting.pas
+++ b/KuroutSetting.pas
@@ -4,7 +4,7 @@ interface
44
55 uses
66 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7- Dialogs, StdCtrls, ComCtrls, GikoSystem, GikoUtil, ExtCtrls;
7+ Dialogs, StdCtrls, ComCtrls, GikoSystem, GikoUtil;
88
99 type
1010 TKuroutOption = class(TForm)
@@ -65,9 +65,6 @@ type
6565 Label10: TLabel;
6666 MoveHistoryMaxEdit: TEdit;
6767 Label11: TLabel;
68- AHandredGroupBox: TGroupBox;
69- AHandredLabeledEdit: TLabeledEdit;
70- UpDown1: TUpDown;
7168 procedure OkBottonClick(Sender: TObject);
7269 procedure FormCreate(Sender: TObject);
7370 procedure CDeleteButtonClick(Sender: TObject);
@@ -78,8 +75,6 @@ type
7875 procedure CDownButtonClick(Sender: TObject);
7976 procedure BUpButtonClick(Sender: TObject);
8077 procedure BDownButtonClick(Sender: TObject);
81- procedure MoveHistoryMaxEditExit(Sender: TObject);
82- procedure AHandredLabeledEditExit(Sender: TObject);
8378 private
8479 { Private 宣言 }
8580 procedure SetValue;
@@ -134,8 +129,6 @@ begin
134129 FixedCookieEdit.Text := GikoSys.Setting.FixedCookie;
135130 // リンク移動履歴
136131 MoveHistoryMaxEdit.Text := IntToStr( GikoSys.Setting.MoveHistorySize );
137- // 先頭表示レス数
138- AHandredLabeledEdit.Text := IntToStr( GikoSys.Setting.HeadResCount );
139132 end;
140133
141134 procedure TKuroutOption.SaveSetting;
@@ -167,10 +160,6 @@ begin
167160 GikoSys.Setting.MoveHistorySize :=
168161 StrToIntDef( MoveHistoryMaxEdit.Text, 20 );
169162
170- // 先頭表示レス数
171- GikoSys.Setting.HeadResCount :=
172- StrToIntDef( AHandredLabeledEdit.Text , 1);
173-
174163 GikoSys.Setting.KuroutSettingTabIndex := PageControl1.ActivePageIndex;
175164 end;
176165
@@ -200,9 +189,7 @@ procedure TKuroutOption.OkBottonClick(Sender: TObject);
200189 begin
201190 RecvBufferSizeExit(Sender);
202191 PostTimeEditExit(Sender);
203- MoveHistoryMaxEditExit(Sender);
204- AHandredLabeledEditExit(Sender);
205- PostColumnData();
192+ PostColumnData();
206193 SaveSetting;
207194 end;
208195
@@ -398,22 +385,5 @@ begin
398385 //スレ一覧の描画の更新
399386 GikoForm.SetActiveList(GikoForm.ActiveList);
400387 end;
401-// リンク移動履歴の編集後の設定文字列チェック
402-procedure TKuroutOption.MoveHistoryMaxEditExit(Sender: TObject);
403-begin
404- if not GikoSys.IsNumeric(MoveHistoryMaxEdit.Text) then
405- MoveHistoryMaxEdit.Text := '20';
406- if StrToInt(MoveHistoryMaxEdit.Text) < 1 then
407- MoveHistoryMaxEdit.Text := '1';
408-end;
409-// 先頭表示レス数の編集後の設定文字列チェック
410-procedure TKuroutOption.AHandredLabeledEditExit(Sender: TObject);
411-begin
412- if not GikoSys.IsNumeric(AHandredLabeledEdit.Text) then
413- AHandredLabeledEdit.Text := '1';
414- if StrToInt(AHandredLabeledEdit.Text) < 1 then
415- AHandredLabeledEdit.Text := '1';
416-
417-end;
418388
419389 end.
--- a/NewBoard.dfm
+++ b/NewBoard.dfm
@@ -1,6 +1,6 @@
11 object NewBoardDialog: TNewBoardDialog
2- Left = 337
3- Top = 197
2+ Left = 276
3+ Top = 325
44 BorderStyle = bsDialog
55 Caption = #26495#19968#35239#26356#26032
66 ClientHeight = 329
--- a/NewBoard.pas
+++ b/NewBoard.pas
@@ -44,7 +44,6 @@ type
4444 procedure UpdateIgnoreList(Sender: TObject);
4545 public
4646 { Public 宣言 }
47- class procedure InitHTTPClient(client : TIdHTTP);
4847 end;
4948
5049 var
@@ -120,8 +119,32 @@ var
120119 s: string;
121120 i: Integer;
122121 begin
123- InitHTTPClient( Indy );
124-
122+ Indy.Request.Clear;
123+ Indy.RecvBufferSize := Gikosys.Setting.RecvBufferSize;
124+ Indy.ProxyParams.BasicAuthentication := False;
125+ if GikoSys.Setting.ReadProxy then begin
126+ if GikoSys.Setting.ProxyProtocol then
127+ Indy.ProtocolVersion := pv1_1
128+ else
129+ Indy.ProtocolVersion := pv1_0;
130+ Indy.ProxyParams.ProxyServer := GikoSys.Setting.ReadProxyAddress;
131+ Indy.ProxyParams.ProxyPort := GikoSys.Setting.ReadProxyPort;
132+ Indy.ProxyParams.ProxyUsername := GikoSys.Setting.ReadProxyUserID;
133+ Indy.ProxyParams.ProxyPassword := GikoSys.Setting.ReadProxyPassword;
134+ if GikoSys.Setting.ReadProxyUserID <> '' then
135+ Indy.ProxyParams.BasicAuthentication := True;
136+ end else begin
137+ if GikoSys.Setting.Protocol then
138+ Indy.ProtocolVersion := pv1_1
139+ else
140+ Indy.ProtocolVersion := pv1_0;
141+ Indy.ProxyParams.ProxyServer := '';
142+ Indy.ProxyParams.ProxyPort := 80;
143+ Indy.ProxyParams.ProxyUsername := '';
144+ Indy.ProxyParams.ProxyPassword := '';
145+ end;
146+ //URL := GikoSys.Setting.BoardURL2ch;
147+ //URL := BoardURLComboBox.Text;
125148 Indy.Request.UserAgent := GikoSys.GetUserAgent;
126149 Indy.Request.Referer := '';
127150 Indy.Request.AcceptEncoding := 'gzip';
@@ -410,33 +433,4 @@ begin
410433 end;
411434 end;
412435 end;
413-
414-class procedure TNewBoardDialog.InitHTTPClient(client : TIdHTTP);
415-begin
416- client.Request.Clear;
417- client.Request.CustomHeaders.Clear;
418- client.RecvBufferSize := Gikosys.Setting.RecvBufferSize;
419- client.ProxyParams.BasicAuthentication := False;
420- if GikoSys.Setting.ReadProxy then begin
421- if GikoSys.Setting.ProxyProtocol then
422- client.ProtocolVersion := pv1_1
423- else
424- client.ProtocolVersion := pv1_0;
425- client.ProxyParams.ProxyServer := GikoSys.Setting.ReadProxyAddress;
426- client.ProxyParams.ProxyPort := GikoSys.Setting.ReadProxyPort;
427- client.ProxyParams.ProxyUsername := GikoSys.Setting.ReadProxyUserID;
428- client.ProxyParams.ProxyPassword := GikoSys.Setting.ReadProxyPassword;
429- if GikoSys.Setting.ReadProxyUserID <> '' then
430- client.ProxyParams.BasicAuthentication := True;
431- end else begin
432- if GikoSys.Setting.Protocol then
433- client.ProtocolVersion := pv1_1
434- else
435- client.ProtocolVersion := pv1_0;
436- client.ProxyParams.ProxyServer := '';
437- client.ProxyParams.ProxyPort := 80;
438- client.ProxyParams.ProxyUsername := '';
439- client.ProxyParams.ProxyPassword := '';
440- end;
441-end;
442436 end.
--- a/NewBoardURL.dfm
+++ /dev/null
@@ -1,84 +0,0 @@
1-object NewBoardURLForm: TNewBoardURLForm
2- Left = 380
3- Top = 187
4- Width = 495
5- Height = 313
6- Caption = #26495#31227#36578#20808#26908#32034
7- Color = clBtnFace
8- Font.Charset = SHIFTJIS_CHARSET
9- Font.Color = clWindowText
10- Font.Height = -12
11- Font.Name = #65325#65331' '#65328#12468#12471#12483#12463
12- Font.Style = []
13- FormStyle = fsStayOnTop
14- OldCreateOrder = False
15- OnCreate = FormCreate
16- PixelsPerInch = 96
17- TextHeight = 12
18- object CategoryLabel: TLabel
19- Left = 24
20- Top = 16
21- Width = 53
22- Height = 12
23- Caption = #12459#12486#12468#12522#21517
24- end
25- object CategoryComboBox: TComboBox
26- Left = 88
27- Top = 13
28- Width = 145
29- Height = 20
30- ItemHeight = 12
31- TabOrder = 0
32- Text = 'CategoryComboBox'
33- end
34- object SearchButton: TButton
35- Left = 256
36- Top = 8
37- Width = 75
38- Height = 25
39- Caption = #26908#32034'(&s)'
40- TabOrder = 1
41- OnClick = SearchButtonClick
42- end
43- object ResultMemo: TMemo
44- Left = 24
45- Top = 48
46- Width = 457
47- Height = 225
48- Lines.Strings = (
49- 'ResultMemo')
50- ScrollBars = ssVertical
51- TabOrder = 2
52- end
53- object CloseButton: TButton
54- Left = 352
55- Top = 8
56- Width = 75
57- Height = 25
58- Caption = #38281#12376#12427
59- ModalResult = 1
60- TabOrder = 3
61- end
62- object IdHTTP: TIdHTTP
63- MaxLineAction = maException
64- AllowCookies = True
65- HandleRedirects = True
66- ProxyParams.BasicAuthentication = False
67- ProxyParams.ProxyPort = 0
68- Request.ContentLength = -1
69- Request.ContentRangeEnd = 0
70- Request.ContentRangeStart = 0
71- Request.Accept = 'text/html, */*'
72- Request.BasicAuthentication = False
73- Request.UserAgent = 'Mozilla/3.0 (compatible; Indy Library)'
74- HTTPOptions = [hoForceEncodeParams]
75- OnRedirect = IdHTTPRedirect
76- Left = 408
77- Top = 16
78- end
79- object IdAntiFreeze: TIdAntiFreeze
80- Active = False
81- Left = 448
82- Top = 16
83- end
84-end
--- a/NewBoardURL.pas
+++ /dev/null
@@ -1,226 +0,0 @@
1-unit NewBoardURL;
2-
3-interface
4-
5-uses
6- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7- Dialogs, IdAntiFreezeBase, IdAntiFreeze, IdBaseComponent, IdComponent,
8- IdTCPConnection, IdTCPClient, IdHTTP, StdCtrls,
9- BoardGroup;
10-
11-type
12- TNewBoardURLForm = class(TForm)
13- CategoryComboBox: TComboBox;
14- CategoryLabel: TLabel;
15- IdHTTP: TIdHTTP;
16- IdAntiFreeze: TIdAntiFreeze;
17- SearchButton: TButton;
18- ResultMemo: TMemo;
19- CloseButton: TButton;
20- procedure FormCreate(Sender: TObject);
21- procedure SearchButtonClick(Sender: TObject);
22- procedure IdHTTPRedirect(Sender: TObject; var dest: String;
23- var NumRedirect: Integer; var Handled: Boolean;
24- var VMethod: TIdHTTPMethod);
25- private
26- { Private 宣言 }
27- function GetRedirectURL(const html: string): string;
28- procedure GetBoardURLs(urls : TStringList);
29- procedure ReplaceURLs(oldurls, newurls: TStringList);
30- public
31- { Public 宣言 }
32- end;
33-
34-var
35- NewBoardURLForm: TNewBoardURLForm;
36-
37-implementation
38-
39-uses
40- GikoSystem, NewBoard, Giko, IniFiles, MojuUtils, GikoDataModule;
41-{$R *.dfm}
42-//! コンストラクタ
43-procedure TNewBoardURLForm.FormCreate(Sender: TObject);
44-var
45- i : Integer;
46- ini : TMemIniFile;
47- sec : TStringList;
48-begin
49- sec := TStringList.Create;
50- ini := TMemIniFile.Create(GikoSys.GetBoardFileName);
51- ini.ReadSections(sec);
52-
53- CategoryComboBox.Clear;
54- CategoryComboBox.Items.BeginUpdate;
55- for i := 0 to sec.Count - 1 do begin
56- CategoryComboBox.Items.Add(sec[i]);
57- end;
58- CategoryComboBox.Items.EndUpdate;
59- CategoryComboBox.ItemIndex := 0;
60-
61- ResultMemo.Lines.Clear;
62-end;
63-
64-procedure TNewBoardURLForm.SearchButtonClick(Sender: TObject);
65-var
66- i : Integer;
67- value : string;
68- ResStream: TMemoryStream;
69- URLs : TStringList;
70- oldURLs : TStringList;
71- newURLs : TStringList;
72- oldURL, newURL : string;
73- TabURLs : TStringList;
74-begin
75- ResultMemo.Lines.Clear;
76- URLs := TStringList.Create;
77- Screen.Cursor := crHourGlass;
78- SearchButton.Enabled := False;
79- try
80- GetBoardURLs( URLs );
81- if URLs.Count > 0 then begin
82- ResStream := TMemoryStream.Create;
83- oldURLs := TStringList.Create;
84- newURLs := TStringList.Create;
85-
86- try
87- TNewBoardDialog.InitHTTPClient(IdHTTP);
88- IdHTTP.Request.Referer := '';
89- IdHTTP.Request.AcceptEncoding := 'gzip';
90-
91- IdHTTP.Request.CacheControl := 'no-cache';
92- IdHTTP.Request.CustomHeaders.Add('Pragma: no-cache');
93- IdHTTP.HandleRedirects := false;
94- for i := 0 to URLs.Count - 1 do begin
95- IdAntiFreeze.Active := true;
96- try
97- ResStream.Clear;
98- IdHTTP.Get(URLs[i], ResStream);
99- value := GikoSys.GzipDecompress(ResStream,
100- IdHTTP.Response.ContentEncoding);
101- newURL := GetRedirectURL(value);
102- if (newURL = '') then begin
103- newURL := IdHTTP.Response.Location;
104- end;
105- if (newURL <> '') then begin
106- oldURL := URLs[i];
107- ResultMemo.Lines.Add('URL:' + oldURL + ' -> ' + newURL);
108- if (newURL <> '') then begin
109- oldURLs.Add( oldURL );
110- newURLs.Add( newURL );
111- end;
112- end;
113- except
114- on E: Exception do begin
115- {$IFDEF DEBUG}
116- Writeln(IdHTTP.ResponseText);
117- {$ENDIF}
118- end;
119- end;
120- IdAntiFreeze.Active := false;
121- end;
122-
123- if (newURLs.Count > 0) and (oldURLs.Count > 0) then begin
124- ReplaceURLs(oldURLs, newURLs);
125- GikoForm.FavoritesURLReplace(oldURLs, newURLs);
126- GikoForm.RoundListURLReplace(oldURLs, newURLs);
127- GikoForm.TabFileURLReplace(oldURLs, newURLs);
128- ResultMemo.Lines.Add('板移転先検索が完了しました');
129-
130- TabURLs := TStringList.Create;
131- try
132- GikoDM.GetTabURLs(TabURLs);
133- GikoForm.ReloadBBS;
134- GikoDM.OpenURLs(TabURLs);
135- finally
136- TabURLs.Free;
137- end;
138-
139- end else begin
140- ResultMemo.Lines.Add('移転している板は ありませんでした');
141- end;
142- finally
143- ResStream.Clear;
144- ResStream.Free;
145- newURLs.Free;
146- oldURLs.Free;
147- end;
148- end;
149- finally
150- URLs.Free;
151- SearchButton.Enabled := True;
152- Screen.Cursor := crDefault;
153- end;
154-end;
155-function TNewBoardURLForm.GetRedirectURL(const html: string): string;
156-const
157- HEADS = '<head>';
158- HEADE = '</head>';
159- SCRIPT = 'window.location.href="';
160-begin
161- Result := Copy(html, 1,
162- AnsiPos(HEADE, AnsiLowerCase(html)));
163- Result := Copy(Result,
164- AnsiPos(HEADS, AnsiLowerCase(Result)),
165- Length(Result));
166- if AnsiPos(SCRIPT, Result) > 0 then begin
167- Result := Copy(Result, AnsiPos(SCRIPT, Result) + Length(SCRIPT),
168- Length(Result));
169- Result := Copy(Result, 1, AnsiPos('"', Result) - 1);
170- end else begin
171- Result := '';
172- end;
173-
174-end;
175-procedure TNewBoardURLForm.GetBoardURLs(urls : TStringList);
176-var
177- ini : TMemIniFile;
178- sec : string;
179- keys : TStringList;
180- i : Integer;
181-begin
182- urls.Clear;
183- urls.BeginUpdate;
184- if CategoryComboBox.ItemIndex <> -1 then begin
185- sec := CategoryComboBox.Items[CategoryComboBox.itemIndex];
186- keys := TStringList.Create;
187- try
188- ini := TMemIniFile.Create(GikoSys.GetBoardFileName);
189- ini.ReadSection(sec, keys);
190- for i := 0 to keys.Count - 1 do begin
191- urls.Add(ini.ReadString(sec, keys[i], ''));
192- end;
193- finally
194- keys.Free;
195- end;
196- end;
197-end;
198-procedure TNewBoardURLForm.ReplaceURLs(oldurls, newurls: TStringList);
199-var
200- txt : TStringList;
201- i : Integer;
202-begin
203- if oldurls.Count > 0 then begin
204- txt := TStringList.Create;
205- txt.LoadFromFile( GikoSys.GetBoardFileName );
206- try
207- for i := 0 to oldurls.Count - 1 do begin
208- MojuUtils.CustomStringReplace(txt, oldurls[i], newurls[i]);
209- end;
210- txt.SaveToFile( GikoSys.GetBoardFileName );
211- finally
212- txt.Free;
213- end;
214- end;
215-end;
216-
217-procedure TNewBoardURLForm.IdHTTPRedirect(Sender: TObject;
218- var dest: String; var NumRedirect: Integer; var Handled: Boolean;
219- var VMethod: TIdHTTPMethod);
220-begin
221- {$IFDEF DEBUG}
222- ShowMessage(dest);
223- {$ENDIF}
224-end;
225-
226-end.
--- a/Option.dfm
+++ b/Option.dfm
@@ -253,7 +253,7 @@ object OptionDialog: TOptionDialog
253253 Top = 43
254254 Width = 417
255255 Height = 20
256- ItemHeight = 0
256+ ItemHeight = 12
257257 TabOrder = 0
258258 Text = 'BoardURLComboBox'
259259 end
@@ -1208,7 +1208,7 @@ object OptionDialog: TOptionDialog
12081208 end
12091209 object GroupBox19: TGroupBox
12101210 Left = 12
1211- Top = 66
1211+ Top = 74
12121212 Width = 473
12131213 Height = 49
12141214 Caption = #23653#27508
@@ -1239,8 +1239,8 @@ object OptionDialog: TOptionDialog
12391239 end
12401240 end
12411241 object GroupBox21: TGroupBox
1242- Left = 12
1243- Top = 125
1242+ Left = 11
1243+ Top = 133
12441244 Width = 473
12451245 Height = 52
12461246 Caption = #26368#23567#21270#26178#12479#12473#12463#12488#12524#12452
@@ -1256,7 +1256,7 @@ object OptionDialog: TOptionDialog
12561256 end
12571257 object GroupBox22: TGroupBox
12581258 Left = 12
1259- Top = 184
1259+ Top = 200
12601260 Width = 473
12611261 Height = 52
12621262 Caption = #12502#12521#12454#12470#12479#12502
@@ -1270,22 +1270,6 @@ object OptionDialog: TOptionDialog
12701270 TabOrder = 0
12711271 end
12721272 end
1273- object GroupBox23: TGroupBox
1274- Left = 12
1275- Top = 246
1276- Width = 473
1277- Height = 52
1278- Caption = #12510#12454#12473#12472#12455#12473#12481#12515#12540
1279- TabOrder = 4
1280- object IgnoreContextCheckBox: TCheckBox
1281- Left = 11
1282- Top = 24
1283- Width = 294
1284- Height = 17
1285- Caption = #12467#12531#12486#12461#12473#12488#19978#12391#12510#12454#12473#12472#12455#12473#12481#12515#12540#12434#28961#21177#12395#12377#12427
1286- TabOrder = 0
1287- end
1288- end
12891273 end
12901274 object SoundSheet: TTabSheet
12911275 Caption = #12469#12454#12531#12489
--- a/Option.pas
+++ b/Option.pas
@@ -209,8 +209,6 @@ type
209209 StoredTaskTrayCB: TCheckBox;
210210 GroupBox22: TGroupBox;
211211 LoopBrowserTabsCB: TCheckBox;
212- GroupBox23: TGroupBox;
213- IgnoreContextCheckBox: TCheckBox;
214212 procedure FormCreate(Sender: TObject);
215213 procedure FormDestroy(Sender: TObject);
216214 procedure ApplyButtonClick(Sender: TObject);
@@ -874,8 +872,6 @@ begin
874872 StoredTaskTrayCB.Checked := GikoSys.Setting.StoredTaskTray;
875873 // ブラウザタブの移動でループを許可するか
876874 LoopBrowserTabsCB.Checked := GikoSys.Setting.LoopBrowserTabs;
877- //
878- IgnoreContextCheckBox.Checked := GikoSys.Setting.GestureIgnoreContext;
879875 end;
880876
881877 procedure TOptionDialog.SaveSetting;
@@ -1166,7 +1162,6 @@ begin
11661162 GikoSys.Setting.StoredTaskTray := StoredTaskTrayCB.Checked;
11671163 GikoSys.Setting.LoopBrowserTabs := LoopBrowserTabsCB.Checked;
11681164
1169- GikoSys.Setting.GestureIgnoreContext := IgnoreContextCheckBox.Checked;
11701165 end;
11711166
11721167 procedure TOptionDialog.SettingApply;
--- a/Preview.pas
+++ b/Preview.pas
@@ -152,21 +152,21 @@ begin
152152 // 出し位置による補正
153153 case GikoSys.Setting.PopupPosition of
154154 gppRightTop: OffsetRect(Result,
155- Point.x - WindowWidth - 15, Point.y - WindowHeight - 15);
155+ Point.x - (Result.Right - Result.Left) - 15, Point.y - (Result.Bottom - Result.Top) - 15);
156156 gppRight: OffsetRect(Result,
157- Point.x - WindowWidth - 15, Point.y - (WindowHeight div 2));
157+ Point.x - (Result.Right - Result.Left) - 15, Point.y - ((Result.Bottom - Result.Top) div 2));
158158 gppRightBottom: OffsetRect(Result,
159- Point.x - WindowWidth - 15, Point.y + 15);
159+ Point.x - (Result.Right - Result.Left) - 15, Point.y + 15);
160160 gppTop: OffsetRect(Result,
161- Point.x - (WindowWidth div 2), Point.y - WindowHeight - 15);
161+ Point.x - ((Result.Right - Result.Left) div 2), Point.y - (Result.Bottom - Result.Top) - 15);
162162 gppCenter: OffsetRect(Result,
163- Point.x - (WindowWidth div 2), Point.y - (WindowHeight div 2));
163+ Point.x - ((Result.Right - Result.Left) div 2), Point.y - ((Result.Bottom - Result.Top) div 2));
164164 gppBottom: OffsetRect(Result,
165- Point.x - (WindowWidth div 2), Point.y + 15);
165+ Point.x - ((Result.Right - Result.Left) div 2), Point.y + 15);
166166 gppLeftTop: OffsetRect(Result,
167- Point.x + 15, Point.y - WindowHeight - 15);
167+ Point.x + 15, Point.y - (Result.Bottom - Result.Top) - 15);
168168 gppLeft: OffsetRect(Result,
169- Point.x + 15, Point.y - (WindowHeight div 2));
169+ Point.x + 15, Point.y - ((Result.Bottom - Result.Top) div 2));
170170 gppLeftBottom: OffsetRect(Result, Point.x + 15, Point.y + 15); //ギコナビスレ パート1の453氏に感謝
171171 end;
172172
--- a/Setting.pas
+++ b/Setting.pas
@@ -398,8 +398,7 @@ type
398398 FGestures : TGestureModel;
399399 //! マウスジェスチャーを使用するかどうか
400400 FGestureEnabled : Boolean;
401- //! マウスジェスチャーをコンテキスト等の上で無効
402- FGestureIgnoreContext : Boolean;
401+
403402 //フシアナトラップ設定
404403 FLocalTrapAtt : Boolean;
405404 FRemoteTrapAtt : Boolean;
@@ -439,8 +438,6 @@ type
439438 FStoredTaskTray : Boolean;
440439 //! タブの移動でループを許可する
441440 FLoopBrowserTabs : Boolean;
442- //! 100レス表示の先頭表示レス数
443- FHeadResCount : Integer;
444441 function GetMainCoolSet(Index: Integer): TCoolSet;
445442 function GetBoardCoolSet(Index: Integer): TCoolSet;
446443 function GetBrowserCoolSet(Index: Integer): TCoolSet;
@@ -756,7 +753,6 @@ type
756753 property Gestures : TGestureModel read FGestures write FGestures;
757754 //! マウスジェスチャーを使用するかどうか
758755 property GestureEnabled : Boolean read FGestureEnabled write FGestureEnabled;
759- property GestureIgnoreContext : Boolean read FGestureIgnoreContext write FGestureIgnoreContext;
760756 //フシアナトラップ設定
761757 property LocalTrapAtt : Boolean read FLocalTrapAtt write FLocalTrapAtt;
762758 property RemoteTrapAtt : Boolean read FRemoteTrapAtt write FRemoteTrapAtt;
@@ -788,8 +784,6 @@ type
788784 property StoredTaskTray : Boolean read FStoredTaskTray write FStoredTaskTray;
789785 //! ブラウザタブのループを許可する
790786 property LoopBrowserTabs : Boolean read FLoopBrowserTabs write FLoopBrowserTabs;
791- //! 100レス表示の先頭表示レス数
792- property HeadResCount : Integer read FHeadResCount write FHeadResCount;
793787 end;
794788
795789
@@ -1088,7 +1082,6 @@ begin
10881082 else
10891083 FResRange := ini.ReadInteger( 'Thread', 'ResRange', Ord( grrAll ) );
10901084 FResRangeHold := ini.ReadBool( 'Thread', 'ResRangeHold', False );
1091- FHeadResCount := ini.ReadInteger('Thread', 'HeadResCount', 1);
10921085 // スレッド一覧表示範囲
10931086 FThreadRange := TGikoThreadRange( ini.ReadInteger('ThreadList', 'ThreadRange', Ord( gtrAll )) );
10941087 //非アクティブ時レスポップアップ表示
@@ -1225,7 +1218,7 @@ begin
12251218
12261219 // マウスジェスチャー
12271220 FGestureEnabled := ini.ReadBool( 'Guesture', 'Enabled', False );
1228- FGestureIgnoreContext := ini.ReadBool( 'Guesture', 'IgnoreContext', False );
1221+
12291222 //2ch言語サポ
12301223 F2chSupport := ini.ReadBool('2chSupport', 'Support', False);
12311224
@@ -1262,7 +1255,7 @@ begin
12621255
12631256 FStoredTaskTray := ini.ReadBool('Function', 'StroedTaskTray', false);
12641257 FLoopBrowserTabs := ini.ReadBool('Function', 'LoopBrowserTabs', false);
1265-
1258+
12661259 ini.UpdateFile;
12671260 finally
12681261 ini.Free;
@@ -1451,7 +1444,6 @@ begin
14511444 ini.DeleteKey( 'Thread', 'OnlyAHundredRes' ); // 古い設定の削除
14521445 ini.WriteInteger('Thread', 'ResRange', FResRange);
14531446 ini.WriteBool('Thread', 'ResRangeHold', FResRangeHold);
1454- ini.WriteInteger('Thread', 'HeadResCount', FHeadResCount);
14551447 // スレッド一覧表示範囲
14561448 ini.WriteInteger('ThreadList', 'ThreadRange', Ord( FThreadRange ));
14571449 //ログ削除確認
@@ -1614,7 +1606,7 @@ begin
16141606
16151607 // マウスジェスチャーを使用するかどうか
16161608 ini.WriteBool( 'Guesture', 'Enabled', FGestureEnabled );
1617- ini.WriteBool( 'Guesture', 'IgnoreContext', FGestureIgnoreContext );
1609+
16181610 //FusianaTrap
16191611 ini.WriteBool('Trap', 'LocalTrap', FLocalTrapAtt);
16201612 ini.WriteBool('Trap', 'RemoteTrap', FRemoteTrapAtt);
--- a/gikoNavi.dpr
+++ b/gikoNavi.dpr
@@ -74,9 +74,7 @@ uses
7474 InputAssistDataModule in 'InputAssistDataModule.pas' {InputAssistDM: TDataModule},
7575 DefaultFileManager in 'DefaultFileManager.pas',
7676 MoveHistoryItem in 'MoveHistoryItem.pas',
77- SambaTimer in 'SambaTimer.pas',
78- HistoryList in 'HistoryList.pas',
79- NewBoardURL in 'NewBoardURL.pas' {NewBoardURLForm};
77+ SambaTimer in 'SambaTimer.pas';
8078
8179 {$R *.RES}
8280 {$R gikoResource.res}
Binary files a/gikoNavi.res and b/gikoNavi.res differ
--- a/readme/readme.txt
+++ b/readme/readme.txt
@@ -107,13 +107,11 @@ LICENSE
107107 ------------------------------
108108 履歴
109109 ------------------------------
110-2007/01/28
110+2006/12/XX
111111 Version バタ54
112112  スレッド内でのリンクで移動したときの履歴を辿れる機能を追加
113113  タスクトレイに格納する機能を追加(オプションで最小化時も)
114114  Samba24対策で板ごとに設定可能に拡張
115- 右クリックのコンテキストメニューでのマウスジェスチャーでハングする不具合の回避オプションを追加
116- (Win9x系用)
117115
118116 2006/08/07
119117 Version バタ53
Show on old repository browser