学院首页 软件应用 编程开发 创意设计 认证培训 软件论坛
ASP ASP.NET PHP JSP SQL MYSQL Java VB

您的位置:学院 >> 编程开发 >> Delphi >> 活用 SetSelTextBuf


活用 SetSelTextBuf


p>  SetSelTextBuf 是 TCustomEdit 类及其子类的文本替换方法,原本用它来置换选定的数据,如我们最常用的 Replace 命令多半是由它来完成的。现在,我们把其延伸使用一下,看会有什么结果。我们先从 SetSelTextBuf 的定义开始:
  procedure SetSelTextBuf(Buffer: PChar);
  这里,SetSelTextBuf需要一个以空字符结尾字串,所以我们可以知道其后果肯定是一个块操作。在使用 SetSelTextBuf的时候,一般要配合 SelText 属性来确诊是否有文本块被选中,然后才进行下一步。当有被选择的文本对象时,SelText即是其内容,我们可以简单地修改 SelText 来达到目的,一旦被更改的对象比较庞大, SetSelTextBuf 就会被派上用途。我们试想一下,当没有选中或是SelText属性为空 ,这时调用 SetSelTextBuf 就会发生了什么:Buffer 里的东西被填进了当前光标所在的位置。果真如此。这样一来,对于可以格式化的数据流(文本),利用 SetSelTextBuf 就能大大增强 TCustomEdit类的编辑能力,最起码对于文本的 Insert, Append 就不费多大的气力就容易搞定,尽管 TCustomEdit 类没有提供这样的函数和方法。
下面就来说说这种 Insert 与 Append 如何实现。
  Append 对我们来说比较容易,把光标移到文本后,调用 SetSelTextBbuf 即可。而 移动光标最笨最直接的方法就是追加一空字符或空行,然后再将它删了,这在TCustom-Edit 类中简直就是举手之劳。Insert 要相对复杂一些。只要完成了光标的移动,那么在任何地方的插入就容易多了(SetSelTextBuf)。从 TCustomEdit 的定义中我们了解到有一个 SetSelStart 的方法起定义为:
   procedure SetSelStart(Value: Integer); virtual;
  本身是个虚方法,具体实现是在子类。它仅仅是发送了一个 EM_SETSEL 消息给编辑控件(当前获得焦点的对象), 把光标移到了需要编辑的地方(开始选择之处),对任何文本都不例外,如把上面的移动‘追加一空字符或空行,然后删除’换成这种方法。学会了移动,还得控制选择的范围为0,这样才能插入。接下来就是:
   procedure SetSelLength(Value: Integer); virtual;
  这也是个虚方法。不过顾名思义,应该知道它是控制选择长度的函数。这下大家明白该怎么做了吧。最后应该注意的是在各个TCustomEdit子类中,针对不同的构件函数的实现,操作方法应有所不同,如 TEdit、TMemo(无 SetSelStart)、 TRichEdit...。最后是一简单的例子。


...

type

TForm1 = class(TForm)
...
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Button3: TButton;
...

private

{ Private declarations }

public

{ Public declarations }

end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin

//清空 Memo1
Memo1.Clear;
//在未载入任何内容时,禁止使用 Append、Insert
Button2.Enabled := False;
Button3.Enabled := False;
...

end;

//装载任意文本文件
procedure TForm1.Button1Click(Sender: TObject);
begin
...

Memo1.Lines.LoadFromFile( OpenDialog1.FileName );
Caption := Hint + 调入: + OpenDialog1.FileName;
Button2.Enabled := True;
Button3.Enabled := True;
...

end;

//在文件头插入
procedure TForm1.Button2Click(Sender: TObject);
Var
SWA : TMemoryStream; //建立临时交换内存镜象
CNULL : char; //空字符
begin

SWA := NIL;
CNULL := #0;
...
//初始化内存流
SWA := TMemoryStream.Create;
//加载要插入的文件
SWA.LoadFromFile( OpenDialog1.FileName );
//把指针移到流尾,以 #0 结尾,
SWA.Seek(0, soFromEnd);
SWA.Write( CNULL, 1);
//再移到头
SWA.Seek( 0, soFromBeginning );
//插入偏移量为 0
Memo1.SelStart := 0;
Memo1.SetSelTextBuf(SWA.Memory);
....

end;

procedure TForm1.Button3Click(Sender: TObject);
Var
SWA : TMemoryStream;
CNULL : char; //空字符
begin

SWA := NIL;
CNULL := #0;
...
//初始化内存流
SWA := TMemoryStream.Create;
//加载要追加的文件
SWA.LoadFromFile( OpenDialog1.FileName );
//把指针移到流尾,以 #0 结尾,
SWA.Seek(0, soFromEnd);
SWA.Write( CNULL, 1);
//再移到头
SWA.Seek( 0, soFromBeginning );
//把 Memo1 的指针移到 Memo1 尾部
Memo1.Lines.Add();
Memo1.Lines.Delete( Memo1.Lines.Count -1 );
//追加
Memo1.SetSelTextBuf(SWA.Memory);
...

end;
....



技术文章快速查找

栏目导航
软件应用
·操作系统 ·杀毒防黑 ·应用软件
·聊天软件 ·网络软件  
Web开发
·ASP ·JavaScript ·CGI
·JSP ·VbScript ·Web服务器
·PHP ·XML  
开发语言
·VB ·VC ·ASP.NET
·Java ·C/C++ ·Delphi
数据库开发
·MySQL ·SQL/Access ·PowerBuilder
·Oracle ·DB2  
网站设计
·Flash ·Dreamweaver ·HTML/CSS
·Fireworks ·FrontPage  
平面设计
·Photoshop ·CorelDraw ·AutoCAD
·FreeHand ·Illustrator ·3DsMAX
媒体动画
·Director ·Authorware ·Maya
·视频处理    


相关软件 产品库推荐
·笔记本 ·台式机 ·服务器
·数码相机 ·手机 ·GPS
·DV摄像机 ·MP3 ·MP4
·CPU ·硬盘 ·内存
·主板 ·显卡 ·显示器
·打印机 ·投影机 ·路由器

还没人留言,抢个先,哈哈!
对"活用 SetSelTextBuf"的评论 - 快速回贴
内容:
  [完成后可按Ctrl+Enter发布]

百度中 活用 SetSelTextBuf 相关内容
Google搜索中 活用 SetSelTextBuf 相关内容
雅虎中 活用 SetSelTextBuf 相关内容
Sogou搜索中 活用 SetSelTextBuf 相关内容

相关软件 最新回复帖子:

·Windows Vista 中卸载软件的不同方式
·没有mysql支持时的替代方案
·一个可以发送附件及HTML格式邮件的PHP类
·AutoCAD打造精致三维鸟笼实例详解
·Photoshop自定义水晶字特效样式
·AutoCAD三维基础实例教程
·PS为黑背景长发美女照片抠图换背
·用Photoshop自制个性摩托车贴花小经验
·轻松几步将美女照片处理为手工素描
·巧用Photoshop画笔轻松绘制创意特效


  相关软件 活用 SetSelTextBuf相关文章
捕捉来自 Thread 的异常 在DEPHI 4.0中实现动画功能
修改与克隆对象属性 控制系统菜单
怎样建立简单的任务栏应用程序 用修改文件时间的方法来加密文件
用Dephi程序维护Paradox 数据表的索引 有“背景”的窗体
自定义快速报表的打印预览窗口 用Delphi实现自定义颜色对话框及其构件
Delphi实用编程经验二则