亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? myidestream.pas

?? 適用于 Delphi 2-7 的Delphi控件
?? PAS
字號:
{+--------------------------------------------------------------------------+
| Class:       TIDEStream
| Created:     9.97
| Author:      Martin Waldenburg
| Copyright    1997, all rights reserved.
| Description: A simple and effective interface to the IDE's text buffer
|              You can retrive the text of the IDE's text buffer either
|              as PChar or as string list.
|              You can manipulate it in any way and then replace the
|              whole text with the result of your manipulation.
| Version:     1.1
| Status:      FreeWare
|   Modified to access not only the current file
   by  Egbert van Nes
   Modified to use the Open Tools API by Greg Eytcheson
| Disclaimer:
| This is provided as is, expressly without a warranty of any kind.
| You use it at your own risc.
+--------------------------------------------------------------------------+}
unit MyIDEStream;

interface

uses
 Windows, SysUtils, Messages, Classes, ToolsAPI{$IFDEF CS_TRACE}, CodeSiteLogging{$ENDIF};

type
 TIDEStream = class(TMemoryStream)
 private
  FLines: TStringList;
  FFileName: string;
  function GetAsPChar: PChar;
  procedure LoadLines;
  function GetLines: TStringList;
  procedure SetLines(NewValue: TStringList);
  function GetStreamTextLen: Longint;
 protected
 public
  constructor Create(AFileName: string);
  destructor Destroy; override;
  procedure WriteText(Text: PChar);
  property Capacity;
  property AsPChar: PChar read GetAsPChar;
  function GetText: PChar;
  procedure SetMemPointer(Ptr: Pointer; Size: Longint);
  property StreamTextLen: Longint read GetStreamTextLen;
  property Lines: TStringList read GetLines write SetLines;
  property FileName: string read FFileName;
 published
  procedure Clear;
 end;
 
function GetProjectName: string;
function GetProjectFileNames(ProjectFiles: TStrings): Integer;
function GetCurrentFile: string;
function GetOpenFileList(OpenFiles: TStrings): Integer;
function IsReadonlyBuffer(FileName: string): Boolean;
procedure SaveFile(AFileName: string);
function IsFileOpen(FileName: string): Boolean;

implementation
uses Dialogs, Forms, Menus, StdCtrls, ComCtrls;

procedure SaveFile(AFileName: string);
var
 ToolServices: IOTAActionServices;
begin
  {$IFDEF CS_TRACE}CodeSite.EnterMethod( 'SaveFile' );{$ENDIF}
 
 if AFileName = '' then exit;
 ToolServices := BorlandIDEServices as IOTAActionServices;
 if Assigned(ToolServices) then
  begin
   try
    ToolServices.SaveFile(AFileName);
   except
    raise Exception.Create('Unabled to save file ' + AFileName);
   end;
  end;
// ToolServices := nil;
  {$IFDEF CS_TRACE}CodeSite.ExitMethod( 'SaveFile' );{$ENDIF}
end;

function GetProjectName: string;
var
 prjGrp: IOTAProject;
begin
  {$IFDEF CS_TRACE}CodeSite.EnterMethod( 'GetProjectName' );{$ENDIF}
 Result := '';
 prjGrp := GetActiveProject;
 if prjGrp <> nil then
  begin
   try
    Result := prjGrp.FileName;
   except
    Result := '';
   end;
  end;
// prjGrp := nil;
  {$IFDEF CS_TRACE}CodeSite.ExitMethod( 'GetProjectName' );{$ENDIF}
end; { GetProjectName }

function GetProjectFileNames(ProjectFiles: TStrings): Integer;
var
 j: Integer;
 prjGrp: IOTAProject;
 fileInfo: IOTAModuleInfo;
begin
  {$IFDEF CS_TRACE}CodeSite.EnterMethod( 'GetProjectFileNames' );{$ENDIF}
 Result := 0;
 prjGrp := GetActiveProject;
 if not Assigned(prjGrp) then Exit;
 try
  for j := 0 to prjGrp.GetModuleCount - 1 do
   begin
    fileInfo := prjGrp.GetModule(j);
    if Assigned(fileInfo) then
     begin
      if AnsiCompareText(ExtractFileExt(fileInfo.FileName), '.pas') = 0 then
       ProjectFiles.Add(fileInfo.FileName);
     end;
   end;
  Result := ProjectFiles.Count;
 except
 end;
