文档章节

再学 GDI+[28]: TGPPen - 自定义画笔的虚线样式 - SetDashPattern

涂孟超
 涂孟超
发布于 2014/09/26 15:35
字数 544
阅读 3
收藏 0
点赞 0
评论 0
自定义的虚线样式依赖与一个数组, 数组的元素分别代表虚线中线与间的长度, 数组大小好像没有限制;

本例使用了六个元素的数组, 也就是表示虚线有三个线段和和三个间隔构成.

本例效果图:



代码文件:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    TrackBar1: TTrackBar;
    TrackBar2: TTrackBar;
    TrackBar3: TTrackBar;
    TrackBar4: TTrackBar;
    TrackBar5: TTrackBar;
    TrackBar6: TTrackBar;
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
    procedure TrackBar2Change(Sender: TObject);
    procedure TrackBar3Change(Sender: TObject);
    procedure TrackBar4Change(Sender: TObject);
    procedure TrackBar5Change(Sender: TObject);
    procedure TrackBar6Change(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses GDIPOBJ, GDIPAPI;

var
  DashArr: array[0..5] of Single;

procedure TForm1.FormCreate(Sender: TObject);
const
  n = 100;
begin
  TrackBar1.Max := n;
  TrackBar2.Max := n;
  TrackBar3.Max := n;
  TrackBar4.Max := n;
  TrackBar5.Max := n;
  TrackBar6.Max := n;

  TrackBar1.Position := n div 2;
  TrackBar2.Position := n div 2;
  TrackBar3.Position := n div 2;
  TrackBar4.Position := n div 2;
  TrackBar5.Position := n div 2;
  TrackBar6.Position := n div 2;
end;

procedure TForm1.FormPaint(Sender: TObject);
var
  g: TGPGraphics;
  p: TGPPen;
  rect: TRect;
begin
  g := TGPGraphics.Create(Canvas.Handle);
  p := TGPPen.Create(aclRed, 4);

  DashArr[0] := TrackBar1.Position / 10;
  DashArr[1] := TrackBar2.Position / 10;
  DashArr[2] := TrackBar3.Position / 10;
  DashArr[3] := TrackBar4.Position / 10;
  DashArr[4] := TrackBar5.Position / 10;
  DashArr[5] := TrackBar6.Position / 10;

  p.SetDashPattern(@DashArr, Length(DashArr)); {设置虚线}
  g.DrawLine(p, 0, 0, ClientWidth - Panel1.Width, ClientHeight);
  rect := Bounds(0, 0, ClientWidth - Panel1.Width, ClientHeight);
  InflateRect(rect, -30, -30);
  g.DrawEllipse(p, MakeRect(rect));

  p.Free;
  g.Free;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  Repaint;
end;

procedure TForm1.TrackBar2Change(Sender: TObject);
begin
  Repaint;
end;

procedure TForm1.TrackBar3Change(Sender: TObject);
begin
  Repaint;
end;

procedure TForm1.TrackBar4Change(Sender: TObject);
begin
  Repaint;
end;

procedure TForm1.TrackBar5Change(Sender: TObject);
begin
  Repaint;
end;

procedure TForm1.TrackBar6Change(Sender: TObject);
begin
  Repaint;
end;

end.

 
 
 
 
 

 

 

  
窗体文件:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 153
  ClientWidth = 306
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Position = poDesktopCenter
  OnCreate = FormCreate
  OnPaint = FormPaint
  PixelsPerInch = 96
  TextHeight = 13
  object Panel1: TPanel
    Left = 207
    Top = 0
    Width = 99
    Height = 153
    Align = alRight
    TabOrder = 0
    ExplicitLeft = 200
    ExplicitHeight = 205
    object TrackBar1: TTrackBar
      Left = 0
      Top = 8
      Width = 97
      Height = 20
      ShowSelRange = False
      TabOrder = 0
      OnChange = TrackBar1Change
    end
    object TrackBar2: TTrackBar
      Left = 0
      Top = 31
      Width = 97
      Height = 20
      ShowSelRange = False
      TabOrder = 1
      OnChange = TrackBar2Change
    end
    object TrackBar3: TTrackBar
      Left = 0
      Top = 55
      Width = 97
      Height = 20
      ShowSelRange = False
      TabOrder = 2
      OnChange = TrackBar3Change
    end
    object TrackBar4: TTrackBar
      Left = 0
      Top = 79
      Width = 97
      Height = 20
      ShowSelRange = False
      TabOrder = 3
      OnChange = TrackBar4Change
    end
    object TrackBar5: TTrackBar
      Left = 0
      Top = 103
      Width = 97
      Height = 20
      ShowSelRange = False
      TabOrder = 4
      OnChange = TrackBar5Change
    end
    object TrackBar6: TTrackBar
      Left = 0
      Top = 127
      Width = 97
      Height = 20
      ShowSelRange = False
      TabOrder = 5
      OnChange = TrackBar6Change
    end
  end
end

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2008/06/12/1218568.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2004
码字总数 14107
作品 0
深圳
程序员
【Visual C++】游戏开发笔记之四——游戏画面绘图(一)基本图形绘制

本系列文章由zhmxy555编写,转载请注明出处。 http://blog.csdn.net/zhmxy555/article/details/7333886 作者:毛星云 邮箱: happylifemxy@qq.com 欢迎邮件交流编程心得 从本篇文章开始笔锋一...

长平狐
2012/11/12
115
0
第二章 2绘制线条简单图形

线条和形状 同Windows其它版本相比,Windows CE提供相当少的功能的领域之一就是基本线条绘制和形状绘制功能。用来创建复杂环形的Chord, Arc, 和Pie函数被去掉了。大部分使用"当前点[current ...

技术小胖子
2017/11/08
0
0
C# 如何自定义DashStyle枚举值

画笔Pen有一个属性DashStyle,它的值为DashStyle枚举类行,DashStyle原本的枚举值有Custom、Dash、DashDot、DashDotDot、Dot、Solid,我只想要Dash、Dot、Solid三个值,并且以中文形式展现“...

Chouna
2012/07/21
902
0
Xcode Quartz 2D 绘图

//绘图 继承与UIView - (void)drawRect:(CGRect)rect { //绘制图片 [self drawImage]; //绘制文本 [self drawText]; //绘制线 [self drawLine]; //矩形 [self drawRecttang]; [self drawArc......

宋飞龙
2015/01/22
0
0
Android:视图绘制(五) ------Paint进阶之PathEffect

本文主要介绍一下Paint的setPathEffect方法。直译就是设置画笔的路径效果。 把setPathEffect方法放到这个位置单独开一篇来讲,主要是因为这个方法有一个关键字 Path ,所以前两篇讲了一下 Pa...

u010635353
2016/10/08
0
0
【Qt笔记】画刷和画笔

前面一章我们提到,Qt 绘图系统定义了两个绘制时使用的关键属性:画刷和画笔。前者使用描述,大多用于填充;后者使用描述,大多用于绘制轮廓线。 定义了的填充模式,具有样式、颜色、渐变以及...

大道无名
2016/07/30
23
0
PyQt5教程(九)——绘图

原文:http://zetcode.com/gui/pyqt5/painting/ PyQt5的绘图系统可用于渲染矢量图、图像和文本。如果想改变或增强已有的控件,或者想从头创建一个自定义控件时,我们就需要在程序中进行图形的...

pseudo
2015/12/23
837
0
项目实战-仿bilibili刷新按钮的实现

一、简述 最近跟小伙伴一起讨论了一下,决定一起仿一个BiliBili的app(包括android端和iOS端),我们并没有打算把这个项目完全做完,毕竟我们的重点是掌握一些新框架的使用,并在实战过程中发...

天星ing
2017/10/26
0
0
项目实战 - 仿 bilibili 刷新按钮的实现

一、简述 最近跟小伙伴一起讨论了一下,决定一起仿一个BiliBili的app(包括android端和iOS端),我们并没有打算把这个项目完全做完,毕竟我们的重点是掌握一些新框架的使用,并在实战过程中发...

CSDN_LQR
2017/10/24
0
0
项目实战-仿bilibili刷新按钮的实现

本文已授权我就是马云飞公众号独家发布。 一、简述 最近跟小伙伴一起讨论了一下,决定一起仿一个BiliBili的app(包括android端和iOS端),我们并没有打算把这个项目完全做完,毕竟我们的重点...

CSDN_LQR
2017/10/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周一乱弹 —— 如果是你喜欢的女同学找你借钱

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @guanglun :分享Michael Learns To Rock的单曲《Fairy Tale》 《Fairy Tale》- Michael Learns To Rock 手机党少年们想听歌,请使劲儿戳(这...

小小编辑
7分钟前
1
1
NNS域名系统之域名竞拍

0x00 前言 其实在官方文档中已经对域名竞拍的过程有详细的描述,感兴趣的可以移步http://doc.neons.name/zh_CN/latest/nns_protocol.html#id30 此处查阅。 我这里主要对轻钱包开发中会用到的...

暖冰
今天
0
0
32.filter表案例 nat表应用 (iptables)

10.15 iptables filter表案例 10.16/10.17/10.18 iptables nat表应用 10.15 iptables filter表案例: ~1. 写一个具体的iptables小案例,需求是把80端口、22端口、21 端口放行。但是,22端口我...

王鑫linux
今天
0
0
shell中的函数&shell中的数组&告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析

影夜Linux
今天
0
0
Linux网络基础、Linux防火墙

Linux网络基础 ip addr 命令 :查看网口信息 ifconfig命令:查看网口信息,要比ip addr更明了一些 centos 7默认没安装ifconfig命令,可以使用yum install -y net-tools命令来安装。 ifconfig...

李超小牛子
今天
1
0
[机器学习]回归--Decision Tree Regression

CART决策树又称分类回归树,当数据集的因变量为连续性数值时,该树算法就是一个回归树,可以用叶节点观察的均值作为预测值;当数据集的因变量为离散型数值时,该树算法就是一个分类树,可以很...

wangxuwei
昨天
1
0
Redis做分布式无锁CAS的问题

因为Redis本身是单线程的,具备原子性,所以可以用来做分布式无锁的操作,但会有一点小问题。 public interface OrderService { public String getOrderNo();} public class OrderRe...

算法之名
昨天
11
0
143. Reorder List - LeetCode

Question 143. Reorder List Solution 题目大意:给一个链表,将这个列表分成前后两部分,后半部分反转,再将这两分链表的节点交替连接成一个新的链表 思路 :先将链表分成前后两部分,将后部...

yysue
昨天
1
0
数据结构与算法1

第一个代码,描述一个被称为BankAccount的类,该类模拟了银行中的账户操作。程序建立了一个开户金额,显示金额,存款,取款并显示余额。 主要的知识点联系为类的含义,构造函数,公有和私有。...

沉迷于编程的小菜菜
昨天
1
0
从为什么别的队伍总比你的快说起

在机场候检排队的时候,大多数情况下,别的队伍都要比自己所在的队伍快,并常常懊悔当初怎么没去那个队。 其实,最快的队伍只能有一个,而排队之前并不知道那个队快。所以,如果有六个队伍你...

我是菜鸟我骄傲
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部