<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.vbex.ru/index.php?action=history&amp;feed=atom&amp;title=VB.Net%2F2D%2FLineCaps</id>
		<title>VB.Net/2D/LineCaps - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.vbex.ru/index.php?action=history&amp;feed=atom&amp;title=VB.Net%2F2D%2FLineCaps"/>
		<link rel="alternate" type="text/html" href="http://www.vbex.ru/index.php?title=VB.Net/2D/LineCaps&amp;action=history"/>
		<updated>2026-04-04T19:59:33Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.vbex.ru/index.php?title=VB.Net/2D/LineCaps&amp;diff=46&amp;oldid=prev</id>
		<title> в 16:40, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.vbex.ru/index.php?title=VB.Net/2D/LineCaps&amp;diff=46&amp;oldid=prev"/>
				<updated>2010-05-26T16:40:06Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 16:40, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://www.vbex.ru/index.php?title=VB.Net/2D/LineCaps&amp;diff=47&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.vbex.ru/index.php?title=VB.Net/2D/LineCaps&amp;diff=47&amp;oldid=prev"/>
				<updated>2010-05-26T12:41:38Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Custom Line Cap Construction==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vbnet&amp;quot;&amp;gt;&lt;br /&gt;
Imports System&lt;br /&gt;
Imports System.Windows.Forms&lt;br /&gt;
Imports System.Drawing&lt;br /&gt;
Imports System.Drawing.Drawing2D&lt;br /&gt;
Imports System.Drawing.Text&lt;br /&gt;
Imports System.Drawing.Imaging&lt;br /&gt;
Public Class MainClass&lt;br /&gt;
  Shared Sub Main()&lt;br /&gt;
     Dim form1 As Form1 = new Form1&lt;br /&gt;
     Application.Run(form1)&lt;br /&gt;
  End Sub&lt;br /&gt;
  &lt;br /&gt;
End Class&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Public Class Form1&lt;br /&gt;
  Inherits System.Windows.Forms.Form&lt;br /&gt;
#Region &amp;quot; Windows Form Designer generated code &amp;quot;&lt;br /&gt;
  Public Sub New()&lt;br /&gt;
    MyBase.New()&lt;br /&gt;
    &amp;quot;This call is required by the Windows Form Designer.&lt;br /&gt;
    InitializeComponent()&lt;br /&gt;
    &amp;quot;Add any initialization after the InitializeComponent() call&lt;br /&gt;
  End Sub&lt;br /&gt;
  &amp;quot;Form overrides dispose to clean up the component list.&lt;br /&gt;
  Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)&lt;br /&gt;
    If disposing Then&lt;br /&gt;
      If Not (components Is Nothing) Then&lt;br /&gt;
        components.Dispose()&lt;br /&gt;
      End If&lt;br /&gt;
    End If&lt;br /&gt;
    MyBase.Dispose(disposing)&lt;br /&gt;
  End Sub&lt;br /&gt;
  &amp;quot;Required by the Windows Form Designer&lt;br /&gt;
  Private components As System.ruponentModel.IContainer&lt;br /&gt;
  &amp;quot;NOTE: The following procedure is required by the Windows Form Designer&lt;br /&gt;
  &amp;quot;It can be modified using the Windows Form Designer.  &lt;br /&gt;
  &amp;quot;Do not modify it using the code editor.&lt;br /&gt;
  &amp;lt;System.Diagnostics.DebuggerStepThrough()&amp;gt; Private Sub InitializeComponent()&lt;br /&gt;
    &amp;quot;&lt;br /&gt;
    &amp;quot;Form1&lt;br /&gt;
    &amp;quot;&lt;br /&gt;
    Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)&lt;br /&gt;
    Me.ClientSize = New System.Drawing.Size(292, 273)&lt;br /&gt;
    Me.Name = &amp;quot;Form1&amp;quot;&lt;br /&gt;
    Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen&lt;br /&gt;
    Me.Text = &amp;quot;Form1&amp;quot;&lt;br /&gt;
  End Sub&lt;br /&gt;
