回答网友的一个Delphi问题

网友想在grid 中 加一个水印,俺就给他写了个例子。先靠效果:

这个例子 包含下面几步:

1、创建背景

  dg_bmp:=Tbitmap.Create;
  w:= Image1.Picture.Bitmap.width;
  h:= Image1.Picture.Bitmap.height;
  dg_bmp.width:= w*2;
  dg_bmp.height:= h*2;
  dg_bmp.Canvas.Draw(0,0,Image1.Picture.Bitmap);
  dg_bmp.Canvas.Draw(w,0,Image1.Picture.Bitmap);
  dg_bmp.Canvas.Draw(0,h,Image1.Picture.Bitmap);
  dg_bmp.Canvas.Draw(w,h,Image1.Picture.Bitmap);

2、创建测试数据

  col_cnt:=5;
  row_cnt:=200;
  for i:=1 to col_cnt do
    ADODataSet1.FieldDefs.Add('F'+inttostr(i),ftString,36);
  ADODataSet1.CreateDataSet();
  ADODataSet1.DisableControls;
  for i:=1 to row_cnt do
  begin
    ADODataSet1.Append();
    for k:=1 to col_cnt do
      ADODataSet1.FieldByName('F'+inttostr(k)).asstring:=format('行%d 列%d',[i,k]);
    ADODataSet1.post();
  end;
  ADODataSet1.First;
  ADODataSet1.EnableControls;

3、处理重绘事件

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
var
  DG: TDBGrid;
  Source: TRect;
begin
  DG:= TDBGrid(Sender);
  Source.Left:=Rect.Left mod (dg_bmp.Width div 2);
  Source.Top:=Rect.Top mod (dg_bmp.Height div 2);
  Source.Right:=Source.Left+(Rect.Right-Rect.Left);
  Source.Bottom:=Source.Top+(Rect.Bottom-Rect.Top);
  DG.Canvas.CopyRect(Rect, dg_bmp.Canvas,Source);
  DG.Canvas.Brush.Style:=bsClear;
  DG.Canvas.font.Color:=clblue;
  DG.DefaultDrawDataCell(Rect,Field,State);
end;

unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, Grids, DBGrids, DB, ExtCtrls, ADODB;typeTForm1 = class(TForm)DBGrid1: TDBGrid;Image1: TImage;DataSource1: TDataSource;ADODataSet1: TADODataSet;procedure DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;Field: TField; State: TGridDrawState);procedure FormCreate(Sender: TObject);procedure FormDestroy(Sender: TObject);privatedg_bmp:Tbitmap;public{ Public declarations }end;varForm1: TForm1;implementation{$R *.dfm}procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;Field: TField; State: TGridDrawState);
varDG: TDBGrid;Source: TRect;
beginDG:= TDBGrid(Sender);Source.Left:=Rect.Left mod (dg_bmp.Width div 2);Source.Top:=Rect.Top mod (dg_bmp.Height div 2);Source.Right:=Source.Left+(Rect.Right-Rect.Left);Source.Bottom:=Source.Top+(Rect.Bottom-Rect.Top);DG.Canvas.CopyRect(Rect, dg_bmp.Canvas,Source);DG.Canvas.Brush.Style:=bsClear;DG.Canvas.font.Color:=clblue;DG.DefaultDrawDataCell(Rect,Field,State);
end;procedure TForm1.FormCreate(Sender: TObject);
varcol_cnt,row_cnt,i,k ,w,h:integer;
begindg_bmp:=Tbitmap.Create;w:= Image1.Picture.Bitmap.width;h:= Image1.Picture.Bitmap.height;dg_bmp.width:= w*2;dg_bmp.height:= h*2;dg_bmp.Canvas.Draw(0,0,Image1.Picture.Bitmap);dg_bmp.Canvas.Draw(w,0,Image1.Picture.Bitmap);dg_bmp.Canvas.Draw(0,h,Image1.Picture.Bitmap);dg_bmp.Canvas.Draw(w,h,Image1.Picture.Bitmap);col_cnt:=5;row_cnt:=200;for i:=1 to col_cnt doADODataSet1.FieldDefs.Add('F'+inttostr(i),ftString,36);ADODataSet1.CreateDataSet();ADODataSet1.DisableControls;for i:=1 to row_cnt dobeginADODataSet1.Append();for k:=1 to col_cnt doADODataSet1.FieldByName('F'+inttostr(k)).asstring:=format('行%d 列%d',[i,k]);ADODataSet1.post();end;ADODataSet1.First;ADODataSet1.EnableControls;
end;procedure TForm1.FormDestroy(Sender: TObject);
beginfreeandnil(dg_bmp);
end;end.

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

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