// FileInfo := nil;
// prjGrp := nil;
  {$IFDEF CS_TRACE}CodeSite.ExitMethod( 'GetProjectFileNames' );{$ENDIF}
end;

function GetCurrentFile: string;
var
 i: integer;
 ModuleServices: IOTAModuleServices;
 Module: IOTAModule;
 Intf: IOTAEditor;
 Editor: IOTASourceEditor;
begin
  {$IFDEF CS_TRACE}CodeSite.EnterMethod( 'GetCurrentFile' );{$ENDIF}
 Result := '';
 try
  ModuleServices := BorlandIDEServices as IOTAModuleServices;
  if ModuleServices = nil then Exit;
  Module := ModuleServices.CurrentModule;
  if Module = nil then exit;
  for I := 0 to Module.GetModuleFileCount - 1 do
   begin
    Intf := Module.GetModuleFileEditor(I);
    if Intf.QueryInterface(IOTASourceEditor, Editor) = S_OK then
     Break;
   end;
  if editor = nil then exit;
  Result := Editor.FileName;
  if Result <> '' then
   if AnsiCompareText(ExtractFileExt(Result), '.pas') <> 0 then
    Result := '';
 except
 end;
// Editor := nil;
// Intf := nil;
// Module := nil;
// ModuleServices := nil;
  {$IFDEF CS_TRACE}CodeSite.ExitMethod( 'GetCurrentFile' );{$ENDIF}
end; { GetCurrentFile }

function GetOpenFileList(OpenFiles: TStrings): Integer;
var
 i, k: integer;
 ModuleServices: IOTAModuleServices;
 Module: IOTAModule;
 Intf: IOTAEditor;
 Editor: IOTASourceEditor;
begin
  {$IFDEF CS_TRACE}CodeSite.EnterMethod( 'GetOpenFileList' );{$ENDIF}
 Result := 0;
 if not assigned(OpenFiles) then raise Exception.Create('Create the Filelist first!');
 try
  OpenFiles.Clear;
  ModuleServices := BorlandIDEServices as IOTAModuleServices;
  if ModuleServices = nil then Exit;
  for i := 0 to ModuleServices.ModuleCount - 1 do
   begin
    Module := ModuleServices.Modules[i];
    if Assigned(Module) then
     begin
      for k := 0 to Module.GetModuleFileCount - 1 do
       begin
        Editor := nil;
        Intf := Module.GetModuleFileEditor(k);
        if Intf.QueryInterface(IOTASourceEditor, Editor) = S_OK then
         Break;
       end;
      if Assigned(Editor) then
       begin
        If AnsiCompareText(ExtractFileExt(Editor.FileName), '.pas') = 0 then
         OpenFiles.Add(Editor.FileName);
        Editor := nil;
       end;
     end;
   end;
  Result := OpenFiles.Count;
 except
 end;
// Editor := nil;
// Intf := nil;
// Module := nil;
// ModuleServices := nil;
  {$IFDEF CS_TRACE}CodeSite.ExitMethod( 'GetOpenFileList' );{$ENDIF}
end;

function IsFileOpen(FileName: string): Boolean;
var
 Mods: IOTAModuleServices;
 j: Integer;
begin
  {$IFDEF CS_TRACE}CodeSite.EnterMethod( 'IsFileOpen' );{$ENDIF}
 Result := False;
 Mods := BorlandIDEServices as IOTAModuleServices;
 if Mods = nil then exit;
 try
  for j := 0 to Mods.ModuleCount - 1 do
   begin
    if AnsiCompareStr(Mods.GetModule(j).FileName, FileName) = 0 then
     begin
      Result := True;
      Break;
     end;
   end;
 except Result := False;
 end;
// Mods := nil;
  {$IFDEF CS_TRACE}CodeSite.ExitMethod( 'IsFileOpen' );{$ENDIF}
end;

function IsReadonlyBuffer(FileName: string): Boolean;
//var
// I, J: Integer;
var
 i, k: integer;
 ModuleServices: IOTAModuleServices;
 Module: IOTAModule;
 Intf: IOTAEditor;
 EditorIntf: IOTASourceEditor;
 Editor: IOTAEditBuffer;
 