#End Region&lt;br /&gt;
  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load&lt;br /&gt;
  End Sub&lt;br /&gt;
  Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)&lt;br /&gt;
    Dim G As Graphics = e.Graphics&lt;br /&gt;
    Dim P As Pen = New Pen(Color.Blue, 1)&lt;br /&gt;
    Dim Pts() As Point = {New Point(10, 10), _&lt;br /&gt;
                    New Point(15, 10), _&lt;br /&gt;
                    New Point(20, 15), _&lt;br /&gt;
                    New Point(20, 20), _&lt;br /&gt;
                    New Point(15, 25), _&lt;br /&gt;
                    New Point(10, 10)}&lt;br /&gt;
    Dim Path As GraphicsPath = New GraphicsPath()&lt;br /&gt;
    Path.AddLines(Pts)&lt;br /&gt;
    G.SmoothingMode = SmoothingMode.AntiAlias&lt;br /&gt;
    Dim MyCustomLineCap As CustomLineCap = New CustomLineCap(Nothing, Path)&lt;br /&gt;
    MyCustomLineCap.BaseInset = 0&lt;br /&gt;
    MyCustomLineCap.WidthScale = 1&lt;br /&gt;
    MyCustomLineCap.StrokeJoin = LineJoin.Miter&lt;br /&gt;
    P.CustomEndCap = MyCustomLineCap&lt;br /&gt;
    P.CustomStartCap = MyCustomLineCap&lt;br /&gt;
    G.DrawLine(P, 50, 150, 200, 150)&lt;br /&gt;
    MyCustomLineCap.Dispose()&lt;br /&gt;
    Path.Dispose()&lt;br /&gt;
    P.Dispose()&lt;br /&gt;
  End Sub&lt;br /&gt;
End Class&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Custom Line Caps==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vbnet&amp;quot;&amp;gt;&lt;br /&gt;
Imports System.Drawing.Drawing2D&lt;br /&gt;
Imports System&lt;br /&gt;
Imports System.Drawing.Text&lt;br /&gt;
Imports System.Drawing&lt;br /&gt;
Imports System.Windows.Forms&lt;br /&gt;
&lt;br /&gt;
Public Class MainClass&lt;br /&gt;
   Shared Sub Main()&lt;br /&gt;
       Dim form1 As Form = New Form1()&lt;br /&gt;
       Application.Run(form1)&lt;br /&gt;
   End Sub &amp;quot; ValidationError&lt;br /&gt;
