gpt4 book ai didi

delphi-7 - 将 BS(退格键)发送到 TMemo

转载 作者:行者123 更新时间:2023-12-03 15:48:37 25 4
gpt4 key购买 nike

我想将 BackSpace 控制字符发送到 TMemo,就像用户实际按下 BackSpace 按钮一样。

我的备忘录是只读的,如果我单击按钮,它应该删除备忘录中的最后一个字符。我想在不使用 Memo.Text := ... 的情况下做到这一点(所以没有重绘或开始更新等)这可能吗?如果可以,怎么做?

感谢您的帮助。

编辑:我尝试添加 #8 但没有运气...

最佳答案

将按键发送到只读备忘录将不起作用。由于备忘录是只读的,按键将被忽略。要以有效的方式删除备忘录的最后一个字符(即不替换整个内容),您可以使用 EM_SETSELEM_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;

或者,如果您更喜欢包含这些 Windows 消息的纯 VCL 版本:

begin
Memo1.SelStart := Memo1.GetTextLen-1;
Memo1.SelLength := 1;
Memo1.SelText := '';
end;

后者可能会发送更多的 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;

关于delphi-7 - 将 BS(退格键)发送到 TMemo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11797687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com