begin
  {$IFDEF CS_TRACE}CodeSite.EnterMethod( 'IsReadonlyBuffer' );{$ENDIF}
 Result := False;
 ModuleServices := BorlandIDEServices as IOTAModuleServices;
 if ModuleServices = nil then Exit;
 for i := 0 to ModuleServices.ModuleCount - 1 do
  begin
   if AnsiCompareStr(ModuleServices.GetModule(i).FileName, FileName) = 0 then
    begin
     Module := ModuleServices.GetModule(i);
     Break;
    end;
  end;
 
 if Assigned(Module) then
  begin
   for k := 0 to Module.GetModuleFileCount - 1 do
    begin
     Editor := nil;
     Intf := Module.GetModuleFileEditor(k);
     if Intf.QueryInterface(IOTASourceEditor, EditorIntf) = S_OK then
      if Intf.QueryInterface(IOTAEditBuffer, Editor) = S_OK then
       Break;
    end;
   if Assigned(Editor) then
    Result := Editor.IsReadOnly;
  end;
 //   end;
 
 // Result := False; {default value}
 // try
 //  if Application <> nil then
 //   with Application do
 //    for I := 0 to ComponentCount - 1 do
 //     if Components[I] is TForm then
 //      if CompareText(ExtractFileName(TForm(Components[I]).Caption),
 //       ExtractFileName(FileName)) = 0 then
 //       with Components[I] do
 //        for J := 0 to ComponentCount - 1 do
 //         if Components[J] is TStatusBar then
 //          Result := TStatusBar(Components[J]).Panels[2].Text =
 //           'Read only';
 // except
 //  Result := False;
 // end;
  {$IFDEF CS_TRACE}CodeSite.ExitMethod( 'IsReadonlyBuffer' );{$ENDIF}
end;

constructor TIDEStream.Create(AFileName: string);
begin
  {$IFDEF CS_TRACE}CodeSite.EnterMethod( Self, 'Create' );{$ENDIF}
 inherited Create;
 if AFileName = '' then
  begin
   FFileName := GetCurrentFile;
  end
 else
  FFileName := AFileName;
 if LowerCase(ExtractFileExt(FFileName)) <> '.pas' then
  raise Exception.Create('Sorry, must be a .pas file');
 FLines := TStringList.Create;
  {$IFDEF CS_TRACE}CodeSite.ExitMethod( Self, 'Create' );{$ENDIF}
end; { Create }

procedure TIDEStream.Clear;
begin
  {$IFDEF CS_TRACE}CodeSite.EnterMethod( Self, 'Clear' );{$ENDIF}
 FLines.Clear;
 inherited Clear;
  {$IFDEF CS_TRACE}CodeSite.ExitMethod( Self, 'Clear' );{$ENDIF}
end; { Clear }

destructor TIDEStream.Destroy;
begin
  {$IFDEF CS_TRACE}CodeSite.EnterMethod( Self, 'Destroy' );{$ENDIF}
 FLines.Free;
 inherited Destroy;
  {$IFDEF CS_TRACE}CodeSite.ExitMethod( Self, 'Destroy' );{$ENDIF}
end; { Destroy }

function TIDEStream.GetAsPChar: PChar;
const
 TheEnd: Char = #0;
begin
  {$IFDEF CS_TRACE}CodeSite.EnterMethod( Self, 'GetAsPChar' );{$ENDIF}
 Position := Size;
 Write(TheEnd, 1);
 SetPointer(Memory, Size - 1);
 Result := Memory;
  {$IFDEF CS_TRACE}CodeSite.ExitMethod( Self, 'GetAsPChar' );{$ENDIF}
end; { GetAsPChar }

procedure TIDEStream.SetMemPointer(Ptr: Pointer; Size: Longint);
begin
  {$IFDEF CS_TRACE}CodeSite.EnterMethod( Self, 'SetMemPointer' );{$ENDIF}
 SetPointer(Ptr, Size);
  {$IFDEF CS_TRACE}CodeSite.ExitMethod( Self, 'SetMemPointer' );{$ENDIF}
end; { SetMemPointer }

function TIDEStream.GetStreamTextLen: Longint;
const
 {BuffLen = 16383;}
 BuffLen = $FF;
var
 TextBuffer: PChar;
 Readed, BuffPos, TextLen: Longint;
 i: Integer;
 ModuleServices: IOTAModuleServices;
 Module: IOTAModule;
 Intf: IOTAEditor;
 Editor: IOTASourceEditor;
 Reader: IOTAEditReader;