End Class&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Public Class Form1&lt;br /&gt;
    Private Sub Form1_Paint(ByVal sender As Object, _&lt;br /&gt;
     ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint&lt;br /&gt;
        &amp;quot; Make a GraphicsPath that draws an X.&lt;br /&gt;
        Dim pts() As Point = { _&lt;br /&gt;
            New Point(-20, -20), _&lt;br /&gt;
            New Point(0, 0), _&lt;br /&gt;
            New Point(-20, 20), _&lt;br /&gt;
            New Point(0, 0), _&lt;br /&gt;
            New Point(20, 20), _&lt;br /&gt;
            New Point(0, 0), _&lt;br /&gt;
            New Point(20, -20) _&lt;br /&gt;
        }&lt;br /&gt;
        Dim cap_path As New GraphicsPath&lt;br /&gt;
        cap_path.AddLines(pts)&lt;br /&gt;
        &amp;quot; Make the CustomLineCap.&lt;br /&gt;
        Dim x_cap As New CustomLineCap(Nothing, cap_path)&lt;br /&gt;
        &amp;quot; Draw some lines with x_cap.&lt;br /&gt;
        Dim the_pen As New Pen(Color.Black, 1)&lt;br /&gt;
        the_pen.CustomStartCap = x_cap&lt;br /&gt;
        the_pen.CustomEndCap = x_cap&lt;br /&gt;
        e.Graphics.DrawLine(the_pen, 50, 100, 200, 10)&lt;br /&gt;
&lt;br /&gt;
    End Sub&lt;br /&gt;
End Class&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;Global.Microsoft.VisualBasic.rupilerServices.DesignerGenerated()&amp;gt; _&lt;br /&gt;
Partial Public Class Form1&lt;br /&gt;
    Inherits System.Windows.Forms.Form&lt;br /&gt;
    &amp;quot;Form overrides dispose to clean up the component list.&lt;br /&gt;
    &amp;lt;System.Diagnostics.DebuggerNonUserCode()&amp;gt; _&lt;br /&gt;
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)&lt;br /&gt;
        If disposing AndAlso components IsNot Nothing Then&lt;br /&gt;
            components.Dispose()&lt;br /&gt;
        End If&lt;br /&gt;
        MyBase.Dispose(disposing)&lt;br /&gt;
    End Sub&lt;br /&gt;
    &amp;quot;Required by the Windows Form Designer&lt;br /&gt;
    Private components As System.ruponentModel.IContainer&lt;br /&gt;
    &amp;quot;NOTE: The following procedure is required by the Windows Form Designer&lt;br /&gt;
    &amp;quot;It can be modified using the Windows Form Designer.  &lt;br /&gt;
    &amp;quot;Do not modify it using the code editor.&lt;br /&gt;
    &amp;lt;System.Diagnostics.DebuggerStepThrough()&amp;gt; _&lt;br /&gt;
    Private Sub InitializeComponent()&lt;br /&gt;
        Me.SuspendLayout()&lt;br /&gt;
        &amp;quot;&lt;br /&gt;
        &amp;quot;Form1&lt;br /&gt;
        &amp;quot;&lt;br /&gt;
        Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)&lt;br /&gt;
        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font&lt;br /&gt;
        Me.ClientSize = New System.Drawing.Size(292, 273)&lt;br /&gt;
        Me.Name = &amp;quot;Form1&amp;quot;&lt;br /&gt;
        Me.Text = &amp;quot;TransformArrow&amp;quot;&lt;br /&gt;
        Me.ResumeLayout(False)&lt;br /&gt;
    End Sub&lt;br /&gt;
End Class&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==LineCap Demo==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vbnet&amp;quot;&amp;gt;&lt;br /&gt;
Imports System&lt;br /&gt;
Imports System.Windows.Forms&lt;br /&gt;
Imports System.Drawing.Text&lt;br /&gt;
Imports System.Drawing&lt;br /&gt;
Public Class MainClass&lt;br /&gt;
    &lt;br /&gt;
    Shared Sub Main(ByVal args As String())&lt;br /&gt;
        Dim myform As Form = New Form1()&lt;br /&gt;
        Application.Run(myform)&lt;br /&gt;
    End Sub&lt;br /&gt;
End Class&lt;br /&gt;
&lt;br /&gt;
Public Class Form1&lt;br /&gt;
    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint&lt;br /&gt;
        Dim x As Integer = 5&lt;br /&gt;
        Dim y As Integer = 10&lt;br /&gt;
        Dim the_pen As New Pen(Color.Black, 20)&lt;br /&gt;
        DrawSample(e.Graphics, x, y, Drawing2D.LineCap.AnchorMask)&lt;br /&gt;
        DrawSample(e.Graphics, x, y, Drawing2D.LineCap.ArrowAnchor)&lt;br /&gt;
        DrawSample(e.Graphics, x, y, Drawing2D.LineCap.DiamondAnchor)&lt;br /&gt;
        DrawSample(e.Graphics, x, y, Drawing2D.LineCap.Flat)&lt;br /&gt;
        DrawSample(e.Graphics, x, y, Drawing2D.LineCap.NoAnchor)&lt;br /&gt;
        DrawSample(e.Graphics, x, y, Drawing2D.LineCap.Round)&lt;br /&gt;
        DrawSample(e.Graphics, x, y, Drawing2D.LineCap.RoundAnchor)&lt;br /&gt;
        DrawSample(e.Graphics, x, y, Drawing2D.LineCap.Square)&lt;br /&gt;
        DrawSample(e.Graphics, x, y, Drawing2D.LineCap.SquareAnchor)&lt;br /&gt;
        DrawSample(e.Graphics, x, y, Drawing2D.LineCap.Triangle)&lt;br /&gt;
    End Sub&lt;br /&gt;
    Private Sub DrawSample(ByVal gr As Graphics, ByRef x As Integer, ByRef y As Integer, ByVal style As Drawing2D.LineCap)&lt;br /&gt;
        Dim the_pen As New Pen(Color.Black, 20)&lt;br /&gt;
        the_pen.EndCap = style&lt;br /&gt;
        gr.DrawString(style.ToString, Me.Font, Brushes.Black, x, y - 5)&lt;br /&gt;
        gr.DrawLine(the_pen, x + 100, y, x + 150, y)&lt;br /&gt;
        y += 50&lt;br /&gt;
        If y &amp;gt; Me.ClientRectangle.Height Then&lt;br /&gt;
            x += 200&lt;br /&gt;
            y = 80&lt;br /&gt;
        End If&lt;br /&gt;
    End Sub&lt;br /&gt;
    &lt;br /&gt;
