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
    
  • 相关阅读:
    问题:弹窗还没点击确认就执行了跳转
    关于版本的问题
    timeUtil
    使用jframe编写一个base64加密解密工具
    JMeter 命令行(非GUI模式)详解(一)-分布式(远程)执行脚本及查看指定结果、日志
    jmeter分布式压测 java.io.FileNotFoundException: rmi_keystore.jks (系统找不到指定的文件。)
    mysql5.7日志时间与系统时间不一致
    mysql查看执行sql语句的记录日志
    Appium如何获取appPackage和appActivity
    关于测试设置
  • 原文地址:https://www.cnblogs.com/del/p/1208964.html
Copyright © 2011-2022 走看看