begin
  {$IFDEF CS_TRACE}CodeSite.EnterMethod( Self, 'GetStreamTextLen' );{$ENDIF}
 TextLen := 0;
 Getmem(TextBuffer, BuffLen + 1);
 BuffPos := 0;
 ModuleServices := BorlandIDEServices as IOTAModuleServices;
 Module := ModuleServices.FindModule(FileName);
 if Module = nil then
  begin
   Result := 0;
   Exit;
  end;
 for I := 0 to Module.GetModuleFileCount - 1 do
  begin
   Intf := Module.GetModuleFileEditor(I);
   if Intf.QueryInterface(IOTASourceEditor, Editor) = S_OK then
    Break;
  end;
 Reader := Editor.CreateReader;
 
 try
  repeat
   Readed := Reader.GetText(BuffPos, TextBuffer, BuffLen);
   TextLen := TextLen + Readed;
   inc(BuffPos, Readed);
  until Readed < BuffLen;
 finally
  Freemem(TextBuffer, BuffLen + 1);
 end;
 Result := TextLen;
// Reader := nil;
// Editor := nil;
// Intf := nil;
// Module := nil;
// ModuleServices := nil;
  {$IFDEF CS_TRACE}CodeSite.ExitMethod( Self, 'GetStreamTextLen' );{$ENDIF}
end; { GetStreamTextLen }

function TIDEStream.GetText: PChar;
const
 BuffLen = $FF;
var
 TextBuffer: PChar;
 Readed, BuffPos: Longint;
 i: Integer;
 ModuleServices: IOTAModuleServices;
 Module: IOTAModule;
 Intf: IOTAEditor;
 Editor: IOTASourceEditor;
 Reader: IOTAEditReader;
begin
  {$IFDEF CS_TRACE}CodeSite.EnterMethod( Self, 'GetText' );{$ENDIF}
 Clear;
 Getmem(TextBuffer, BuffLen + 1);
 BuffPos := 0;
 ModuleServices := BorlandIDEServices as IOTAModuleServices;
 Module := ModuleServices.FindModule(FileName);
 if Module = nil then
  begin
   Result := '';
   Exit;
  end;
 for I := 0 to Module.GetModuleFileCount - 1 do
  begin
   Intf := Module.GetModuleFileEditor(I);
   if Intf.QueryInterface(IOTASourceEditor, Editor) = S_OK then
    Break;
  end;
 Reader := Editor.CreateReader;
 try
  repeat
   Readed := Reader.GetText(BuffPos, TextBuffer, BuffLen);
   Write(TextBuffer^, Readed);
   inc(BuffPos, Readed);
  until Readed < BuffLen;
 finally
  Freemem(TextBuffer, BuffLen + 1);
 end;
 Result := AsPChar;
// Reader := nil;
// Editor := nil;
// Intf := nil;
// Module := nil;
// ModuleServices := nil;

  {$IFDEF CS_TRACE}CodeSite.ExitMethod( Self, 'GetText' );{$ENDIF}
end; { GetText }

procedure TIDEStream.WriteText(Text: PChar);
var
 TextLen: Longint;
 i: Integer;
 ModuleServices: IOTAModuleServices;
 Module: IOTAModule;
 Intf: IOTAEditor;
 Editor: IOTASourceEditor;
 Writer: IOTAEditWriter;
begin
  {$IFDEF CS_TRACE}CodeSite.EnterMethod( Self, 'WriteText' );{$ENDIF}
 if Size = 0 then
  TextLen := GetStreamTextLen
 else
  TextLen := Size;
 ModuleServices := BorlandIDEServices as IOTAModuleServices;
 Module := ModuleServices.FindModule(FileName);
 if Module = nil then Exit;
 for I := 0 to Module.GetModuleFileCount - 1 do
  begin
   Intf := Module.GetModuleFileEditor(I);
   if Intf.QueryInterface(IOTASourceEditor, Editor) = S_OK then
    Break;
  end;
 Writer := Editor.CreateWriter;
 if (Writer <> nil) and (Text <> nil) then
  try
   if TextLen > 0 then
    begin
     Writer.CopyTo(0);
     Writer.DeleteTo(TextLen - 2);
    end;
   Writer.Insert(Text);
  finally
  end;
