IdHTTP + RegExpr
作者:admin 日期:2010-04-02
疯了,是常态 (转)
作者:admin 日期:2010-04-02
delphi操作excel
作者:admin 日期:2010-03-30
Delphi操作Excel命令
作者:admin 日期:2010-03-30
Delphi控制Excel的重要属性和方法
作者:admin 日期:2010-03-30
Delphi代码
- 在delphi中调用excel有四种方式,我们选取其中的一种用OleObject来装载excel工作表的方式来谈delphi控制 excel的重要属性和方法。
- 首先给出通过OLE创建的一些主要代码步进行简单说明:
- 创建OLE对象:
- Var olecon: TOleContainer;
- Olecon:= TOleContainer.Create(self);
- Olecon.oleobject:= Olecon.CreateObject('excel.sheet',false);
- 或选择导入一个excel文件来创建OLE对象:
- Olecon.oleobject:= Olecon.CreateObjectFromFile(xlsname,false);
- 最好隐藏excel的几个工具条,这样就好象是嵌在你的程序中的一个表而已了:
- Olecon.OleObject.application.CommandBars['Standard'].Visible:=false;
- Olecon.OleObject.application.CommandBars['Formatting'].Visible:=false;
- Olecon.OleObject.application.CommandBars['Reviewing'].Visible:=false;
- 然后显示并激活excel表,对TOleContainer定义的对象:
- Olecon.show;
- Olecon.doverb(0);
- 这样基本可以了,但TOleContainer有个不好的地方,就是当你一点击其它控件是就它就失去焦点,然后就自动退出,其实并没有真的退出,只是需 要你再次激活它而已,关键是当它失去焦点的时候就excel对象就不见了,可以用Timage控件把TOleContainer所在的地方有EXCEL时 候的区域图片截下来骗骗用户,我们这里主要不是讲这个,就不详述了。
- 下面我们就开始讲Excel_TLB中的接口的常用属性和方法,主 要是针对导出和设定报表格式的一些接口元素。
- 单元格的读写属性:
- olecon.OleObject.application.cells.item[1,1];
- olecon.OleObject.application.cells(1,1);
- olecon.OleObject.application.cells[1,1].Value;
- 上面三种都可以对工作表的‘A1’单元进行读写。
- 在delphi中对单元格(集),区域,工作表等所有对象的操作都是要Variant来实现的。
- 自己的程序中选定区域赋给 Range:
- Var range,sheet:Variant;
- Range:= olecon.OleObject.application.Range['A1:C3'];
- 或者:
- Sheet:= olecon.OleObject.application.Activesheet;
- Range:= olecon.OleObject.application.Range[sheet.cells[1,1],sheet.cells[3,3]];
- 对上面的Range合并单元格:
- Range.merge;
- Range. FormulaR1C1:=’合并区’;//合并后写入文本
- 注意以后要读合并的单元格里面的文本就是读合并区域的左上角的那个单元格的文本
- 在excel表中选定区域赋给range:
- range:=excel_grid1.OleObject.application.selection;
- 拆分单元格:
- Range.unmerge;
- 合并后设定单元格(集)的格式:
- Range.HorizontalAlignment:= xlCenter;// 文本水平居中方式
- Range.VerticalAlignment:= xlCenter//文本垂直居中方式
- Range.WrapText:=true;//文本自动换行
- Range.Borders.LineStyle:=1//加边框
- Range.Interior.ColorIndex:=39;//填充颜色为淡紫色
- Range.Font.name:=’ 隶书’;//字体
- Range.Font.Color:=clBlue;//字体颜色
- 常用格式也就这些,以上这些对于单个单元格也适用。
- 在excel表中寻找前后上下的单元格:
- Var u1,u2,u3,u4,u5:Variant;
- U1:=olecon.oleobject.application.activecell;//获取当前格;
- U2:=u1.previous;//非特殊情况就是u1左边的一格;
- U3:=ui.next;//非特殊情况就是u2右边的一格;
- U4:=olecon.oleobject.application.cells[u1.cells.row-1,u1.cells.column]; //非特殊情况为上面一格
- U5:=olecon.oleobject.application.cells[u1.cells.row+1,u1.cells.column]; //非特殊情况为下面一格
- 删除和插入一行和一列:
- Olecon.oleobject.application.rows[2].delete;
- Olecon.oleobject.application.columns[2].delete;
- Olecon.oleobject.application.rows[2].insert;
- Olecon.oleobject.application.columns[2].insert;
- 复制指定区域:
- Olecon.oleobject.application.range[‘A1:C3’].copy;
- 从指定单元格开始粘贴:
- Olecon.oleobject.application.range[‘A4’].PasteSpecial;
- 常用的就这些了,对delphi中server面板下的EXEL控件和创建EXCEL.Application COM对象的方式都适用
GDI+ 在Delphi程序的应用 -- 制作水印效果图片
作者:admin 日期:2010-03-18
利用GDI+可以很方便的制作带水印效果的图片,网上介绍这方面的文章也很多,但鲜有Delphi的,本文参照网上文章http://www.codeproject.com/KB/GDI-plus/watermark.aspx介 绍的方法,用Delphi 2007制作水印效果图片,原代码如下:
Delphi代码
- unit Main;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, Gdiplus, StdCtrls;
- type
- TMainForm = class(TForm)
- Button1: TButton;
- procedure FormPaint(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- procedure Button1Click(Sender: TObject);
- private
- { Private declarations }
- Photo: TGpImage;
- PhWidth: Integer;
- PhHeight: Integer;
- Watermark: TGpImage;
- WmWidth: Integer;
- WmHeight: Integer;
- Bmp: TGpBitmap;
- public
- { Public declarations }
- end;
- var
- MainForm: TMainForm;
- implementation
- uses GdipTypes;
- {$R *.dfm}
- procedure TMainForm.Button1Click(Sender: TObject);
- var
- Clsid: TGUID;
- Parameters: TEncoderParameters;
- Quality: Integer;
- begin
- // 设置图像品质编码参数
- Parameters.Count := 1;
- Parameters.Parameter[0].Guid := EncoderQuality;
- Parameters.Parameter[0].ValueType := EncoderParameterValueTypeLong;
- Parameters.Parameter[0].NumberOfValues := 1;
- // 设置参数的值:品质等级,最高为100,图像文件大小与品质成正比
- Quality := 100;
- Parameters.Parameter[0].Value := @Quality;
- if GetEncoderClsid('image/jpeg', Clsid) then
- Bmp.Save('WatermarkPhoto.jpg', Clsid, @Parameters);
- end;
- procedure TMainForm.FormCreate(Sender: TObject);
- const
- ColorMatrix: TColorMatrix =
- (
- (1.0, 0.0, 0.0, 0.0, 0.0),
- (0.0, 1.0, 0.0, 0.0, 0.0),
- (0.0, 0.0, 1.0, 0.0, 0.0),
- (0.0, 0.0, 0.0, 0.3, 0.0),
- (0.0, 0.0, 0.0, 0.0, 1.0)
- );
- WorkingDirectory = '....Media';
- copyright = 'Copyright © 2008 - Maozefa';
- var
- gp: TGpGraphics;
- imageAttr: TGpImageAttributes;
- strFormat: TGpStringFormat;
- font: TGpFont;
- x, y: Single;
- begin
- // 读取原始图片
- Photo := TGpImage.Create(WorkingDirectory + '100_0349.jpg');
- PhWidth := Photo.Width;
- PhHeight := Photo.Height;
- // 读取水印图片
- Watermark := TGpImage.Create(WorkingDirectory + 'Watermark.bmp');
- WmWidth := Watermark.Width;
- WmHeight := Watermark.Height;
- // 建立一个新的位图,分辨率为72
- Bmp := TGpBitmap.Create(PhWidth, PhHeight, pf32bppArgb);
- Bmp.SetResolution(72, 72);
- // 建立新位图的画布,并设置图像显示质量和文本显示质量
- gp := TGpGraphics.Create(Bmp);
- gp.SmoothingMode := smAntiAlias;
- gp.TextRenderingHint := thAntiAlias;
- // 在画布上画原始图片
- gp.DrawImage(Photo, GpRect(0, 0, PhWidth, PhHeight),
- 0, 0, PhWidth, PhHeight, utPixel);
- // 建立图像显示辅助类
- imageAttr := TGpImageAttributes.Create;
- // 设置透明颜色为水印图片四角的底色,水印图显示为圆角图片
- imageAttr.SetColorKey($ff00ff00, $ff00ff00, ctBitmap);
- // 设置水印图片不透明度为0.3
- imageAttr.SetColorMatrix(ColorMatrix, cfDefault, ctBitmap);
- // 在画布左上角画水印图
- gp.DrawImage(Watermark, GpRect({PhWidth - WmWidth - }10, 10, WmWidth, WmHeight),
- 0, 0, WmWidth, WmHeight, utPixel, imageAttr);
- // 设置文本字体和显示格式
- font := TGpFont.Create('arial', 16, [fsBold]);
- strFormat := TGpStringFormat.Create;
- strFormat.Alignment := saCenter;
- // 在画布下方居中显示阴影文本
- x := PhWidth / 2;
- y := PhHeight - 26;
- gp.DrawString(copyright, font, Brushs[$99000000], x + 1, y + 1, strFormat);
- gp.DrawString(copyright, font, Brushs[$99ffffff], x, y, strFormat);
- font.Free;
- strFormat.Free;
- imageAttr.Free;
- gp.Free;
- end;
- procedure TMainForm.FormDestroy(Sender: TObject);
- begin
- Photo.Free;
- Watermark.Free;
- Bmp.Free;
- end;
- procedure TMainForm.FormPaint(Sender: TObject);
- var
- g: TGpGraphics;
- begin
- g := TGpGraphics.Create(Canvas.Handle);
- // 显示原始图片
- g.DrawImage(Photo, 0, 0, PhWidth, PhHeight);
- // 显示水印原始图片
- g.TranslateTransform(0, PhHeight + 5);
- g.DrawImage(Watermark, 0, 0, WmWidth, WmHeight);
- // 显示带水印和文本的图像
- g.TranslateTransform(PhWidth, -(PhHeight + 5));
- g.DrawImage(Bmp, 0, 0, PhWidth, PhHeight);
- g.Free;
- end;
- end.
代码中已经进行了注释,不再累叙,针对本文所参考的文章内容(Addr:http://www.codeproject.com/KB/GDI-plus/watermark.aspx), 作几点说明:
1、在参考的文章中,对文本字体、显示位置进行了测试和计算,本文为强调主要内容,对这些代码进行了简化;
2、在水印底色透明处理中,原文采用的是TGpImageAttributes.SetRemapTable方法,而本文采用的则是 TGpImageAttributes.SetColorKey方法,效果是一样的,具体原理可参照我的文章《GDI+ 在Delphi程序的应用 -- 图像的透明显示技巧》;
Delphi与SQL模糊查询
作者:admin 日期:2010-03-16
Delphi代码
- 模糊查询
- 1.用变量进行模糊查询
- 对数据进行模糊查询主要用SQL语句LIKE来实现。该语句放在Where语句的后面,使用标识符“%”、“_”、“[]”、“[^]”对数据进行模糊查询。
- 例如,对姓名为“王”,并且姓名为两个字的学生信息。
- Select * FROM MR_Student where 姓名 like '林_'
- 例如,查询数学成绩在70~79之间的学生信息。
- Select * FROM MR_Student where 数学 like '7[0123456789]'
- 例如,查询除三年级二班的所有学生信息。
- Select * FROM MR_Student where 班级 like '三年[^二]_'
- 例如,查询三年级的所有学生信息。
- Select * FROM MR_Student where 班级like '三*'
- 下面对姓名进行模糊查询,只要在“姓名”文本框中输入名字中的任意一个字,便可以查找相关人员的信息。
- 操作步骤如下:
- (1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TDateTimePicker、TDataSource、TButton和TDBGrid等组件。
- (2)主要程序代码如下:
- with ADOQuery1 do
- begin
- close;
- SQL.Clear;
- SQL.Add('Select * FROM MR_Student where 姓名 like '+''''+'%'+Trim(edit1.Text)+'%'+'''');
- open;
- end;
- 上面的SQL语句也可以写成如下形式:
- SQL.Add('Select * FROM MR_Student where 姓名 like ''%'+Trim(edit1.Text)+'%''');
- 2.使用参数进行模糊查询
- 在Delphi中进行模糊查询时,可以用TADOQuery组件来向SQL语句中传递参数。
- 其格式为:“Like:参数名”。
- 利用TADOQuery组件的ParamByName方法将值传递给参数。
- * 注意:在Like后面必须加空格。
- 下面用TADOQuery组件进行参数传递,并对数据进行模糊查询。
- 操作步骤如下:
- (1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TDateTimePicker、TDataSource、TButton和TDBGrid等组件。
- (2)主要程序代码如下:
- with ADOQuery1 do
- begin
- close;
- SQL.Clear;
- SQL.Add('Select * FROM MR_Student where 姓名 like :aa');
- Parameters.ParamByName('aa').Value:='%'+trim(Edit1.text)+'%';
- open;
- end;
- 3.复杂模糊查询
- 在对信息进行模糊查询的时候,也可以通过逻辑运算符(AND、OR、NOT)插入其他的查询条件来提高查询的速度。
- 下面是模糊查询和其他查询方法相结合而形成的复杂模糊查询。
- 操作步骤如下:
- (1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TDateTimePicker、TDataSource、TButton、TComboBox和TDBGrid等组件。
- (2)主要程序代码如下:
- if CheckBox1.Checked=true then
- Str := ' and 班级='+''''+ComboBox1.Text+''''
- else
- ComboBox1.Enabled := False;
- with ADOQuery1 do
- begin
- close;
- SQL.Clear;
- SQL.Add('Select * FROM MR_Student where 姓名 like ''%'+Trim(edit1.Text)+'%'''+Str);
- open;
- end;







