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

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

?? editunit.pas.svn-base

?? 支持自定義語法高亮顯示的編輯器控件
?? SVN-BASE
?? 第 1 頁 / 共 2 頁
字號:
unit editunit;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls,
  EasyEditor, EasyControls, EasyClasses, EasyParser, EasyEditSource, EasyKeyMap,
  EasyEditorSettings, EasySettings,
  Menus, TypInfo, StdCtrls, ImgList, ComCtrls;

type
  TEditForm = class(TForm)
    EasyEdit: TEasyEdit;
    JScrParser: TEasyEditorParser;
    HtmlParser: TEasyEditorParser;
    ChangeTimer: TTimer;
    ImageList1: TImageList;
    procedure FormActivate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormDestroy(Sender: TObject);
    procedure ChangeTimerTimer(Sender: TObject);
    procedure EasyEditSourceChanged(Sender: TObject;
      State: TEasyEditSourceStates);
    procedure EasyEditMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure EasyEditGetDrawStyle(Sender: TObject; Line, Char: Integer;
      var Style: Word);
    procedure EasyEditMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure EasyEditKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure EasyEditSelectionChanged(Sender: TObject);
    procedure EasyEditKeyPress(Sender: TObject; var Key: Char);
    procedure EasyEditDisplayHint(Sender: TObject; var s: String;
      AKey: Char; var AllowPopup: Boolean);
    procedure EasyEditAutoComplete(Sender: TObject; Strings: TStrings;
      AKey: Char; var AllowPopup: Boolean);
    procedure EasyEditBeforeInsertPopup(Sender: TObject; var s: String);
    procedure EasyEditFindStringInPopup(Sender: TObject; Strings: TStrings;
      const s: String; var Index: Integer; var Handled: Boolean);
  private
    FGotoDefinition : boolean;
    FDefPt          : TPoint;
    FGotoPt         : TPoint;
    FDefLen         : integer;
    FFunctionIndex  : integer;

    function GetParamIndex : integer;
    function IsMethod(var s : string; var Pt : TPoint) : boolean;

    procedure GetPlainString(var s : string; var IsFunction : boolean);
    procedure GetPlainText(AStrings : TStrings);
    procedure UpdateUrl;
    procedure ClearUrl;
    procedure CheckCtrlSpace;
    procedure CheckCtrlShiftSpace;
    procedure ShowMethodHint(const s : string; APoint : TPoint; CheckBold : boolean; AKeepHint : boolean = false);
    procedure CheckMethodParams;
    procedure FillCodeCompletion(Strings : TStrings);
    procedure FillStrings(Strings : TStrings; AClass : TClass);
    procedure DoPopupClosed(Sender: TObject);
    procedure UpdateStatusBar(StatusBar : TStatusBar; State : TEasyEditSourceStates);

  public
    procedure AfterCreate;
    property FunctionIndex : integer read FFunctionIndex write FFunctionIndex;
    { Public declarations }
  end;

var
  EditForm: TEditForm;

implementation

uses main, expl, jparser;

{$R *.DFM}
const
  sJsExt = '.js';
  sSaveChanges = 'Save changes to %s ?';
  cUrlTextStyle = 8;

  sColorTable = '{\rtf{\colortbl\red0\green0\blue0;\red0\green128\blue128;\red128\green0\blue0;\red128\green128\blue0;\red0\green0\blue255;}';
  sPropStr = '\cf1 Property \cf0 | %s | \b %s}';
  sVarStr = '\cf2 Var \cf0 \b | %s';
  sParamStr = '\cf3 Param \cf0 \b | %s';
  sConstStr = '\cf2 Const \cf0 \b | %s';
  sFuncStr = '\cf4 Function \cf0 \b | %s \b0 %s';
  sNoParams = '\b *No parameters expected*';

  cVarImage = 0;
  cPropImage = 3;
  cParamImage = 3;
  cConstImage = 1;
  cFunctionImage = 2;

type
  TMEdit = class(TCustomEasyEdit);
  TMEasyPopupWindow = class(TEasyPopupWindow);

function GetFunctionInfo(AEdit : TCustomEasyEdit) : TFunctionInfo;
var
  i      : integer;
  s      : string;
  pLeft  : integer;
  pRight : integer;
begin
  result := nil;
  s := Copy(AEdit.EditSource.Strings.GetStr(AEdit.CurrentPosition.Y), 1, AEdit.CurrentPosition.X);
  pLeft := Pos('(', s);
  pRight := Pos(')', s);

  s := '';
  if (pLeft > 0) and ((pRight = 0) or ((pRight > 0) and (pRight > pLeft) and (pRight > AEdit.CurrentPosition.X))) then
    s := AEdit.EditSource.GetTextAt(Point(pLeft - 2, AEdit.CurrentPosition.Y),true);

  i := UnitInfo.Functions.IndexOf(s);
  if i >= 0 then
    result := TFunctionInfo(UnitInfo.Functions.Objects[i]);