End Class&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Global.Microsoft.VisualBasic.rupilerServices.DesignerGenerated()&amp;gt; _&lt;br /&gt;
Partial Public Class Form1&lt;br /&gt;
    Inherits System.Windows.Forms.Form&lt;br /&gt;
    &amp;quot;Form overrides dispose to clean up the component list.&lt;br /&gt;
    &amp;lt;System.Diagnostics.DebuggerNonUserCode()&amp;gt; _&lt;br /&gt;
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)&lt;br /&gt;
        If disposing AndAlso components IsNot Nothing Then&lt;br /&gt;
            components.Dispose()&lt;br /&gt;
        End If&lt;br /&gt;
        MyBase.Dispose(disposing)&lt;br /&gt;
    End Sub&lt;br /&gt;
    &amp;quot;Required by the Windows Form Designer&lt;br /&gt;
    Private components As System.ruponentModel.IContainer&lt;br /&gt;
    &amp;quot;NOTE: The following procedure is required by the Windows Form Designer&lt;br /&gt;
    &amp;quot;It can be modified using the Windows Form Designer.  &lt;br /&gt;
    &amp;quot;Do not modify it using the code editor.&lt;br /&gt;
    &amp;lt;System.Diagnostics.DebuggerStepThrough()&amp;gt; _&lt;br /&gt;
    Private Sub InitializeComponent()&lt;br /&gt;
        Me.SuspendLayout()&lt;br /&gt;
        &amp;quot;&lt;br /&gt;
        &amp;quot;Form1&lt;br /&gt;
        &amp;quot;&lt;br /&gt;
        Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)&lt;br /&gt;
        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font&lt;br /&gt;
        Me.ClientSize = New System.Drawing.Size(564, 209)&lt;br /&gt;
        Me.Name = &amp;quot;Form1&amp;quot;&lt;br /&gt;
        Me.Text = &amp;quot;Title&amp;quot;&lt;br /&gt;
        Me.ResumeLayout(False)&lt;br /&gt;
    End Sub&lt;br /&gt;
End Class&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==LineCaps Demo==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vbnet&amp;quot;&amp;gt;&lt;br /&gt;
Imports System&lt;br /&gt;
Imports System.Collections&lt;br /&gt;
Imports System.ruponentModel&lt;br /&gt;
Imports System.Windows.Forms&lt;br /&gt;
Imports System.Data&lt;br /&gt;
Imports System.Configuration&lt;br /&gt;
Imports System.Resources&lt;br /&gt;
Imports System.Drawing&lt;br /&gt;
Imports System.Drawing.Drawing2D&lt;br /&gt;
Imports System.Drawing.Imaging&lt;br /&gt;
Public Class MainClass&lt;br /&gt;
    Shared Sub Main()&lt;br /&gt;
        Dim myform As Form = New LineCapsForm()&lt;br /&gt;
        Application.Run(myform)&lt;br /&gt;
    End Sub&lt;br /&gt;
End Class&lt;br /&gt;
Public Class LineCapsForm&lt;br /&gt;
    Inherits System.Windows.Forms.Form&lt;br /&gt;
