| 18 |
Editor, RoundData, GikoPanel, Favorite, HTMLDocumentEvent, |
Editor, RoundData, GikoPanel, Favorite, HTMLDocumentEvent, |
| 19 |
HintWindow, GikoCoolBar, GikoListView, Search, ExternalBoardManager, |
HintWindow, GikoCoolBar, GikoListView, Search, ExternalBoardManager, |
| 20 |
ExternalBoardPlugInMain, StdActns, Variants, ExtActns,IdTCPConnection, |
ExternalBoardPlugInMain, StdActns, Variants, ExtActns,IdTCPConnection, |
| 21 |
IdBaseComponent, IdTCPClient, AppEvnts; |
IdBaseComponent, IdTCPClient, AppEvnts, BrowserRecord; |
| 22 |
|
|
| 23 |
type |
type |
| 24 |
TGikoTreeType = (gttNone, gtt2ch, gttHistory, gttFavorite); |
TGikoTreeType = (gttNone, gtt2ch, gttHistory, gttFavorite); |
| 26 |
TMinimizeType = (mtNone, mtMinimizing, mtMinimized); |
TMinimizeType = (mtNone, mtMinimizing, mtMinimized); |
| 27 |
TResizeType = (rtNone, rtResizing); |
TResizeType = (rtNone, rtResizing); |
| 28 |
|
|
| 29 |
TBrowserRecord = class; |
// TBrowserRecord = class; |
| 30 |
|
|
| 31 |
TGikoForm = class(TForm) |
TGikoForm = class(TForm) |
| 32 |
StatusBar: TStatusBar; |
StatusBar: TStatusBar; |
| 530 |
procedure ListToolBarResize(Sender: TObject); |
procedure ListToolBarResize(Sender: TObject); |
| 531 |
procedure BrowserToolBarResize(Sender: TObject); |
procedure BrowserToolBarResize(Sender: TObject); |
| 532 |
procedure KokoPopupMenuPopup(Sender: TObject); |
procedure KokoPopupMenuPopup(Sender: TObject); |
|
procedure BeLogInOutActionUpdate(Sender: TObject); |
|
| 533 |
procedure ListViewKeyUp(Sender: TObject; var Key: Word; |
procedure ListViewKeyUp(Sender: TObject; var Key: Word; |
| 534 |
Shift: TShiftState); |
Shift: TShiftState); |
| 535 |
procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode; |
procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode; |
| 653 |
function GetTabURLs(AStringList: TStringList) : Boolean; |
function GetTabURLs(AStringList: TStringList) : Boolean; |
| 654 |
/// ListColumnPopupMenu アイテムのクリックイベント |
/// ListColumnPopupMenu アイテムのクリックイベント |
| 655 |
procedure ListColumnPopupMenuOnClick( Sender : TObject ); |
procedure ListColumnPopupMenuOnClick( Sender : TObject ); |
|
// BrowserRecordについているFBrowserを外す |
|
|
procedure ReleaseBrowser( BRecord: TBrowserRecord); |
|
| 656 |
//! 絞り込み文字列設定 |
//! 絞り込み文字列設定 |
| 657 |
procedure SetSelectWord( const text : string ); |
procedure SetSelectWord( const text : string ); |
| 658 |
//現在のカーソルを取得する |
//現在のカーソルを取得する |
| 825 |
property Data: Pointer read FData write FData; |
property Data: Pointer read FData write FData; |
| 826 |
end; |
end; |
| 827 |
|
|
|
TBrowserRecord = class( TObject ) |
|
|
private |
|
|
FBrowser : TWebBrowser; |
|
|
FEvent: THTMLDocumentEventSink; ///< ブラウザドキュメントイベント |
|
|
FThread : TThreadItem; |
|
|
FLastSize : Integer; |
|
|
FRepaint : Boolean; |
|
|
FMovement : string; ///< スクロール先アンカー |
|
|
public |
|
|
destructor Destroy; override; |
|
|
property Browser : TWebBrowser read FBrowser write FBrowser; |
|
|
property Thread : TThreadItem read FThread write FThread; |
|
|
property LastSize : Integer read FLastSize write FLastSize; |
|
|
property Repaint : Boolean read FRepaint write FRepaint; |
|
|
property Movement : string read FMovement write FMovement; |
|
|
end; |
|
|
|
|
| 828 |
var |
var |
| 829 |
GikoForm: TGikoForm; |
GikoForm: TGikoForm; |
| 830 |
|
|
| 891 |
i: Integer; |
i: Integer; |
| 892 |
wp: TWindowPlacement; |
wp: TWindowPlacement; |
| 893 |
s: string; |
s: string; |
|
ToolButton: TToolButton; |
|
| 894 |
begin |
begin |
| 895 |
{$IFDEF DEBUG} |
{$IFDEF DEBUG} |
| 896 |
AllocConsole; |
AllocConsole; |
| 2235 |
end; |
end; |
| 2236 |
end; |
end; |
| 2237 |
|
|
|
{procedure TGikoForm.CabinetPanelVisible(PanelVisible: Boolean); |
|
|
begin |
|
|
TreeSplitter.Visible := PanelVisible; |
|
|
CabinetPanel.Visible := PanelVisible; |
|
|
CabinetToolButton.Down := PanelVisible; |
|
|
end;} |
|
|
|
|
| 2238 |
procedure TGikoForm.ListViewAllSelect; |
procedure TGikoForm.ListViewAllSelect; |
| 2239 |
begin |
begin |
| 2240 |
ListView.SetFocus; |
ListView.SetFocus; |
| 2417 |
StatusBar.Panels[1].Text := FDownloadTitle + ' - ダウンロード中 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')'; |
StatusBar.Panels[1].Text := FDownloadTitle + ' - ダウンロード中 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')'; |
| 2418 |
end; |
end; |
| 2419 |
|
|
|
{ |
|
|
procedure TGikoForm.SetProgressValue(Number: Integer; Value: Integer; Max: Integer = -1); |
|
|
var |
|
|
Component: TComponent; |
|
|
begin |
|
|
Component := FindComponent('ProgressBar' + IntToStr(Number + 1)); |
|
|
if Component <> nil then begin |
|
|
if not (Component is TProgressBar) then Exit; |
|
|
if Max <> -1 then |
|
|
TProgressBar(Component).Max := Max; |
|
|
TProgressBar(Component).Position := Value; |
|
|
end; |
|
|
end; |
|
|
} |
|
|
|
|
| 2420 |
procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon); |
procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon); |
| 2421 |
var |
var |
| 2422 |
ListItem: TListItem; |
ListItem: TListItem; |
| 2455 |
if ThreadItem.IsLogFile then begin |
if ThreadItem.IsLogFile then begin |
| 2456 |
//お気に入りの全て開くとかやると、今開いてるスレのbrowserを付け替える恐れがある |
//お気に入りの全て開くとかやると、今開いてるスレのbrowserを付け替える恐れがある |
| 2457 |
//常に4番目にActiveのブラウザが来ないように移動させる |
//常に4番目にActiveのブラウザが来ないように移動させる |
| 2458 |
if (FActiveContent <> nil) and (FActiveContent.FBrowser <> nil) and |
if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and |
| 2459 |
(FActiveContent.FBrowser <> BrowserNullTab.Browser)then begin |
(FActiveContent.Browser <> BrowserNullTab.Browser)then begin |
| 2460 |
j := FBrowsers.IndexOf(FActiveContent.FBrowser); |
j := FBrowsers.IndexOf(FActiveContent.Browser); |
| 2461 |
if j = BROWSER_COUNT - 1 then |
if j = BROWSER_COUNT - 1 then |
| 2462 |
FBrowsers.Move(BROWSER_COUNT - 1, 0); |
FBrowsers.Move(BROWSER_COUNT - 1, 0); |
| 2463 |
end; |
end; |
| 2469 |
if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin |
if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin |
| 2470 |
if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin |
if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin |
| 2471 |
Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] ); |
Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] ); |
| 2472 |
if TBrowserRecord(BrowserTab.Tabs.Objects[i]).FBrowser = nil then begin |
if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin |
| 2473 |
for j := BrowserTab.Tabs.Count - 1 downto 0 do begin |
for j := BrowserTab.Tabs.Count - 1 downto 0 do begin |
| 2474 |
if TBrowserRecord(BrowserTab.Tabs.Objects[j]).FBrowser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin |
if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin |
| 2475 |
ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j])); |
ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j])); |
| 2476 |
break; |
break; |
| 2477 |
end; |
end; |
| 2478 |
end; |
end; |
| 2479 |
TBrowserRecord(BrowserTab.Tabs.Objects[i]).FBrowser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]); |
TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]); |
| 2480 |
TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true; |
TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true; |
| 2481 |
FBrowsers.Move(BROWSER_COUNT - 1, 0); |
FBrowsers.Move(BROWSER_COUNT - 1, 0); |
| 2482 |
end; |
end; |
| 2493 |
if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin |
if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin |
| 2494 |
newBrowser := TBrowserRecord.Create; |
newBrowser := TBrowserRecord.Create; |
| 2495 |
for j := BrowserTab.Tabs.Count - 1 downto 0 do begin |
for j := BrowserTab.Tabs.Count - 1 downto 0 do begin |
| 2496 |
if TBrowserRecord(BrowserTab.Tabs.Objects[j]).FBrowser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin |
if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin |
| 2497 |
ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j])); |
ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j])); |
| 2498 |
break; |
break; |
| 2499 |
end; |
end; |
| 2518 |
end else begin |
end else begin |
| 2519 |
newBrowser := TBrowserRecord.Create; |
newBrowser := TBrowserRecord.Create; |
| 2520 |
for j := BrowserTab.Tabs.Count - 1 downto 0 do begin |
for j := BrowserTab.Tabs.Count - 1 downto 0 do begin |
| 2521 |
if TBrowserRecord(BrowserTab.Tabs.Objects[j]).FBrowser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin |
if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin |
| 2522 |
ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j])); |
ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j])); |
| 2523 |
break; |
break; |
| 2524 |
end; |
end; |
| 2608 |
if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then |
if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then |
| 2609 |
FBrowsers.Move(BROWSER_COUNT - 1, 0); |
FBrowsers.Move(BROWSER_COUNT - 1, 0); |
| 2610 |
for i := BrowserTab.Tabs.Count - 1 downto 0 do begin |
for i := BrowserTab.Tabs.Count - 1 downto 0 do begin |
| 2611 |
if TBrowserRecord(BrowserTab.Tabs.Objects[i]).FBrowser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin |
if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin |
| 2612 |
ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i])); |
ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i])); |
| 2613 |
break; |
break; |
| 2614 |
end; |
end; |
| 2638 |
if (FActiveContent.Browser <> BrowserNullTab.Browser) then |
if (FActiveContent.Browser <> BrowserNullTab.Browser) then |
| 2639 |
ShowWindow(FActiveContent.Browser.Handle, SW_HIDE); |
ShowWindow(FActiveContent.Browser.Handle, SW_HIDE); |
| 2640 |
end; |
end; |
| 2641 |
ShowWindow(Thread.FBrowser.Handle, SW_SHOW); |
ShowWindow(Thread.Browser.Handle, SW_SHOW); |
| 2642 |
if (not Assigned(Thread.Browser.Document)) then begin |
if (not Assigned(Thread.Browser.Document)) then begin |
| 2643 |
Thread.Browser.Navigate('about:blank'); |
Thread.Browser.Navigate('about:blank'); |
| 2644 |
end; |
end; |
| 3504 |
end; |
end; |
| 3505 |
|
|
| 3506 |
// Access Violation が起きる事があるので今後要チェック |
// Access Violation が起きる事があるので今後要チェック |
| 3507 |
if(BrowserRecord <> nil) and (BrowserRecord.FBrowser <> nil) then begin |
if(BrowserRecord <> nil) and (BrowserRecord.Browser <> nil) then begin |
| 3508 |
activeBrower := BrowserRecord.FBrowser; |
activeBrower := BrowserRecord.Browser; |
| 3509 |
try |
try |
| 3510 |
top := 0; |
top := 0; |
| 3511 |
nm := AName; |
nm := AName; |
| 4192 |
end; |
end; |
| 4193 |
end; |
end; |
| 4194 |
if BrowserRecord <> nil then begin |
if BrowserRecord <> nil then begin |
| 4195 |
if BrowserRecord.FEvent <> nil then |
if BrowserRecord.Event <> nil then |
| 4196 |
BrowserRecord.FEvent.Free; |
BrowserRecord.Event.Free; |
| 4197 |
FDispHtmlDocument := Idispatch(OleVariant(BrowserRecord.Browser.ControlInterface).Document) as DispHTMLDocument; |
FDispHtmlDocument := Idispatch(OleVariant(BrowserRecord.Browser.ControlInterface).Document) as DispHTMLDocument; |
| 4198 |
BrowserRecord.FEvent := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2); |
BrowserRecord.Event := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2); |
| 4199 |
BrowserRecord.FEvent.OnContextMenu := OnDocumentContextMenu; |
BrowserRecord.Event.OnContextMenu := OnDocumentContextMenu; |
| 4200 |
BrowserRecord.FEvent.OnClick := WebBrowserClick; //追加したOnClickイベント |
BrowserRecord.Event.OnClick := WebBrowserClick; //追加したOnClickイベント |
| 4201 |
end; |
end; |
| 4202 |
end else begin |
end else begin |
| 4203 |
if GetActiveContent <> nil then begin |
if GetActiveContent <> nil then begin |
| 5033 |
begin |
begin |
| 5034 |
Result := False; |
Result := False; |
| 5035 |
IDAnchorPopup(''); |
IDAnchorPopup(''); |
| 5036 |
Doc := FactiveContent.FBrowser.Document as IHtmlDocument2; |
Doc := FactiveContent.Browser.Document as IHtmlDocument2; |
| 5037 |
if Assigned(Doc) then begin |
if Assigned(Doc) then begin |
| 5038 |
Range := Doc.selection.createRange as IHTMLTxtRange; |
Range := Doc.selection.createRange as IHTMLTxtRange; |
| 5039 |
s := CustomStringReplace(Range.text, ' ', ' ');//全角空白を半角空白に |
s := CustomStringReplace(Range.text, ' ', ' ');//全角空白を半角空白に |
| 6020 |
Node.ImageIndex := 16; |
Node.ImageIndex := 16; |
| 6021 |
Node.SelectedIndex := 16; |
Node.SelectedIndex := 16; |
| 6022 |
end else if Source is TBrowserRecord then begin |
end else if Source is TBrowserRecord then begin |
| 6023 |
ThreadItem := TBrowserRecord( Source ).FThread; |
ThreadItem := TBrowserRecord( Source ).Thread; |
| 6024 |
FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem ); |
FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem ); |
| 6025 |
Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem); |
Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem); |
| 6026 |
Node.ImageIndex := 16; |
Node.ImageIndex := 16; |
| 6264 |
begin |
begin |
| 6265 |
//クリック時の選択イベントと同じならダブルクリック実行 |
//クリック時の選択イベントと同じならダブルクリック実行 |
| 6266 |
if (FClickNode = FavoriteTreeView.Selected) then begin |
if (FClickNode = FavoriteTreeView.Selected) then begin |
|
{$IFDEF DEBUG} |
|
|
Writeln('FVDbClick'); |
|
|
{$ENDIF} |
|
| 6267 |
GikoDM.FavoriteTreeViewReloadActionExecute( Sender ); |
GikoDM.FavoriteTreeViewReloadActionExecute( Sender ); |
| 6268 |
end; |
end; |
| 6269 |
end; |
end; |
| 6794 |
begin |
begin |
| 6795 |
if (Button = mbLeft) and not (ssDouble in Shift) then begin |
if (Button = mbLeft) and not (ssDouble in Shift) then begin |
| 6796 |
if (FClickNode = FavoriteTreeView.Selected) then begin |
if (FClickNode = FavoriteTreeView.Selected) then begin |
|
{$IFDEF DEBUG} |
|
|
Writeln('FVMouseUp'); |
|
|
{$ENDIF} |
|
| 6797 |
FavoriteClick( TObject( FClickNode ) ); |
FavoriteClick( TObject( FClickNode ) ); |
| 6798 |
end; |
end; |
| 6799 |
end; |
end; |
| 6800 |
end; |
end; |
| 6801 |
|
|
|
destructor TBrowserRecord.Destroy; |
|
|
var |
|
|
doc :OleVariant; |
|
|
begin |
|
|
if Self.FEvent <> nil then |
|
|
Self.FEvent.Free; |
|
|
if Self.FBrowser <> nil then begin |
|
|
if Self.Thread <> nil then begin |
|
|
//タブの復元で復元されたスレは、描画されていないときがあるので |
|
|
//そのときのスクロール量を保存してしまうとトップに戻ってしまう。 |
|
|
if Self.FBrowser.OleObject.Document.documentElement.innerText <> '' then begin |
|
|
doc := Idispatch( olevariant(Self.FBrowser.ControlInterface).Document) as IHTMLDocument2; |
|
|
Self.Thread.ScrollTop := doc.Body.ScrollTop; |
|
|
end; |
|
|
end; |
|
|
//TOleControl(Self.FBrowser).Visible := false; |
|
|
ShowWindow(Self.FBrowser.Handle, SW_HIDE); |
|
|
end; |
|
|
|
|
|
end; |
|
|
|
|
| 6802 |
function TGikoForm.WebBrowserClick(Sender: TObject): WordBool; |
function TGikoForm.WebBrowserClick(Sender: TObject): WordBool; |
| 6803 |
var |
var |
| 6804 |
p : TPoint; |
p : TPoint; |
| 7151 |
SetActiveList( FActiveList ); |
SetActiveList( FActiveList ); |
| 7152 |
|
|
| 7153 |
end; |
end; |
|
//指定した番号のレスにjumpするAction |
|
|
procedure TGikoForm.ReleaseBrowser( BRecord: TBrowserRecord); |
|
|
begin |
|
|
if BRecord <> nil then begin |
|
|
BRecord.Browser := nil; |
|
|
if BRecord.FEvent <> nil then begin |
|
|
BRecord.FEvent.Free; |
|
|
BRecord.FEvent := nil; |
|
|
end; |
|
|
BRecord.Repaint := true; |
|
|
end; |
|
|
end; |
|
| 7154 |
|
|
| 7155 |
procedure TGikoForm.OnGestureStart(Sender: TObject); |
procedure TGikoForm.OnGestureStart(Sender: TObject); |
| 7156 |
begin |
begin |
| 7482 |
|
|
| 7483 |
end; |
end; |
| 7484 |
|
|
|
procedure TGikoForm.BeLogInOutActionUpdate(Sender: TObject); |
|
|
begin |
|
|
end; |
|
| 7485 |
//ListViewの選択状態を解除する |
//ListViewの選択状態を解除する |
| 7486 |
procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word; |
procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word; |
| 7487 |
Shift: TShiftState); |
Shift: TShiftState); |
| 7500 |
end; |
end; |
| 7501 |
end; |
end; |
| 7502 |
end; |
end; |
| 7503 |
|
// ************************************************************************* |
| 7504 |
|
//! お気に入りの編集開始イベント |
| 7505 |
|
// ************************************************************************* |
| 7506 |
procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject; |
procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject; |
| 7507 |
Node: TTreeNode; var AllowEdit: Boolean); |
Node: TTreeNode; var AllowEdit: Boolean); |
| 7508 |
begin |
begin |
| 7714 |
// ************************************************************************* |
// ************************************************************************* |
| 7715 |
procedure TGikoForm.FavoriteTreeViewClick(Sender: TObject); |
procedure TGikoForm.FavoriteTreeViewClick(Sender: TObject); |
| 7716 |
begin |
begin |
|
{$IFDEF DEBUG} |
|
|
Writeln('FVClick'); |
|
|
{$ENDIF} |
|
| 7717 |
//現在選択されているアイテムを保存 |
//現在選択されているアイテムを保存 |
| 7718 |
FClickNode := FavoriteTreeView.Selected; |
FClickNode := FavoriteTreeView.Selected; |
| 7719 |
end; |
end; |