我使用 TMemo 来显示多行文本。
我希望能够通过快捷键 Ctrl + B 将 TMemo 中所选文本的属性改为粗体。
例如,用户在 TMemo 中输入“Hello, how are you?”,我希望当用户选择“How”并按下 Ctrl + B 时,只有“How”以粗体出现在 TMemo 中。
我使用的是 Delphi 7。
请给予建议以获得解决方案。感谢您的帮助。
你不能在备忘录控件中格式化文本。你需要一个富文本编辑控件,TRichEdit
。
为了使当前选择的文本加粗,你需要这样做:
RichEdit.SelAttributes.Style := RichEdit.SelAttributes.Style + [fsBold];
响应类似于CTRL+A快捷键的代码的首选方法是使用操作。将TActionList
添加到窗体中并将一个操作添加到该操作列表中。将操作的OnExecute
事件处理程序设置为指向执行所选文本加粗的代码。将Shortcut
属性设置为Ctrl+A
。使用操作以便您可以集中控制用户事件。通常可能还有一个工具按钮、菜单项和上下文菜单项执行相同的操作,这就是操作发挥作用的地方。
这是我写的一个程序的一部分,其中使用了RichEdit;一部分文本以黑色显示,一部分以蓝色显示,可能还有一部分以粗体红色显示。'Text'是RichEdit的一个字段。
procedure TWhatever.InsertText (const atext, btext, ctext: string);
begin
with RichEdit1 do
begin
selstart:= length (text);
sellength:= 0;
SelAttributes.Color:= clBlack;
seltext:= '[' + atext + '] ';
selstart:= length (text);
sellength:= 0;
SelAttributes.Color:= clBlue;
seltext:= btext + ' ';
if ctext <> '' then
begin // trap non-existent answers
selstart:= length (text);
sellength:= 0;
SelAttributes.Color:= clRed;
SelAttributes.Style:= [fsBold];
seltext:= ctext + ' ';
SelAttributes.Style:= [];
end;
lines.add (''); // new line
end;
end;
TMemo
完成此操作。使用TRichEdit
很容易。 - David HeffernanOnKeyDown
事件中尝试以下代码:if (((GetKeyState(VK_control) AND 128)=128) AND (key=Ord('B'))) then begin //你的过程 end;
- Shirish11