加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 表单背景中的平铺/中心图像

发布时间:2020-12-15 09:42:10 所属栏目:大数据 来源:网络整理
导读:有没有办法将图像放置在表单背景中并能够将其平铺或居中? 此外,我需要将其他组件放在图像的顶部. 我尝试过rmControls但是我不能在图像上放置任何东西. 解决方法 您可以在窗体的OnPaint处理程序中绘制图像.这是一个简单的平铺示例: procedure TMyForm.FormP
有没有办法将图像放置在表单背景中并能够将其平铺或居中?

此外,我需要将其他组件放在图像的顶部.

我尝试过rmControls但是我不能在图像上放置任何东西.

解决方法

您可以在窗体的OnPaint处理程序中绘制图像.这是一个简单的平铺示例:

procedure TMyForm.FormPaint(Sender: TObject);
var
  Bitmap: TBitmap;
  Left,Top: Integer;
begin
  Bitmap := TBitmap.Create;
  Try
    Bitmap.LoadFromFile('C:desktopbitmap.bmp');
    Left := 0;
    while Left<Width do begin
      Top := 0;
      while Top<Height do begin
        Canvas.Draw(Left,Top,Bitmap);
        inc(Top,Bitmap.Height);
      end;
      inc(Left,Bitmap.Width);
    end;
  Finally
    Bitmap.Free;
  End;
end;

在实际代码中,您可能希望缓存位图而不是每次都加载它.我相信你可以弄清楚如何调整它以使位图居中.

输出如下所示:

但是,由于这是表单的背景,因此在WM_ERASEBACKGROUND的处理程序中进行绘制要好得多.这也将确保您在调整大小时不会出现任何闪烁.这是演示此程序的更高级版本,以及拉伸绘制选项.

procedure TMyForm.FormCreate(Sender: TObject);
begin
  FBitmap := TBitmap.Create;
  FBitmap.LoadFromFile('C:desktopbitmap.bmp');
end;

procedure TMyForm.RadioGroup1Click(Sender: TObject);
begin
  Invalidate;
end;

procedure TMyForm.FormResize(Sender: TObject);
begin
  //needed for stretch drawing
  Invalidate;
end;

procedure TMyForm.PaintTile(Canvas: TCanvas);
var
  Left,Top: Integer;
begin
  Left := 0;
  while Left<Width do begin
    Top := 0;
    while Top<Height do begin
      Canvas.Draw(Left,FBitmap);
      inc(Top,FBitmap.Height);
    end;
    inc(Left,FBitmap.Width);
  end;
end;

procedure TMyForm.PaintStretch(Canvas: TCanvas);
begin
  Canvas.StretchDraw(ClientRect,FBitmap);
end;

procedure TMyForm.WMEraseBkgnd(var Message: TWmEraseBkgnd);
var
  Canvas: TCanvas;
begin
  Canvas := TCanvas.Create;
  Try
    Canvas.Handle := Message.DC;
    case RadioGroup1.ItemIndex of
    0:
      PaintTile(Canvas);
    1:
      PaintStretch(Canvas);
    end;
  Finally
    Canvas.Free;
  End;
  Message.Result := 1;
end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读