文档章节

用 API 实现的获取文本容器中选择的文本 - 回复 "roy.flex" 的问题

涂孟超
 涂孟超
发布于 2014/09/26 15:37
字数 598
阅读 4
收藏 0
问题来源: http://www.cnblogs.com/del/archive/2008/06/18/1083011.html#1229305

告诉 roy.flex 同学:
你的问题还是挺复杂的, 先要完成的就是这一步;
再往下做, 如果要捕获其他程序中的鼠标需要做 DLL;
不过还有个简单办法, 就是用 TTimer 定时获取, 这样也就不用钩子了;
但是还需要知道要操作对象的句柄, 这个可以参考: http://www.cnblogs.com/del/archive/2008/03/09/1097942.html

本例效果图:



代码文件:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Memo1: TMemo;
    RichEdit1: TRichEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{用 API 实现的获取文本容器中选择的文本的函数}
function GetEditSeleteText(h: HWND): string;
var
  len,sx,ex: Integer; {文本总长度, 选择的开始位置, 选择的结束位置}
  buf: PChar;         {所有文本}
begin
  {获取文本总长度}
  len := SendMessage(h, WM_GETTEXTLENGTH, 0, 0) + 1;
  {为接受所有文本的缓冲区分配内存}
  buf := GlobalAllocPtr(0, len); {这里没有使用 GetMem, 因为需要全局的, 不然无法面对其他程序}
  {获取所有文本}
  SendMessage(h, WM_GETTEXT, len, Longint(buf));
  {获取选择的开始位置和结束位置}
  SendMessage(h, EM_GETSEL, Longint(@sx), Longint(@ex));
  {截取选择的文本}
  Result := Copy(buf, sx+1, ex-sx);
  {释放内存}
  GlobalFreePtr(buf);
end;

{测试 TEdit, 同时与 VCL 的获取方法对比}
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetEditSeleteText(Edit1.Handle) + ' - ' + Edit1.SelText);
end;

{测试 TMemo, 同时与 VCL 的获取方法对比}
procedure TForm1.Button2Click(Sender: TObject);
begin
  ShowMessage(GetEditSeleteText(Memo1.Handle) + ' - ' + Memo1.SelText);
end;

{测试 TRichEdit, 同时与 VCL 的获取方法对比}
procedure TForm1.Button3Click(Sender: TObject);
begin
  ShowMessage(GetEditSeleteText(RichEdit1.Handle) + ' - ' + RichEdit1.SelText);
end;

end.

 
 
 
 
 

 

 

  
窗体文件:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 145
  ClientWidth = 181
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Position = poDesktopCenter
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 95
    Top = 8
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
    OnClick = Button1Click
  end
  object Edit1: TEdit
    Left = 8
    Top = 8
    Width = 81
    Height = 21
    TabOrder = 1
    Text = 'Edit1'
  end
  object Memo1: TMemo
    Left = 8
    Top = 35
    Width = 81
    Height = 46
    Lines.Strings = (
      'Memo1')
    TabOrder = 2
  end
  object RichEdit1: TRichEdit
    Left = 8
    Top = 87
    Width = 81
    Height = 50
    Font.Charset = GB2312_CHARSET
    Font.Color = clWindowText
    Font.Height = -11
    Font.Name = 'Tahoma'
    Font.Style = []
    Lines.Strings = (
      'RichEdit1')
    ParentFont = False
    TabOrder = 3
  end
  object Button2: TButton
    Left = 95
    Top = 56
    Width = 75
    Height = 25
    Caption = 'Button2'
    TabOrder = 4
    OnClick = Button2Click
  end
  object Button3: TButton
    Left = 95
    Top = 112
    Width = 75
    Height = 25
    Caption = 'Button3'
    TabOrder = 5
    OnClick = Button3Click
  end
end

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2008/06/19/1225080.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
JeeWx 捷微 3.2 发布,支持微信公众号/企业号/小程序

JeeWx捷微3.2微信企业号升级版本发布^_^ JeeWx捷微V3.2.0版本引入了更多新特性,支持微信公众号、微信企业号、支付宝服务窗等多触点平台。多触点模式采用微服务框架实现,可插拔可集成,非常...

Jeecg
07/12
1K
2
JAVA版开源微信管家—JeeWx捷微3.2版本发布,支持微信公众号,微信企业号,支付窗、小程序

JeeWx捷微3.2微信企业号升级版本发布^_^ JeeWx捷微V3.2——多触点管理平台(支持微信公众号,微信企业号,支付窗、小程序) JeeWx捷微V3.2.0版本引入了更多新特性,支持微信公众号、微信企业...

Jeecg
07/12
0
0
微信程序开发系列教程(三)使用微信API给微信用户发文本消息

这个系列的第二篇教程,介绍的实际是被动方式给微信用户发文本消息,即微信用户关注您的公众号时,微信平台将这个关注事件通过一个HTTP post发送到您的微信消息服务器上。您对这个post请求做...

jerrywangsap
08/26
0
0
微信小程序过长文本折叠效果的探索

之前做小程序开发时,遇到要实现过长文本进行的折叠的效果(类型微信朋友圈那种)。主要交互有三点: 让文本过长时折叠、并显示一个“全文”的点击文本 当用户点击“全文”则会展开被折叠的文...

LevonLin
2017/11/27
0
0
[031] 微信公众帐号开发教程第7篇-文本消息中换行符的使用(转)

本篇文章主要介绍在文本消息中使用换行符的长处以及怎样使用换行符。 近期一个月尽管抽不出时间写博客,但却一直在认真答复大家提出的问题。收到这么多的回复、关注和酬谢,还是蛮有成就感的...

云栖希望。
2017/12/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PHP生成CSV之内部换行

当我们使用PHP将采集到的文件内容保存到csv文件时,往往需要将采集内容进行二次过滤处理才能得到需要的内容。比如网页中的换行符,空格符等等。 对于空格等处理起来都比较简单,这里我们单独...

豆花饭烧土豆
24分钟前
0
0
使用 mjml 生成 thymeleaf 邮件框架模板

发邮件算是系统开发的一个基本需求了,不过搞邮件模板实在是件恶心事,估计搞过的同仁都有体会。 得支持多种客户端 支持响应式 疼彻心扉的 outlook 多数客户端只支持 inline 形式的 css 布局...

郁也风
27分钟前
3
0
让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字

让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字: 作者:孙冬梅;以前读韩国前总统朴槿惠的著作《绝望锻炼了我》时,里面有一句话令我印象深刻,她说“在我最困难的时期,...

原创小博客
今天
3
0
JAVA-四元数类

public class Quaternion { private final double x0, x1, x2, x3; // 四元数构造函数 public Quaternion(double x0, double x1, double x2, double x3) { this.x0 = ......

Pulsar-V
今天
17
0
Xshell利用Xftp传输文件,使用pure-ftpd搭建ftp服务

Xftp传输文件 如果已经通过Xshell登录到服务器,此时可以使用快捷键ctrl+alt+f 打开Xftp并展示Xshell当前的目录,之后直接拖拽传输文件即可。 pure-ftpd搭建ftp服务 pure-ftpd要比vsftp简单,...

野雪球
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部