在文本编辑器里如何实现防止关键字的删除?

sky_234 2005-08-05 11:06:53
在文本编辑器里,有什么办法能让自定义的关键字不能被用户删除,各位大哥有没有什么思路或方法啊?
...全文
105 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hellolongbin 2005-08-08
  • 打赏
  • 举报
回复
while (memo1.SelText[1] in ['a'..'z','A'..'Z','-']) and (memo1.SelStart>0)

后半句是防止光标走到memo的开始 死循环的
sky_234 2005-08-05
  • 打赏
  • 举报
回复
如果有readonly属性,那是对所有的文本内容进行读写控制,而我只想对文本内容的关键字部分进行只读控制,而对其它的内容可以自由更改,这该如何控制啊?
hqhhh 2005-08-05
  • 打赏
  • 举报
回复
你可以设置其Readonly=True 或 Enable= False
hellolongbin 2005-08-05
  • 打赏
  • 举报
回复
雏形,自己看着改吧
窗体上放一个memo,一个listbox(用来存放关键字)

procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var s:string;i,position,len:integer;
begin
if key=46 then
begin
s:='';
Position:=memo1.SelStart;
len:=Memo1.SelLength;
memo1.SelStart:=Memo1.SelStart-1;
memo1.SelLength:=1;
//取光标所在位置前半段单词
while (memo1.SelText[1] in ['a'..'z','A'..'Z','-']) and (memo1.SelStart>0) do
begin
s:=memo1.SelText+s;
memo1.SelStart:=Memo1.SelStart-1;
memo1.SelLength:=1;
end;
memo1.SelStart:=Position;
memo1.SelLength:=1;
//取光标所在位置后半段单词
while memo1.SelText[1] in ['a'..'z','A'..'Z','-'] do
begin
s:=s+memo1.SelText;
memo1.SelStart:=Memo1.SelStart+1;
memo1.SelLength:=1;
end;
//复原
memo1.SelStart:=Position;
memo1.SelLength:=len;

//判断是否关键词,可自己修改
if ListBox1.Items.IndexOf(LowerCase(s))>-1 then key:=0;
end;
end;
xixuemao 2005-08-05
  • 打赏
  • 举报
回复
还有就是是否选中了文本?

如果光标正好在关键词中间怎么办?

.......

等等,情况比较复杂,不知道有没有好的方法。
hellolongbin 2005-08-05
  • 打赏
  • 举报
回复
我的想法和楼上一样,根据光标位置找出当前词,然后到判断当前词是不是在词库内,如果是就把key置为0。
在keydown事件里写。估计麻烦在取当前词上
xixuemao 2005-08-05
  • 打赏
  • 举报
回复
是不是需要在keypress里判断光标所在位置,已经当前位置的字是什么呢?

没想到什么好办法

继续关注...........

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