使用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单元。

usesWinapi.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);
varPng: TPngImage;Bitmap: TBitmap;ScaleWidth, ScaleHeight: Integer;AspectRatio: Double;
beginPng := TPngImage.Create;Bitmap := TBitmap.Create;tryPng.LoadFromFile(FilePath);// 计算目标大小,保持等比例缩放AspectRatio := Png.Width / Png.Height;if (Image.Width / Image.Height) > AspectRatio thenbeginScaleHeight := Image.Height;ScaleWidth := Round(ScaleHeight * AspectRatio);endelsebeginScaleWidth := Image.Width;ScaleHeight := Round(ScaleWidth / AspectRatio);end;// 调整 Bitmap 大小并绘制缩放后的图像Bitmap.SetSize(ScaleWidth, ScaleHeight);Bitmap.Canvas.StretchDraw(Rect(0, 0, ScaleWidth, ScaleHeight), Png);// 将缩放后的 Bitmap 分配给 TImageImage.Picture.Assign(Bitmap);finallyPng.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);

效果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/14956.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年,企业的人才管理怎么做?这5点是关键!

当今时代,各行各业都面临着激烈的竞争。这些竞争归根结底都是人才的竞争。企业若想在竞争中掌握主动权,实现基业长青,就必须努力留住人才,并充分发挥他们的积极性、主动性和创造性。因此,做好人才管理是企业实现长期可…

如何找到docker的run(启动命令)

使用python三方库进行 需要安装python解释器 安装runlike安装包 pip3 install runlike 运行命令 runlike -p <container_name> # 后面可以是容器名和容器id&#xff0c;-p参数是显示自动换行实验 使用docker启动一个jenkins 启动命令为 docker run -d \ -p 9002:80…

机器学习 - 特征监控

特征监控的定义 特征监控是机器学习模型在生产环境中持续监控输入特征的过程&#xff0c;确保输入数据特征的分布和性质与模型训练时一致&#xff0c;从而保证模型在生产环境中的表现稳定和可靠。特征监控通过检测数据的漂移、变化和异常&#xff0c;帮助识别潜在的问题并采取…

无线领夹麦克风哪个品牌音质最好,揭秘无线领夹麦哪个牌子好用

​随着社交媒体和内容创作的兴起&#xff0c;清晰可靠的音频捕捉已成为打造高品质作品的关键要素。无线领夹麦克风因其轻巧设计和用户友好的接口而受到青睐&#xff0c;它能够确保你的声音在任何环境下都能被完美捕捉。经过精心测试和对比&#xff0c;以下几款无线领夹麦克风是…

Socket CAN中ctrlmode有哪些?

在Linux中,socketcan 的 ctrlmode 是一个用于配置CAN设备控制模式的标志字段。该字段的值由一组标志位组成,这些标志位控制CAN设备的各种操作模式。以下是一些常见的 ctrlmode 标志及其含义: CAN_CTRLMODE_LOOPBACK: 描述:启用回环模式。作用:设备在发送帧的同时会接收它…

大数据学习之安装并配置maven环境

什么是Maven Maven字面意&#xff1a;专家、内行Maven是一款自动化构建工具&#xff0c;专注服务于Java平台的项目构建和依赖管理。依赖管理&#xff1a;jar之间的依赖关系&#xff0c;jar包管理问题统称为依赖管理项目构建&#xff1a;项目构建不等同于项目创建 项目构建是一…

Linux服务器自动监听Web应用接口,未响应自动重启JAVA应用脚本

近期部署了一个多台负载的应用在linux服务器&#xff0c;但总有其中的某台服务器应用会出现假死&#xff0c;导致dubbo请求出现RPC调用失败。当然主要问题肯定是程序上的某些问题导致的。但无法快速定位排查&#xff0c;所以弄个脚本自动监听接口&#xff0c;当出现未响应&…

《NoSQL数据库技术与应用》 MongoDB副本集

《NoSQL数据库技术与应用》 教学设计 课程名称&#xff1a;NoSQL数据库技术与应用 授课年级&#xff1a; 20xx年级 授课学期&#xff1a; 20xx学年第一学期 教师姓名&#xff1a; 某某老师 2020年5月6日 课题 名称 第4章 MongoDB副本集 计划学时 8课时 内容 分析 独立模式可…

第四十四天 完全背包理论 | 518.零钱兑换||

