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.
    
  • 相关阅读:
    一条语句简单解决“每个Y的最新X”的SQL经典问题
    SqlServer数据库字典--表.视图.函数.存储过程.触发器.主键.外键.约束.规则.sql
    SqlServer数据库字典--索引.sql
    SqlServer2005或2008数据库字典--表结构.sql
    SqlServer2000数据库字典--表结构.sql
    sqlserver附加 mdf、ldf的方法(手记)
    收缩数据库 DBCC SHRINKFILE
    日志、字段备注查询、自增ID联系设置、常用存储过程
    常用sql 全记录(添加中)
    python类的继承和多态,获取对象信息
  • 原文地址:https://www.cnblogs.com/del/p/1213942.html
Copyright © 2011-2022 走看看