<?xml version="1.0" encoding="gb2312"?><rss version="2.0">
<channel>
<title><![CDATA[秋日私欲]]></title>
        <image>
        <title>http://hi.baidu.com</title>
        <link>http://hi.baidu.com</link>
        <url>http://img.baidu.com/img/logo-hi.gif</url>
        </image>
<description><![CDATA[硬件，软件，职业闲谈]]></description>
<link>http://hi.baidu.com/dalongkj</link>
<language>zh-cn</language>
<generator>www.baidu.com</generator>
<ttl>5</ttl>


<item>
        <title><![CDATA[想成立一个团队开发单片机，网站，软件]]></title>
        <link><![CDATA[http://hi.baidu.com/dalongkj/blog/item/c4b11ad7f37bccdfa144df80.html]]></link>
        <description><![CDATA[
		
		<p>现自我介绍下：</p>
<p>熟悉.NET，会用vs2005,目前正自学cb,</p>
<p>单片机会51，熟悉MSP430，</p>
<p>画电路图就不说了，基本上就这些。</p>
<p>团队目标：</p>
<p>网站，软件，和硬件方面，现在已有一位美工。接一些外包项目。</p>
<p>队员要求：</p>
<p>敬业，有业余时间交流，有职业素养，至少有一方面擅长，软硬件都可</p>
<p>我的邮箱：<a href="mailto:feiyu_868@163.com">feiyu_868@163.com</a></p>
<p>QQ群：2501269</p>
<p>有意的话，介绍下自己，越详细越好，也许我们就是队友，</p>
<p>资料可以放到我的博客，邮箱</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/dalongkj/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/dalongkj/blog/item/c4b11ad7f37bccdfa144df80.html#comment">查看评论</a>]]></description>
        <pubDate>2007年07月12日 星期四  下午 04:58</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[wodexiaofen]]></author>
		<guid>http://hi.baidu.com/dalongkj/blog/item/c4b11ad7f37bccdfa144df80.html</guid>
</item>

<item>
        <title><![CDATA[这几天东凑西挪，做个小软件，发上来]]></title>
        <link><![CDATA[http://hi.baidu.com/dalongkj/blog/item/f0b43097ad11af6c54fb96ef.html]]></link>
        <description><![CDATA[
		
		<p>Imports System.IO.Ports<br>
Public Class form1</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Dim WithEvents serialPort As New IO.Ports.SerialPort</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Public buffer1(4) As Byte<br>
&nbsp;&nbsp;&nbsp;&nbsp; Public buffer0(4) As Byte<br>
&nbsp;&nbsp;&nbsp;&nbsp; 'Public buffer2(4) As Byte</p>
<p><br>
&nbsp;&nbsp;&nbsp;&nbsp; Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For i As Integer = 0 To My.Computer.Ports.SerialPortNames.Count - 1<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ComboBox1.Items.Add(My.Computer.Ports.SerialPortNames(i))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Timer1.Enabled = True<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Timer1.Interval = 1000<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' Timer3.Enabled = True<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' Timer3.Interval = 10<br>
&nbsp;&nbsp;&nbsp;&nbsp; End Sub</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If serialPort.IsOpen Then<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; serialPort.Close()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Try<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; With serialPort<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .PortName = ComboBox1.Text<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .BaudRate = ComboBox2.Text<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Parity = IO.Ports.Parity.None<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .DataBits = 8<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .StopBits = IO.Ports.StopBits.One<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .DtrEnable() = True<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End With<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; serialPort.Open()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Catch ex As Exception<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox(ex.ToString)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End Try<br>
&nbsp;&nbsp;&nbsp;&nbsp; End Sub<br>
&nbsp;&nbsp;&nbsp;&nbsp; Public Sub DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles serialPort.DataReceived</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RichTextBox1.Invoke(New myDelegate(AddressOf updateTextBox), New Object() {})<br>
&nbsp;&nbsp;&nbsp;&nbsp; End Sub</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Public Delegate Sub myDelegate()</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Public Sub updateTextBox()</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim buffer As String</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; serialPort.Read(buffer1, 1, 4)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buffer = Hex(buffer1(1)) + Hex(buffer1(2)) + Hex(buffer1(3)) + Hex(buffer1(4))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Label1.Text = buffer1(1)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Label2.Text = buffer1(2)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Label3.Text = buffer1(3)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Label4.Text = buffer1(4)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RichTextBox1.AppendText(buffer)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; End Sub</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buffer0(1) = &amp;HFF<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buffer0(2) = &amp;HFE<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buffer0(3) = &amp;HFD<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buffer0(4) = &amp;HFC<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Try<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; serialPort.Write(buffer0, 1, 4)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Catch ex As Exception<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox(ex.ToString)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End Try<br>
&nbsp;&nbsp;&nbsp;&nbsp; End Sub</p>
<p><br>
&nbsp;&nbsp;&nbsp;&nbsp; Private Sub DrawGuidelines(ByVal PicBox As PictureBox)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim bmp As New Bitmap(PicBox.Width, PicBox.Height)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim gr As Graphics = Graphics.FromImage(bmp)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For i As Integer = 20 To 600 Step 20<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gr.DrawLine(Pens.WhiteSmoke, 0, i, PicBox.Width, i)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next i<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PicBox.Image = bmp<br>
&nbsp;&nbsp;&nbsp;&nbsp; End Sub<br>
&nbsp;&nbsp;&nbsp;&nbsp; Private Sub _1stDemo_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DrawGuidelines(Me.picGraph)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; End Sub<br>
&nbsp;&nbsp;&nbsp;&nbsp; Private OldValue As Single = 0<br>
&nbsp;&nbsp;&nbsp;&nbsp; Private NewValue As Single = 0<br>
&nbsp;&nbsp;&nbsp;&nbsp; Dim Xmove As Integer = 10<br>
&nbsp;&nbsp;&nbsp;&nbsp; Private Sub DrawGuidelinesAndChart(ByVal PicBox As PictureBox)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim bm As New Bitmap(PicBox.Width, PicBox.Height)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim gr As Graphics = Graphics.FromImage(bm)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For i As Integer = 20 To 600 Step 20<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gr.DrawLine(Pens.WhiteSmoke, PicBox.Width - Xmove, i, PicBox.Width, i)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next i<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gr.DrawImage(PicBox.Image, -Xmove, 0)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gr.TranslateTransform(0, picGraph.Height)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'NewValue = SBUserValue.Value * 4</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gr.DrawLine(Pens.Red, picGraph.Width - 1 - Xmove, -OldValue, picGraph.Width - 1, -NewValue)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OldValue = NewValue</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lblValue.Text = NewValue</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; picGraph.Image = bm<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gr.Dispose()</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; End Sub</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For j As Integer = 1 To 4<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NewValue = buffer1(j) / 2<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DrawGuidelinesAndChart(picGraph)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buffer1(j) = 0<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next j</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; End Sub</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Try<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; serialPort.Close()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Catch ex As Exception<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox(ex.ToString)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End Try<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End<br>
&nbsp;&nbsp;&nbsp;&nbsp; End Sub</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; ' Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick<br>
&nbsp;&nbsp;&nbsp;&nbsp; '&nbsp;&nbsp; buffer2(1) = Int(Rnd() * 100)<br>
&nbsp;&nbsp;&nbsp;&nbsp; '&nbsp;&nbsp; buffer2(2) = Int(Rnd() * 100)<br>
&nbsp;&nbsp;&nbsp;&nbsp; 'buffer2(3) = Int(Rnd() * 100)<br>
&nbsp;&nbsp;&nbsp;&nbsp; ' buffer2(4) = Int(Rnd() * 100)<br>
&nbsp;&nbsp;&nbsp;&nbsp; 'buffer1(5) = Int(Rnd() * 100)<br>
&nbsp;&nbsp;&nbsp;&nbsp; 'End Sub<br>
End Class</p>
<p><br>
</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/dalongkj/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/dalongkj/blog/item/f0b43097ad11af6c54fb96ef.html#comment">查看评论</a>]]></description>
        <pubDate>2007年05月10日 星期四  上午 02:12</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[wodexiaofen]]></author>
		<guid>http://hi.baidu.com/dalongkj/blog/item/f0b43097ad11af6c54fb96ef.html</guid>
</item>

<item>
        <title><![CDATA[vb.NET图形操作的程序]]></title>
        <link><![CDATA[http://hi.baidu.com/dalongkj/blog/item/6247d5fd60471144d6887dab.html]]></link>
        <description><![CDATA[
		
		<font size="2">
<div class="PageTitle">Introduction</div>
<div class="Content">
<p><font face="Verdana" size="2">&nbsp;&nbsp;&nbsp; There are some quite advanced features that can be incorporated into a dynamic chart, sometimes depending on where the data is coming from.&nbsp;&nbsp;&nbsp; In this article, we are going to be begin with a fairly simple demo.&nbsp;&nbsp;&nbsp; Then we will move on to one that is slightly more sophisticated and finally we will look at further enhancements that could be incorporated into this kind of graph.</font></p>
<p><font face="Verdana" size="2">&nbsp;&nbsp;&nbsp; So, let me set the scene.&nbsp;&nbsp; What do we want to do here?&nbsp;&nbsp;&nbsp; Well, the first dynamic line chart I plan to create is one that takes some simple user input and displays the values as they are chosen on the chart.&nbsp;&nbsp;&nbsp; As each new value is selected, the chart will be extended and redrawn to show the continuous changes that have been made.&nbsp;&nbsp; When the screen width is "full", the earliest values are lost from view as the graphic display continues to scroll from right to left.</font></p>
<p><font face="Verdana" size="2">&nbsp;&nbsp; One quick and easy demo is to create put a scrollbar on a form and use the changing scrollbar values as the data for the chart.&nbsp;&nbsp;&nbsp; Take a look at the sample form below.</font></p>
<p align="center"><font face="Verdana" size="2"><img src="http://www.devcity.net/Data/ArticleImages/Chart6_Image1A.png" border="0"></font></p>
<p><font face="Verdana" size="2"></font> </p>
<p><font face="Verdana" size="2"><u>Form Controls</u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></p>
<p><font face="Verdana" size="2">&nbsp;&nbsp;&nbsp;&nbsp; The silver grey area is a PictureBox.&nbsp;&nbsp; As the values in the ScrollBar change, so the graph represents the new values.&nbsp;&nbsp; I have used a Vertical ScrollBar here, but you can just as easily use a Horizontal ScrollBar.&nbsp;&nbsp; In either event, the coding logic will be the same.</font></p>
<p><font face="Verdana" size="2">&nbsp;&nbsp;&nbsp; Here are the steps to create the form.&nbsp;&nbsp;&nbsp;</font></p>
<ol>
<li><font face="Verdana" size="2">Add a ScrollBar control to the form.&nbsp;&nbsp; Set its Minimum property to 0, its Maximum to 104.&nbsp;&nbsp; (If you are wondering why I've picked that Maximum value, see the note at the bottom this page) .&nbsp;&nbsp; Set the LargeChange property to 5; leave the SmallChange property as 1.&nbsp;&nbsp; Change the control's name to SBUserValue to reflect its purpose - scroll bar to detect user's chosen values.</font> </li>
    <li><font face="Verdana" size="2">Add a PictureBox and name it picGraph.&nbsp;&nbsp;&nbsp; Set its height to exactly 400.&nbsp;&nbsp;&nbsp; Why ?&nbsp;&nbsp;&nbsp; This is really just a way of keeping the scaling code as easy as possible.&nbsp;&nbsp;&nbsp; The user values are going to be numbers between 0 and 100, so it will be very easy to multiply the value by 4 to automatically scale it vertically on the picturebox graph.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Real life almost certainly won't be this easy, but it will help us concentrate on the important drawing stuff for this first demonstration.&nbsp;&nbsp; Change the PictureBox'sname to picGraph and set its backcolor to Gainsborough (or any other color that you prefer)</font> </li>
    <li><font face="Verdana" size="2">Finally,add a label to display the changing selection value.&nbsp;&nbsp; This label plays no part in the chart creation; I've included it so you can check that any given value is correctly represented on the chart itself.&nbsp;&nbsp;&nbsp; Name it lblValue.</font> </li>
    <li><font face="Verdana" size="2">The remaining label controls shown on the screenshot above are entirely optional and are not referred to in any of the code that follows.</font></li>
</ol>
    <p><font size="2"><font face="Verdana">&nbsp;&nbsp;&nbsp;<u>Initial Code</u></font></font></p>
    <p><font face="Verdana" size="2">&nbsp;&nbsp;&nbsp; Place this Imports statement at the top of the form:</font></p>
<font color="#0000ff" size="2">
<p><font size="3"><font face="Courier New"> <font size="2">Imports </font></font></font></p>
</font>
<p>System.Drawing.Drawing2D</p>
    <p><font face="Verdana" size="2">&nbsp;&nbsp;&nbsp;&nbsp; As you will know if you have read the earlier articles in this series, this allows us to use any of the&nbsp;&nbsp; Drawing.Drawing2D class methods and properties in code without having to keep writing out the fully qualified names each time.&nbsp;&nbsp;&nbsp;</font></p>
    <p><font face="Verdana" size="2">&nbsp;&nbsp;&nbsp; In the next step we will build the code that does all the drawing in the chart, dynamically changing the display each time a new value is selected via the ScrollBar.</font></p>
    <p>----------------------------------------------------------------------------------------------------------------</p>
    <p>&nbsp;&nbsp;&nbsp;<font face="Arial" size="2">Note:</font></p>
    <p><font face="Arial" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The reason for setting a Maximum value of 104 (when what we really want is 0 to 100 on the scale) is due to what seems to me to be a small foible with the ScrollBar control.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If you set the Maximum to 100 and the Large Change to 5 then the highest value you will be able to physically obtain by moving the slider or clicking on the ScrollBar's arrow will be 96.&nbsp;&nbsp; There may be an official fix for this, but I find that offsetting the Maximum by a figure of (LargeChange - 1) seems to do the trick.</font></p>
    <p>&nbsp;&nbsp;&nbsp;</p>
    <div class="PageTitle">Basic Chart</div>
    <div class="Content"><font color="#000080"></font>
<p><font face="Verdana" size="2"></font><font color="#000080"><u></u></font><font face="Verdana"><font size="2"><u>Drawing the Chart Guidelines<font color="#000080"></font></u> </font></font><font color="#000080"><br>
</font><font face="Verdana" size="2">The next step is to draw the horizontal guidelines on the chart. These are drawn as soon as the form is first loaded and (as you will see shortly) are redrawn each time the chart is updated with new values. </font><font color="#000080"><br>
</font><font color="#000080"><br>
</font><font face="Verdana"><font size="2">In this first example, we will use hard coded values in the procedure that draws the guidelines. This is only because it makes the code simpler and the explanations shorter. Later in the article we will use a more flexible, modular and more realistic approach . <font color="#000080"></font><br>
<font color="#000080"></font></font></font></p>
    <p><font face="Verdana" size="2">In the Code Window for the form, add the following procedure: <br>
</font><font color="#000080"></font><blockquote><font color="#000080"></font><font color="#000080"><font face="Courier New" size="2">Private Sub DrawGuidelines(ByVal PicBox As PictureBox) </font><font color="#000080"><br>
</font><font color="#000080"><font color="#008000"></font></font><font color="#009900"><font size="2"><font face="Courier New">' Create a bitmap to draw on and grab its Graphics Object </font></font><br>
</font><font face="Courier New" size="2">Dim bmp As New Bitmap(PicBox.Width, PicBox.Height) </font><font color="#000080"><br>
</font><font face="Courier New" size="2">Dim gr As Graphics = Graphics.FromImage(bmp) </font><font color="#000080"><br>
</font><font color="#000080"><br>
</font><font color="#000080"><font color="#008000"></font><font size="2"><font face="Courier New"><font color="#009900">' Draw guidelines on this graphics object .</font> <font color="#000080"></font></font></font></font><font color="#000080"><br>
</font><font face="Courier New" size="2">For i As Integer = 40 To 400 Step 40 </font><font color="#000080"><br>
</font><font face="Courier New" size="2">gr.DrawLine(Pens.WhiteSmoke, 0, i, PicBox.Width, i)</font><font color="#000080"><br>
</font><font face="Courier New" size="2">Next i </font><font color="#000080"><br>
</font><font color="#000080"><br>
</font><font color="#000080"><font color="#008000"></font></font><font color="#009900"><font size="2"><font face="Courier New">' Assign the bitmap back to the PictureBox as its Image. </font></font><br>
</font><font face="Courier New" size="2">PicBox.Image = bmp </font><font color="#000080"><br>
</font><font color="#000080"><font color="#000080"></font><font face="Verdana"><font size="2"><font face="Courier New">End Sub</font><font color="#000080"></font></font></font></font><font color="#000080"></font></font><font face="Verdana"><font size="2"> <font color="#000080"></font><font color="#000080"></font></font></font></blockquote><br>
<font color="#000080"></font>
<p><font color="#000080"><u></u></font><u><font face="Verdana"><font size="2">How It Works<font color="#000080"></font></font></font></u><font face="Verdana"><font size="2"><font color="#000080"> <br>
</font> Let's analyse what this code actually does. (If you have read the previous articles this will be familiar to you, but if you have jumped in here at Part 6 some explanation of what is going on will be useful, I'm sure). </font></font><font color="#000080"><br>
</font><font face="Verdana" size="2">The first two lines of code in the procedure: </font><font color="#000080"><br>
</font><br>
<font color="#000080"></font><blockquote><font color="#000080"></font><font color="#000080"><font face="Verdana" size="2">Dim bmp As New Bitmap(PicBox.Width, PicBox.Height) </font><font color="#000080"><br>
</font><font face="Verdana" size="2">Dim gr As Graphics = Graphics.FromImage(bmp) </font><font color="#000080"><br>
</font><font color="#000080"></font></font><font color="#000080"></font><font color="#000080"></font></blockquote><br>
<font color="#000080"></font>
<p><font face="Verdana" size="2">can be broken down as follows:</font><font color="#000080"><br>
</font><br>
<font color="#000080"></font></p>
    <ol><font color="#000080">
<li> </li>
        <li> </li>
        <li> </li>
        <li> </li>
</font><font color="#000080"><font color="#000080"></font><font face="Verdana"><font size="2">Dim bmp As New Bitmap<font color="#000080"></font></font></font></font><font face="Verdana"><font size="2">: Creates a Bitmap object. <br>
<font color="#000080"></font></font></font><font color="#000080"></font><font face="Verdana"><font size="2">(<font color="#000080"><font color="#000080"></font>PicBox.Width, PicBox.Height<font color="#000080"></font></font>): Sets the size of this Bitmap to be the same size as the PictureBox on which we will draw the graph. <br>
<font color="#000080"></font></font></font><font color="#000080"></font><font color="#000080"><font color="#000080"></font><font face="Verdana"><font size="2">Dim gr As Graphics<font color="#000080"></font></font></font></font><font face="Verdana" size="2">: Creates a Graphics Object. </font><font color="#000080"><br>
</font><font face="Verdana"><font size="2">(A Graphics object can be thought of as a kind of "canvas" that is laid over a control and onto which lines and shapes can be drawn). <br>
<font color="#000080"></font></font></font><font color="#000080"></font><font color="#000080"><font color="#000080"></font><font face="Verdana"><font size="2">= Graphics.FromImage(bmp)<font color="#000080"></font></font></font></font><font face="Verdana"><font size="2">: Specifically assign the Graphics object from the Bitmap that we have just created. We will draw the lines on this Graphics object <font color="#000080"></font><font color="#000080"></font></font></font></ol>
<font color="#000080"></font><br>
<font color="#000080"></font>
<p><font face="Verdana" size="2">We've made a start. Let's check it out. </font><font color="#000080"><br>
</font><font face="Verdana" size="2">In the Form's Load event insert the following code which will call the above procedure and draw ten evenly spaced lines across the PictureBox: <br>
</font><font color="#000080"></font><blockquote><font color="#000080"></font><font face="Verdana" size="2">Private Sub _1stDemo_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load </font><font color="#000080"><br>
</font><font color="#000080"><font color="#008000"></font><font face="Verdana"><font size="2">' Draw horizontal lines on the picturebox<font color="#000080"></font></font></font></font><font face="Verdana" size="2"> </font><font color="#000080"><br>
</font><font face="Verdana" size="2">DrawGuidelines(Me.picGraph) </font><font color="#000080"><br>
</font><font face="Verdana"><font size="2">End Sub <font color="#000080"></font><font color="#000080"></font></font></font></blockquote><font color="#000080"></font><br>
<font color="#000080"></font>
<p><font color="#000080"><u></u></font><font face="Verdana"><font size="2"><u>Try It Out<font color="#000080"></font></u> </font></font><font color="#000080"><br>
</font><font color="#000080"></font><font color="#000080"></font></p>
<br>
<font color="#000080"></font>
<p><font face="Verdana" size="2">Try out the code so far. You should see something like this: </font></p>
<font color="#000080"></font><font color="#000080"></font><font color="#000080"></font><font color="#000080"></font><font color="#000080"></font><font color="#000080"></font><font color="#000080"></font><font color="#000080"></font>
<p> </p>
        <p><br>
<font color="#000080"></font></p>
        <p><font color="#800080"><img alt="Guidelines" src="http://www.devcity.net/Data/ArticleImages/Chart6_Guidelines.jpg" border="0"> </font><font color="#000080"></font></p>
<br>
<br>
<font color="#000080"></font><font color="#000080"></font><font color="#000080"></font><font color="#000080"></font><font color="#000080"></font><font color="#000080"></font><font color="#000080"></font><font color="#000080"></font><font color="#000080"></font>
<p><font face="Verdana" size="2"><u>Charting the Values </u><br>
The next part of the code is the key to the dynamism of the chart. Whenever the user changes the recorded value by scrolling the ScrollBar, here's what we will do: </font>
<p><font face="Verdana" size="2">We need to set up a few variables. The first one will represent the length of each segment of the graph - that is, the number of pixels used horizontally on the screen as each new part of the graph is added. Add the code below to the top of the form: </font></p>
        <p><font face="Courier New" size="2"><font color="#000080"></font></font>
<p><font face="Verdana" size="2">Because we are going to be drawing the graph of an ever changing set of values, we will need to be able to refer to the last used value as well as the current one. The two variables shown below will be used for this task:</font></p>
        <p><font face="Courier New" size="2"></font><font face="Verdana"><font size="2"><font color="#000000">Now for the actual procedure which produces the goods. It is named DrawGuidelinesAndChart: </font><br>
</font></font><blockquote><font color="#000080"><font size="2"><font face="Courier New">Private Sub DrawGuidelinesAndChart(ByVal PicBox As PictureBox) </font><br>
</font><font size="2"><font face="Courier New" color="#008000">' Step 1 <br>
' Grab the current image (the latest version of the chart) </font><br>
</font><font face="Courier New" color="#000080"><font size="2">Dim bm As New Bitmap(PicBox.Width, PicBox.Height) <br>
Dim gr As Graphics = Graphics.FromImage(bm) </font><font size="2"><font color="#008000">' Step 2 <br>
' Tack missing guidelines to right hand side on the Graphics object. </font><br>
</font><font size="2"><font color="#000080">For i As Integer = 40 To 400 Step 40 <br>
gr.DrawLine(Pens.WhiteSmoke, PicBox.Width - Xmove, i, PicBox.Width, i) <br>
Next i </font><br>
<br>
</font><font size="2"><font color="#008000">' Step 3 <br>
' Draw this grabbed image, placing it Xmove pixels to the left of the <br>
' image area. (that is, the first few pixels will be invisible because <br>
' they are now outside the picturebox's viewable area) <br>
</font><font color="#000080">gr.DrawImage(PicBox.Image, -Xmove, 0) </font><br>
</font><font size="2"><font color="#008000">' Note that we are still drawing on the Graphics object. <br>
' No change will appear on the PictureBox yet. <br>
</font><br>
</font><font color="#008000"><font size="2">' Step 4 <br>
' Plot the new value. That is, calculate where on the Y axis (the <br>
' vertical plane) this new value should be marked. <br>
' This calculation takes into account the scale of the min/max values <br>
' range in relation to the total height of the PictureBox. <br>
' In this example this is 4:1 (PictureBox Height is 400:Max value on the ScrollBar is 100) <br>
' so we multiply the selected value by a scale of 4 <br>
<font color="#000080">NewValue = SBUserValue.Value * 4 </font></font><font color="#008000"><font size="2">' Step 5 <br>
' Shift start point from top left to bottom left. <br>
<font color="#000080">gr.TranslateTransform(0, picGraph.Height) </font><br>
</font><font size="2"><font color="#008000">' Step 6 <br>
' Draw the next line segment on the Graphics object. <br>
' Note that the NEGATIVE values of OldValue and NewValue <br>
' are used for the Y positions. <br>
' This will reverse the position of those points and make them <br>
' appear in the PictureBox. If you don't do this, they will be <br>
' drawn down below the bottom of the PictureBox and therefore <br>
' out of view of the user. </font><br>
</font><font size="2"><font color="#000080">gr.DrawLine(Pens.Black, _ <br>
picGraph.Width - 1 - Xmove, -OldValue, _ <br>
picGraph.Width - 1, -NewValue) <br>
OldValue = NewValue </font><br>
</font><font size="2"><font color="#008000">' Step 7 <br>
' Display the results by assigning this edited Bitmap as the <br>
' Image of the PictureBox. <br>
</font><font color="#000080">picGraph.Image = bm </font></font><font size="2"><font color="#008000">' Step 8 <br>
' All done </font><br>
<font color="#000080">gr.Dispose() </font></font><font size="2"><font color="#008000">' For confirmation purposes, display the currently selected value in a label </font><br>
</font><font color="#000080"><font size="2">lblValue.Text = SBUserValue.Value.ToString <br>
End Sub</font> </font></font></font></font></font></blockquote><font color="#000080"><font face="Courier New" color="#000080"><font color="#008000">
<p><font face="Verdana" color="#000000" size="2"><u>Using the Vertical ScrollBar</u> <br>
As mentioned earlier, the vertical ScrollBar used in this demonstration is just an easy way to generate a set of fast-changing values to show on the graph. What we need to do now is write some code that kicks in each time the value of the ScrollBar is changed by the user. <br>
The place to do this in the ScrollBar's ValueChanged event. </font></p>
<blockquote><font face="Courier New" color="#000080"><font size="2">Private Sub SBUserValue_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles SBUserValue.ValueChanged <br>
DrawGuidelinesAndChart(picGraph) <br>
End Sub</font> </font></blockquote><font style="TEXT-DECORATION: underline" face="Agency FB" color="#800080" size="3">
<p><font face="Verdana" size="2"></font></p>
</font></font></font></font>
<p><u><font face="Verdana" size="2">Test It</font></u></p>
        <p><font face="Verdana" color="#000000" size="2">Now run the project and move the ScrollBar. Each movement of the ScrollBar should result in a new value being plotted on the chart. You can check what value was last selected by viewing the value shown in the label. <br>
As you'll see, the Vertical ScrollBar creates higher values as it is moved downwards; lower values as it is moved upwards. If you find this confusing, you can easily replace the Vertical ScrollBar with a Horizontal one. In that case, lower values are selected as you scroll to the left and higher values to the right, which you may think is more logical.</font></p>
        <p><img src="http://www.devcity.net/Data/ArticleImages/Chart6_FirstDemo.jpg" border="0"></p>
        <p> </p>
        <p><font face="Verdana" color="#000000" size="2"><u>First Demonstration Summary</u> <br>
With relatively little code, we have created a useful dynamic line chart. You can replace the ScrollBar that I have used with any other means of taking values that would be relevant for your projects, whether this be user input, system produced information, external data, time based data, and so on. </font></p>
        <p><font face="Verdana" color="#000000" size="2">Of course, you can't always guarantee that the values used will fall neatly into the 1 to 100 range we used for this first example, so we will shortly look at how we can edit the code to make it more flexible. <br>
First though, I want to look at a couple of ways of producing some interesting alternative displays. </font></p>
        <p> </p>
        <p> </p>
        <p> </p>
        <p> </p>
        <p> </p>
        <p> </p>
        <p> </p>
        <p> </p>
        <p> </p>
        <p> </p>
</p>
<blockquote><font color="#000080">Private OldValue As Single = 0 <br>
Private NewValue As Single = 0 </font></blockquote></p>
<blockquote>Dim Xmove As Integer = 3 </blockquote></p>
        <ol>
<li>Take a 'snapshot' of the previous display by grabbing the current image from the PictureBox in which we are creating the chart. </li>
            <li>Extend the guidelines at the right hand side of the drawing. (You'll see why in a minute). </li>
            <li>'Paste' the snapshot of the previous display back on to the Bitmap's Graphics Object, BUT place it slightly to the left so that some of this snapshot falls outside the viewable area of the PictureBox. <br>
(There would an empty gap at the right hand side now if we hadn't extended the guidelines in the last step). </li>
            <li>Calculate the point on the Y (vertical axis) where the currently selected value should be marked. <br>
Note that we have to scale this to make full use of the available height of the PictureBox. In our current example, where we have carefully set the PictureBox height to 400 and the ScrollBar maximum to 100, we therefore have a scale of 4:1 (that is, each increment of 1 in the ScrollBar value is represented by 4 vertical pixels in the PictureBox.) </li>
            <li>Move the start point from the default position at the <em>Top</em> Left of the PictureBox, so that the drawing will now start at the <em>Bottom</em> Left corner of the PictureBox.<br>
The key thing to understand is that when you draw lines in a PictureBox, the point of origin - the Point with values (0,0)- is always in the top left hand corner. <br>
Then, when you draw a line from that point - to Point (50, 100) for example - then the pen will move 50 pixels across and 100 pixels down. <br>
This is fine for most drawing tasks, but in a chart we expect the line to move <strong>upwards</strong> as values increase, not downwards. Therefore we want our chart line to begin in the bottom left corner to represent a value of zero (Point 0,0) and increasing values to be represented by an upward moving line. </li>
            <li>Draw the next line segment. This line will extend from the point where the last value plotted ended to the point required to represent the current value.<br>
Remembering what was said above about lines being drawn from top to bottom, we also have to flip the line so that it becomes drawn from bottom to top (otherwise it would be drawn in an area out of view). <br>
In this example, this is achieved very simply by plotting the <em>negative</em> equivalents of the values. </li>
            <li>All the drawing tasks for the latest value are now complete, so we can assign our freshly redrawn bitmap as the Image property of the PictureBox. <br>
This will update the display and the user will see the results of our actions above. </li>
            <li>Finally, good housekeeping - we dispose of the Graphics object as we have finished with it for this cycle of actions. </li>
</ol>
<br>
The following code will do the job:- <br>
</p>
<blockquote><font face="Verdana" size="2"></font></blockquote></p>
<blockquote><font face="Verdana" size="2"></font></blockquote></p>
<blockquote><font face="Verdana" size="2"></font></blockquote></div>
<font face="Verdana" size="2">
<div class="PageTitle">Basic Chart Special Effects</div>
            <div class="Content"><font face="Verdana" color="#000000" size="2">
<p><u>Shaded Graph</u> <br>
If you want a chart that looks like this: </p>
            <p><img src="http://www.devcity.net/Data/ArticleImages/Chart6_Effect1.jpg" border="0"></p>
            <p>then you can achieve this effect with a minor code tweak. Replace Step 6 in the DrawGuidelinesAndChart procedure with the code block below:</p>
<blockquote><font face="Courier New" color="#008000">' Step 6 <br>
<br>
' Draw the next line segment on the Graphics object. <br>
<br>
<font color="#000080">gr.DrawLine(Pens.Black, _ <br>
picGraph.Width - 1 - Xmove, -OldValue, _ <br>
picGraph.Width - 1, -NewValue) <br>
OldValue = NewValue <font color="#008000"><br>
' Draw another line segment, but this time leave the Y value of <br>
' OldValue as positive. </font><br>
gr.DrawLine(Pens.LightBlue, _ <br>
(picGraph.Width - 1) - Xmove, OldValue, _ <br>
picGraph.Width - 1, -NewValue) <br>
OldValue = NewValue <br>
</font><br>
</font></blockquote></font><font face="Verdana" color="#000000" size="2">
<p>As you can see, the only change is a second sub block which uses Drawline again to draw a second line segment on the Graphics object. The difference here is that the start point of this segment is the positive value of OldValue, which you will recall means that it is located down below the bottom of the PictureBox. So drawing this second line has the effect of creating a line that runs from the bottom of the PictureBox up until it meets the point where we plotted the negative value of NewValue. <br>
Sounds complicated at first, I know, but if you step through it a line at a time I hope it will make sense.</p>
            <p>摘自：<a class="a1" href="http://iamben250.programfan.com/">http://iamben250.programfan.com</a></p>
</font></div>
</font></div>
</font> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/dalongkj/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/dalongkj/blog/item/6247d5fd60471144d6887dab.html#comment">查看评论</a>]]></description>
        <pubDate>2007年05月04日 星期五  上午 00:54</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[wodexiaofen]]></author>
		<guid>http://hi.baidu.com/dalongkj/blog/item/6247d5fd60471144d6887dab.html</guid>
</item>

<item>
        <title><![CDATA[共享.]]></title>
        <link><![CDATA[http://hi.baidu.com/dalongkj/blog/item/6c98648bee0bc813c8fc7ac2.html]]></link>
        <description><![CDATA[
		
		等我把软件做出来后就共享了，也说说我的心的！<img src="http://img.baidu.com/hi/face/i_f01.gif"> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/dalongkj/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/dalongkj/blog/item/6c98648bee0bc813c8fc7ac2.html#comment">查看评论</a>]]></description>
        <pubDate>2007年04月27日 星期五  下午 12:09</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[wodexiaofen]]></author>
		<guid>http://hi.baidu.com/dalongkj/blog/item/6c98648bee0bc813c8fc7ac2.html</guid>
</item>

<item>
        <title><![CDATA[串口问题三十解决了]]></title>
        <link><![CDATA[http://hi.baidu.com/dalongkj/blog/item/fa3cdfea285558d2d439c942.html]]></link>
        <description><![CDATA[
		
		查了好几天资料，问题算是解决了，呵呵， 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/dalongkj/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/dalongkj/blog/item/fa3cdfea285558d2d439c942.html#comment">查看评论</a>]]></description>
        <pubDate>2007年04月26日 星期四  下午 12:54</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[wodexiaofen]]></author>
		<guid>http://hi.baidu.com/dalongkj/blog/item/fa3cdfea285558d2d439c942.html</guid>
</item>

<item>
        <title><![CDATA[看到个免费的下载电影的地方]]></title>
        <link><![CDATA[http://hi.baidu.com/dalongkj/blog/item/3eb4eedc7ee5dda0cc116614.html]]></link>
        <description><![CDATA[
		
		<a href="http://movie.coolyee.com/index.php">http://movie.coolyee.com/index.php</a> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/dalongkj/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/dalongkj/blog/item/3eb4eedc7ee5dda0cc116614.html#comment">查看评论</a>]]></description>
        <pubDate>2007年04月23日 星期一  下午 06:42</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[wodexiaofen]]></author>
		<guid>http://hi.baidu.com/dalongkj/blog/item/3eb4eedc7ee5dda0cc116614.html</guid>
</item>

<item>
        <title><![CDATA[serialport类]]></title>
        <link><![CDATA[http://hi.baidu.com/dalongkj/blog/item/c680df3ddbf95cc69f3d62a5.html]]></link>
        <description><![CDATA[
		
		这几天一直用vb2005做个关于serialport 的小软件，查了好几天了，也是对其一知半解，想深入了，却怎么也找不到，msdn上的资料如嚼干蜡，这些资料想再深入点噶然而止，真想找个高人帮帮忙！ 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/dalongkj/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/dalongkj/blog/item/c680df3ddbf95cc69f3d62a5.html#comment">查看评论</a>]]></description>
        <pubDate>2007年04月23日 星期一  下午 02:07</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[wodexiaofen]]></author>
		<guid>http://hi.baidu.com/dalongkj/blog/item/c680df3ddbf95cc69f3d62a5.html</guid>
</item>

<item>
        <title><![CDATA[Socket 成员]]></title>
        <link><![CDATA[http://hi.baidu.com/dalongkj/blog/item/12959101a239e3d7267fb559.html]]></link>
        <description><![CDATA[
		
		不值怎么的msdn上的内容有好多都看不懂。 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/dalongkj/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/dalongkj/blog/item/12959101a239e3d7267fb559.html#comment">查看评论</a>]]></description>
        <pubDate>2007年04月22日 星期日  下午 02:46</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[wodexiaofen]]></author>
		<guid>http://hi.baidu.com/dalongkj/blog/item/12959101a239e3d7267fb559.html</guid>
</item>


</channel>
</rss>