在Delphi XE2应用程序中双击TStaticText可将标题复制到剪贴板
双击表单上的TStaticText会将该TStaticText的标题复制到剪贴板。不需要双击事件 复制步骤:在Delphi XE2应用程序中双击TStaticText可将标题复制到剪贴板,delphi,delphi-xe2,Delphi,Delphi Xe2,双击表单上的TStaticText会将该TStaticText的标题复制到剪贴板。不需要双击事件 复制步骤: 使用Win64和Delphi XE2更新4 创建VCL表单应用程序 在表格上放置一个TEdit 在表单上放置一个TStaticText。将标题更改为“TStaticText1Caption” 在表单上放置第二个TStaticText。将标题更改为“TStaticText2Caption” 运行程序(F9) 在TEdit中键入一些文本。全部选中并通过CTRL+C进行复制 删除TEdit中
- 使用Win64和Delphi XE2更新4
- 创建VCL表单应用程序
- 在表格上放置一个TEdit
- 在表单上放置一个TStaticText。将标题更改为“TStaticText1Caption”
- 在表单上放置第二个TStaticText。将标题更改为“TStaticText2Caption”
- 运行程序(F9)
- 在TEdit中键入一些文本。全部选中并通过CTRL+C进行复制
- 删除TEdit中的文本。粘贴它以验证文本是否是您复制的文本
- 删除TEdit中的文本
- 双击任一TStaticText
- 将文本粘贴到TEdit中。请注意,它不是原始复制的文本,而是TStaticText的标题李>
procedure TForm1.StaticText1DblClick(Sender: TObject);
begin
Edit1.Text := 'Hello';
end;
procedure TForm1.StaticText2DblClick(Sender: TObject);
begin
Edit1.Text := 'World';
end;
这不会发生在TLabel或我尝试过的任何其他VCL控件上
出于视觉设计的目的,我们的表单上有很多TStaticTexts,而改为TLabels则不是一个选项
有人知道如何防止这种情况发生吗?这不是delphi bug,这种行为是由TStaticText VCL组件创建的引起的 从Windows Vista开始,如果设置了SS_NOTIFY样式,则双击静态文本控件时,静态文本控件会自动将其内容复制到剪贴板(SS_NOTIFY样式由TCustomStaticText组件的CreateParams方法设置) 推荐讲座 作为解决方法,您可以删除覆盖CreateParams方法的SS_NOTIFY样式,如下所示
type
TStaticText = class(Vcl.StdCtrls.TStaticText)
protected
procedure CreateParams(var Params: TCreateParams); override;
end;
TForm1 = class(TForm)
StaticText1: TStaticText;
private
public
end;
var
Form1: TForm42;
implementation
{$R *.dfm}
{ TStaticText }
procedure TStaticText.CreateParams(var Params: TCreateParams);
begin
inherited;
with Params do
Style := Style and not SS_NOTIFY;
end;
注意:如果从控件中删除此样式,当用户单击或双击控件时,您将不会收到STN_CLICKED、STN_DBLCLK、STN_DISABLE和STN_ENABLE通知代码。根据您链接的文章,有一种替代方法:“如果您想禁用
SS\u NOTIFY
静态控件上的双击复制功能,您必须对静态控件进行子类化,并自行执行单击操作。“是的,这也是一个有效的选择。我感谢你的回答。我想这是一个内部的变化,VCL控件是如何创建与较新的德尔福相比,较旧的德尔福。我们在从Delphi6到XE2的转换过程中遇到了很多小问题。我们必须找到另一种可能导致问题的方法。