zoukankan      html  css  js  c++  java
  • 用 GDI 操作 EMF 文件[5]: GetEnhMetaFileDescription 获取 EMF 文件的说明文本

    再用 CreateEnhMetaFile 函数建立 EMF 文件时可以同时写入描述性说明;

    用 GetEnhMetaFileDescription 函数可以读出 EMF 文件的说明文本.

    本例给的说明文本非常简单, 不过标准的说明文本的格式应该是: 程序名#0文件标题#0#0
    unit Unit1;
    
    interface
    
    uses
      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 *.dfm}
    
    var
      HMetaFile: HENHMETAFILE; {EMF 文件句柄}
    
    {建立带说明的 EMF 文件}
    procedure TForm1.FormCreate(Sender: TObject);
    const
      Path = 'C:\Temp\MyMeateFile.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.
    
  • 相关阅读:
    Windows——bat中的路径和工具栏运行bat的坑
    KBE——查询
    KBE实践——登录案例
    KBE_运作流程
    KBE_创建项目和基本常识
    python_面向对象
    程序员常见面试之 数据库 知识点小结(三)
    C#编程总结
    人人必知的10个 jQuery 小技巧
    Javascript生成二维码(QR)
  • 原文地址:https://www.cnblogs.com/del/p/1213942.html
Copyright © 2011-2022 走看看