图 标 和 位 图 是WINDOWS 中 常 见 的 两 种 图 形 资 源, 在 开 发 应 用 程 序 时, 充 分 地 运 用 这 些 资 源 可 以 极 大 地 改 进 程 序 的 界 面, 增 强 软 件 的 实 现 效 果。 例 如 在DELPHI 中, 我 们 可 以 给 应 用 指 定 一 个 图 标, 给 位 图 命 令 按 钮 或 加 速 按 钮 指 定 一 个 位 图 等。 许 多 开 发 工 具 都 提 供 有 大 量 的 图 形 资 源, 包 括 位 图、 图 标、 光 标、 视 频 文 件 等, 比 如 在DELPHI、Visual Basic 5.0 中 就 提 供 有 大 量 的 位 图 和 图 标, 但 并 不 是 所 有 图 标 都 有 相 应 的 位 图 文 件, 有 时 我 们 有 使 用 位 图 文 件 时, 会 觉 得 某 个 图 标 的 图 形 更 合 适, 但 却 没 有 相 应 的 位 图 文 件 可 以 使 用, 例 如DELPHI 中 的 位 图 按 钮, 其Glyph 属 性 用 于 指 定 显 示 在 按 钮 中 的 位 图, 但 该 属 性 只 能 使 用 位 图 文 件(.bmp), 而 不 能 使 用 图 标 文 件(.ico), 在 这 种 情 况 下, 我 们 就 需 要 把 图 标 文 件 转 换 为 位 图 文 件。
利 用DELPHI 来 实 现 这 样 的 转 换 是 非 常 方 便 的,DELPHI 把Windows 的 位 图 及 其 调 色 板 封 装 在Tbitmap 类 中, 把Windows 图 标 封 装 在Ticon 中, 我 们 只 需 把Tbitmap 和Ticon 的 属 性 和 方 法 作 些 简 单 应 用, 就 可 以 实 现 图 标 文 件 到 位 图 文 件 的 转 换。
下 面 的 小 程 序 可 实 现 图 标 文 件 到 位 图 文 件 的 转 换, 它 能 够 把 所 给 定 的 图 标 文 件 转 换 为 同 名 的 位 图 文 件, 程 序 中 只 是 简 单 地 通 过 程 序 扩 展 名 来 判 断 图 标 文 件 和 位 图 文 件。
各 部 件 及 其 主 要 属 性 设 置 如 下: 部 件 属 性 属 性 值 Form1 Name ‘Form1’ Caption ‘ICO= > BMP’ StaticText1 Name ‘StaticText1’ Caption ‘ 图 标 文 件:’ Edit1 Name ‘Edit1’ Text ‘’ BitBtn_Browse Name ‘BitBtn_Browse’ Caption ‘ 浏 览...’ BitBtn_Convert Name ‘BitBtn_Convert’ Caption ‘ 转 换’ OpenDialog1 Name ‘OpenDialog1’ Filter ‘ 图 标 文 件(*.ico)|*.ico’
实 现 转 换 的 源 程 序 如 下 所 示:
unit main; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, Buttons;
type TForm1 = class(TForm) StaticText1: TStaticText; BitBtn_Convert: TBitBtn; OpenDialog1: TOpenDialog; BitBtn_Browse: TBitBtn; Edit1: TEdit; procedure BitBtn_BrowseClick(Sender: TObject); procedure BitBtn_ConvertClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1;
implementation {$R *.DFM} procedure TForm1.BitBtn_BrowseClick(Sender: TObject); begin if opendialog1.Execute then edit1.Text := opendialog1.filename; //读入的文件类型是*.ico end; procedure TForm1.BitBtn_ConvertClick(Sender: TObject); var Icon1:Ticon; Bitmap1:Tbitmap; FileName,FileExt:String; begin if FileExists(Edit1.Text) then begin FileExt:= ExtractFileExt(Edit1.Text); if UpperCase(FileExt)='.ICO' then begin //*.ico-----> *.bmp FileName:=copy(edit1.text,0,pos('.ico',edit1.text)-1); icon1:=ticon.create; bitmap1:=tbitmap.create; icon1.loadfromfile(edit1.text); Bitmap1.Width := Icon1.Width; Bitmap1.Height := Icon1.Height; Bitmap1.Canvas.Draw(0, 0, Icon1 ); Bitmap1.SaveToFile(FileName+'.bmp'); Icon1.Free; Bitmap1.Free; ShowMessage('文件转换成功!'); end else ShowMessage('所给定的文件不是图标文件!'); end else ShowMessage('所给文件不存在!');
end; end.
|