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);
效果如下: