例程下载: http://microinfo.top263.net/Zip/Format.exe原文: http://microinfo.top263.net/Txt/Format.txt 微信软件工作室 (MicroInfo Soft Studio) 于溪玥(PlayYuer) 2000/02/01 帖: 《VB6 之数据格式化对象使用技巧》 Visual Basic 提供了许多工具以满足数据访问编程的需要,其中引用微软数据格式化对象库 (Microsoft Data Formatting Object Library) 格式化对象技术是 VB6 的增强功能。其最大优 点是可以通过编程随心所欲地格式化数据(可参阅 MSDN )。下面以格式化 DataGrid 各列数据为 例,演示数据格式化对象的使用方法。首先,根据 DataGrid 各列的数据类型,确定格式化后的格式: 布尔(Boolean)型数据:True = 是;False = 否; 数字(Number)型数据:格式化为大写; 其次,确认工程已经引用(Reference)了Microsoft Data Formatting Object Library。 再次,在窗体上绘制一个DataGrid控件。 接下来,就可以编写代码了:1.声明带 WithEvents 关键字的 StdDataFormat 对象类型的窗体模块级的私有变量,作为大写 格式的数据格式对象: Option Explicit Private WithEvents FmtX As StdDataFormat 2.编写Private Sub Form_Load()事件过程: Private Sub Form_Load() '创建含有货币、布尔、数字型字段的记录集 Dim adoRecordset As New ADODB.Recordset adoRecordset.Fields.Append "Fld1", adCurrency, , adFldIsNullable + adFldMayBeNull adoRecordset.Fields.Append "Fld2", adBoolean, , adFldIsNullable + adFldMayBeNull adoRecordset.Fields.Append "Fld3", adDouble, , adFldIsNullable + adFldMayBeNull adoRecordset.Open adoRecordset.AddNew Array("fld1", "fld2", "fld3"), Array(1001231.01, True, 634532.23) adoRecordset.AddNew Array("fld1", "fld2", "fld3"), Array(1000.23, False, 89758242) Set DataGrid1.DataSource = adoRecordset FormatDataGrid DataGrid1 End Sub 3.编写一个过程,格式化 DataGrid,可在需要的时机调用: Sub FormatDataGrid(DataGridX As DataGrid) Dim FmtY As New StdDataFormat '用于布尔型字段格式 FmtY.Type = fmtBoolean FmtY.TrueValue = "是" '"真" "对" FmtY.FalseValue = "否" '"假" "错" Set FmtX = New StdDataFormat '实例化用于格式化货币型字段的对象 FmtX.Type = fmtCustom '用于货币型字段格式 Dim adoRecordsetX As ADODB.Recordset Set adoRecordsetX = DataGridX.DataSource Dim i As Integer For i = 0 To adoRecordsetX.Fields.Count - 1 With DataGridX.Columns.Item(i) Select Case adoRecordsetX.Fields.Item(i).Type '可根据字段数据类型设置数据格式 Case adNumeric, adVarNumeric, _ adBigInt, adUnsignedInt, adUnsignedTinyInt, _ adUnsignedSmallInt, adUnsignedBigInt, _ adInteger, adSmallInt, adBigInt, adTinyInt, _ adDecimal, adDouble, adSingle '与数字有关的数据类型 .DataFormat.Format = "Standard" .Alignment = dbgRight Case adCurrency '货币型 Set .DataFormat = FmtX .Alignment = dbgRight Case adBoolean Set .DataFormat = FmtY '布尔型字段设为自定义格式 .Alignment = dbgCenter Case adDate, adDBDate, adDBTimeStamp .DataFormat.Format = "Long Date" '日期、时间 .Alignment = dbgRight Case Else '其它,如:文本等 .Alignment = dbgLeft End Select End With Next i End Sub 4.编写数据格式化对象的格式化 (Format) 事件过程: Private Sub FmtX_Format(ByVal DataValue As StdFormat.StdDataValue) '读者可自行编写将数字转化为大写的函数!例如(附录: NtoC 函数): DataValue = NtoC(Trim(Str(DataValue)), "圆", "角", "分") End Sub (该方案在 PWin 9.X 和 VB 6.0 下通过。) 数据格式化对象,可以用于格式化各种具有 DataFormat 属性的控件,程序员可以将数据显示 为各种格式。如果格式非常简单,可以使用传统的 Format 函数。如果格式布尔型数据,可以使用 过程级的数据格式化对象。如果格式非常复杂,情况很多,则须使用窗体模块级的带事件数据格式 化对象,并编程该对象的 Format 等事件。(欢迎去 Http://microinfo.top263.net 下载例程)================================================ 《 附录: NtoC 函数 》 Option Explicit Public Function NtoC(ByVal sNum As String, Optional ByVal Yuan As String = "美圆", Optional ByVal Jiao As String = "美角", Optional ByVal Fen As String = "美分") As String If Val(Trim(sNum)) > 0 Then Dim sIntD, sDecD As String Dim i, iCount, j, iLength As Integer Dim lStartPos As Long Dim sBIT(4), sUNIT(3), sCents(2) As String sBIT(0) = "" '个 sBIT(1) = "拾" sBIT(2) = "佰" sBIT(3) = "仟" sUNIT(0) = "" sUNIT(1) = "万" sUNIT(2) = "亿" sUNIT(3) = "yu" sCents(0) = Fen sCents(1) = Jiao Dim temp As String If InStr(Trim(sNum), ".") > 0 Then temp = Left(Trim(sNum), InStr(Trim(sNum), ".") - 1) Else temp = Trim(sNum) End If iCount = IIf(Len(temp) Mod 4, Len(Trim(temp)) \ 4 + 1, Len(Trim(temp)) \ 4) lStartPos = 1 For i = iCount To 1 Step -1 If i = iCount And Len(Trim(temp)) Mod 4 <> 0 Then iLength = Len(Trim(temp)) Mod 4 Else iLength = 4 End If sIntD = Mid(Trim(temp), lStartPos, iLength) For j = 1 To Len(Trim(sIntD)) If Val(Mid(sIntD, j, 1)) <> 0 Then NtoC = NtoC & Choose(Val(Mid(sIntD, j, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") & sBIT(Len(Trim(sIntD)) - j) Else If Val(Mid(sIntD, j + 1, 1)) <> 0 Then NtoC = NtoC & "零" End If End If Next j lStartPos = lStartPos + iLength If i < iCount Then If (Val(Mid(sIntD, Len(Trim(sIntD)), 1)) <> 0 Or Val(Mid(sIntD, Len(Trim(sIntD)) - 1, 1)) <> 0 Or Val(Mid(sIntD, Len(Trim(sIntD)) - 2, 1)) Or Val(Mid(sIntD, Len(Trim(sIntD)) - 3, 1)) <> 0) Then NtoC = NtoC & sUNIT(i - 1) End If Else NtoC = NtoC & sUNIT(i - 1) End If Next If Len(Trim(NtoC)) > 0 Then NtoC = NtoC & Yuan End If '小数 If InStr(1, Trim(sNum), ".") <> 0 Then sDecD = Right(sNum, Len(Trim(sNum)) - InStr(1, Trim(sNum), ".")) For i = 1 To Len(Trim(sDecD)) If Val(Mid(Trim(sDecD), i, 1)) <> 0 Then NtoC = NtoC & Choose(Val(Mid(Trim(sDecD), i, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") NtoC = NtoC & sCents(2 - i) If i >= 2 Then Exit For End If Else If Len(Trim(NtoC)) > 0 Then NtoC = NtoC & "零" End If End If Next i Else NtoC = NtoC & "整" End If Else NtoC = "零" & Yuan End If End Function
to playyuer:微信的Data Report Plus DLL在打印MSChart时为什么属性只读?能回答吗?
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
用MSFLEXGRID试试
http://microinfo.top263.net/Zip/Format.exe原文: http://microinfo.top263.net/Txt/Format.txt
微信软件工作室 (MicroInfo Soft Studio) 于溪玥(PlayYuer) 2000/02/01 帖:
《VB6 之数据格式化对象使用技巧》 Visual Basic 提供了许多工具以满足数据访问编程的需要,其中引用微软数据格式化对象库
(Microsoft Data Formatting Object Library) 格式化对象技术是 VB6 的增强功能。其最大优
点是可以通过编程随心所欲地格式化数据(可参阅 MSDN )。下面以格式化 DataGrid 各列数据为
例,演示数据格式化对象的使用方法。首先,根据 DataGrid 各列的数据类型,确定格式化后的格式:
布尔(Boolean)型数据:True = 是;False = 否;
数字(Number)型数据:格式化为大写;
其次,确认工程已经引用(Reference)了Microsoft Data Formatting Object Library。
再次,在窗体上绘制一个DataGrid控件。
接下来,就可以编写代码了:1.声明带 WithEvents 关键字的 StdDataFormat 对象类型的窗体模块级的私有变量,作为大写
格式的数据格式对象: Option Explicit
Private WithEvents FmtX As StdDataFormat
2.编写Private Sub Form_Load()事件过程: Private Sub Form_Load()
'创建含有货币、布尔、数字型字段的记录集
Dim adoRecordset As New ADODB.Recordset
adoRecordset.Fields.Append "Fld1", adCurrency, , adFldIsNullable + adFldMayBeNull
adoRecordset.Fields.Append "Fld2", adBoolean, , adFldIsNullable + adFldMayBeNull
adoRecordset.Fields.Append "Fld3", adDouble, , adFldIsNullable + adFldMayBeNull
adoRecordset.Open
adoRecordset.AddNew Array("fld1", "fld2", "fld3"), Array(1001231.01, True, 634532.23)
adoRecordset.AddNew Array("fld1", "fld2", "fld3"), Array(1000.23, False, 89758242) Set DataGrid1.DataSource = adoRecordset FormatDataGrid DataGrid1
End Sub
3.编写一个过程,格式化 DataGrid,可在需要的时机调用: Sub FormatDataGrid(DataGridX As DataGrid)
Dim FmtY As New StdDataFormat '用于布尔型字段格式
FmtY.Type = fmtBoolean
FmtY.TrueValue = "是" '"真" "对"
FmtY.FalseValue = "否" '"假" "错" Set FmtX = New StdDataFormat '实例化用于格式化货币型字段的对象
FmtX.Type = fmtCustom '用于货币型字段格式 Dim adoRecordsetX As ADODB.Recordset
Set adoRecordsetX = DataGridX.DataSource Dim i As Integer
For i = 0 To adoRecordsetX.Fields.Count - 1
With DataGridX.Columns.Item(i)
Select Case adoRecordsetX.Fields.Item(i).Type '可根据字段数据类型设置数据格式
Case adNumeric, adVarNumeric, _
adBigInt, adUnsignedInt, adUnsignedTinyInt, _
adUnsignedSmallInt, adUnsignedBigInt, _
adInteger, adSmallInt, adBigInt, adTinyInt, _
adDecimal, adDouble, adSingle '与数字有关的数据类型
.DataFormat.Format = "Standard"
.Alignment = dbgRight
Case adCurrency '货币型
Set .DataFormat = FmtX
.Alignment = dbgRight
Case adBoolean
Set .DataFormat = FmtY '布尔型字段设为自定义格式
.Alignment = dbgCenter
Case adDate, adDBDate, adDBTimeStamp
.DataFormat.Format = "Long Date" '日期、时间
.Alignment = dbgRight
Case Else '其它,如:文本等
.Alignment = dbgLeft
End Select
End With
Next i
End Sub
4.编写数据格式化对象的格式化 (Format) 事件过程: Private Sub FmtX_Format(ByVal DataValue As StdFormat.StdDataValue)
'读者可自行编写将数字转化为大写的函数!例如(附录: NtoC 函数):
DataValue = NtoC(Trim(Str(DataValue)), "圆", "角", "分")
End Sub (该方案在 PWin 9.X 和 VB 6.0 下通过。)
数据格式化对象,可以用于格式化各种具有 DataFormat 属性的控件,程序员可以将数据显示
为各种格式。如果格式非常简单,可以使用传统的 Format 函数。如果格式布尔型数据,可以使用
过程级的数据格式化对象。如果格式非常复杂,情况很多,则须使用窗体模块级的带事件数据格式
化对象,并编程该对象的 Format 等事件。(欢迎去 Http://microinfo.top263.net 下载例程)================================================
《 附录: NtoC 函数 》
Option Explicit
Public Function NtoC(ByVal sNum As String, Optional ByVal Yuan As String = "美圆", Optional ByVal Jiao As String = "美角", Optional ByVal Fen As String = "美分") As String
If Val(Trim(sNum)) > 0 Then
Dim sIntD, sDecD As String
Dim i, iCount, j, iLength As Integer
Dim lStartPos As Long
Dim sBIT(4), sUNIT(3), sCents(2) As String
sBIT(0) = "" '个
sBIT(1) = "拾"
sBIT(2) = "佰"
sBIT(3) = "仟"
sUNIT(0) = ""
sUNIT(1) = "万"
sUNIT(2) = "亿"
sUNIT(3) = "yu"
sCents(0) = Fen
sCents(1) = Jiao
Dim temp As String
If InStr(Trim(sNum), ".") > 0 Then
temp = Left(Trim(sNum), InStr(Trim(sNum), ".") - 1)
Else
temp = Trim(sNum)
End If
iCount = IIf(Len(temp) Mod 4, Len(Trim(temp)) \ 4 + 1, Len(Trim(temp)) \ 4)
lStartPos = 1
For i = iCount To 1 Step -1
If i = iCount And Len(Trim(temp)) Mod 4 <> 0 Then
iLength = Len(Trim(temp)) Mod 4
Else
iLength = 4
End If
sIntD = Mid(Trim(temp), lStartPos, iLength)
For j = 1 To Len(Trim(sIntD))
If Val(Mid(sIntD, j, 1)) <> 0 Then
NtoC = NtoC & Choose(Val(Mid(sIntD, j, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") & sBIT(Len(Trim(sIntD)) - j)
Else
If Val(Mid(sIntD, j + 1, 1)) <> 0 Then
NtoC = NtoC & "零"
End If
End If
Next j
lStartPos = lStartPos + iLength
If i < iCount Then
If (Val(Mid(sIntD, Len(Trim(sIntD)), 1)) <> 0 Or Val(Mid(sIntD, Len(Trim(sIntD)) - 1, 1)) <> 0 Or Val(Mid(sIntD, Len(Trim(sIntD)) - 2, 1)) Or Val(Mid(sIntD, Len(Trim(sIntD)) - 3, 1)) <> 0) Then
NtoC = NtoC & sUNIT(i - 1)
End If
Else
NtoC = NtoC & sUNIT(i - 1)
End If
Next
If Len(Trim(NtoC)) > 0 Then
NtoC = NtoC & Yuan
End If
'小数
If InStr(1, Trim(sNum), ".") <> 0 Then
sDecD = Right(sNum, Len(Trim(sNum)) - InStr(1, Trim(sNum), "."))
For i = 1 To Len(Trim(sDecD))
If Val(Mid(Trim(sDecD), i, 1)) <> 0 Then
NtoC = NtoC & Choose(Val(Mid(Trim(sDecD), i, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖")
NtoC = NtoC & sCents(2 - i)
If i >= 2 Then
Exit For
End If
Else
If Len(Trim(NtoC)) > 0 Then
NtoC = NtoC & "零"
End If
End If
Next i
Else
NtoC = NtoC & "整"
End If
Else
NtoC = "零" & Yuan
End If
End Function