zoukankan      html  css  js  c++  java
  • WinAPI: InvertRgn 区域颜色取反

    本例效果图:



    代码文件:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;
    
    type
      TForm1 = class(TForm)
        CheckBox1: TCheckBox;
        ColorListBox1: TColorListBox;
        procedure FormPaint(Sender: TObject);
        procedure ColorListBox1Click(Sender: TObject);
        procedure CheckBox1Click(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.CheckBox1Click(Sender: TObject);
    begin
      Repaint;
    end;
    
    procedure TForm1.ColorListBox1Click(Sender: TObject);
    begin
      Self.Color := ColorListBox1.Selected;
    end;
    
    procedure TForm1.FormPaint(Sender: TObject);
    const
      str = 'A';
    var
      Rgn: HRGN;
      x,y: Integer;
    begin
      Canvas.Font.Size := 120;
      Canvas.Font.Style := [fsBold];
      SetBkMode(Canvas.Handle, TRANSPARENT);
    
      x := (ClientWidth - ColorListBox1.Width - Canvas.TextWidth(str)) div 2;
      y := -20;
    
      {建立路径}
      BeginPath(Canvas.Handle);
      Canvas.TextOut(x, y, str);
      EndPath(Canvas.Handle);
    
      {将路径转换为区域}
      Rgn := PathToRegion(Canvas.Handle);
    
      {区域颜色取反}
      if CheckBox1.Checked then InvertRgn(Canvas.Handle, Rgn);
    
      {绘制}
      Canvas.Brush.Color := clSilver;
      Canvas.Brush.Style := bsDiagCross;
      FillRgn(Canvas.Handle, Rgn, Canvas.Brush.Handle);
      Canvas.Brush.Color := clRed;
      Canvas.Brush.Style := bsSolid;
      FrameRgn(Canvas.Handle, Rgn, Canvas.Brush.Handle, 1, 1);
    
      DeleteObject(Rgn);
    end;
    
    end.
    
    窗体文件:
    object Form1: TForm1
      Left = 366
      Top = 269
      Caption = 'Form1'
      ClientHeight = 179
      ClientWidth = 239
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      Position = poDesigned
      OnPaint = FormPaint
      PixelsPerInch = 96
      TextHeight = 13
      object CheckBox1: TCheckBox
        Left = 32
        Top = 152
        Width = 97
        Height = 25
        Caption = #21306#22495#39068#33394#21462#21453
        TabOrder = 0
        OnClick = CheckBox1Click
      end
      object ColorListBox1: TColorListBox
        Left = 147
        Top = 0
        Width = 92
        Height = 179
        Align = alRight
        ItemHeight = 16
        TabOrder = 1
        OnClick = ColorListBox1Click
      end
    end
    
  • 相关阅读:
    在ubuntu上搭建turnserver
    如何将R包安装到自定义路径
    R读取MySQL数据出现乱码,解决该问题的方法总结
    利用百度API(js),通过地址获取经纬度的注意事项
    通过地址获取经纬度的三种方法; 通过经纬度获取省市的方法
    软件工程-第一周作业汇总
    软件工程作业-采访本课程往届学生记录
    动手实现混合四则运算
    历年学生软件作品点评
    软件工程-东北师大站-第一次作业
  • 原文地址:https://www.cnblogs.com/del/p/1208964.html
Copyright © 2011-2022 走看看