1.dp[j]含义&#xff1a;容量为j的背包&#xff0c;有一些可重复放入的物品&#xff0c;放满这个背包的最大价值 完全背包中每个物品可以使用无数次&#xff1a;遍历背包时采用正序遍历 &#xff08;对于纯完全背包问题&#xff09;先遍历物品还是先遍历背包无所谓&#xff1…

C语言——⾼位优先与低位优先的不同之处是什么?

一、问题 C语⾔的最⼤特⾊就是可移植性好。根据机器类型的不同&#xff0c;⾼位优先与低位优先也不同。那么&#xff0c;最好的可移植的 C 程序应该同时适⽤这两种类型的计算机。下⾯了解⼀下⾼位优先与低位优先的不同之处。 二、解答 所谓的⾼位优先&#xff0c;就是最低的地…

GitHub的原理及应用详解(五)

本系列文章简介&#xff1a; GitHub是一个基于Git版本控制系统的代码托管平台&#xff0c;为开发者提供了一个方便的协作和版本管理的工具。它广泛应用于软件开发项目中&#xff0c;包括但不限于代码托管、协作开发、版本控制、错误追踪、持续集成等方面。 GitHub的原理可以简单…

使用docker-compose部署时序数据库InfluxDB1.8.4

背景 如今 InfluxDB 已经更新到了 2.x &#xff0c; InfluxDB 1.x 和 2.x 版本之间有几个主要的区别&#xff1a; 数据模型&#xff1a; 1.x&#xff1a;使用数据库和保留策略来组织数据。 2.x&#xff1a;引入了组织&#xff08;organizations&#xff09;和存储桶&#xff…

Mac | 关于 Mac 桌面文件无法显示

现象问题 电脑配置&#xff1a;MacBook Pro M1&#xff0c;系统 Ventura 13.6.7 最近在不知道是不是安装了什么软件&#xff0c;导致桌面上的文件看不到了&#xff0c;但是在访达里的桌面还是可以看到文件&#xff0c;而且开启台前调度的时候&#xff0c;也不会返回桌面了。检查…

牛客NC236 最大差值【simple 动态规划 Java/Go/PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/a01abbdc52ba4d5f8777fb5dae91b204 思路 不难看出该题可以使用动态规划的方式解题。 在循环数组的过程中&#xff0c;记录截止到当前位置-1的最小值&#xff0c; 然后用当前的值去计算最大的差值。Java代码 im…

Spring Boot中集成 SSE

目录 SSE简介SSE原理SSE的使用场景在Spring Boot中集成SSE 创建Spring Boot项目添加依赖创建SSE控制器前端使用SSE详细案例&#xff1a;股票价格实时推送 总结 SSE简介 服务器发送事件&#xff08;Server-Sent Events&#xff0c;SSE&#xff09;是一种在HTTP协议上实现的服…

QT--splitter的使用

提示&#xff1a;本文为学习记录&#xff0c;若有错误&#xff0c;请联系作者&#xff0c;谦虚受教。 文章目录 前言一、实现步骤二、使用步骤1.新建splitter2.splitter的使用3.splitter大小 总结 前言 一、实现步骤 创建 QTabWidget&#xff1a;首先&#xff0c;确保你有一个…

融媒宝:群发自媒体平台的神器,注册送7天中级会员

近几年自媒体比较火&#xff0c;做自媒体往往需要发布文章或视频到多个平台&#xff0c;如手工复制粘贴逐一发布&#xff0c;委实费时费力、效率不高。今天就给大家分享一款提高自媒体运营效率的神器--融媒宝&#xff1a; 融媒宝简介 融媒宝是一款可免费使用的高效自媒体工具…

嵌入式学习记录5.20(TCP并发服务器)

目录 一. TCP并发服务器 二 .多进程实现TCP并发服务器 2.1流程框架 2.2具体实现代码 三. 多线程实现并发服务器 3.1流程框架 3.2具体实现 一. TCP并发服务器 1> 由于循环服务器使用时&#xff0c;只能等到上一个客户端处理结束后&#xff0c;才能处理下一个客户端 2&…

22个C语言小白常见问题总结

一.语言使用错误 在打代码的过程中&#xff0c;经常需要在中文与英文中进行转换&#xff0c;因此常出现一些符号一不小心就用错&#xff0c;用成中文。例如&#xff1a;“&#xff1b;”中文中的分号占用了两个字节&#xff0c;而英文中“;”分号只占用一个字节。编译器只能识…