end;

procedure FillInfo(Strings : TStrings; Info: TFunctionInfo);
var
  i     : integer;
  AInfo : TFunctionInfo;

  procedure AddColoredString(const s : string; ImageIndex : integer);
  begin
    if Strings.Count = 0 then
      Strings.AddObject(sColorTable + s, Pointer(ImageIndex))
    else
      Strings.AddObject(s, Pointer(ImageIndex));
  end;

begin
  Strings.Clear;
  if Info = nil then
    exit;
  for i := 0 to info.LocalVars.Count - 1 do
    AddColoredString(Format(sVarStr, [info.LocalVars[i]]), cVarImage);
  for i := 0 to info.Params.Count - 1 do
    AddColoredString(Format(sParamStr, [info.Params[i]]), cParamImage);
  for i := 0 to UnitInfo.Variables.Count - 1 do
    AddColoredString(Format(sVarStr, [UnitInfo.Variables[i]]), cVarImage);
  for i := 0 to UnitInfo.Constants.Count - 1 do
    AddColoredString(Format(sConstStr, [UnitInfo.Constants[i]]), cConstImage);
  for i := 0 to UnitInfo.Functions.Count - 1 do
    begin
      AInfo := TFunctionInfo(UnitInfo.Functions.Objects[i]);
      if AInfo <> nil then
        AddColoredString(Format(sFuncStr, [AInfo.Name, AInfo.ParamText]), cFunctionImage);
    end;
end;

procedure TEditForm.AfterCreate;
begin
  if CompareText(ExtractFileExt(Caption), sJsExt) = 0 then
    EasyEdit.Parser := JScrParser
  else
    EasyEdit.Parser := HtmlParser;
  ExplorerFrm.UpdateExplorer(Caption);
  FFunctionIndex := -1;
  EasyEdit.OnPopupClosed := DoPopupClosed;
end;

procedure TEditForm.FormActivate(Sender: TObject);
begin
  MainForm.ActivateTab(Self);
  ExplorerFrm.UpdateExplorer(Caption);
end;

procedure TEditForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  ExplorerFrm.UpdateExplorer('');
end;

procedure TEditForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if MainForm.InDestroying or not EasyEdit.Modified then
    Exit;
  case MessageDlg(Format(sSaveChanges, [Caption]), mtConfirmation, [mbYes, mbNo, mbCancel], 0) of
    mrYes:
      CanClose := MainForm.SaveEditor(Self, true);
    mrNo:
      CanClose := true;
    mrCancel:
      CanClose := false;
  end;
end;

procedure TEditForm.FormDestroy(Sender: TObject);
begin
  if not (csDestroying in MainForm.ComponentState) then
    MainForm.RemoveTab(Self);
end;

procedure TEditForm.ChangeTimerTimer(Sender: TObject);
begin
  ChangeTimer.Enabled := false;
  ExplorerFrm.UpdateExplorer(Caption);
end;

procedure TEditForm.UpdateStatusBar(StatusBar : TStatusBar; State : TEasyEditSourceStates);
var
  AText : string;
begin
  with StatusBar, EasyEdit do
  begin
    If (Panels.Count > 0) and (csPositionChanged in State) then
      Panels[0].Text := Format('Line: %d, Char: %d', [CurrentPosition.Y + 1, CurrentPosition.X + 1]);

    if (Panels.Count > 2) and (csInsModeChanged in State) then
      if OverWrite then
        Panels[2].Text := 'Overwrite'
      else
        Panels[2].Text := '';

    if (Panels.Count > 1) then
    begin
      AText := '' ;
      if ReadOnly then
        AText := 'ReadOnly';
      if Modified and (AText = '') then
        AText := 'Modified';
      if Panels[1].Text <> AText then
        Panels[1].Text := AText;
    end;
  end;
end;


procedure TEditForm.EasyEditSourceChanged(Sender: TObject;
  State: TEasyEditSourceStates);
begin
  if csEdit in State then
  begin
    ChangeTimer.Enabled := false;
    ChangeTimer.Enabled := true;
  end;
  UpdateStatusBar(MainForm.StatusBar1, State);
end;

procedure TEditForm.UpdateUrl;
var
  R : TRect;
begin
  if FDefPt.Y < 0 then
    exit;
  with TMEdit(EasyEdit), TextToPixelPoint(FDefPt, false) do
  begin
    R := Rect(X, Y, X + Painter.GetDefaultCharWidth * FDefLen, Y + Painter.GetDefaultLineHeight);
    InvalidateRect(Handle, @R, false);
  end;