相关文章

从入门到高手的99个python案例(2)

51. 列表和数组比较 - 列表通用,NumPy数组高效。 import numpy as np normal_list [1, 2, 3] np_array np.array([1, 2, 3]) print(np_array.shape) # 输出 (3,), 数组有形状信息 52. Python的内置模块datetime - 处理日期和时间。 from datetime import…

数据库MySQL——从0到1入门教程

Q:为什么需要MySQL? A:网络服务中,我们需要存储、管理大量的数据,并确保数据的安全、实现增删改查操作的高效,因此需要一个系统用来专门管理数据,以实现上述的高性能要求,数据库管理系统应需而生 八股如下…

自动化数据驱动?最全接口自动化测试yaml数据驱动实战

前言 我们在做自动化测试的时候,通常会把配置信息和测试数据存储到特定的文件中,以实现数据和脚本的分离,从而提高代码的易读性和可维护性,便于后期优化。 而配置文件的形式更是多种多样,比如:ini、yaml、…

pdf structuredClone is not defined 解决

问题 部分手机系统的浏览器 pdf v2版本会出现 structuredclone is not defined 的报错,这是因为浏览器过低 解决 查看structuredClone的浏览器兼容性 structuredClone api 文档 polyfill 网站下方有个 polyfill的网址入口 可以解决低版本的兼容问题 相应网址…

笨蛋学算法之LeetCodeHot100_3_最长连续序列(Java)

