我编写了一个记事本,现在要实现一个功能:
一段文字,选中几个字设置为粗体后,在菜单上就会有个“勾”,再按一下,就会取消粗体,“勾”也会消失,选中另外的没有设置粗体的文字,就没有显示“勾”,按一下,便会把字体设为粗体,也会在菜单上显示“勾”,大概就是这样。
                                     
                                                高手帮忙啊!

解决方案 »

  1.   

    Delphi的 Demos 里有一个示例。 在Demos\RichEdit目录下。
      

  2.   

    把上面说的Demos里的那个粗体的ToolButton换成 CheckBox,应该不是什么难事。
      

  3.   

    哦,不是CheckBox,是MunuItem的Checked属性。
      

  4.   

    是MAINMENU,不是CheckBox,是子菜单旁边的小勾
      

  5.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls, Menus;type
      TForm1 = class(TForm)
        MainMenu1: TMainMenu;
        Styles1: TMenuItem;
        Bold1: TMenuItem;
        RichEdit1: TRichEdit;
        procedure Bold1Click(Sender: TObject);
        procedure RichEdit1SelectionChange(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Bold1Click(Sender: TObject);
    begin
      if Bold1.Checked then
         begin
         Bold1.Checked := false;
         RichEdit1.SelAttributes.Style := RichEdit1.SelAttributes.Style - [fsBold];
         end
         else
         begin
         Bold1.Checked := True;
         RichEdit1.SelAttributes.Style := RichEdit1.SelAttributes.Style + [fsBold];
         end;end;procedure TForm1.RichEdit1SelectionChange(Sender: TObject);
    begin
      Bold1.Checked := fsBold in RichEdit1.SelAttributes.Style;
    end;end.
      

  6.   

    关键就在这里:procedure TForm1.RichEdit1SelectionChange(Sender: TObject);
                              ~~~~~~~~~~~~~~~这个事件,就是响应你的Select文字有变化
    begin
      Bold1.Checked := fsBold in RichEdit1.SelAttributes.Style;
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~菜单项是否标为True,决定于选中文字是否是粗体
    end;