end;

procedure TEditForm.ClearUrl;
begin
  UpdateUrl;
  FDefPt := Point(-1, -1);
  FDefLen := 0;
  EasyEdit.Cursor := crIBeam;
  FGotoDefinition := false;
end;


procedure TEditForm.EasyEditMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
var
  s      : string;
  Info   : TElementInfo;
  Pt     : TPoint;
  ALeft  : integer;
  ARight : integer;
begin
  if (ssCtrl in Shift) then
    with EasyEdit, EditSource do
    begin
      Pt := PixelToTextPoint(Point(X, Y), false);
      s := GetTextAt(Pt, true);
      Info := UnitInfo.IndexOf(s);
      if Info <> nil then
      begin
        Cursor := crHandPoint;
        FGotoPt := Point(0, Info.LineNo);
        FGotoDefinition := true;
        UpdateUrl;
        GetWord(Pt, ALeft, ARight, wsWord);
        FDefPt := Point(ALeft - 1, Pt.Y);
        FDefLen := ARight - ALeft + 1;
        UpdateUrl;
      end
      else
        ClearUrl;
    end
  else
    ClearUrl;
end;

procedure TEditForm.EasyEditGetDrawStyle(Sender: TObject; Line,
  Char: Integer; var Style: Word);
begin
  if FGotoDefinition and (Line = FDefPt.Y) and (Char > FDefPt.X) and (Char <= FDefPt.X + FDefLen) then
    Style := cUrlTextStyle;
end;

procedure TEditForm.EasyEditMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if (FGotoDefinition) and (ssCtrl in Shift) then
  begin
    ClearUrl;
    with EasyEdit do
    begin
      CurrentPosition := FGotoPt;
      SelType := slNone;
      Navigate(cCenterLine);
    end;
  end;

end;

procedure TEditForm.EasyEditKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key = VK_SPACE) and (ssCtrl in Shift) and (ssShift in Shift) then
  begin
    CheckCtrlShiftSpace;
    Key := 0;
  end;
end;

procedure TEditForm.CheckCtrlShiftSpace;
var
  s  : string;
  Pt : TPoint;