package com.lsy.leetcodehot100;import java.util.Arrays; import java.util.HashSet; import java.util.Set;public class _Hot3_最长连续序列 {public static int longestConsecutive(int[] nums) {//创建set去重//对重复的数字进行去重Set<Integer> set new HashSet…

融合心血管系统(CVS)多视角信号的新架构新策略

随着深度学习的发展和传感器的广泛采用&#xff0c;自动多视角融合&#xff08;MVF&#xff09;在心血管系统&#xff08;CVS&#xff09;信号处理方面取得了进展。然而&#xff0c;普遍的MVF模型架构通常将同一时间步骤但不同视角的CVS信号混合成统一的表示形式&#xff0c;忽…

redis的四种模式部署应用

这里写目录标题 redis应用redis单机部署redis主从redis哨兵Cluster模式 redis应用 redis单机部署 关闭防火墙[rootzyq ~]#: yum -y install wget make gcc gcc-c ...... [rootzyq ~]#: wget https://download.redis.io/redis-stable.tar.gz --2024-01-01 19:41:14-- https:/…

TypeScript 进阶,深入理解并运用索引访问类型提升代码质量

欢迎回来继续我们的“TypeScript进阶技巧”系列。上次我们深入探讨了如何使用Extract和Exclude实用类型来优化TypeScript的类型处理&#xff08; 《如何利用 TypeScript 的 Extract 提升类型定义与代码清晰度》和 《如何利用 TypeScript 的 Exclude 提升状态管理与代码健壮性》…

论文阅读笔记:Cross-Image Relational Knowledge Distillation for Semantic Segmentation

论文阅读笔记&#xff1a;Cross-Image Relational Knowledge Distillation for Semantic Segmentation 1 背景2 创新点3 方法4 模块4.1 预备知识4.2 跨图像关系知识蒸馏4.3 Memory-based像素到像素蒸馏4.4 Memory-based像素到区域蒸馏4.5 整体框架 5 效果 论文&#xff1a;http…

Redis和Docker

Redis 和 Docker 是两种不同的技术&#xff0c;它们各自解决不同的问题&#xff0c;但有时会一起使用以提供更高效和灵活的解决方案。 Redis 是一个开源的内存数据结构存储系统&#xff0c;可以用作数据库、缓存和消息代理。它设计为解决MySQL等关系型数据库在处理大量读写访问…

MySQL数据操作与查询-T5 MySQL函数

一、数学函数和控制流函数 1、数学函数 &#xff08;1&#xff09;abs(x) 计算x的绝对值。 1 select abs(‐5.5),abs(10) &#xff08;2&#xff09;pow(x,y) 计算x的y次方的值。 1 select pow(2,8),pow(8,2) &#xff08;3&#xff09;round(x) 和 round(x,y) 对数字x进…

php遇到的问题

1、 underfined at line 3 in xxx.php , 错误提示&#xff0c;注释这行代码 // error_reporting(DEBUG ? E_ALL : 0); 目录&#xff1a;config/config.php

Ubuntu20.04部署Qwen2.openvino流程

下载代码 里面包含依赖 git clone https://github.com/OpenVINO-dev-contest/Qwen2.openvino.gitpython环境配置 创建虚拟环境 conda create -name qwen2openvino python3.10 conda activate qwen2openvino安装依赖 pip install wheel setuptools pip install -r requirem…

CCAA质量管理【学习笔记】​​ 备考知识点笔记(二)

第三节 GB/T19001-2016 标准正文 本节为ISO9001:2015 标准条款的正文内容&#xff0c;各条款中的术语参照上节内容理解时&#xff0c;会很轻松。本节不再一一对各条款讲解。 引 言 0.1 总 则 采用质量管理体系是组织的一项战略决策&#xff0c;能够帮助其提高整体绩效…

这个网站有点意思,可做SPRINGBOOT的启动图

在 SpringBoot 项目的 resources 目录下新建一个 banner.txt 文本文件&#xff0c;然后将启动 Banner 粘贴到此文本文件中&#xff0c;启动项目&#xff0c;即可在控制台展示对应的内容信息。 下面这个工具很好用&#xff0c;收藏精哦

PFA 反应罐内衬特氟龙 润滑绝缘行业加工 匠心工艺

PFA反应罐别名也叫反应瓶&#xff0c;储样罐&#xff0c;清洗罐等。可作为样品前处理实验中消解样品和中低压溶样的反应容器&#xff0c;广泛应用于半导体分析、新材料、新能源、同位素分析等。 PFA反应罐规格参考&#xff1a;250ml、300ml、350ml、500ml、1L等。 产品特点&…

官网首屏:太漂亮了,真是着了它的魔,上了它的道。

大气的企业官网致力于提供用户友好的界面和优质的用户体验。网页经过精心设计和开发&#xff0c;旨在展示客户的品牌形象和产品信息&#xff0c;并为用户提供便捷的服务和沟通渠道。 官网设计追求简洁、美观、易用的原则&#xff0c;以吸引用户的注意力并提供清晰的导航和信息…

手机丢失不惊慌,华为手机已升级至楼层级设备查找!

出门总是丢三落四&#xff0c;手机丢了怎么办&#xff1f;不要怕&#xff0c;只要你的华为手机升级至云空间新版本&#xff0c;就可以进行楼层级设备查找&#xff0c;现在可以查看到具体的楼层了&#xff01; 之前有手机丢失过的朋友&#xff0c;肯定有相似的经历&#xff0c…

【会议征稿,ACM出版】2024年云计算与大数据国际学术会议(ICCBD 2024,7月26-28)

2024年云计算与大数据国际学术会议(ICCBD 2024)将于2024年7月26-28日在中国大理召开。ICCBD 2024将围绕“云计算与大数据”的最新研究领域, 旨在为从事研究的专家、学者、工程师和技术人员提供一个国际平台&#xff0c;分享科研成果和尖端技术&#xff0c;了解学术发展趋势&…

Windows安装配置CUDA12.5

搞大模型往往都需要GPU加速&#xff0c;本次在家里的PC上安装CUDA来实现GPU加速。 一、环境准备 操作系统&#xff1a;Windows11 23H2 GPU&#xff1a;RTX 4070 Ti Super 显卡驱动&#xff1a;555.99 &#xff08;NVIDIA GeForce 驱动程序 - N 卡驱动 | NVIDIA&#xff09; …