文档章节

WinAPI: InvertRgn - 区域颜色取反

涂孟超
 涂孟超
发布于 2014/09/26 15:29
字数 251
阅读 43
收藏 0
本例效果图:



代码文件:
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

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2008/05/28/1208964.html

涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
【Visual C++】绘图函数BitBlt的使用方法

BitBlt 该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境。 原型: BOOL BitBlt( HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, H...

长平狐
2012/11/12
145
0
深度取色器--Deepin Picker

深度取色器是深度科技开发的一款快速在屏幕上取色的工具,并且能根据你取的颜色得到RGB、RGBA、HEX、CMYK、HSV代码并自动保存到剪切板,便于直接粘贴使用。 深度取色器具有以下特性 放大取色...

匿名
2017/11/10
714
0
深度取色器 V1.0 正发布 —— 屏幕取色,轻而易举

深度取色器是深度科技开发的一款快速在屏幕上取色的工具,并且能根据你取的颜色得到RGB、RGBA、HEX、CMYK、HSV代码并自动保存到剪切板,便于直接粘贴使用。 放大取色、右键切换 采用放大镜模...

melodyzou
2017/11/10
1K
8
vc编程的ime输入法菜单开发

WINDOWS 下 IME 编程 IME 编程心得 第一章 Windows9x 系统下汉字输入法的基本原理 第二章 Windows9x 系统提供的 ime 管理函数 第三章 ime 文件中必须使用的结构 自由拼音输入法的测试 输入法...

crossmix
2014/12/07
1K
3
VC6.0使用 SetLayeredWindowAttributes函数

USER32.DLL SetLayeredWindowAttributes函数 SetLayeredWindowAttributes函数: hwnd是透明窗体的句柄, crKey为颜色值, bAlpha是透明度,取值范围是[0,255], dwFlags是透明方式,可以取两个...

IMGTN
2012/06/13
573
0

没有更多内容

加载失败,请刷新页面

加载更多

面试官,Java8 JVM内存结构变了,永久代到元空间

在文章《JVM之内存结构详解》中我们描述了Java7以前的JVM内存结构,但在Java8和以后版本中JVM的内存结构慢慢发生了变化。作为面试官如果你还不知道,那么面试过程中是不是有些露怯?作为面试...

程序新视界
8分钟前
7
0
读书笔记:深入理解ES6 (八)

第八章 迭代器(Iterator)与生成器(Generator) 第1节 循环语句的问题   在循环、多重循环中,通过变量来跟踪数组索引的行为容易导致程序出错。迭代器的出现旨在消除这种复杂性,并减少循...

张森ZS
8分钟前
6
0
Elasticsearch 实战(一) - 简介

官腔 Elasticsearch,分布式,高性能,高可用,可伸缩的搜索和分析系统 基本等于没说,咱们慢慢看 1 概述 百度:我们比如说想找寻任何的信息的时候,就会上百度去搜索一下,比如说找一部自己喜...

JavaEdge
13分钟前
3
0
【jQuery基础学习】11 jQuery性能简单优化

本文转载于:专业的前端网站➦【jQuery基础学习】11 jQuery性能简单优化 关于性能优化 合适的选择器 $("#id")会直接调用底层方法,所以这是最快的。如果这样不能直接找到,也可以用find方法继...

前端老手
21分钟前
5
0
重磅发布 | 全球首个云原生应用标准定义与架构模型 OAM 正式开源

导读:2019 年 10 月 17 日,阿里巴巴合伙人、阿里云智能基础产品事业部总经理蒋江伟(花名:小邪)在 Qcon 上海重磅宣布,阿里云与微软联合推出开放应用模型 Open Application Model (OAM...

阿里云官方博客
24分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部