• 用 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.
    
  • 相关阅读:
    linux下ipc
    c各种打印集合
    linux环境下,利用gsoap生成webservice客户端进行应用程序开发的小结 (轉)
    Linux C函数之错误处理函数
    Linux操作系统文件系统基础知识详解
    常用字符串操作函数
    ASP.NET偷懒大法二
    ASP.NET偷懒大法三 (利用Attribute特性简化多查询条件拼接sql语句的麻烦)
    用JavaScript获取Asp.net服务器端控件CheckBoxList的选中值数组
    ASP.NET偷懒大法四(动态生成表单对象)
  • 原文地址:https://www.cnblogs.com/del/p/1213942.html
Copyright © 2020-2023  润新知