zoukankan      html  css  js  c++  java
  • 用 GDI 操作 EMF 文件[8]: 绘制图元文件时改变画笔与画刷

    本例效果图:



    代码文件:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;
    
    type
      TForm1 = class(TForm)
        ColorBox1: TColorBox;
        ColorBox2: TColorBox;
        ComboBox1: TComboBox;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure FormPaint(Sender: TObject);
        procedure ColorBox1Change(Sender: TObject);
        procedure ColorBox2Change(Sender: TObject);
        procedure ComboBox1Change(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    var
      HMetaFile: HENHMETAFILE; {EMF 文件句柄}
      p: TPen;
      b: TBrush;
    
    //EnumEnhMetaFile 的回调函数
    function MyEnhMetaFunc(DisplaySurface: HDC; var MetafileTable: THandleTable;
      var MetafileRecord: TEnhMetaRecord; ObjectCount: Integer; var Data: Longint
      ): Integer; stdcall;
    begin
      case MetafileRecord.iType of
        EMR_CREATEPEN: SelectObject(DisplaySurface, p.Handle);
        EMR_CREATEBRUSHINDIRECT: SelectObject(DisplaySurface, b.Handle);
      else
        PlayEnhMetaFileRecord(DisplaySurface, MetafileTable, MetafileRecord, ObjectCount);
        Result := 1;  
      end;
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    var
      MetaFileDC: HDC;
    begin
      {文件建立在内存}
      MetaFileDC := CreateEnhMetaFile(0, nil, nil, nil);
      p := TPen.Create;
      b := TBrush.Create;
      p.Color := clRed;
      b.Style := bsCross;
      b.Color := clSilver;
    
      SelectObject(MetaFileDC, p.Handle);
      SelectObject(MetaFileDC, b.Handle);
    
      MoveToEx(MetaFileDC, 0, 0, nil);
      LineTo(MetaFileDC, 80, 80);
      {矩形}
      Rectangle(MetaFileDC, 10, 10, 30, 50);
      {椭圆}
      Ellipse(MetaFileDC, 30, 30, 50, 70);
    
      HMetaFile := CloseEnhMetaFile(MetaFileDC);
    
      DeleteObject(MetaFileDC);
    
      ComboBox1.Items.CommaText :=
        'bsSolid,bsClear,bsHorizontal,bsVertical,bsFDiagonal,bsBDiagonal,bsCross,bsDiagCross';
    end;
    
    procedure TForm1.FormPaint(Sender: TObject);
    begin
      EnumEnhMetaFile(Canvas.Handle, HMetaFile, @MyEnhMetaFunc, nil, ClientRect);
    end;
    
    procedure TForm1.ColorBox1Change(Sender: TObject);
    begin
      p.Color := ColorBox1.Selected;
      Repaint;
    end;
    
    procedure TForm1.ColorBox2Change(Sender: TObject);
    begin
      b.Color := ColorBox2.Selected;
      Repaint;
    end;
    
    procedure TForm1.ComboBox1Change(Sender: TObject);
    begin
      b.Color := ColorBox2.Selected;
      case ComboBox1.ItemIndex of
        0: b.Style := bsSolid;
        1: b.Style := bsClear;
        2: b.Style := bsHorizontal;
        3: b.Style := bsVertical;
        4: b.Style := bsFDiagonal;
        5: b.Style := bsBDiagonal;
        6: b.Style := bsCross;
        7: b.Style := bsDiagCross;  
      end;
      Repaint;
    end;
    
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      p.Free;
      b.Free;
      DeleteEnhMetaFile(HMetaFile);
    end;
    
    end.
    
    窗体文件:
    object Form1: TForm1
      Left = 0
      Top = 0
      Caption = 'Form1'
      ClientHeight = 197
      ClientWidth = 324
      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
      OnPaint = FormPaint
      PixelsPerInch = 96
      TextHeight = 13
      object ColorBox1: TColorBox
        Left = 200
        Top = 16
        Width = 116
        Height = 22
        ItemHeight = 16
        TabOrder = 0
        OnChange = ColorBox1Change
      end
      object ColorBox2: TColorBox
        Left = 200
        Top = 44
        Width = 116
        Height = 22
        ItemHeight = 16
        TabOrder = 1
        OnChange = ColorBox2Change
      end
      object ComboBox1: TComboBox
        Left = 200
        Top = 72
        Width = 116
        Height = 21
        ItemHeight = 13
        TabOrder = 2
        Text = 'ComboBox1'
        OnChange = ComboBox1Change
      end
    end
    
  • 相关阅读:
    asp.net 获得域名,端口,虚拟目录[转]
    在EntityFramework6中执行SQL语句【转】
    Ingress 访问日志分析与监控
    kubernetes之secret
    ingress Whitelisting白名单机制
    Kubernates之从pod中拷贝文件到宿主机
    kubernetes-subpath用法(把文件挂载在已存在的目录下,不覆盖原目录)
    npm 私服工具verdaccio 搭建
    nvm安装、解决nvm command not found问题、卸载
    k8s Pod 扩容和缩容
  • 原文地址:https://www.cnblogs.com/del/p/1214693.html
Copyright © 2011-2022 走看看