Ben*_*iss 3 delphi vcl delphi-7
我想将一个BackSpace控件字符发送到TMemo,就像用户实际按下BackSpace按钮一样.
我的备忘录是只读的,如果我点击一个按钮,它应该删除备忘录中的最后一个字符.我想这样做而不使用Memo.Text:= ...(所以没有重绘或初始更新等)这是可能的,如果是的话,怎么样?
谢谢您的帮助.
编辑:我试图添加#8但没有运气...
将按键发送到只读备忘录将不起作用.按键将被忽略,因为备忘录是只读的.要以有效的方式删除备忘录的最终字符,即不替换整个内容,您可以使用EM_SETSEL和EM_REPLACESEL.
var
Len: Integer;
begin
Len := Memo1.GetTextLen;
SendMessage(Memo1.Handle, EM_SETSEL, Len-1, Len);
SendMessage(Memo1.Handle, EM_REPLACESEL, 0, LPARAM(PChar('')));
end;
Run Code Online (Sandbox Code Playgroud)
或者,如果您更喜欢包含这些Windows消息的纯VCL版本:
begin
Memo1.SelStart := Memo1.GetTextLen-1;
Memo1.SelLength := 1;
Memo1.SelText := '';
end;
Run Code Online (Sandbox Code Playgroud)
后者可能会发送更多的Windows消息,但更容易阅读.我更喜欢后一种选择.
我可以看到一个可能的问题是,它可能无法通过换行符完成您想要的操作.由于Windows换行符是两个字符(CR + LF),如果备忘录中的最后一个字符是LF,则需要删除两个字符.为了解决这个问题,你可以这样做:
begin
Memo1.SelStart := Memo1.GetTextLen-1;
Memo1.SelLength := 1;
if Memo1.SelText=#10 then
begin
Memo1.SelStart := Memo1.SelStart-1;
Memo1.SelLength := 2;
end;
Memo1.SelText := '';
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1494 次 |
| 最近记录: |