我的一个字符串前面是'&&'开头,但用showmessage()显示的时候,总是把第一个&显示成加速键功能,可是我不想这样呀。
我就想显示成'&&';怎么办呀

解决方案 »

  1.   

    把字符串改成'&&&&'开头
      

  2.   

      showmessage('&&&&');
      

  3.   

    ShowMessage是Delphi自己创建的窗体
    类名叫TMessageForm,可以Dialogs.pas单元看看源代码
    type
      TMessageForm = class(TForm)
      private
        Message: TLabel;
        procedure HelpButtonClick(Sender: TObject);
      protected
        procedure CustomKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
        procedure WriteToClipBoard(Text: String);
        function GetFormText: String;
      public
        constructor CreateNew(AOwner: TComponent); reintroduce;
      end;明显“Message: TLabel”就是用来显示传入的字符串。
    TLabel类有一个ShowAccelChar属性可以控制是否处理显示快捷字符。
    如果有办法获得这个Message实例就可以设置它的ShowAccelChar属性解决楼主的问题。
    Screen是VCL窗体的一个管理器,可以遍历当前的窗体也可以找到哪个窗体被激活
    查一下帮助可以看到有一个OnActiveFormChange事件,顾名思义就是激活窗体改变的事件
    那么就动手吧:
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Screen.OnActiveFormChange := ScreenActiveFormChange;
    end;procedure TForm1.ScreenActiveFormChange(Sender: TObject);
    var
      I: Integer;
      vActiveForm: TForm;
    begin
      vActiveForm := Screen.ActiveForm;
      if Assigned(vActiveForm) and
        SameText(vActiveForm.ClassName, 'TMessageForm') then
        for I := 0 to vActiveForm.ComponentCount - 1 do
          if vActiveForm.Components[I] is TLabel then
            TLabel(vActiveForm.Components[I]).ShowAccelChar := False;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      ShowMessage('&Zswang 路过');
    end;