加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何处理Synedit表名上的链接?

发布时间:2020-12-15 09:26:28 所属栏目:大数据 来源:网络整理
导读:我正在使用Delphi中的TSynEdit编写Sql编辑器. 我在荧光笔和自动填充的表名中有我的对象名称(表格,存储过程,域等),它们以蓝色和下划线显示这是我想要的但我想知道我是否可以将这些链接到一个事件我实际上可以打开那个对象. 有办法吗? a)当鼠标悬停在这样的关
我正在使用Delphi中的TSynEdit编写Sql编辑器.
我在荧光笔和自动填充的表名中有我的对象名称(表格,存储过程,域等),它们以蓝色和下划线显示这是我想要的但我想知道我是否可以将这些链接到一个事件我实际上可以打开那个对象.

有办法吗?

a)当鼠标悬停在这样的关键字上时,将光标更改为handPoint?

b)点击这样的关键字时执行事件,程序,功能?

谢谢你的建议.

enter image description here

解决方法

要获取鼠标指向的令牌信息,您可以编写例如像这样的辅助方法:

type
  TSynEditHelper = class helper for TSynEdit
  public
    function GetTokenInfo(const CursorPos: TPoint; out TokenType: Integer; out TokenText: UnicodeString): Boolean; overload;
    function GetTokenInfo(const LineCharPos: TBufferCoord; out TokenType: Integer; out TokenText: UnicodeString): Boolean; overload;
  end;

{ TSynEditHelper }

function TSynEditHelper.GetTokenInfo(const CursorPos: TPoint; out TokenType: Integer; out TokenText: UnicodeString): Boolean;
begin
  Result := GetTokenInfo(DisplayToBufferPos(PixelsToRowColumn(CursorPos.X,CursorPos.Y)),TokenType,TokenText);
end;

function TSynEditHelper.GetTokenInfo(const LineCharPos: TBufferCoord; out TokenType: Integer; out TokenText: UnicodeString): Boolean;
var
  I: Integer;
  A: TSynHighlighterAttributes;
begin
  Result := GetHighlighterAttriAtRowColEx(LineCharPos,TokenText,I,A);
end;

并在OnMouseCursor中使用它们来设置光标和OnClick用于关键字导航:

procedure TForm1.SynEdit1Click(Sender: TObject);
var
  TokenType: Integer;
  TokenText: UnicodeString;
begin
  if TSynEdit(Sender).GetTokenInfo(TSynEdit(Sender).ScreenToClient(Mouse.CursorPos),TokenText) and
    (TokenType = Ord(tkTableName)) then
  begin
    ShowMessage(Format('Table token clicked: %s',[TokenText]));
  end;
end;

procedure TForm1.SynEdit1MouseCursor(Sender: TObject; const ALineCharPos: TBufferCoord; var ACursor: TCursor);
var
  TokenType: Integer;
  TokenText: UnicodeString;
begin
  if TSynEdit(Sender).GetTokenInfo(ALineCharPos,TokenText) and (TokenType = Ord(tkTableName)) then
    ACursor := crHandPoint;
end;

我找不到这个功能的原生方式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读