实例说明
本例是个光标应用的简单技巧,希望通过这个例子的学习后能举一反三。Delphi中像这样简单而又实用的例子还有很多,只要平时多注意积累就能写出简洁、执行效率高的代码。
编程思路
直接向Memo组件发送消息EM_LineFromChar并检测返回值,即可获知此组件中光标所在的行号,向Memo组件发送消息EM_LineIndex并检测返回值即可获知此组件中光标所在的列号。
编程步骤
先在Form上放置三个Label组件,并在程序代码的前面声明下面这三个变量为整型数,即:
VarLpos,Cpos,Linelength:integer;
其中Lpos是行的值(按照Memo的规定,第一行为O),Cpos是字符的位置,LineLength是当前行的字符总个数。然后,再将下面的七行程序代码分别加入Memo1的OnMouseDown和OnKeyDown的事件代码处即可。
Lops:=SendMessage(Memo1.Handle,EM_LineFromChar,Memol.SelStart,0);
Cpos:=SendMessage(Menol.Handle,EM_LineIndex,Lpos,0);
LineLength:=SendMessage(Memol.Handle,EM_LineLength,Cpos,0);
Cpos:=Memol.SelStart-CPos;
Label1.Caption:=IntToStr(ipos);
Label2.Caption:=IntToStr(cpos);
Label3.Caption:=IntToStr(linelength);
完成后,在执行程序时,随着在Memo组件中的编辑操作,Labell、Label2和Label3就将显示出相对应的当前行值、字符位置与当前行的字符总个数了。
编程总结
请大家结合“获取RichEdit组件中光标所在的行号”一起学习,实际上两者极为相似。
附另一篇:
一、如何得知当前行号
用RichEdit(或者memo)控件制作文本编辑器时,通过访问lines
count属性可以得到总行数,但是若想知道光标当前所在行的行号就麻烦了,因为delphi没有提供这个属性。要实现这个编辑器必备功能,就须调用
em_ LineFromChar。请试试下面的程序。
先在窗口中布置一个RichEdit或者memo(命名为editor),以及一个button。在button的onclick事件中写入下列代码。
var
CurrentLine:Integer;
begin
CurrentLine:=Editor Perform(em_ LineFromChar,SFFFF,0);
Application MessageBox(PChar(′当前行号是′+IntToStr(CurrentLine)),′消息′,mb_ iconinformation);
end;
需要注意的是,第一行的行号为零。
二、如何撤消操作(undo)
对于memo来说,实现undo是不需编程的,只要让popupmenu属性为空,运行时就能用鼠标右键激活一个常用操作菜单,其中包括撤消、剪切、复制、粘贴、删除和全选六项。
但可惜的是,这一招对于功能强大的RichEdit控件居然行不通,害得我们还要自己设计一个popupmemu。当你用
CutToClipBoard等语句轻松而顺利地完成了“剪切”等功能,接着便会无奈地发现,竟找不到undo或cancel之类的语句来执行“撤消”。
这时你需要这样处理:
RichEdit1 Perform(EM_UNDO,0,0);
另外还应检查是否允许撤消,从而开启或关闭弹出菜单中的“撤消”项:
Undo1 Enabled:=RichEdit Perform(EM_CANUNDO,0,0)<>0;
以上程序在Delphi3中调试通过。
分享到:
相关推荐
在Delphi编程环境中,`TMemo`控件和`TStringList`类是两种非常常见的数据处理工具。`TMemo`通常用于显示和编辑多行文本,而`TStringList`则是一个动态数组,用于存储和操作字符串列表。在本篇文章中,我们将深入探讨...
在Delphi中,我们可以使用`WM_GETTEXT`,`WM_GETTEXTLENGTH`等消息来获取Memo中的文本信息,但要获取行和列,我们需要处理`WM_CHAR`或`WM_KEYDOWN`消息。 Delphi中的Memo组件实际上是基于Windows API中的`RichEdit`...
`Memo`控件是Delphi或C++Builder等RAD Studio开发环境中常用的一种组件,用于显示、编辑和输入多行文本。它在标准组件面板(Standard)中可找到,是对单行`Edit`控件功能的扩展。下面我们将深入探讨`Memo`控件的主要...
在Delphi编程环境中,TRichEdit控件是一个非常常用的组件,用于显示和编辑多行文本。它提供了丰富的文本格式化功能,比如字体、颜色、样式等。然而,有时候我们需要获取到用户在TRichEdit中光标所在的行号,以便进行...
在完成上述步骤后,运行项目(d0505.dpr),你应该能看到九九乘法表被正确地显示在Memo组件中。通过这个简单的例子,我们不仅学习了Delphi中静态二维数组的声明、初始化和操作,还复习了循环控制和字符串处理的基本...
Delphi统计文本框内容的行列数,统计出文字有多少行、多少列,具体请看下面的代码://得到行号和列号 procedure TForm1.Button6Click(Sender: TObject); var Hang,Lie,Num,CharsLine:longint; begin ...
首先,我们关注 Memo 组件,它是Delphi中用于文本输入和显示的重要控件。Memo的主要属性包括: 1. Lines:这个属性提供了一个TStringList对象,用于访问和编辑Memo中每一行的内容。你可以通过Lines属性添加、删除或...
### MP3歌词显示探密——Delphi实现 #### 一、引言 随着数字音频技术的发展,MP3格式因其高质量的音质和较小的文件体积而受到广泛欢迎。对于喜欢边听音乐边看歌词的用户来说,能够实现在播放MP3的同时同步显示歌词...
在拷贝文件过程中显示进度,可以使用`TProgressIndicator`组件,或者手动实现进度条逻辑,定时更新进度显示。 #### 21. 设置斑马线 要在cxGrid中设置斑马线效果,可以通过在`TableView`的`OnRowStyle`事件中根据行...
3. **文本显示**:TMemo控件是Delphi中常用的文本显示组件,它可以显示大量文本并支持滚动。通过设置它的`Lines`属性,我们可以加载或保存文本文件的内容。为了提高阅读体验,可以调整字体、颜色和行距。 4. **搜索...
- **Lines**: 表示Memo中每行文本的字符串数组。 - **WantReturns**: 允许或禁止保存回车键输入。 **示例**: ```delphi Memo1.Lines.Add('这是第一行'); Memo1.Lines.Add('这是第二行'); ``` ##### Main Menu控件...
这个编程题展示了如何在Delphi中处理用户输入,并将满足特定条件的数字显示到Memo控件中: ```delphi procedure TForm1.Button1Click(Sender: TObject); var m, n, i: integer; begin m := StrToInt(Edit1.Text);...
通过发送 `EM_LineFromChar`, `EM_LineIndex`, `EM_LineLength` 等消息来获取 Memo 控件中鼠标点击位置所在的行号、列号等信息。 **代码示例:** ```delphi procedure TForm1.Memo1MouseDown(Sender: TObject; ...
然而,相较于专业的字处理软件,`Memo`组件缺乏光标位置、所在行和列的信息显示,这在一定程度上限制了其功能的全面性。 为解决这一问题,可以通过添加简短的程序代码实现光标位置信息的实时显示。具体步骤如下: ...
在TComboBox中显示栏 在TComboBox内绘制位图 在TDateTimePicker内显示星期几 在TFileListBox内显示多列 在TListBox中创建彩色项目 在TListBox内拖拽 在TListbox内绘制位图 在TListview内执行二进制搜索 在TListView...
实例九---在IntraWeb中显示图片数据 实例二--渐变色和动画矩形效果 实例五--编织带 实例八--动画屏保 实例六--镜框效果 实例十--matlab结合 实例十--电子地图开发之GIS组件--Mapobject深入开发 ...
// Edit显示行号 // ------------------------------------------------------------------------------ // 去除空行 // Memo1.Text := StringReplace(Memo1.Text, #13#10#13#10, #13#10, [rfReplaceAll]); { //...
Memo组件是Delphi中的一个文本编辑控件,用于显示多行文本。它提供了一系列的功能属性,如: - **Lines**:此属性表示Memo对象中的所有文本行集合。 - **MaxLength**:该属性设置或获取Memo组件允许的最大字符数。 ...
{* 缩短显示不下的长路径名} function GetRelativePath(Source, Dest: string): string; {测试通过} {* 取两个目录的相对路径,注意串尾不能是'\'字符!} procedure RunFile(const FName: string; Handle: THandle ...