




已阅读5页,还剩39页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
WinAPI: ExtractIcon - 获取 EXE、DLL 或 ICO 文件中的图标 /声明:ExtractIcon( hInst: HINST; 调用函数的程序实例 lpszExeFileName: PChar; 文件路径; 文件可以是 *.exe、*.dll、*.ico nIconIndex: UINT 图标索引): HICON; 返回图标句柄; 索引为 0 时返回第一个图标句柄; 索引为 #FFFFFFFF 时返回图标总数/举例:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); end;var Form1: TForm1;implementation$R *.dfmuses ShellAPI; ExtractIcon 在其中声明procedure TForm1.Button1Click(Sender: TObject);var ico: TIcon; i,count,x,y,w,h: Integer; FilePath: string;begin 随便找了个路径, 如果缺失会退出 FilePath := C:Program FilesMacromediaFireworks 8Fireworks.exe; if not FileExists(FilePath) then begin ShowMessage(文件不存在); Exit; end; ico := TIcon.Create; x := 10; y := 10; w := 0; h := 0; Repaint; 先算出文件内的图标总数 count := ExtractIcon(HInstance, PChar(FilePath), HICON(-1); for i := 0 to count - 1 do begin 循环提取图标 ico.Handle := ExtractIcon(HInstance, PChar(FilePath), i); 画出图标 Canvas.Draw(x,y,ico); 下面只是调整显示位置 if w ico.Width then w := ico.Width; if h = ClientWidth - w then begin x := 10; y := y + h + 10; end; end; ico.Free;end;end./效果图:WinAPI: LoadBitmap - 从资源中载入位图 /声明:LoadBitmap( hInstance: HINST; EXE 或 DLL 的句柄 lpBitmapName: PChar 资源标识符): HBITMAP; 返回位图句柄这里有示例 WinAPI: LoadCursor - 从资源中载入光标 /声明:LoadCursor( hInstance: HINST; EXE 或 DLL 的句柄, 0 表示载入系统资源 lpCursorName: PChar 资源标识符): HCURSOR; 返回光标句柄这里有示例 /调用系统光标的例子:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); end;var Form1: TForm1;implementation$R *.dfmprocedure TForm1.Button1Click(Sender: TObject);var cur: TIcon;begin cur := TIcon.Create; cur.Handle := LoadCursor(0, IDC_HAND); Canvas.Draw(11,11,cur); cur.Handle := LoadCursor(0, IDC_HELP); Canvas.Draw(44,11,cur); cur.Free;end;end./效果图:/附系统光标列表:IDC_ARROW = MakeIntResource(32512);IDC_IBEAM = MakeIntResource(32513);IDC_WAIT = MakeIntResource(32514);IDC_CROSS = MakeIntResource(32515);IDC_UPARROW = MakeIntResource(32516);IDC_SIZE = MakeIntResource(32640);IDC_ICON = MakeIntResource(32641);IDC_SIZENWSE = MakeIntResource(32642);IDC_SIZENESW = MakeIntResource(32643);IDC_SIZEWE = MakeIntResource(32644);IDC_SIZENS = MakeIntResource(32645);IDC_SIZEALL = MakeIntResource(32646);IDC_NO = MakeIntResource(32648);IDC_HAND = MakeIntResource(32649);IDC_APPSTARTING = MakeIntResource(32650);IDC_HELP = MakeIntResource(32651);WinAPI: LoadIcon - 从资源中载入图标 /声明:LoadIcon( hInstance: HINST; EXE 或 DLL 的句柄, 0 表示载入系统资源 lpIconName: PChar 资源标识符): HICON; 返回图标句柄这里有示例 /调用系统图标的例子:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); end;var Form1: TForm1;implementation$R *.dfmprocedure TForm1.Button1Click(Sender: TObject);var ico: TIcon; i,x: Integer;begin ico := TIcon.Create; x := 10; for i := 32512 to 32517 do begin ico.Handle := LoadIcon(0, MakeIntResource(i); Canvas.Draw(x,10,ico); Inc(x,ico.Width+10); end; ico.Free;end;end./效果图:/附系统图标列表:IDI_APPLICATION = MakeIntResource(32512);IDI_HAND = MakeIntResource(32513);IDI_QUESTION = MakeIntResource(32514);IDI_EXCLAMATION = MakeIntResource(32515);IDI_ASTERISK = MakeIntResource(32516);IDI_WINLOGO = MakeIntResource(32517);IDI_WARNING = IDI_EXCLAMATION;IDI_ERROR = IDI_HAND;IDI_INFORMATION = IDI_ASTERISK;WinAPI: AlphaBlend - 图像透明度 AlphaBlend( DC: HDC; 目标设备环境句柄 p2, p3, p4, p5: Integer; 目标位置与宽高 DC6: HDC; 源设备环境句柄 p7, p8, p9, p10: Integer; 源位置与宽高 p11: TBlendFunction 合成方式的数据结构, 见下表): BOOL;/TBlendFunction 结构是 _BLENDFUNCTION 的重命名:_BLENDFUNCTION = packed record BlendOp: BYTE; 本例使用了: AC_SRC_OVER = 0 BlendFlags: BYTE; 必须为 0 SourceConstantAlpha: BYTE; 透明度: 0.255 AlphaFormat: BYTE; 通常为 0,如果源位图为32位真彩色,可为 AC_SRC_ALPHA end;本例效果图:代码文件: unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls;type TForm1 = class(TForm) TrackBar1: TTrackBar; procedure FormCreate(Sender: TObject); procedure FormPaint(Sender: TObject); procedure TrackBar1Change(Sender: TObject); procedure FormDestroy(Sender: TObject); end;var Form1: TForm1;implementation$R *.dfmvar Bit,BitBack: TBitmap; Transparency: Byte = 255; 透明度procedure TForm1.FormCreate(Sender: TObject);begin 设定窗体背景 BitBack := TBitmap.Create; BitBack.LoadFromFile(c:tempBack.bmp); Brush.Bitmap := BitBack; 调入图片 Bit := TBitmap.Create; Bit.LoadFromFile(c:temptest.bmp); 给 TrackBar1 初始化 TrackBar1.Max := 255; TrackBar1.Min := 0; TrackBar1.ShowSelRange := False; TrackBar1.Position := TrackBar1.Max;end;procedure TForm1.FormPaint(Sender: TObject);var Blend: TBlendFunction; 定义 AlphaBlend 要使用的 TBlendFunction 结构begin 给 TBlendFunction 结构赋值 Blend.BlendOp := AC_SRC_OVER; Blend.BlendFlags := 0; Blend.AlphaFormat := 0; Blend.SourceConstantAlpha := Transparency; Windows.AlphaBlend(Canvas.Handle, 因 VCL 有同名属性, 所以指定了是来自 Windows 单元 10, 10, Bit.Width + 10, Bit.Height + 10, Bit.Canvas.Handle, 0, 0, Bit.Width, Bit.Height, Blend );end;procedure TForm1.TrackBar1Change(Sender: TObject);begin Transparency := TrackBar1.Position; Text := IntToStr(Transparency); Self.Repaint; 命令重绘end;procedure TForm1.FormDestroy(Sender: TObject);begin Bit.Free; BitBack.Free;end;end.窗体设计: object Form1: TForm1 Left = 352 Top = 238 Caption = Form1 ClientHeight = 209 ClientWidth = 211 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = Tahoma Font.Style = OldCreateOrder = False Position = poDesigned OnCreate = FormCreate OnDestroy = FormDestroy OnPaint = FormPaint PixelsPerInch = 96 TextHeight = 13 object TrackBar1: TTrackBar Left = 0 Top = 186 Width = 201 Height = 24 TabOrder = 0 OnChange = TrackBar1Change endend用 GDI 操作 EMF 文件1: CreateEnhMetaFile、CloseEnhMetaFile EMF 文件是 Windows 下的增强图元文件, 本例用最简单的代码创建了一个 EMF 文件. CreateEnhMetaFile( DC: HDC; 所参照的 DC, 为 0 表示参照当前的显示设备 FileName: PChar; 文件名, 为 nil 表示创建内存文件 Rect: PRect; 外接矩形(单位是 0.1 毫米), 为 nil 表示使用最小矩形 Desc: PChar 描述性的说明文本, 可为 nil): HDC;unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); end;var Form1: TForm1;implementation$R *.dfmprocedure TForm1.Button1Click(Sender: TObject);const Path = C:TempMyMetaFile.emf; CreateEnhMetaFile 创建文件时, 存在则覆盖var MetaFileDC: HDC; EMF 文件 DCbegin MetaFileDC := CreateEnhMetaFile(0, PChar(Path), nil, nil); 建立 Ellipse(MetaFileDC, 10, 10, 100, 60); 绘制 CloseEnhMetaFile(MetaFileDC); 关闭并保存 DeleteObject(MetaFileDC);end;end.增强图元文件的相关函数: CloseEnhMetaFile CopyEnhMetaFile CreateEnhMetaFile DeleteEnhMetaFile EnhMetaFileProc EnumEnhMetaFile GdiComment GetEnhMetaFile GetEnhMetaFileBits GetEnhMetaFileDescription GetEnhMetaFileHeader GetEnhMetaFilePaletteEntries GetWinMetaFileBits PlayEnhMetaFile PlayEnhMetaFileRecord SetEnhMetaFileBits SetWinMetaFileBits 用 GDI 操作 EMF 文件2: PlayEnhMetaFile、DeleteEnhMetaFile 创建 EMF 文件, 并同时绘制在窗体. unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); end;var Form1: TForm1;implementation$R *.dfmprocedure TForm1.Button1Click(Sender: TObject);const Path = C:TempMyMetaFile.emf;var MetaFileDC: HDC; EMF 画布句柄 HMetaFile: HENHMETAFILE; EMF 文件句柄begin MetaFileDC := CreateEnhMetaFile(0, PChar(Path), nil, nil); Ellipse(MetaFileDC, 10, 10, 100, 60); HMetaFile := CloseEnhMetaFile(MetaFileDC); 在窗体上按原始大小绘制 EMF PlayEnhMetaFile(Canvas.Handle, HMetaFile, Rect(10,10,100,60); DeleteObject(MetaFileDC); DeleteEnhMetaFile(HMetaFile);end;end.用 GDI 操作 EMF 文件3: GetEnhMetaFile unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); end;var Form1: TForm1;implementation$R *.dfmprocedure TForm1.Button1Click(Sender: TObject);const Path = C:TempMyMetaFile.emf; 假定这个文件还在var HMetaFile: HENHMETAFILE; EMF 文件句柄begin HMetaFile := GetEnhMetaFile(PChar(Path); 打开 PlayEnhMetaFile(Canvas.Handle, HMetaFile, Rect(10,10,100,60); 重新绘制 EMF DeleteEnhMetaFile(HMetaFile);end;end.用 GDI 操作 EMF 文件4: 重绘 EMF 本例效果图:代码文件: unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Button1Click(Sender: TObject); end;var Form1: TForm1;implementation$R *.dfmvar HMetaFile: HENHMETAFILE; f: Boolean; x1,y1: Integer; R: TRect;procedure TForm1.FormCreate(Sender: TObject);const Path = C:TempMyMetaFile.emf;begin HMetaFile := GetEnhMetaFile(PChar(Path);end;procedure TForm1.FormDestroy(Sender: TObject);begin DeleteEnhMetaFile(HMetaFile);end;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin f := True; x1 := X; y1 := Y; R := Rect(x1,y1,X,Y);end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin if not f then Exit; DrawFocusRect(Canvas.Handle, R); R := Rect(x1,y1,X,Y); DrawFocusRect(Canvas.Handle, R); R := Rect(x1,y1,X,Y);end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin f := False; PlayEnhMetaFile(Canvas.Handle, HMetaFile, R);end;procedure TForm1.Button1Click(Sender: TObject);begin Refresh;end;end.窗体文件: object Form1: TForm1 Left = 0 Top = 0 Caption = Form1 ClientHeight = 206 ClientWidth = 339 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = Tahoma Font.Style = OldCreateOrder = False Position = poDesktopCenter OnCreate = FormCreate OnDestroy = FormDestroy OnMouseDown = FormMouseDown OnMouseMove = FormMouseMove OnMouseUp = FormMouseUp PixelsPerInch = 96 TextHeight = 13 object Button1: TButton Left = 256 Top = 173 Width = 75 Height = 25 Caption = Button1 TabOrder = 0 OnClick = Button1Click endend用 GDI 操作 EMF 文件5: GetEnhMetaFileDescription - 获取 EMF 文件的说明文本 再用 CreateEnhMetaFile 函数建立 EMF 文件时可以同时写入描述性说明;用 GetEnhMetaFileDescription 函数可以读出 EMF 文件的说明文本.本例给的说明文本非常简单, 不过标准的说明文本的格式应该是: 程序名#0文件标题#0#0 unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); end;var Form1: TForm1;implementation$R *.dfmvar HMetaFile: HENHMETAFILE; EMF 文件句柄建立带说明的 EMF 文件procedure TForm1.FormCreate(Sender: TObject);const Path = C:TempMyMeateFile.emf; Description = ABCDE; 当作 EMF 文件的说明var MetaFileDC: HDC;begin 建立并写入说明 MetaFileDC := CreateEnhMetaFile(0, PChar(Path), nil, PChar(Description); 绘图 Rectangle(MetaFileDC, 11, 11, 111, 111); 结束编辑、保存文件, 并返回文件句柄 HMetaFile := CloseEnhMetaFile(MetaFileDC); 删除 DC DeleteObject(MetaFileDC);end;读取 EMF 文件的说明procedure TForm1.Button1Click(Sender: TObject);var DescriptionSize: Integer; 说明段的大小 DescriptionBuf: PChar; 接受说明的内存指针begin 获取大小 DescriptionSize := GetEnhMetaFileDescription(HMetaFile, 0, nil); 分配内存 GetMem(DescriptionBuf, DescriptionSize); 获取说明 GetEnhMetaFileDescription(HMetaFile, DescriptionSize, DescriptionBuf); 显示说明 ShowMessage(DescriptionBuf); ABCDE 释放内存 FreeMem(DescriptionBuf);end;绘制在窗体procedure TForm1.Button2Click(Sender: TObject);begin PlayEnhMetaFile(Canvas.Handle, HMetaFile, Rect(11,11,111,111);end;删除 EMF 文件句柄procedure TForm1.FormDestroy(Sender: TObject);begin DeleteEnhMetaFile(HMetaFile);end;end.用 GDI 操作 EMF 文件6: GetEnhMetaFileHeader - 获取 EMF 的头文件 /增强图元文件的头文件结构 TEnhMetaHeader:tagENHMETAHEADER = packed record iType: DWORD; 记录类型 nSize: DWORD; 结构大小 rclBounds: TRect; 外接矩形(单位是像素) rclFrame: TRect; 图片矩形(单位是 0.1 毫米) dSignature: DWORD; 文件签名 nVersion: DWORD; 文件版本 nBytes: DWORD; 文件尺寸 nRecords: DWORD; 记录数 nHandles: Word; 句柄数 sReserved: Word; 保留 nDescription: DWORD; 说明文本的长度 offDescription: DWORD; 说明文本的偏移量 nPalEntries: DWORD; 调色板的元素数 szlDevice: TSize; 分辨率(像素) szlMillimeters: TSize; 分辨率(毫米) cbPixelFormat: DWORD; offPixelFormat: DWORD; bOpenGL: DWORD; end;本例效果图:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); end;var Form1: TForm1;implementation$R *.dfmvar HMetaFile: HENHMETAFILE; EMF 文件句柄建立带说明的 EMF 文件procedure TForm1.FormCreate(Sender: TObject);const Path = C:TempMyMeateFile.emf; Description = ABCDE; 当作 EMF 文件的说明var MetaFileDC: HDC;begin 建立并写入说明 MetaFileDC := CreateEnhMetaFile(0, PChar(Path), nil, PChar(Description); 绘图 Rectangle(MetaFileDC, 11, 11, 111, 111); 结束编辑、保存文件, 并返回文件句柄 HMetaFile := CloseEnhMetaFile(MetaFileDC); 删除 DC DeleteObject(MetaFileDC);end;读取 EMF 文件头procedure TForm1.Button1Click(Sender: TObject);const n = #13#10;var MetaHeaderSize: Integer; 文件头大小 MetaHeader: PEnhMetaHeader; 文件头结构的指针 str: string; buf: arrayWord of Char;begin MetaHeaderSize := GetEnhMetaFileHeader(HMetaFile, 0, nil); GetMem(MetaHeader, MetaHeaderSize); GetEnhMetaFileHeader(HMetaFile, MetaHeaderSize, MetaHeader); str := iType: %d + n + nSize: %d + n + rclBounds: %d,%d,%d,%d + n + rclFrame: %d,%d,%d,%d + n + dSignature: %d + n + nVersion: %d + n + nBytes: %d + n + nRecords: %d + n + nHandles: %d + n + /sReserved: %d + n + nDescription: %d + n + offDescription: %d + n + nPalEntries: %d + n + szlDevice: %d,%d + n + szlMillimeters: %d,%d + n + cbPixelFormat: %d + n + offPixelFormat: %d + n + bOpenGL: %d; wvsprintf(buf, PChar(str), PChar(MetaHeader); Show
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 一、查找网上资料教学设计-2025-2026学年小学信息技术粤教版四年级上册-粤教版
- 7 瓦楞纸的创意教学设计-2025-2026学年小学美术广西版四年级下册-广西版
- 第2课 智慧生活教学设计-2025-2026学年初中信息技术青岛版2024第六册-青岛版2024
- 1 平行四边形的性质说课稿-2025-2026学年初中数学鲁教版五四制2012八年级上册-鲁教版五四制2012
- 2025年中考数学试题分类汇编:特殊的平行四边形(13大考点69题) (第1期)解析版
- 2023八年级数学上册 第1章 分式1.3 整数指数幂1.3.2 零次幂和负整数指数幂说课稿 (新版)湘教版
- 2025年银行招聘考试模拟试题(200题)含答案
- 2023一年级数学上册 4 认识图形(2)说课稿 新人教版
- 蓄水池防护知识培训总结课件
- 蒸馒头的劳动课课件
- 螃蟹销售合同协议
- 项目一《任务一显微镜下的植物细胞》(课件)-中职农林牧渔大类《植物科学基础》同步教学(农技版)(全一册)
- 2025年起重机司机(限桥式)(Q2)特种作业考试复习(重点)题库(浓缩300题)
- 运动营养学(第三版)全套课件第1-10章
- 口腔科科室设置与工作流程
- 学校德育管理体系
- 2024-2025学年成都市锦江区数学五年级第二学期期末经典试题含答案
- 《水浒传》每回检测题及答案
- 《光电显示应用技术》课件-第一章 显示技术基础
- 病患陪护员培训
- 2025届高三高考数学三角恒等变换(八大题型+精准练习)
评论
0/150
提交评论