使用delphi11编写一个基于xls作为数据库的照片展示程序

1、创建xls文档可以参考前一篇博客,并使用wps将文档保存为2003格式xls后缀。

2、在form上面放置adoconnection、adotable、datasource、spinedit、timer、checkbox、image、4个button组件。

image的设置:


  Image1.Align := alClient;
  Image1.Center := True;
 

编写代码:

1、 在unit中use Vcl.Imaging.PngImage单元。

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB,
  Data.Win.ADODB, Vcl.StdCtrls, Vcl.Grids, Vcl.DBGrids, Vcl.ExtCtrls,Vcl.Imaging.PngImage;

2、在1button的onclick事件中。

    Conn.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;' + 'Data Source=C:\delphicode\shortcuts\Win32\Debug\image_info.xls;' + 'Extended Properties="Excel 8.0;HDR=Yes;IMEX=1";';

    Conn.LoginPrompt := false;

    Conn.Connected := true;

    ADOTabXLS.Connection := Conn;

    ADOTabXLS.TableName := '[' + 'Sheet' + '$]';

    ADOTabXLS.Active := true;

    DSXLS.DataSet := ADOTabXLS;

    GridXLS.DataSource := DSXLS;

3、等比例缩放:

procedure TForm6.LoadAndScalePngImage(const FilePath: string; Image: TImage);
var
  Png: TPngImage;
  Bitmap: TBitmap;
  ScaleWidth, ScaleHeight: Integer;
  AspectRatio: Double;
begin
  Png := TPngImage.Create;
  Bitmap := TBitmap.Create;
  try
    Png.LoadFromFile(FilePath);

    // 计算目标大小,保持等比例缩放
    AspectRatio := Png.Width / Png.Height;
    if (Image.Width / Image.Height) > AspectRatio then
    begin
      ScaleHeight := Image.Height;
      ScaleWidth := Round(ScaleHeight * AspectRatio);
    end
    else
    begin
      ScaleWidth := Image.Width;
      ScaleHeight := Round(ScaleWidth / AspectRatio);
    end;

    // 调整 Bitmap 大小并绘制缩放后的图像
    Bitmap.SetSize(ScaleWidth, ScaleHeight);
    Bitmap.Canvas.StretchDraw(Rect(0, 0, ScaleWidth, ScaleHeight), Png);

    // 将缩放后的 Bitmap 分配给 TImage
    Image.Picture.Assign(Bitmap);
  finally
    Png.Free;
    Bitmap.Free;
  end;
end;

4、在2button的onclick事件中,

ADOTabXLS.Next;
//Image1.Picture.LoadFromFile(ADOTabXLS.FieldByName('Path').AsString);
LoadAndScalePngImage(ADOTabXLS.FieldByName('Path').AsString, Image1);

5、在3button的onclick事件中。

ADOTabXLS.Prior;
//Image1.Picture.LoadFromFile(ADOTabXLS.FieldByName('Path').AsString);
LoadAndScalePngImage(ADOTabXLS.FieldByName('Path').AsString, Image1);

效果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值