回答网友的一个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;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, DB, ExtCtrls, ADODB;

type
  TForm1 = 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);
  private
     dg_bmp:Tbitmap;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

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;

procedure TForm1.FormCreate(Sender: TObject);
var
  col_cnt,row_cnt,i,k ,w,h:integer;
begin
  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);

  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;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  freeandnil(dg_bmp);
end;

end.

相关推荐

  1. Delphi 编码错误问题

    2024-06-15 15:34:03       56 阅读
  2. Delphi打开网址链接几种方法

    2024-06-15 15:34:03       24 阅读
  3. 来自chatgpt一些回答

    2024-06-15 15:34:03       38 阅读
  4. 一些网络常见问题

    2024-06-15 15:34:03       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-15 15:34:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-15 15:34:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-15 15:34:03       82 阅读
  4. Python语言-面向对象

    2024-06-15 15:34:03       91 阅读

热门阅读

  1. 环境乙级资质延期:如何确保顺利通过

    2024-06-15 15:34:03       29 阅读
  2. Hive 面试题(七)

    2024-06-15 15:34:03       24 阅读
  3. 搜索文档的好助手

    2024-06-15 15:34:03       36 阅读
  4. js中reduce方法是什么

    2024-06-15 15:34:03       68 阅读