<?xml version="1.0" encoding="utf-8"?><rss version="2.0">
<channel>
<title><![CDATA[leaf'blog]]></title>
<link>http://blog.pfan.cn/leafage</link>
<description>编程爱好者博客</description>
<language>zh-cn</language>
			<item>
		<title><![CDATA[电脑重启]]></title>
		<link>http://blog.pfan.cn/leafage/4732.html</link>
		<description><![CDATA[&nbsp;计算机频繁重起的诊断和解决办法 








计算机频繁重起的诊断和解决办法。





一、软件 　　1．病毒破坏 &nbsp;&nbsp;&nbsp;&nbsp;自从有了计算机以后不久，计算机病毒也应运而生。当网络成为当今社会的信息大动脉后，病毒的传播更加方便，所以也时不时的干扰和破坏我们的正常工作。比较典型的就是前一段时间对全球计算机造成严重破坏的“冲击波”病毒，发作时还会提示系统将在60秒后自动启动。其实，早在DOS时代就有不少病毒能够自动重启你的计算机。 &nbsp;&nbsp;&nbsp;&nbsp;对于是否属于病毒破坏，我们可以使用最新版的杀毒软件进行杀毒，一般都会发现病毒存在。当然，还有一种可能是当你上网时被人恶意侵入了你的计算机，并放置了木马程序。这样对方能够从远程控制你计算机的一切活动，当然也包括让你的计算机重新启动。对于有些木马，不容易清除，最好重新安装操作系统。 　　2．系统文件损坏 &nbsp;&nbsp;&nbsp;&nbsp;当系统文件被破坏时，如Win2K下的KERNEL32.DLL，Win98 FONTS目录下面的字体等系统运行时基本的文件被破坏，系统在启动时会因此无法完成初始化而强迫重新启动。你可以做个试验，把WIN98目录下的字库“FONTS”改名试一试。当你再次开机时，我们的计算机就会不断的重复启动。 &nbsp;&nbsp;&nbsp;&nbsp;对于这种故障，因为无法进入正常的桌面，只能覆盖安装或重新安装。 　　3．定时软件或计划任务软件起作用 &nbsp;&nbsp;&nbsp;&nbsp;如果你在“计划任务栏”里设置了重新启动或加载某些工作程序时，当定时时刻到来时，计算机也会再次启动。对于这种情况，我们可以打开“启动”项，检查里面有没有自己不熟悉的执行文件或其他定时工作程序，将其屏蔽后再开机检查。当然，我们也可以在“运行”里面直接输入“Msconfig”命令选择启动项。 　　二、硬件 　　1．市电电压不稳 &nbsp;&nbsp;&nbsp;&nbsp;一般家用计算机的开关电源工作电压范围为170V－240V，当市电电压低于170V时，计算机就会自动重启或关机。因为市电电压的波动我们有时感觉不到，所以就会误认为计算机莫名其妙的自动重启了。 &nbsp;&nbsp;&nbsp]]></description>
		<author><![CDATA[yezhi]]></author>
		<pubDate>2005-09-14 11:16:00</pubDate>
		</item>
				<item>
		<title><![CDATA[vb中从域名得到IP及从IP得到域名]]></title>
		<link>http://blog.pfan.cn/leafage/3608.html</link>
		<description><![CDATA[vb中从域名得到IP及从IP得到域名

转载
　　办法如下：


Private Const WS_VERSION_REQD = &amp;H101
Private Const WS_VERSION_MAJOR = WS_VERSION_REQD \ &amp;H100 And &amp;HFF&amp;
Private Const WS_VERSION_MINOR = WS_VERSION_REQD And &amp;HFF&amp;
Private Const MIN_SOCKETS_REQD = 1
Private Const SOCKET_ERROR = -1
Private Const WSADescription_Len = 256
Private Const WSASYS_Status_Len = 128

Private Type HOSTENT
hname As Long
hAliases As Long
hAddrType As Integer
hLength As Integer
hAddrList As Long
End Type

Private Type WSADATA
wversion As Integer
wHighVersion As Integer
szDescription(0 To WSADescription_Len) As Byte
szSystemStatus(0 To WSASYS_Status_Len) As Byte
iMaxSockets As Integer
iMaxUdpDg As Integer
lpszVendorInfo As Long
End Type
Private Declare Function gethostbyaddr Lib &quot;WSOCK32.DLL&quot; (addr As Any, ByVal _
byteslen As Integer, addrtype As Integer) As Long
Private Declare Function WSAGetLastError Lib &quot;WSOCK32.DLL&quot; () As Long
Private Declare Function WSAStartup Lib &quot;WSOCK32.DLL&qu]]></description>
		<author><![CDATA[yezhi]]></author>
		<pubDate>2005-08-07 23:45:00</pubDate>
		</item>
				<item>
		<title><![CDATA[如何获取打印机纸张信息？]]></title>
		<link>http://blog.pfan.cn/leafage/3606.html</link>
		<description><![CDATA[如何获取打印机纸张信息？
转载
Option Explicit
Private Const DC_MAXEXTENT = 5
Private Const DC_MINEXTENT = 4
Private Const DC_PAPERNAMES = 16
Private Const DC_PAPERS = 2
Private Const DC_PAPERSIZE = 3
Private Declare Function DeviceCapabilities Lib &quot;winspool.drv&quot; Alias &quot;DeviceCapabilitiesA&quot; (ByVal lpDeviceName As String, ByVal lpPort As String, ByVal iIndex As Long, lpOutput As Any, lpDevMode As Any) As Long
Private Type POINTS
x As Long
y As Long
End Type

'***********************************************************
'* 名称：GetPaperInfo
'* 功能：得到打印机低张信息
'* 用法：GetPaperInfo(控件名)
'* 描述：如在 form_load()中调用GetPaperInfo MSHFlexGrid1
'***********************************************************
Public Function GetPaperInfo(Flex As MSHFlexGrid) As Boolean

Dim i As Long, ret As Long
Dim Length As Integer, Width As Integer
Dim PaperNo() As Integer, PaperName() As String, PaperSize() As POINTS

With Flex
.FormatString = &quot;^纸张编号|^纸张名称|^纸张长度|^纸张宽度&quot;
For i = 0 To .Cols - 1
.ColWidth(i) = 17]]></description>
		<author><![CDATA[yezhi]]></author>
		<pubDate>2005-08-07 22:45:00</pubDate>
		</item>
				<item>
		<title><![CDATA[VB6.0中如何快速实现大面积不规则区域的填充&nbsp;]]></title>
		<link>http://blog.pfan.cn/leafage/3605.html</link>
		<description><![CDATA[VB6.0中如何快速实现大面积不规则区域的填充
转载
　　办法如下：

　　一、引言

　　区域填充是指先将区域内的一个像素 ，一般称为种子点赋予给定的颜色和辉亮，然后将该颜色扩展到整个区域内的过程。

　　二、已有的填充算法及缺点

　　1．扫描线法

　　扫描线法可以实现已知多边形域边界的填充，多边形域可以是凹的、凸的、还可以是带孔的。该填充方法是按扫描线的顺序，计算扫描线与待填充区域的相交区间，再用要求的颜色显示这些区间的像素，即完成填充工作。这里区间的端点通过计算扫描线与多边形边界线的交点获得。所以待填充区域的边界线必须事先知道，因此它的缺点是无法实现对未知边界的区域填充。

　　2．边填充算法

　　边填充的基本思想是：对于每一条扫描线和每条多边形边的交点，将该扫描线上交点右方的所有像素取补。对多边形的每条边作些处理，多边形的顺序随意。该算法适用于具有帧缓冲器的图形系统，按任意顺序处理多边形的边。处理每条边时，仅访问与该边有交的扫描线上交点右方的像素。所有的边都被处理之后，按扫描线顺序读出帧缓冲器的内容，送入显示设备。该算法的优点是简单，缺点是对于复杂图形，每一像素可能被访问多次，重要的是必须事先知道待填充多边形的边界，所以在填充未知边界的区域时不适用。

　　3．递归算法

　　递归算法的优点是编程实现时，语言简洁。但在VB6.0实际编程实现时，这种递归算法填充稍稍大一些的图形就会出现堆栈溢出现象，据我们的实践证明，递归算法只能连续递归深度在2090次左右，也就是说，如果待填充的图形大于二千多个像素那么堆栈溢出。下面给出八连通填充方法的VB程序实现(四连通算法同理)。

Public Sub area(p, q As Integer)
If ((imagepixels(0, p, q) = red1) And (imagepixels(1, p, q) = green1) And (imagepixels(2, p, q) = blue1)) Then
imagepixels(0, p, q) = 0： imagepixels(2, p, q) = 0： imagepixels(1, p, q) = 0
Picture1.PSet (p, q), RGB(0, 0, 0)
Call area(p + 1, q)： Call area(p, q + 1)]]></description>
		<author><![CDATA[yezhi]]></author>
		<pubDate>2005-08-07 22:42:00</pubDate>
		</item>
				<item>
		<title><![CDATA[MSFlexGrid的应用]]></title>
		<link>http://blog.pfan.cn/leafage/3103.html</link>
		<description><![CDATA[MSFLEXGRID控件里，想在单元格里输入数据，而且要求是：在第二行第一列的位置开始，能够输入数据，输入之后还要求判断回车键有没有按下，如果按下了，就表明这个内容填写了，根据填写的内容然后同一行里其他单元格里填充内容，最后一行填完整了，再换到第二行。麻烦各位了。 


--------------------------------------------------------------------------------
一段利用MsFlexGrid控件作的非常简单的程序，可以输入英文字符和数字，按回车自动右移，支持方向键，可以自动添加行。只用到一个MsFlexGrid控件，没有别的：
Private Sub Form_Load()
Grid1.Rows = 10
Grid1.Cols = 6
End Sub
Private Sub Grid1_KeyDown(KeyCode As Integer, Shift As Integer)
Dim X As Long
Dim Y As Long
Dim L As Long
Dim Tmp As String
X = Grid1.Col
Y = Grid1.Row
Select Case KeyCode
&nbsp;&nbsp;&nbsp;Case 13
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;X = X + 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If X &gt;= Grid1.Cols Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;X = 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Y = Y + 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If Y &gt;= Grid1.Rows Then Grid1.Rows = Grid1.Rows + 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Grid1.Col = X
&nb]]></description>
		<author><![CDATA[yezhi]]></author>
		<pubDate>2005-07-22 14:17:00</pubDate>
		</item>
				<item>
		<title><![CDATA[将MsFlexGrid控件中显示的内容输出到Excel表格中进行&nbsp;]]></title>
		<link>http://blog.pfan.cn/leafage/3101.html</link>
		<description><![CDATA[&nbsp;Public Sub OutDataToExcel(Flex As MSFlexGrid) '导出至Excel 
 Dim s As String 
 Dim i As Integer 
 Dim j As Integer 
 Dim k As Integer 
 On Error GoTo Ert 
 Me.MousePointer = 11 
 Dim Excelapp As Excel.Application 
 Set Excelapp = New Excel.Application 
 On Error Resume Next 
 DoEvents 
 Excelapp.SheetsInNewWorkbook = 1 
 Excelapp.Workbooks.Add 
 Excelapp.ActiveSheet.Cells(1, 3) = s 
 Excelapp.Range(&quot;C1&quot;).Select 
 Excelapp.Selection.Font.FontStyle = &quot;Bold&quot; 
 Excelapp.Selection.Font.Size = 16 
 With Flex 
 k = .Rows 
 For i = 0 To k - 1 
 For j = 0 To .Cols - 1 
 DoEvents 
 Excelapp.ActiveSheet.Cells(3 + i, j + 1) = &quot;'&quot; &amp; .TextMatrix(i, j) 
 Next j 
 Next i 
 End With 
 Me.MousePointer = 0 
 Excelapp.Visible = True 
 Excelapp.Sheets.PrintPreview 
Ert: 
 If Not (Excelapp Is Nothing) Then 
 Excelapp.Quit 
 End If 
End Sub]]></description>
		<author><![CDATA[yezhi]]></author>
		<pubDate>2005-07-22 14:09:00</pubDate>
		</item>
				<item>
		<title><![CDATA[MSFlexGrid的使用]]></title>
		<link>http://blog.pfan.cn/leafage/3093.html</link>
		<description><![CDATA[Private Sub SetGridTitle()
&nbsp;&nbsp;&nbsp;With flexGrid
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.FormatString = &quot;流水号|录入时间|赔案号|保单号|被保险人|厂牌型号|保险类型|牌照号码|使用性质|业务部门|业务员|理赔员|立案日期|合计&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ColAlignment(0) = flexAlignLeftCenter
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ColAlignment(1) = flexAlignLeftCenter
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ColAlignment(2) = flexAlignLeftCenter
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ColAlignment(3) = flexAlignLeftCenter
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ColAlignment(4) = flexAlignLeftCenter
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ColAlignment(5) = flexAlignLeftCenter
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ColAlignment(6) = flexAlignLeftCenter
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ColAlignment(7) = flexAlignLeftCenter
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ColAlignment(8) = flexAlignLeftCenter
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ColAlignment(9) = flexAlignLeftCenter
&nbsp;&nbsp;&nbsp;&nbsp;&nb]]></description>
		<author><![CDATA[yezhi]]></author>
		<pubDate>2005-07-22 13:26:00</pubDate>
		</item>
				<item>
		<title><![CDATA[如何用MsflexGrid网格显示查询数据？]]></title>
		<link>http://blog.pfan.cn/leafage/3088.html</link>
		<description><![CDATA[BOOL CLOGINFO::OnInitDialog() 
{
CDialog::OnInitDialog();

// TODO: Add extra initialization here
m_mf.SetRows(2);
m_mf.SetCols(4);

m_mf.SetColWidth(0,800);
m_mf.SetColWidth(1,1200);
m_mf.SetColWidth(2,1000);
m_mf.SetColWidth(3,6000);

m_mf.SetTextMatrix(0,1,&quot;日期&quot;);
m_mf.SetTextMatrix(0,2,&quot;时间&quot;);
m_mf.SetTextMatrix(0,3,&quot;事件&quot;);

CString strSql,row;
strSql.Insert(0,&quot;select 日期,时间,事件 from slog order by 日期 desc,时间 desc&quot;);
_RecordsetPtr pRs;
CKaoqinApp* ap=(CKaoqinApp*)AfxGetApp();

::CoInitialize(NULL);
pRs.CreateInstance(__uuidof(Recordset));
pRs-&gt;Open(_bstr_t(strSql),ap-&gt;m_pCon.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);
if(0&lt;pRs-&gt;RecordCount)
{
m_mf.SetRows(pRs-&gt;RecordCount+1);
}
BeginWaitCursor();
try
{
for(long i=1;i&lt;pRs-&gt;RecordCount;i++)
{
row.Empty();
row.Format(&quot;%d&quot;,i);
m_mf.SetTextMatrix(i,0,row);
for(long j=1;j&lt;4;j++)
{
m_mf.SetTextMatrix(i,j,(char*)_bstr_t(pRs-&gt;GetFields()-&gt;GetItem(j-1L)]]></description>
		<author><![CDATA[yezhi]]></author>
		<pubDate>2005-07-22 13:20:00</pubDate>
		</item>
				<item>
		<title><![CDATA[MSFLEXGrid源码&nbsp;&nbsp;]]></title>
		<link>http://blog.pfan.cn/leafage/3087.html</link>
		<description><![CDATA[Option Explicit
Dim DefColor
Dim Horizenw



Private Sub Form_Load()

＆#39;==========================
Dim I As Integer, lRow As Long
With MSFlexGrid1 ＆#39;初始化表格
.Cols = 9
.Rows = 8
For I = 1 To 4
.ColWidth(I) = 750
Next I
For I = 5 To 8
.ColWidth(I) = 950
Next I
lRow = 1
For I = 1 To 7
.TextMatrix(lRow, 4) = 1
.TextMatrix(lRow, 0) = 表达式 ＆ I
lRow = 1 lRow
.RowHeight(I) = 400
Next I
End With


End Sub


Private Sub MSFlexGrid1_DblClick()
Dim I
With MSFlexGrid1
If .MouseCol = 0 Or .MouseRow = 0 Then Exit Sub

Text1.Left = .Left .CellLeft: Text1.Top = .Top .CellTop
Text1.Height = .CellHeight: Text1.Width = .CellWidth
Text1.Text = .Clip
Text1.Visible = True: Text1.SetFocus
Text1.SelStart = 0: Text1.SelLength = Len(Text1.Text)

End With
End Sub


Private Sub MSFlexGrid1_KeyUp(KeyCode As Integer, shift As Integer)
If KeyCode = vbKeyDelete Then MSFlexGrid1.Clip = 
End Sub

Private Sub MSFlexGrid1_LeaveCell()
MSFlexGrid1.CellBackColor = DefColor
End Sub
Private Sub MSFlexGrid1_RowColChange()
Wi]]></description>
		<author><![CDATA[yezhi]]></author>
		<pubDate>2005-07-22 13:15:00</pubDate>
		</item>
				<item>
		<title><![CDATA[MSFlexGrid控件可编辑的简单实现方法2]]></title>
		<link>http://blog.pfan.cn/leafage/3086.html</link>
		<description><![CDATA['实现步骤
'1 打开 VB5， 开启一个新的工程。
'2 在菜单&quot;工程&quot; 中选择 &quot;部件&quot;， 在列表中选中
'&quot;Microsoft FlexGrid Control ..&quot;
'3 放一个 MsFlexGrid 控件和一个TextBox 控件(Text1)到 Form1。
'修改MsFlexGrid 控件的名称为 Grid1， 设置Grid1 的行，列
'为 4， 固定行，列为 0。 设置 Text1 的 Visiable 为 False，
'BorderStyle 为 None(0)。
'4 在Form1 的代码中增加声明:

Const ASC_ENTER = 13 '回车
Dim gRow As Integer
Dim gCol As Integer

'5 增加代码到 Grid_KeyPress 过程：

Private Sub Grid1_KeyPress(KeyAscii As Integer)
' Move the text box to the current grid cell:
Text1.Top = Grid1.CellTop + Grid1.Top
Text1.Left = Grid1.CellLeft + Grid1.Left
' Save the position of the grids Row and Col for later:
gRow = Grid1.Row
gCol = Grid1.Col
' Make text box same size as current grid cell:
Text1.Width = Grid1.CellWidth - 2 * Screen.TwipsPerPixelX
Text1.Height = Grid1.CellHeight - 2 * Screen.TwipsPerPixelY
' Transfer the grid cell text:
Text1.Text = Grid1.Text
' Show the text box:
Text1.Visible = True
Text1.ZOrder 0 ' 把 Text1 放到最前面！
Text1.SetFocus
' Redirect this KeyPress event to t]]></description>
		<author><![CDATA[yezhi]]></author>
		<pubDate>2005-07-22 13:14:00</pubDate>
		</item>
				<item>
		<title><![CDATA[MSFlexGrid控件可编辑的简单实现方法]]></title>
		<link>http://blog.pfan.cn/leafage/3085.html</link>
		<description><![CDATA[在窗体上放一MSFlexGrid和Text控件各一个。
代码如下：

Private Sub Form_Load()
&nbsp;&nbsp;&nbsp;&nbsp;Text1.Move -10000, -10000, 1, 1
&nbsp;&nbsp;&nbsp;&nbsp;Text1.Text = &quot;&quot;
&nbsp;&nbsp;&nbsp;&nbsp;MSFlexGrid1.Cols = 6&nbsp;&nbsp;'6列 可根据自己需要调整。
&nbsp;&nbsp;&nbsp;&nbsp;MSFlexGrid1.Rows = 6 '6行
End Sub

Private Sub MSFlexGrid1_EnterCell()
&nbsp;&nbsp;&nbsp;&nbsp;MSFlexGrid1.CellBackColor = vbBlue
&nbsp;&nbsp;&nbsp;&nbsp;MSFlexGrid1.CellForeColor = vbWhite
&nbsp;&nbsp;&nbsp;&nbsp;Text1.Text = MSFlexGrid1.Text
&nbsp;&nbsp;&nbsp;&nbsp;Text1.SelStart = 0
&nbsp;&nbsp;&nbsp;&nbsp;Text1.SelLength = Len(Text1.Text)
End Sub

Private Sub MSFlexGrid1_LeaveCell()
&nbsp;&nbsp;&nbsp;&nbsp;MSFlexGrid1.CellBackColor = vbWhite
&nbsp;&nbsp;&nbsp;&nbsp;MSFlexGrid1.CellForeColor = vbBlue
End Sub

Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
&nbsp;&nbsp;&nbsp;&nbsp;Text1.SetFocus
End Sub

Private Sub Text1_Change()
&nbsp;&nbsp;&nbsp;&nbsp;MSFlexGrid1.Text = Text1.T]]></description>
		<author><![CDATA[yezhi]]></author>
		<pubDate>2005-07-22 13:13:00</pubDate>
		</item>
				<item>
		<title><![CDATA[加强型的msflexgrid3]]></title>
		<link>http://blog.pfan.cn/leafage/3084.html</link>
		<description><![CDATA['以下程式处理Multi-column Selection的问题
Private Sub ProcMultiColSel(ByVal Shift As Integer)
Dim i As Long, HaveSel As Boolean
Dim SelSt As Long, SelEnd As Long
Dim OldRowSel As Long, OldColSel As Long
With MSFlexGrid1
OldRowSel = .RowSel: OldColSel = .ColSel
If HaveSelEntireCol Then
&nbsp;&nbsp;&nbsp;'如果有整行被选取的清况，则计算选取的起始结束行
&nbsp;&nbsp;&nbsp;SelSt = IIf(.Col &lt;= .ColSel, .Col, .ColSel)
&nbsp;&nbsp;&nbsp;SelEnd = IIf(.Col &gt; .ColSel, .Col, .ColSel)
&nbsp;&nbsp;&nbsp;For i = SelSt To SelEnd
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ColSelect(i) = True
&nbsp;&nbsp;&nbsp;Next
&nbsp;&nbsp;&nbsp;.CellBackColor = .BackColorSel
&nbsp;&nbsp;&nbsp;If Shift &lt;&gt; vbCtrlMask Then '没有按Ctl键则清除其他Column的Selection
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Call RefreshCols(SelSt, SelEnd)
&nbsp;&nbsp;&nbsp;End If
Else
&nbsp;&nbsp;&nbsp;HaveSel = False
&nbsp;&nbsp;&nbsp;For i = 1 To .Cols - 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HaveSel = HaveSel Or ColSelect(i)
&nbsp;&nbsp;&nbsp;Next
&nbsp;&nbsp;&nbsp;If]]></description>
		<author><![CDATA[yezhi]]></author>
		<pubDate>2005-07-22 13:10:00</pubDate>
		</item>
				<item>
		<title><![CDATA[加强型的msflexgrid2]]></title>
		<link>http://blog.pfan.cn/leafage/3083.html</link>
		<description><![CDATA['以下在Form需一个MSFlexGrid, 一个TextBox
Option Explicit
Private OldText As String
Private ColSelect() As Boolean
Private SaveCellBkColor As Long
Private Sub Form_Load()
Text1.Visible = False
Me.Show
With MSFlexGrid1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Cols = 5
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Rows = 15
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReDim ColSelect(1 To .Cols - 1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SaveCellBkColor = .CellBackColor
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Call InitGrid
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.AllowBigSelection = True
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.FillStyle = flexFillRepeat
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.AllowUserResizing = True&nbsp;&nbsp;'请事先设好
End With
End Sub

Private Sub InitGrid()
Dim i As Long
With MSFlexGrid1
&nbsp;&nbsp;.Row = 0
&nbsp;&nbsp;For i = 1 To .Cols - 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Col = i: .Text = &quot;Col&quot; + Format(i, &quot;00&quot;) '若Cols超出99，则修改Format
&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp]]></description>
		<author><![CDATA[yezhi]]></author>
		<pubDate>2005-07-22 13:09:00</pubDate>
		</item>
				<item>
		<title><![CDATA[加强型的 MSFlexGrid&amp;nbsp;1]]></title>
		<link>http://blog.pfan.cn/leafage/3082.html</link>
		<description><![CDATA[加强型的 MSFlexGrid
来源:cww 更改王国荣的范例
修改过王国荣先生的范後，功能如下：
1.在MSFlexGrid上按Enter时，可以编修当格(Current Cell)的内容
2.在MSFlexGrid上Click时，可以编修当格(Current Cell)的内容
3.在MSFlexGrid上固定列与固定行上面按Mouse右键时可以修改其Title
4.允许MultiLine/MultiCol的Selection 与按Ctl-Mouse左键的MultiSelect Columns
5.进入Cell的EditMode时，按up/Down键会离开Current Cell而进入上/下 一行的Cell
6.进入Cell的EditMode时，按Escape回覆原本的字串
MSFlexGrid内的资料原本是不能让使用者直接KeyIn的，所以找个变通的方式，便是使用
TextBox来Keyin，再把TextBox内的值放入MSFlexGrid中，但重点就变成TextBox如何设
定位置、大小於MSFlexGrid之上。这个部份在toEditGrid的程式中做。何时启动TextBox
让之可以输入资料呢，有两个地方，一个在MSFlexGrid上的Mouse_Click，而且考虑可以
在Grid上做多栏的选取，所以只有在.ColSel = .Col And .RowSel = .Row时才可以进入
EditMode。另一个地方在MSFlexGrid上按Enter，也会令之进入EditMode。而离开EditMode
的时机在於TextBox上按Enter/Up/Down/Esc 键。

另外，我们如果想要保留MSFlexGrid可以整列整行选取，而且又可以更动MSFlexGrid最
上与最左边的固定列之Title，我的做法是，在MSFlexGrid上MouseUp时来判定Mouse所在
的Col与Row，如果MouseCol=0 or MouseRow = 0代表是在FixedCol/FixedRow 上按下
Mouse，如果按的是右键表示要修改FixCol或FixRow的Title，如果是左键，那不做任何
处理，此时，如果AllowBigSelection=True时，则会选取整行或整列。']]></description>
		<author><![CDATA[yezhi]]></author>
		<pubDate>2005-07-22 13:08:00</pubDate>
		</item>
				<item>
		<title><![CDATA[VB中使用EXCEL输出]]></title>
		<link>http://blog.pfan.cn/leafage/2506.html</link>
		<description><![CDATA[VB中使用EXCEL输出

Private Sub cmdSwatch_Click()
Dim xls As excel.Application
Dim xlbook As excel.Workbook
'On Error GoTo exlError
Dim i As Integer
&nbsp;&nbsp;&nbsp;&nbsp;If Dir(Text1.Text) &lt;&gt; &quot;&quot; Then '此目录下如有同名文件给出提示,并作相应处理
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If MsgBox(&quot;文件已存在，是否覆盖！&quot;, vbYesNo + vbQuestion, &quot;另存为工程造价文件&quot;) = vbNo Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit Sub
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Kill (Text1.Text) '删除文件
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If
&nbsp;&nbsp;&nbsp;&nbsp;End If

&nbsp;&nbsp;&nbsp;&nbsp;'************打开工作表***************
&nbsp;&nbsp;&nbsp;&nbsp;Set xls = New excel.Application
&nbsp;&nbsp;&nbsp;&nbsp;xls.Visible = True
&nbsp;&nbsp;&nbsp;&nbsp;Set xlbook = xls.Workbooks.Add
&nbsp;&nbsp;&nbsp;&nbsp;'*********************************
&nbsp;&nbsp;&nbsp;&nbsp;For i = 0 To]]></description>
		<author><![CDATA[yezhi]]></author>
		<pubDate>2005-07-03 22:22:00</pubDate>
		</item>
				<item>
		<title><![CDATA[VB条形码编码]]></title>
		<link>http://blog.pfan.cn/leafage/2505.html</link>
		<description><![CDATA[VB条形码编码
类型：转载

&nbsp;&nbsp;&nbsp;&nbsp;条形码技术广泛应用于各行各业，你随便拿起一本书、一包薯片都可以在外包装上找到，利用条码读取机便可将这一条条黑白相间、粗细不同的垂直线条识别而转换为具体的数值，并将这个数值返回到计算机中进行处理。正是这样，有了条形码技术，人们很方便就能取得该商品的有关信息如商品名称、规格、价格等，因为每种商品都有其对应的条形码，这个条形码计算机（终端、服务器）中就可以迅速返回用户，从数据库中读取约定的商品，信息使得销售、进货、存货等等管理更有效率，也对防止假冒伪劣又一定的抑制作用。
条码的编码方式有多种，不同行业，不同国家标准也不尽相同。条形码通过线条的粗细来表达其数值。至于接口方式一般也有多种，如键盘口的、串行口的。一般传感装置是光罩式的，也有笔式的。
上面笼笼统统地谈了一些关于条形码的知识，可帮助你更好地阅读以下更深入的内容。条形码有关概念先说到这里，接着是详细具体的编程实现方法。

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
一、条形码的读取
&nbsp;&nbsp;&nbsp;&nbsp;用过键盘口式的扫条码工具的朋友就知道，它就如同在鍵盘上按下数字鍵一样，基本不需任何编程和处理。但如果你使用的是其它接口的话，可能你就要为该设备编写通讯代码了。以下有一段简单的25针串口的条码读取器通讯代码。
Option Explicit
Dim sData As String
Private Sub Form_Load()
With MSComm1
&nbsp;&nbsp;&nbsp;.CommPort = 3 '设为COM3，试运行的系统而定，你可提供一个Combox让用户选择。
&nbsp;&nbsp;&nbsp;.PortOpen = True　'打开通讯端口
End With
End Sub

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Private Sub MSComm1_OnComm()
&nbsp;&nbsp;
&nbsp;&nbsp;Dim EndPos As Integer
&nbsp;&nbsp;Select Case MSComm1.CommEvent
&nbsp;&nbsp;&nbsp;&nbsp;Case comEvReceive '当有数据传送过]]></description>
		<author><![CDATA[yezhi]]></author>
		<pubDate>2005-07-03 22:17:00</pubDate>
		</item>
				<item>
		<title><![CDATA[VB6.0 调用存储过程的例子（方法二）]]></title>
		<link>http://blog.pfan.cn/leafage/2126.html</link>
		<description><![CDATA[VB6.0 调用存储过程的例子（方法二）
类型：转载

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VB6.0 调用存储过程的例子（方法二）


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;本人推荐使用方法一来取存储过程，当然前提是知道将要使用的参数化命令的详细情况，通过在代码中创建参数，其执行的速度快。

 

如果不知道要使用的参数化命令，本人整理了一份通过使用参数（Parameters）对象来获取存储过程的记录集的内容，但该执行方式速度没有方法一理想。

 

代码整理如下，你可以直接将该代码Copy到Form1窗体中进行调试。

其中函数GetDataType可以修改为自己所需的处理方式，在这里所有的代码都是为了测试方便所有，你也可以改为自己所需的相应处理。

 

Sub CreateParms()

&nbsp;&nbsp;&nbsp;&nbsp;Dim ADOCmd As New ADODB.Command

&nbsp;&nbsp;&nbsp;&nbsp;Dim ADOPrm As New ADODB.Parameter

&nbsp;&nbsp;&nbsp;&nbsp;Dim ADOCon As ADODB.Connection

&nbsp;&nbsp;&nbsp;&nbsp;Dim ADORs As ADODB.Recordset

&nbsp;&nbsp;&nbsp;&nbsp;Dim strConnect As String

&nbsp;&nbsp;&nbsp;&nbsp;Dim strFieldName As String

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;Dim i As Integer

&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;strConnect = &quot;driver={SQL Server};server=(local);uid=sa;pwd=;database=]]></description>
		<author><![CDATA[yezhi]]></author>
		<pubDate>2005-06-26 13:41:00</pubDate>
		</item>
				<item>
		<title><![CDATA[VB6.0 调用存储过程的例子（方法一）]]></title>
		<link>http://blog.pfan.cn/leafage/2125.html</link>
		<description><![CDATA[VB6.0 调用存储过程的例子（方法一）
类型：转载

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VB6.0 调用存储过程的例子（方法一）


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(说明:以下代码摘自微软的MSDN,经过测试没问题。使用该方法的前提条件是必须知道将要使用的参数化命令的详细情况。)

 

打开Form1窗体，Copy以下的代码到窗体中，该段代码将测试存储过程ADOTestRPE的返回值、输入参数及输出参数，测试的过程中，可能需要修改链接字符串。

 

Sub CreateParms()

&nbsp;&nbsp;&nbsp;&nbsp;Dim ADOCmd As New ADODB.Command

&nbsp;&nbsp;&nbsp;&nbsp;Dim ADOPrm As New ADODB.Parameter

&nbsp;&nbsp;&nbsp;&nbsp;Dim ADOCon As ADODB.Connection

&nbsp;&nbsp;&nbsp;&nbsp;Dim ADORs As ADODB.Recordset

&nbsp;&nbsp;&nbsp;&nbsp;Dim sParmName As String

&nbsp;&nbsp;&nbsp;&nbsp;Dim strConnect As String

&nbsp;&nbsp;&nbsp;&nbsp;Dim rStr As String

&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;On Error GoTo ErrHandler

&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;strConnect = &quot;driver={SQL Server};server=(local);uid=sa;pwd=;database=pubs&quot;

&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;S]]></description>
		<author><![CDATA[yezhi]]></author>
		<pubDate>2005-06-26 13:39:00</pubDate>
		</item>
				<item>
		<title><![CDATA[VB调用存储过程的例子]]></title>
		<link>http://blog.pfan.cn/leafage/2124.html</link>
		<description><![CDATA[&nbsp;VB调用存储过程的例子 前言
类型：转载
(说明:以下代码摘自微软的MSDN,经过测试没问题。)


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VB调用存储过程的方法很多，如利用ADO对象的Recordset.Open方法，ADO对象的Connection.Excute方法等，都可以获得记录集信息。本主题讨论的是使用Parameter对象调用存储过程，而且可以获得许多意外的信息。

首先需要在Sql Server中建立一个存储过程。请确定已安装了Sql Server 2000的任何版本，且含有Pubs数据库。

打开“查询分析器”，启动你本地的SqlServer，然后将以下的Sql语句Copy到所打开的查询编辑框中。按下“F5”键。OK，存储过程ADOTestRPE便生成了。

 

Use Pubs

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GO

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if exists (select * from sysobjects where id =

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object_id('dbo.ADOTestRPE') and sysstat &amp; 0xf = 4)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;drop procedure dbo.ADOTestRPE

GO

 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;create procedure ADOTestRPE

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@SetRtn&nbsp;&nbsp;INT=0 OUTPUT,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@R1Num&nbsp;&nbsp;&nbsp;INT=1,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@P1Num&nbsp;&nbsp;&nbsp;]]></description>
		<author><![CDATA[yezhi]]></author>
		<pubDate>2005-06-26 13:38:00</pubDate>
		</item>
				<item>
		<title><![CDATA[使用SQL存储过程有什么好处]]></title>
		<link>http://blog.pfan.cn/leafage/2088.html</link>
		<description><![CDATA[使用SQL存储过程有什么好处

■SQL存储过程执行起来比SQL命令文本快得多。当一个SQL语句包含在存储过程中时，服务器不必每次执行它时都要分析和编译它。

■调用存储过程，可以认为是一个三层结构。这使你的程序易于维护。如果程序需要做某些改动，你只要改动存储过程即可

■你可以在存储过程中利用Transact-SQL的强大功能。一个SQL存储过程可以包含多个SQL语句。你可以使用变量和条件。这意味着你可以用存储过程建立非常复杂的查询，以非常复杂的方式更新数据库。

■最后，这也许是最重要的，在存储过程中可以使用参数。你可以传送和返回参数。你还可以得到一个返回值（从SQL RETURN语句）。

环境:WinXP+VB6+sp6+SqlServer2000

 

数据库:test

表:Users

 

CREATE TABLE [dbo].[users] (

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[id] [int] IDENTITY (1, 1) NOT NULL ,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[truename] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[regname] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[pwd] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[sex] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[email] [text] COLLATE Chinese_PRC_CI_AS NULL ,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[jifen] [decimal](18, 2)]]></description>
		<author><![CDATA[yezhi]]></author>
		<pubDate>2005-06-24 16:40:00</pubDate>
		</item>
		</channel>
</rss>