// Writer := nil;
// Editor := nil;
// Intf := nil;
// Module := nil;
// ModuleServices := nil;

  {$IFDEF CS_TRACE}CodeSite.ExitMethod( Self, 'WriteText' );{$ENDIF}
end; { WriteText }

procedure TIDEStream.LoadLines;
var
 Run, LineStart, LineEnd: PChar;
begin
  {$IFDEF CS_TRACE}CodeSite.EnterMethod( Self, 'LoadLines' );{$ENDIF}
 LineStart := GetText;
 Run := LineStart;
 while Run^ <> #0 do
  begin
   Run := LineStart;
   while not (Run^ in [#0, #10, #13]) do
    inc(Run);
   LineEnd := Run;
   if Run^ <> #0 then
    begin
     inc(Run);
     if Run^ in [#10, #13] then inc(Run);
    end;
   LineEnd^ := #0;
   FLines.Add(LineStart);
   LineStart := Run;
  end;
  {$IFDEF CS_TRACE}CodeSite.ExitMethod( Self, 'LoadLines' );{$ENDIF}
end; { LoadLines }

function TIDEStream.GetLines: TStringList;
begin
  {$IFDEF CS_TRACE}CodeSite.EnterMethod( Self, 'GetLines' );{$ENDIF}
 if FLines.Count = 0 then LoadLines;
 Result := FLines;
  {$IFDEF CS_TRACE}CodeSite.ExitMethod( Self, 'GetLines' );{$ENDIF}
end; { GetLines }

procedure TIDEStream.SetLines(NewValue: TStringList);
begin
  {$IFDEF CS_TRACE}CodeSite.EnterMethod( Self, 'SetLines' );{$ENDIF}
 FLines.Assign(NewValue);
  {$IFDEF CS_TRACE}CodeSite.ExitMethod( Self, 'SetLines' );{$ENDIF}
end; { SetLines }

end.


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一二三区不卡| 一区二区三区小说| 亚洲精品高清视频在线观看| 日韩国产精品久久久久久亚洲| k8久久久一区二区三区 | 久久精品一区蜜桃臀影院| 亚洲欧美aⅴ...| 国产一区视频在线看| 9191久久久久久久久久久| 中文字幕一区二区三区不卡| 麻豆国产一区二区| 欧美精选一区二区| 亚洲女同ⅹxx女同tv| 成人综合婷婷国产精品久久免费| 日韩三级在线观看| 日韩不卡一二三区| 欧美日韩一区二区电影| 亚洲精品老司机| 成人天堂资源www在线| 欧美精品一区在线观看| 日本伊人色综合网| 欧美日韩国产大片| 亚洲永久免费av| 欧美曰成人黄网| 一区二区三区精品视频在线| 成人国产精品免费观看动漫| 国产日韩视频一区二区三区| 麻豆国产精品官网| 欧美不卡123| 国产一区二区0| 精品久久免费看| 国产裸体歌舞团一区二区| 亚洲精品在线观| 国产一区二区三区免费| 久久综合国产精品| 国产精品88av| 国产精品视频一二三| 99热这里都是精品| 亚洲乱码中文字幕| 欧美午夜免费电影| 全国精品久久少妇| 国产亚洲欧洲997久久综合| 国产麻豆欧美日韩一区| 中文字幕不卡一区| 日本乱码高清不卡字幕| 亚洲国产人成综合网站| 欧美一级理论性理论a| 久久精品久久精品| 国产日韩欧美一区二区三区乱码 | 国产精品99精品久久免费| 国产日韩欧美在线一区| 夜夜精品浪潮av一区二区三区| 日本韩国欧美一区| 日韩电影免费在线观看网站| 欧美一区二区在线免费观看| 极品少妇一区二区三区精品视频| 久久精品欧美一区二区三区不卡 | 精品在线观看免费| 国产欧美综合在线观看第十页| a级精品国产片在线观看| 亚洲国产欧美在线| 亚洲va欧美va国产va天堂影院| 91麻豆精品国产91久久久更新时间| 日韩av不卡在线观看| 国产女同互慰高潮91漫画| 色综合久久久久久久久| 美女脱光内衣内裤视频久久影院| 中文欧美字幕免费| 欧美精品第1页| 成人av高清在线| 老司机精品视频线观看86| ●精品国产综合乱码久久久久| 制服.丝袜.亚洲.另类.中文| 国产 欧美在线| 亚洲国产aⅴ成人精品无吗| 久久综合给合久久狠狠狠97色69| 日本高清成人免费播放| 国产一区二区三区最好精华液| 亚洲精品你懂的| 国产日韩成人精品| 日韩一区二区三区免费观看| av不卡在线播放| 国产一区欧美日韩| 日韩国产精品久久久| 韩国精品主播一区二区在线观看 | 99久久精品费精品国产一区二区 | 一区二区三区在线观看动漫 | 亚洲美女屁股眼交| 26uuu欧美日本| 欧美日韩视频在线一区二区| 成人在线一区二区三区| 麻豆91在线播放| 午夜欧美电影在线观看| 亚洲视频你懂的| 国产亚洲va综合人人澡精品| 制服丝袜在线91| 欧美日韩日日摸| 日本福利一区二区| www.亚洲在线| av一区二区三区| 成人自拍视频在线| 国产乱子伦视频一区二区三区| 免费成人美女在线观看| 亚洲成在线观看| 丝袜诱惑制服诱惑色一区在线观看| 中文字幕一区二区三区四区| 中文字幕免费观看一区| 国产欧美精品日韩区二区麻豆天美| 日韩一区二区电影网| 欧美一区二区在线不卡| 欧美一区二区国产| 欧美一级生活片| 精品国产自在久精品国产| 日韩一级免费一区| 精品国产一区二区亚洲人成毛片| 日韩一级片在线播放| 精品免费一区二区三区| 亚洲精品在线电影| 精品国产污污免费网站入口| 久久久精品综合| 欧美激情一区二区三区在线| 亚洲桃色在线一区| 夜夜精品视频一区二区| 日韩中文字幕不卡| 久草这里只有精品视频| 激情综合色播五月| 国产91清纯白嫩初高中在线观看| 国产高清一区日本| 99久久综合国产精品| 欧洲亚洲国产日韩| 91精品国产丝袜白色高跟鞋| 精品99久久久久久| 国产精品国产三级国产aⅴ原创| 国产精品九色蝌蚪自拍| 亚洲一区二区三区四区的| 日韩高清电影一区| 国产美女在线观看一区| 成人视屏免费看| 欧美日韩国产小视频在线观看| 日韩一区二区精品葵司在线| 国产精品天天看| 亚洲妇女屁股眼交7| 国产一区二区三区四区五区美女 | 狠狠色综合日日| 本田岬高潮一区二区三区| 欧美日韩国产中文| 国产欧美日韩视频在线观看| 一区二区三区日本| 国产九色精品成人porny| 色综合天天综合网国产成人综合天| 欧美久久一二区| 免费在线看成人av| 99视频精品免费视频| 在线播放91灌醉迷j高跟美女| 久久精品视频在线免费观看| 亚洲bt欧美bt精品777| 国产精品一二三区| 欧美日韩综合在线免费观看| 久久久久国产精品厨房| 亚洲一区二区免费视频| 久久99精品久久久久久动态图 | 国产精品亚洲а∨天堂免在线| 91麻豆福利精品推荐| 亚洲精品在线免费播放| 一区二区三区四区不卡在线 | 精品国产一区二区三区不卡| 亚洲精品欧美专区| 国产福利视频一区二区三区| 91.com视频| 一区二区三区日韩欧美精品 | 狠狠色狠狠色综合| 欧美性受xxxx黑人xyx性爽| 久久久国产精品午夜一区ai换脸| 亚洲第一福利视频在线| 精品国产免费人成电影在线观看四季| 国产欧美日韩综合精品一区二区| 午夜电影网一区| 在线观看日韩电影| 国产精品成人免费| 国产美女主播视频一区| 日韩一级片在线观看| 丝袜美腿亚洲综合| 欧美在线色视频| 亚洲色图视频网| 99久久免费视频.com| 国产欧美精品国产国产专区| 久久国产成人午夜av影院| 777a∨成人精品桃花网| 亚洲成人精品在线观看| 欧美亚洲国产一区二区三区va| 亚洲欧美日韩精品久久久久| 国产成人午夜精品影院观看视频| 日韩精品专区在线影院观看| 日韩av在线免费观看不卡| 欧美色网站导航| 天天综合网 天天综合色| 欧美日韩国产精品成人| 亚洲国产精品麻豆| 欧美日韩在线不卡| 日韩精品亚洲专区|