如何为Edit (Delphi)设置背景图片

7
如何在编辑框背景中添加图片?
1个回答

15

这是完全可能的。在您的表单中,定义

private
  { Private declarations }
  FBitmap: TBitmap;
  FBrush: HBRUSH;
protected
  procedure WndProc(var Message: TMessage); override;      

并执行

procedure TForm1.FormCreate(Sender: TObject);
begin
  FBitmap := TBitmap.Create;
  FBitmap.LoadFromFile('C:\Users\Andreas Rejbrand\Pictures\AS20Utv.bmp');
  FBrush := 0;
  FBrush := CreatePatternBrush(FBitmap.Handle);
end;

并且

procedure TForm1.WndProc(var Message: TMessage);
begin
  inherited;
  case Message.Msg of
    WM_CTLCOLOREDIT, WM_CTLCOLORSTATIC:
      if (Message.LParam = Edit1.Handle) and (FBrush <> 0) then
      begin
        SetBkMode(Message.WParam, TRANSPARENT);
        Message.Result := FBrush;
      end;
  end;
end;

当然你可以将此内容封装到自己的组件中,比如说TEditEx。如果我有时间的话,我可能会这样做。(请注意,没有必要购买来自第三方公司的昂贵(而且可能不是那么高质量)的组件包)。

自定义编辑器背景


2
为什么要使用WM_CTLCOLOREDIT?当控件被禁用时它不会被调用。为什么不使用WM_ERASEBACKGROUND和WM_PRINTCLIENT呢? - David Heffernan
+1 因为有人对一个可用的代码进行了负评!它是有效的。 - VibeeshanRC
要明确的是,当控件启用时,将发送WM_CTLCOLOREDIT消息,而当其禁用时,则会发送WM_CTLCOLORSTATIC消息。为了清楚地表明该控件不接受输入,最好对后者进行灰度处理(或类似处理)。我看到Andreas现在已经编辑了代码,以处理WM_CTLCOLORSTATIC和WM_CTLCOLOREDIT。 - David Heffernan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接