begin
  if IsMethod(s,Pt) then
    ShowMethodHint(s, Pt, true);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区四区国产精品| 欧美激情在线一区二区三区| 亚洲日本成人在线观看| 成人免费高清在线| 成人免费在线视频观看| 99精品视频在线观看| 亚洲精品成人悠悠色影视| 色婷婷亚洲婷婷| 香蕉久久一区二区不卡无毒影院 | 一区二区三区丝袜| 在线观看网站黄不卡| 天天操天天干天天综合网| 日韩视频免费观看高清完整版| 激情亚洲综合在线| 亚洲日本青草视频在线怡红院| 91成人在线观看喷潮| 日韩av中文在线观看| 久久久美女艺术照精彩视频福利播放| 成人国产精品免费网站| 亚洲影院免费观看| 亚洲精品在线观看网站| 成人免费va视频| 天堂久久一区二区三区| 久久综合九色综合97婷婷| 99热这里都是精品| 日韩影视精彩在线| 国产精品久久午夜夜伦鲁鲁| 欧美亚洲国产一区二区三区| 久久99国产精品尤物| 成人欧美一区二区三区在线播放| 欧美日韩国产大片| 国产精品白丝jk白祙喷水网站| 一区二区三区高清| 久久奇米777| 欧美日韩亚洲综合一区二区三区| 国产麻豆成人精品| 亚洲大片一区二区三区| 国产亚洲欧美一区在线观看| 欧美在线免费视屏| 国产成人在线看| 婷婷久久综合九色综合绿巨人| 欧美激情一区二区三区全黄| 欧美网站一区二区| 高清久久久久久| 日本美女一区二区三区| 中文字幕亚洲一区二区va在线| 91麻豆精品国产无毒不卡在线观看| 国产成人精品一区二| 日韩av中文字幕一区二区| 一区二区三区美女| 亚洲天堂福利av| 国产午夜亚洲精品不卡| 欧美日韩一区二区三区在线看| 成人伦理片在线| 国产伦精品一区二区三区视频青涩 | 亚洲精品国产a久久久久久| 精品福利一区二区三区| 欧美日韩一级视频| 色一情一乱一乱一91av| 成人午夜免费av| 国产精品一二三区| 激情深爱一区二区| 欧美aaaaa成人免费观看视频| 亚洲小说欧美激情另类| 亚洲婷婷在线视频| 中文av一区二区| 欧美国产激情二区三区| 精品国产91乱码一区二区三区 | 欧美性极品少妇| 99久久er热在这里只有精品15 | 成人欧美一区二区三区小说| 国产拍揄自揄精品视频麻豆| 久久久99久久| 国产三级精品三级在线专区| 久久久久久影视| 国产午夜精品久久久久久久| 久久―日本道色综合久久| 日韩精品一区二区三区在线播放| 欧美日韩精品免费| 欧美日韩一区二区欧美激情| 色婷婷激情一区二区三区| 91啪九色porn原创视频在线观看| 粉嫩13p一区二区三区| 丁香啪啪综合成人亚洲小说 | 欧美自拍偷拍一区| 欧美丝袜第三区| 欧美男生操女生| 欧美成人精品二区三区99精品| 日韩亚洲欧美中文三级| 日韩精品自拍偷拍| 久久久99精品免费观看不卡| 亚洲国产精品t66y| 亚洲色图欧美激情| 午夜精品福利一区二区三区av| 日本特黄久久久高潮| 日韩av电影免费观看高清完整版在线观看 | 视频一区免费在线观看| 蜜桃视频一区二区三区在线观看 | 国产精品传媒视频| 夜夜嗨av一区二区三区网页 | 久久国产乱子精品免费女| 精品在线亚洲视频| 岛国一区二区在线观看| eeuss鲁片一区二区三区在线观看| 91一区二区在线| 在线播放日韩导航| 久久精品亚洲麻豆av一区二区| 国产精品久久二区二区| 亚洲国产一区二区三区| 美女视频第一区二区三区免费观看网站 | 欧美日韩激情一区二区| 精品剧情在线观看| 亚洲天堂精品视频| 免费成人你懂的| 丁香婷婷综合网| 欧美三级视频在线播放| 久久青草国产手机看片福利盒子| 亚洲欧美日韩国产另类专区| 日本中文字幕一区二区有限公司| 国产一区二区不卡老阿姨| 在线观看免费成人| 久久蜜桃av一区精品变态类天堂| 亚洲精品高清在线| 国产美女视频一区| 欧美午夜精品一区二区三区| 久久天堂av综合合色蜜桃网| 亚洲国产综合色| 成人免费毛片aaaaa**| 91麻豆精品国产91久久久使用方法 | 久久久久久久免费视频了| 亚洲精品中文字幕在线观看| 精品一区二区三区免费视频| 91国偷自产一区二区开放时间| 久久久久久久网| 免费亚洲电影在线| 在线精品视频免费播放| 国产视频在线观看一区二区三区| 午夜精品一区二区三区电影天堂| 成人国产精品免费观看| 精品国产a毛片| 日本欧美一区二区| 欧美午夜视频网站| 亚洲另类春色校园小说| 成人免费视频视频| 精品久久一区二区| 奇米888四色在线精品| 欧洲一区二区三区在线| 中文字幕一区在线| 国产成人午夜视频| 精品国产污网站| 美国三级日本三级久久99| 欧美日韩一区在线| 亚洲精品免费视频| 91视视频在线观看入口直接观看www| 2020国产精品久久精品美国| 免费成人在线视频观看| 在线电影院国产精品| 亚洲成人中文在线| 欧美视频在线一区| 一区二区不卡在线视频 午夜欧美不卡在| 国产91丝袜在线播放| 国产亚洲精品福利| 国产高清在线观看免费不卡| 久久久久久毛片| 国产精品18久久久久久久网站| 日韩精品影音先锋| 日韩电影在线免费观看| 91麻豆精品国产91久久久使用方法 | 亚洲一区二区三区四区五区中文| eeuss鲁片一区二区三区 | 国产精品一品二品| 久久精品一区二区三区av| 国产麻豆成人精品| 中文字幕高清一区| 成人av网站在线| 亚洲欧美日本韩国| 欧美日韩色综合| 青娱乐精品视频在线| 日韩精品一区二区三区视频在线观看| 麻豆精品一区二区av白丝在线| 精品日产卡一卡二卡麻豆| 国产在线精品一区在线观看麻豆| 精品国产百合女同互慰| 福利电影一区二区| 中文字幕一区二区三区蜜月 | 欧美高清一级片在线| 麻豆成人av在线| 国产精品视频九色porn| 色婷婷一区二区三区四区| 五月激情综合网| 久久精品在这里| 99re热视频精品| 亚洲一区二区欧美日韩| 日韩欧美自拍偷拍| 精品亚洲成av人在线观看| 欧美不卡在线视频| 成人毛片在线观看| 亚洲va欧美va天堂v国产综合| 日韩你懂的在线观看| 成人激情视频网站|