社区
VCL组件使用和开发
帖子详情
TRichEdit如何高亮显示某行全行?
daydayup234
2006-05-17 04:03:01
比如第二行
...全文
421
17
打赏
收藏
TRichEdit如何高亮显示某行全行?
比如第二行
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
daydayup234
2006-05-19
打赏
举报
回复
^o^……
那么,
BlueDeepOcean
2006-05-19
打赏
举报
回复
明白了,理解上的错误,但是这不怨我。是你说“高亮显示”误导我了。^o^……
BlueDeepOcean
2006-05-19
打赏
举报
回复
但是这是一个过渡步骤,为的是从这一行的第一个字开始,到本行尾。
BlueDeepOcean
2006-05-19
打赏
举报
回复
对!
daydayup234
2006-05-19
打赏
举报
回复
请教:
RichEdit1->Lines->Strings[i].Pos(RichEdit1->Lines->Strings[i].SubString(1,1));
好象永远=1
BlueDeepOcean
2006-05-19
打赏
举报
回复
而你说的是“高亮显示”,在RichEdit中的“高亮显示”就是HideSelection属性,而与该属性相关的就是FindText。既然如此,我就是通过确定你要高亮显示的行的内容实现这一结果的。不对吗?
BlueDeepOcean
2006-05-19
打赏
举报
回复
我这个可以解决的。
if (i == 2)//上面程序段的第4行,你可以通过ComboBox获得真个RichEdit的行数,之后-1就是索引号,将上面的改为if (i == ComboBox1->ItemIndex)即可确定选中行,进行全部选中了。
daydayup234
2006-05-19
打赏
举报
回复
如果有兴趣看看
daydayup234
2006-05-19
打赏
举报
回复
我不是要 查找
我是要定位某个“整”行
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString InputString = InputBox("Input Box", "Prompt", "Default string");
int theLine=InputString.ToIntDef(1);
//theLine是选定的行
RichEdit1->SelStart=?//问
RichEdit1->SelLength=?//问
RichEdit1->SetFocus();
}
不考虑容错
BlueDeepOcean
2006-05-19
打赏
举报
回复
之后
ShowMessage(AnsiString("Start:" + IntToStr(RichEdit1->SelStart) + "\n" +
"Length:" + IntToStr(RichEdit1->SelLength)));
可以显示出来。
BlueDeepOcean
2006-05-19
打赏
举报
回复
援引:
我不是要 查找
我是要定位某个“整”行
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString InputString = InputBox("Input Box", "Prompt", "Default string");
int theLine=InputString.ToIntDef(1);
//theLine是选定的行
RichEdit1->SelStart=?//问
RichEdit1->SelLength=?//问
RichEdit1->SetFocus();
}
不考虑容错
=============================================================================
说明:
如果君就想得到SelStart和SelLength的话,上面的代码改为:
int st,sl,t = 0;
for (int i = 0;i < RichEdit1->Lines->Count;i ++)
{
st = t;
sl = RichEdit1->Lines->Strings[i].Length() + 1;
t = t + sl + 1;
if (i == Edit1->Text.Trim().ToInt() - 1)
{
RichEdit1->SelStart = st;
RichEdit1->SelLength = RichEdit1->Lines->Strings[i].Length();
}
}
BlueDeepOcean
2006-05-19
打赏
举报
回复
谢谢,我还差者远呢……
改过了,你看看是不是吧,如果还不是,那我就太笨了。(下面代码的缺陷是:当你输入的内容超出一行时,RichEdit将自动折行。而此时,如果在Edit中指定该新行号的话,将选择不完整。估计这是和折行有关。除此之外,凭我的感觉,应当是完全符合您的需求的。)
int st,sl,t = 0;
for (int i = 0;i < RichEdit1->Lines->Count;i ++)
{
st = t; //开始位置随着行数增加而增加
sl = RichEdit1->Lines->Strings[i].Length() + 1; //长度
t = t + sl + 1; //获得经过文本的总长度
if (i == Edit1->Text.Trim().ToInt() - 1) //比如Edit输入的是RichEdit的真实的行号,而非行的索引号
{
RichEdit1->HideSelection = false;
RichEdit1->SetFocus();
RichEdit1->SelStart = st;
RichEdit1->SelLength = RichEdit1->Lines->Strings[i].Length();
}
}
daydayup234
2006-05-19
打赏
举报
回复
再谢谢 深蓝
祝愿你早日升星
BlueDeepOcean
2006-05-19
打赏
举报
回复
我就解决看看呗。
BlueDeepOcean
2006-05-18
打赏
举报
回复
上面的那个的确有些缺陷,昨天我也发现了。今天修改了。你看看吧,怎样都能选中。
int st,sl,FindAt,w = 0;
for (int i = 0;i < RichEdit1->Lines->Count;i ++)
{
if (i == 2)
{
for (int j = 0;j < i;j ++)
w = w + RichEdit1->Lines->Strings[j].Length();
st = w + RichEdit1->Lines->Strings[i].Pos(RichEdit1->Lines->Strings[i].SubString(1,1));
StatusBar1->Panels->Items[0]->Text = IntToStr(st);
sl = w + RichEdit1->Lines->Strings[i].Length();
StatusBar1->Panels->Items[1]->Text = IntToStr(sl);
StatusBar1->Panels->Items[2]->Text = RichEdit1->Lines->Strings[i].SubString(1,1);
StatusBar1->Panels->Items[3]->Text = RichEdit1->Lines->Strings[i];
FindAt = RichEdit1->FindTextA(RichEdit1->Lines->Strings[i],st,sl,TSearchTypes() << stMatchCase);
if (FindAt + 1 != 0)
{
RichEdit1->HideSelection = false;
RichEdit1->SetFocus();
RichEdit1->SelStart = FindAt;
RichEdit1->SelLength = RichEdit1->Lines->Strings[i].Length();
StatusBar1->Panels->Items[4]->Text = "Found!";
}
else
{
StatusBar1->Panels->Items[4]->Text = "Bad!";
break;
}
}
}
daydayup234
2006-05-17
打赏
举报
回复
谢谢
你往RichEdit放几个汉字,tab之类试过没
BlueDeepOcean
2006-05-17
打赏
举报
回复
比如说有5行,分别为RichEdit1,RichEidt2,RichEdit3,RichEdit4和RichEdit5;
代码如下:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
RichEdit1->HideSelection = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
int FoundAt;
int st,ed,mm;
st = RichEdit1->Lines->Strings[1].Pos(RichEdit1->Lines->Strings[1].SubString(1,RichEdit1->Lines->Strings[1].Length()));
ed = RichEdit1->Lines->Strings[1].Length();
mm = st + ed;
for (int i = 0;i < RichEdit1->Lines->Count;i ++)
if (i == 1)
{
FoundAt = RichEdit1->FindTextA(RichEdit1->Lines->Strings[i],mm + 1,ed,TSearchTypes()<< stWholeWord); // 此处的mm+1是由于RichEidt每一行后面会自动添加一个空格
if (FoundAt != -1)
{
RichEdit1->SetFocus();
RichEdit1->SelStart = FoundAt;
RichEdit1->SelLength = RichEdit1->Lines->Strings[i].Length();
}
}
}
//---------------------------------------------------------------------------
Rich
Edit
关键字变色,注释变色
“关键字变色”是指在使用Rich
Edit
时,编辑器会自动识别并
高亮显示
编程语言中的关键字。这有助于程序员快速识别代码结构,提高代码可读性。例如,当编写Java代码时,“public”,“class”,“void”等关键字会被...
Delphi控制
TRich
Edit
组件文字内容滚动..rar
在Delphi编程环境中,
TRich
Edit
是一个非常常用的组件,它用于显示和编辑多格式文本,支持丰富的文本格式,如字体、颜色、段落样式等。本教程主要关注如何在Delphi中控制
TRich
Edit
组件的文字内容滚动,这涉及到对...
Delphi获取
TRich
Edit
控件光标所在的行号..rar
在Delphi编程环境中,
TRich
Edit
控件是一个非常常用的组件,用于显示和编辑多行文本。它提供了丰富的文本格式化功能,比如字体、颜色、样式等。然而,有时候我们需要获取到用户在
TRich
Edit
中光标所在的行号,以便进行...
Rich
Edit
选中行
高亮显示
及加入超链接-代码
当用户在Rich
Edit
中选择一行文本时,我们希望这一行能够突出显示,通常是改变背景颜色。这可以通过监听`OnSelChange`事件来实现。在事件处理函数中,我们可以获取选中文本的起始和结束位置,然后利用`TextRange`对象...
delphi 控件rich
edit
操作,类似记事本查找,替换,字体设计等
// 可以
高亮显示
,或者执行其他操作 Break; end else Inc(StartPos); end; end; ``` ### 替换操作 替换功能可以通过`ReplaceText`方法实现。此方法会替换所有找到的匹配项。示例代码如下: ```delphi var ...
VCL组件使用和开发
604
社区成员
13,457
社区内容
发帖
与我相关
我的任务
VCL组件使用和开发
C++ Builder VCL组件使用和开发
复制链接
扫一扫
分享
社区描述
C++ Builder VCL组件使用和开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章