文档章节

用 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
0
0
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
【R图秀-2】社交网络数据可视化(一)

作者简介Introduction 傅兴:个人公众号:Rapp 往期回顾 为了进一步提高自己数据获取的能力,我把目光放到了互联网上一个重要的数据来源:社交网络(Social Network),比如国外的facebook和...

R语言中文社区
01/28
0
0
[031] 微信公众帐号开发教程第7篇-文本消息中换行符的使用(转)

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

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

没有更多内容

加载失败,请刷新页面

加载更多

负载均衡的解决方案有哪些

负载均衡器服务可满足大型组织的需求,支持所有数据中心和跨数据中心高可靠性场景。 本地负载均衡,通过附带或者未附带持久性覆盖选项,Incapsula支持各种负载均衡算法,以优化服务器之间的流...

上树的熊
16分钟前
1
0
Java实现在线打开word文档加盖印章/盖章/签名功能

前言: 我们知道,大型一点的OA办公系统都会有很多在线处理office办公文档的需求。其中有一点也基本绕不开,那就是为文档盖章或添加手写签名来保护文档,让被盖章的文档不再被编辑。 在Java中...

山里的红杏
24分钟前
4
0
js控制输入正负数,小数点后保留两位

//限制数字function clearNoNum(obj){ //修复第一个字符是小数点 的情况. if(obj.value !=''&& obj.value.substr(0,1) == '.'){ obj.value=""; } obj.value ...

一直在成长的程序猿
26分钟前
1
0
动态代理

具体场景 为了使代理类与被代理类对第三方有相同的函数,代理类与被代理类一般实现一个公共的interface,定义如下 public interface Subject { void rent(); void hello(String s)...

wuyiyi
30分钟前
0
0
时间字段

我们看看这几个数据库中(mysql、oracle和sqlserver)如何表示时间 mysql数据库:它们分别是 date、datetime、time、timestamp和year。date :“yyyy-mm-dd”格式表示的日期值 time :“hh:...

DemonsI
32分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部