文档章节

分别使用静态数组与动态数组建立一个区域 - 回复 "老A123" 的问题

涂孟超
 涂孟超
发布于 2014/09/26 15:35
字数 357
阅读 6
收藏 0

问题来源: http://www.cnblogs.com/del/archive/2008/05/26/1207811.html#1475006

本例效果图:



代码文件:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{使用静态数组建立区域}
procedure TForm1.Button1Click(Sender: TObject);
var
  arr: array[0..3] of TPoint;
  rgn: HRGN;
  w,h: Integer;
begin
  w := ClientWidth;
  h := ClientHeight;
  arr[0] := Point(w div 2, 0);
  arr[1] := Point(w, h div 2);
  arr[2] := Point(w div 2, h);
  arr[3] := Point(0, h div 2);
  rgn := CreatePolygonRgn(arr, Length(arr), WINDING);

  {下面是描边和填充这个区域}
  Canvas.Brush.Color := clSilver;
  FrameRgn(Canvas.Handle, rgn, Canvas.Brush.Handle, 1, 1);

  Canvas.Brush.Style := bsCross;
  FillRgn(Canvas.Handle, rgn, Canvas.Brush.Handle);
end;

{使用动态数组建立区域}
procedure TForm1.Button2Click(Sender: TObject);
var
  arr: array of TPoint;
  rgn: HRGN;
  w,h: Integer;
begin
  SetLength(arr, 4);
  w := ClientWidth;
  h := ClientHeight;
  arr[0] := Point(w div 2, 0);
  arr[1] := Point(w, h div 2);
  arr[2] := Point(w div 2, h);
  arr[3] := Point(0, h div 2);
  rgn := CreatePolygonRgn(arr[0], Length(arr), WINDING); {第一个参数是数组的起点}

  {下面是描边和填充这个区域}
  Canvas.Brush.Color := clRed;
  FrameRgn(Canvas.Handle, rgn, Canvas.Brush.Handle, 1, 1);
  Canvas.Brush.Style := bsCross;
  FillRgn(Canvas.Handle, rgn, Canvas.Brush.Handle);
end;

end.

 
 
 
 
 

 

 

  

窗体文件:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 175
  ClientWidth = 289
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 208
    Top = 113
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
    OnClick = Button1Click
  end
  object Button2: TButton
    Left = 208
    Top = 144
    Width = 75
    Height = 25
    Caption = 'Button2'
    TabOrder = 1
    OnClick = Button2Click
  end
end

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2009/03/12/1409708.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
链表的C语言实现(含动态内存分配)

链表的C语言实现(含动态内存分配) 上 链表的C语言实现之动态内存分配 一、为什么用动态内存分配 但我们未学习链表的时候,如果要存储数量比较多的同类型或同结构的数据的时候,总是使用一个数...

晨曦之光
2012/03/09
612
0
数据结构与算法-C语言篇7-链式存储结构之静态链表

数据结构与算法-目录 前言    C语言具有指针能力,使得它可以非常容易地操作内存中的地址和数据,这比其他高级语言更加方便灵活。 后来的面向对象语言,如Java、C#等,虽不使用指针,但因为...

香沙小熊
01/09
0
0
JAVA 基本功秘籍

1. Java数组与内存控制一、Java数组初始化 Java数组是静态的,即当数组被初始化之后,该数组的长度是不可变的。Java数组使用之前必须先对数组对象进行初始化,所谓初始化,就是为数组的所有元...

JAVA群450936584
2017/12/08
0
0
【JavaSE(二)】Java语法基础(下)

原文地址:https://www.cloudcrossing.xyz/post/34/ 1 方法 1.1 方法的概述 方法,简单的说就是完成特定功能的代码块(注意:在很多语言里面有函数的定义,而在Java中,函数被称为方法)。 ...

苍云横渡
05/09
0
0
Java中的堆(heap)、栈(stack)

Java把内存分成两种,一种叫做栈内存,一种叫做堆内存。 栈空间的内存由系统自动分配,不需要手动管理内存。一般存放基本类型(或者叫内置类型)(char、byte、short、int、long、float、dou...

LYQ1990
2016/04/28
7
0

没有更多内容

加载失败,请刷新页面

加载更多

Redis应用之分布式锁(set)

Redis应用之分布式锁(set) 在单机应用的场景下,我们常使用的锁主要是synchronized与Lock;但是在分布式横行的大环境下,显然仅仅这两种锁已经无法满足我们的需求; 需求:秒杀场景下,有若干...

GMarshal
33分钟前
1
0
python实现简单的文件加密与解密

对于任意的一个文件,本质上来讲都是二进制的。 对于任意一个二进制数a,对其用另外任意一个与a的位数相同的二进制数m进行“异或”操作得到结果e,即e=a xor m; 如果再讲上面得到的e用m进行...

Aomo
34分钟前
1
0
Android开发应用程序生成以太坊钱包

Android应用程序以太坊钱包生成,要做的工作不少,不过如果我们一步一步来应该也比较清楚: 1.在app/build.gradle中集成以下依赖项: compile ('org.web3j:core-android:2.2.1') web3j核心是...

geek12345
50分钟前
1
0
ArrayList嘿嘿嘿

数组扩容技术: //扩容技术 将原数组objs类容复制到新数组并且长度为11 Object[] newObjs = Arrays.copyOf(objs,11); 数组比较大那么System.arraycopy比较有优势,因为其使用的是内存复制,省...

熊猫你好
今天
2
0
Android平台下的一个好用的日历库(sxtwl_cpp),支持农历转公历,和公历转农历等功能

python版的sxtwl_cpp传送入口 在build.gradle的allprojects中加入 maven { url 'https://dl.bintray.com/yuangu/sxtwl' } 最终如下面代码所示: allprojects { repositories { ......

元谷
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部