gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:17:05 25 4
gpt4 key购买 nike

有没有办法将图像放置在表单背景中并能够平铺或居中?

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

我尝试了 rmControls,但无法在图像上放置任何内容。

最佳答案

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

procedure TMyForm.FormPaint(Sender: TObject);
var
Bitmap: TBitmap;
Left, Top: Integer;
begin
Bitmap := TBitmap.Create;
Try
Bitmap.LoadFromFile('C:\desktop\bitmap.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;

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

输出如下所示:

enter image description here

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

procedure TMyForm.FormCreate(Sender: TObject);
begin
FBitmap := TBitmap.Create;
FBitmap.LoadFromFile('C:\desktop\bitmap.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, Top, 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;

关于delphi - 表单背景中的平铺/中心图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15132326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com