博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WinAPI: InvertRgn - 区域颜色取反
阅读量:6981 次
发布时间:2019-06-27

本文共 2104 字,大约阅读时间需要 7 分钟。

  hot3.png

本例效果图:
26152942_g5cQ.gif

代码文件:

unit Unit1;interfaceuses  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  endend

转载于:https://my.oschina.net/hermer/blog/319046

你可能感兴趣的文章
【教程】【FLEX】#004 反射机制
查看>>
K:java中的序列化与反序列化
查看>>
23.week4
查看>>
互联网+和创业潮,互联网+前提条件是什么?互联网+做什么?
查看>>
刷新UITableView
查看>>
linux 定时任务crond
查看>>
web打印
查看>>
写日记的好处
查看>>
js中 字符串与Unicode 字符值序列的相互转换
查看>>
一个查看全部用户的磁盘空间使用情况的脚本
查看>>
LeetCode Implement Stack using Queues
查看>>
\r与\n有何差别,编码的时候应该怎样使用
查看>>
JAVA的StringBuffer类
查看>>
磁盘有时也不可靠
查看>>
Delphi下利用WinIo模拟鼠标键盘详解
查看>>
Linux 如何通过命令查看一个文件的某几行(中间几行或最后几行)
查看>>
javascript promise编程
查看>>
python自定义库文件路径
查看>>
spring security之httpSecurity 专题
查看>>
org.springframework.jdbc.datasource
查看>>