3

我使用 TMemo 能够显示多行。

我想使用快捷键 Ctrl+B 将 TMemo 中的选定文本属性更改为粗体。

例如,用户输入“你好,你好吗?” 在 Tmemo 中,我希望当用户选择“How”并按 Ctrl+B 时,该 TMemo 中应该只以粗体显示“How”。

我使用德尔福 7。

请咨询以获得解决方案。感谢帮助。

4

2 回答 2

3

您不能格式化备忘录控件中的文本。您需要一个丰富的编辑控件,TRichEdit.

为了使当前选择加粗,您可以这样做:

RichEdit.SelAttributes.Style := RichEdit.SelAttributes.Style + [fsBold];

The preferred way to invoke code in response to a shortcut like CTRL+A is to use actions. Add a TActionList to the form and add an action to that action list. Set the action's OnExecute event handler to point at code that performs the bolding of the selected text. Set the Shortcut property to Ctrl+A. Use actions so that you can centralise the control of user events. Typically there may also be a tool button, a menu item and a context menu item that performed the same action and this is where actions come into their own.

于 2011-12-26T14:25:07.653 回答
2

这是我编写的使用 RichEdit 的程序的一部分;部分行显示为黑色,部分显示为蓝色,可能部分显示为粗体红色。“文本”是 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;
于 2011-12-26T11:21:42.487 回答