#Region &amp;quot; Windows Form Designer generated code &amp;quot;&lt;br /&gt;
    Public Sub New()&lt;br /&gt;
        MyBase.New()&lt;br /&gt;
        &amp;quot;This call is required by the Windows Form Designer.&lt;br /&gt;
        InitializeComponent()&lt;br /&gt;
        &amp;quot;Add any initialization after the InitializeComponent() call&lt;br /&gt;
    End Sub&lt;br /&gt;
    &amp;quot;Form overrides dispose to clean up the component list.&lt;br /&gt;
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)&lt;br /&gt;
        If disposing Then&lt;br /&gt;
            If Not (components Is Nothing) Then&lt;br /&gt;
                components.Dispose()&lt;br /&gt;
            End If&lt;br /&gt;
        End If&lt;br /&gt;
        MyBase.Dispose(disposing)&lt;br /&gt;
    End Sub&lt;br /&gt;
    &amp;quot;Required by the Windows Form Designer&lt;br /&gt;
    Private components As System.ruponentModel.IContainer&lt;br /&gt;
    &amp;quot;NOTE: The following procedure is required by the Windows Form Designer&lt;br /&gt;
    &amp;quot;It can be modified using the Windows Form Designer.  &lt;br /&gt;
    &amp;quot;Do not modify it using the code editor.&lt;br /&gt;
    &amp;lt;System.Diagnostics.DebuggerStepThrough()&amp;gt; Private Sub InitializeComponent()&lt;br /&gt;
        components = New System.ruponentModel.Container()&lt;br /&gt;
        Me.Text = &amp;quot;LineCapsForm&amp;quot;&lt;br /&gt;
    End Sub&lt;br /&gt;
#End Region&lt;br /&gt;
&lt;br /&gt;
    Private Sub LineCapsForm_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles MyBase.Paint&lt;br /&gt;
        Dim g As Graphics = e.Graphics&lt;br /&gt;
        Dim capNames As String() = System.Enum.GetNames(GetType(LineCap))&lt;br /&gt;
        Array.Sort(capNames)&lt;br /&gt;
        Dim x As Integer = 0&lt;br /&gt;
        Dim y As Integer = 0&lt;br /&gt;
        Dim width As Integer = Me.ClientRectangle.Width / 2&lt;br /&gt;
        Dim height As Integer = Me.ClientRectangle.Height / ((capNames.Length) / 2)&lt;br /&gt;
        Dim blackBrush As Brush = Brushes.Black&lt;br /&gt;
        Dim whitePen As Pen = Pens.White&lt;br /&gt;
        Dim capName As String&lt;br /&gt;
        For Each capName In capNames&lt;br /&gt;
            Dim pen As Pen = New Pen(Color.Black, 12)&lt;br /&gt;
            pen.EndCap = CType(System.Enum.Parse(GetType(LineCap), capName), LineCap)&lt;br /&gt;
            If pen.EndCap &amp;lt;&amp;gt; LineCap.AnchorMask Then&lt;br /&gt;
                If pen.EndCap = LineCap.Custom Then&lt;br /&gt;
                    pen.CustomEndCap = New AdjustableArrowCap(3, 3, False)&lt;br /&gt;
                End If&lt;br /&gt;
                g.DrawLine(pen, x, CInt(y + height * 2 / 3), CInt(x + width * 2 / 3), CInt(y + height * 2 / 3))&lt;br /&gt;
                g.DrawLine(whitePen, x, CInt(y + height * 2 / 3), CInt(x + width * 2 / 3), CInt(y + height * 2 / 3))&lt;br /&gt;
                g.DrawString(capName, Me.Font, blackBrush, x, y)&lt;br /&gt;
                x = x + width&lt;br /&gt;
                If x &amp;gt; Me.ClientRectangle.Width - width Then&lt;br /&gt;
                    y = y + height&lt;br /&gt;
                    x = 0&lt;br /&gt;
                End If&lt;br /&gt;
            End If&lt;br /&gt;
        Next&lt;br /&gt;
    End Sub&lt;br /&gt;
End Class&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>