vsflexgrid+打印整理后的方法

来源:互联网 发布:性别歧视 知乎 编辑:程序博客网 时间:2024/05/21 14:03

目录

合计功能放在表格里面...2

合计功能赋值给文本框...3

选择单元格变色,设置下拉框...3

控制只能输入数字...4

设置列不可编辑+设置数据库下拉框...5

选择下拉框数据,其它数据更新...6

快速查询...9

VSFlexGrid3事件...10

查找字符串对于的行...17

生成行号...17

自动调整列宽...17

表格里面加多选按钮...18

自动增加行...19

vsFlexGrid+VSprinter打印...33

写INI配置文件...48

保存打印机到ini50

 

 

合计功能放在表格里面

'

'    With VSFlexGrid3

'

'        .Redraw = flexRDNone

'        .AllowUserResizing = flexResizeColumns

'        .SubtotalPosition = flexSTBelow

'        .OutlineBar = flexOutlineBarSimpleLeaf

'

'        .Subtotal flexSTSum, 1, 3, , , RGB(0,0, 255), True, "%s小计:"

'        .Subtotal flexSTSum, -1, 3, , ,RGB(255, 0, 0), True, "总合计:"

'        .Redraw = True

'    End With

合计功能赋值给文本框

For a = 1 ToVSFlexGrid3.Rows - 1

    aa = Val(aa) +Val(VSFlexGrid3.TextMatrix(a, 2)) '统计第二列

    bb = Val(bb) +Val(VSFlexGrid3.TextMatrix(a, 13)) '统计第二列

Next a

Label_js = aa

选择单元格变色,设置下拉框

    .ColComboList(7) = "按件|按重"      '设置第7列为下拉框

    .ColComboList(10) = "按件|按重"     '设置第10列为下拉框

    .FocusRect = flexFocusNone          '选中单元格高亮

    .Editable = flexEDKbd

    .BackColorSel = &HFF&               '选中单元格红色

 

'.SelectionMode = flexSelectionByRow '选中整行红色

控制只能输入数字

'判断输入的值是否为数字.

Private SubVSFlexGrid3_KeyPressEdit(ByVal Row As Long, ByVal Col As Long, KeyAscii AsInteger)

Dim Numbers AsString

If VSFlexGrid3.Col= 5 Or VSFlexGrid3.Col = 6 Or VSFlexGrid3.Col = 8 Or VSFlexGrid3.Col = 9 OrVSFlexGrid3.Col = 11 Or VSFlexGrid3.Col = 12 Or VSFlexGrid3.Col = 13 OrVSFlexGrid3.Col = 14 Then '第6列

    Numbers = "1234567890" + Chr(46)+ Chr(8) + Chr(13)

    If InStr(Numbers, Chr(KeyAscii)) = 0 Then

        MsgBox "请输入数字!!!", 16, "提示信息"

        KeyAscii = 0

    End If

End If

End Sub

设置列不可编辑+设置数据库下拉框

Private SubVSFlexGrid3_BeforeEdit(ByVal Row As Long, ByVal Col As Long, Cancel As Boolean)

'*******先将设editable=2

'限定不可编辑列,如有5列,全部不可编辑

'If Col = 0 ThenCancel = True

'If Col = 1 ThenCancel = True

'If Col = 2 ThenCancel = True

'If Col = 3 ThenCancel = True

'If Col = 4 ThenCancel = True

'If Col = 5 Then Cancel= True

Dim Rst11 As NewADODB.Recordset

 

Rst11.Open"select * from YSPF_JCBH ", gConn, adOpenStatic, adLockReadOnly, -1

VSFlexGrid3.ColComboList(1)= VSFlexGrid3.BuildComboList(Rst11, "BH")

End Sub

选择下拉框数据,其它数据更新

Private SubVSFlexGrid3_CellChanged(ByVal Row As Long, ByVal Col As Long)

Dim Rst12 As NewADODB.Recordset

With VSFlexGrid3

    If .Rows > 2 Then

        bh1 = .TextMatrix(.Row, 1)

        If bh1 <> "" And bh1<> "编号" Then

            Rst12.Open "select * fromYSPF_JCBH where BH='" & bh1 & "'", gConn, adOpenStatic,adLockReadOnly, -1

            .TextMatrix(.Row, 2) =Rst12("MC")

            .TextMatrix(.Row, 3) =Rst12("KH")

            .TextMatrix(.Row, 4) =Rst12("GG")

            .TextMatrix(.Row, 7) =Rst12("DJLX")

            .TextMatrix(.Row, 8) =Rst12("DJ")

            .TextMatrix(.Row, 10) =Rst12("GFLX")

            .TextMatrix(.Row, 11) =Rst12("GF")

           

            djlx = .TextMatrix(.Row, 7)

            gflx = .TextMatrix(.Row, 10)

   

            If djlx = "按件" Then

                .TextMatrix(.Row, 9) =Val(.TextMatrix(.Row, 5)) * Val(.TextMatrix(.Row, 8))

            End If

            If djlx = "按重" Then

                .TextMatrix(.Row, 9) =Val(.TextMatrix(.Row, 6)) * Val(.TextMatrix(.Row, 8))

            End If

            If gflx = "按件" Then

                .TextMatrix(.Row, 12) =Val(.TextMatrix(.Row, 5)) * Val(.TextMatrix(.Row, 11))

            End If

            If gflx = "按重" Then

                .TextMatrix(.Row, 12) =Val(.TextMatrix(.Row, 6)) * Val(.TextMatrix(.Row, 11))

            End If

                .TextMatrix(.Row, 13) =Val(.TextMatrix(.Row, 9)) + Val(.TextMatrix(.Row, 12))

        End If

    End If

End With

Call CalTotal

End Sub

快速查询

部件用VSFlexGrid8.0(OLEDB)

Dim Rst1 As New ADODB.Recordset '定义一个数据库记录对象

Dim SqlDef As String '定义字符串变量

 

Screen.MousePointer = 11

 

SqlDef = "select * from YSPF_ZC_PLRKDMX "

Rst1.Open SqlDef, gConn, adOpenStatic, adLockReadOnly, -1 '进入数据库查询,并把查询结果赋值给rst记录对象

Set VSFlexGrid1.DataSource = Rst1

VSFlexGrid3事件

事件
'单元得到选择焦点。这五个事件执行顺序为:
'BeforeSelChange,RowColChange,AfterRowColChange,SelChange,AfterSelChange

'鼠标单击单元。这五个事件执行顺序为:
'BeforeMouseDown,BeforeEdit,MouseDown,MouseUp,Click

AfterCollapse()
AfterDataRefresh()    当绑定到数据库时发生
AfterEdit()           单元按下任何键并离开当前单元后
AfterMoveColumn()
AfterMoveRow()        调整行高时
AfterRowColChange()   单元得到焦点时,不包括启动窗体时
AfterScroll()         滚动条滑块改变位置后(当ScrollTrack为True时,该事件同时发生,否则停止拖拉时才发生)
AfterSelChange()      单元得到焦点时,不包括启动窗体时
AfterSort()
AfterUserFreeze()      调整冻结的行列后
AfterUserResize()      调整行列大小时
BeforeCollapse()
BeforeDataRefresh()
BeforeEdit()           从表格显示时的任何键盘或鼠标欲改数据动作前
BeforeMouseDown()      当在表格任何地方按下鼠标,相应在 MouseDown 之前
BeforeMoveColumn()
BeforeMoveRow()
BeforePageBreak()
BeforeRowColChange()  单击或离开单元时
BeforeScroll()        滚动条滑块改变位置后,AfterScroll事件前,基本同AfterScroll()事件
BeforeScrollTip()
BeforeSelChange()     单元得到焦点时,不包括启动窗体时
BeforeSort()
BeforeUserResize()    当鼠标指向欲调整行列宽度或高度时
CellButtonClick()
CellChanged()         当单元内容改变并离开时,无改变时不发生
ChangeEdit()          按下一个有效字符键时
Click()               用鼠标单击单元后
ComboCloseUp()        当单元中的下拉框按钮拉出并复位时
ComboDropDown()       当单元中的下拉框按钮拉下时
Compare()
DblClick()            用鼠标双击单元后
DragDrop()
DragOver()
DrawCell()            当 OwnerDraw 属性值大于 0 时执行表格刷新动作
EnterCell()           离开或选择当前单元时
Error()               表格发生错误时
FilterData()
GetHeaderRow()
GotFocus()            当表格得到焦点时
KeyDown()             按下任意键后字符显示前
KeyDownEdit()         按下一个有效键后欲改前
KeyPress()            按下一个任意键后
KeyPressEdit()        按下一个有效字符键时,字符输入前
KeyUp()               任意键盘操作时
KeyUpEdit()           按下一个任意键数据被改变后
LeaveCell()           离开单元焦点前
LostFocus()           离开表格焦点后
MouseDown()           鼠标选中或移动时
MouseMove()           鼠标晃动时
MouseUp()             鼠标按下弹起后
OLECompleteDrag()
OLEDragDrop()
OLEDragOver()
OLEGiveFeedback()
OLESetCustomDataObject()
OLESetData()
OLEStartDrag()
RowColChange()        单元得到焦点时,包括窗体启动时
SelChange()           得到焦点时
SetupEditStyle()      当欲改变单元内容前
SetupEditWindow()     单元被键盘欲改变前
StartEdit()           单元被键盘欲改变前
StartPage()
Validate()            离开表格焦点在LostFocus事件前
ValidateEdit()        单元内容被改变或离开当前单元时
'这四个事件执行顺序为:
'ValidateEdit,AfterEdit,StartEdit,SetupEditWindow

Dim Rst12 As NewADODB.Recordset

bh1 =VSFlexGrid3.TextMatrix(VSFlexGrid3.Row, 1)

If bh1 <>"" Then

    Rst12.Open "select * from YSPF_JCBHwhere BH='" & bh1 & "'", gConn, adOpenStatic,adLockReadOnly, -1

    VSFlexGrid3.TextMatrix(VSFlexGrid3.Row, 3)= Rst12(2)

End If

查找字符串对于的行

行号= VSFlexGrid1.FindRow(字符串, 1, 1, True, 1)

生成行号

For i = 1 To VSFlexGrid1.Rows - 1

    VSFlexGrid1.TextMatrix(i, 0)= i

Next i

自动调整列宽

VSFlexGrid1.AutoSize 0, 22 '自动调整列宽

表格里面加多选按钮

       For r = 1 ToVSFlexGrid1.Rows - 1

            For j = 1 ToVSFlexGrid1.Cols - 1

           VSFlexGrid1.Cell(flexcpChecked, r, j) = flexUnchecked

 

           'VSFlexGrid1.Cell(flexcpText, r, 1) = "Row " & r

            Next j

        Next r

 

        VSFlexGrid1.Editable =flexEDKbdMouse

自动增加行

If VSFlexGrid3.TextMatrix(VSFlexGrid3.Rows - 1, 1) <>"" Then

With VSFlexGrid3

    .Rows = .Rows + 1

    For i = 1 To .Rows - 1

            .TextMatrix(i, 0) = i

    Next i

End With

End If

vsFlexGrid是ComponentOne公司的一个ActiveX控件,它与MS的MSHFlexGrid控件在功能上是兼容的,即MSHFlexGrid所具备的属性和方法,它也都具备,只有少数几个属性名称略有不同,使用MSHFlexGrid编写的程序,只需要作较小的调整就可以转换过来;但相比MSHFlexGrid,vsFlexGrid多了很多功能,它的属性和事件非常丰富,可以实现非常灵活的控制和快捷的编码,下面主要对一些常用和实用的功能进行介绍:

一、数据批量操作

l  利用Cell属性批量存取数据

比如要清除一块区域的文本,或者设置一块区域的字体,不用循环处理,只需要一条语句就可以完成,如:

vsFlexGrid.Cell(flexcpText,1,1,5,5) = “” ‘设置(1,1)-(5,5)这块单元格区域的文本都为空

vsFlexGrid.Cell(flexcpFontBold,1,1,5,5)=True ‘设置(1,1)-(5,5)这块单元格区域的字体都为粗体

类似还可以设置的有单元格对齐、图片、颜色等。

 

而语句:strText = vsFlexGrid.Cell(flexcpText,1,1,5,5)

返回一个用vbTab间隔列,vbCr间隔行的字符串,当然也可以反过来赋值,这样该区域内的每个单元格都可以赋不同的值。

l  使用-1对所有行列进行处理

RowHeight(-1)=300 ‘将所有行的高度设置为300Twip,可以类似使用的属性有:

RowHidden,ColWidth,ColHidden,ColAlignment等

 

二、大量数据存放

vsFlexGrid可以存放数据的地方有:CellText,CellData,ColData,RowData

除了CellText是String类型外,其他都是Variant类型,也就是说你可以将任意类型的数据存放在表格中,比如日期(Date),类型变量(Type),集合(Collection),数组,记录集(RecordSet),以及各种对象(Object),这对于关联数据比较多的程序非常有用。

 

注意:vsFlexGrid.Cell(flexcpText,1,1)= rsData!Name实际是存放了一个ADO.Field对象,应该使用CStr(rsData!Name)对类型进行明确。

 

三、编辑特性

vsFlexGrid的单元格是可以编辑的,并且有以下几种编辑形式:

l  文本框:只要Editable设置为可编辑,每个单元格缺省就是TextBox编辑样式

l  下拉框:

设置当前单元格的ComboList属性或者指定列的ColComboList属性,即可实现VB.ComboBox样式的单元编辑,而且下拉界面中可以显示多列,如:

vsFlexGrid.ComboList = _

“|#100*1;张三” & vbTab & “男” & vbTab & “28岁” & _

“|#101;李四” & vbTab & “男” & vbTab & “29岁” & _

“|#102;王五” & vbTab & “男” & vbTab & “30岁”

其中”|”间隔的是各行数据,vbTab间隔的是各列数据;第1个”|”表示下拉框可以输入,”#”后面的是每行的ItemData,第一个ItemData后面”*1”表示是第1列的数据在选择后显示在ComboBox中。

l  复选框:

设置指定列的ColDataType = flexDTBoolean,或者指定当前元单格的CellChecked属性即可。

l  选择按钮:

设置当前单元格的ComboList属性或者指定列的ColComboList属性为”…”即可,主要配合CellButtonClick事件使用。

四、界面特性

1)         边框

除了表格线之外,vsFlexGrid还可以类似Excel一样,设置单元格式的边框线条,包括颜色、粗细,有无:

VSFlexGrid.CellBorder Color As OLE_COLOR, Left As Integer, Top As Integer, Right As Integer, Bottom As Integer, Vertical As Integer, Horizontal As Integer

2)         自动行高,列宽

使用AutoSize方法,可以使列宽、或者行高根据单元格的内容进行自适应调整。

其中列宽也可以通过双击表头进行自适应调整。

3)         树形缩进(TreeList)

通过设置表格行的IsSubtotal、RowOutlineLevel属性,可以实现树形风格的缩进层次样式,这样vsFlexGrid就可以实现TreeView和ListView的结合。

4)         自绘

通过设置OwnerDraw属性,可对实现对单元格内容的自绘处理,主要结合DrawCell事件进行:

DrawCell(ByVal hDC As Long, ByVal Row As Long, ByValcol As Long, ByVal left As Long, ByVal top As Long, ByVal right As Long, ByValbottom As Long, done As Boolean)

5)         背景

可以为vsFlexGrid设置背景图,背景图相对单元格式内容是透明的,并且可以设置对齐和平铺属性。

6)         列排序,行、列拖动

设置vsFlexGrid.ExplorerBar属性,就可以实现类似Windows的资源管理器一样,点击列头进行列数据排序,或者用鼠标拖动改变列、行的顺序。

7)         冻结行列

除了固定行列头外,还可以类似Excel一样,通过vsFlexGrid.FrozenCols/FrozenRows设置冻结行列,冻结行列在滚动时,和固定行列是一样的效果,但是光标可以进入到冻结行列范围内的单元格中去。

五、丰富的事件控制:

vsFlexGrid一共有50多个事件,这些事件主要用于编辑和界面控制,在使用过程中,经常可能会发现某个事件特别有用;因此充分利用这些事件,可以很方便地实现很多功能,下面是它支持的事件及对应列表,粗体是较常用的,从定义基本就可以看出它的作用;详细的事件说明,可以查看帮助。

l  AfterCollapse(ByValRow As Long, ByVal State As Integer)

l  AfterDataRefresh()

AfterEdit(ByVal RowAs Long, ByVal Col As Long)

l  AfterMoveColumn(ByValCol As Long, Position As Long)

l  AfterMoveRow(ByValRow As Long, Position As Long)

AfterRowColChange(ByVal OldRow As Long, ByVal OldCol As Long, ByVal NewRow As Long, ByValNewCol As Long)

l  AfterScroll(ByValOldTopRow As Long, ByVal OldLeftCol As Long, ByVal NewTopRow As Long, ByValNewLeftCol As Long)

l  AfterSelChange(ByValOldRowSel As Long, ByVal OldColSel As Long, ByVal NewRowSel As Long, ByValNewColSel As Long)

l  AfterSort(ByValCol As Long, Order As Integer)

l  AfterUserFreeze()

l  AfterUserResize(ByValRow As Long, ByVal Col As Long)

l  BeforeCollapse(ByValRow As Long, ByVal State As Integer, Cancel As Boolean)

l  BeforeDataRefresh(CancelAs Boolean)

l  BeforeEdit(ByValRow As Long, ByVal Col As Long, Cancel As Boolean)

l  BeforeMouseDown(ByValButton As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y AsSingle, Cancel As Boolean)

BeforeMoveColumn(ByVal Col As Long, Position As Long)

l  BeforeMoveRow(ByValRow As Long, Position As Long)

l  BeforePageBreak(ByValRow As Long, BreakOK As Boolean)

BeforeRowColChange(ByVal OldRow As Long, ByVal OldCol As Long, ByVal NewRow As Long, ByValNewCol As Long, Cancel As Boolean)

BeforeScroll(ByValOldTopRow As Long, ByVal OldLeftCol As Long, ByVal NewTopRow As Long, ByValNewLeftCol As Long, Cancel As Boolean)

l  BeforeScrollTip(ByValRow As Long)

l  BeforeSelChange(ByValOldRowSel As Long, ByVal OldColSel As Long, ByVal NewRowSel As Long, ByValNewColSel As Long, Cancel As Boolean)

BeforeSort(ByVal ColAs Long, Order As Integer)

BeforeUserResize(ByVal Row As Long, ByVal Col As Long, Cancel As Boolean)

CellButtonClick(ByVal Row As Long, ByVal Col As Long)

CellChanged(ByVal RowAs Long, ByVal Col As Long)

l  ChangeEdit()

l  Click()

l  ComboCloseUp(ByValRow As Long, ByVal Col As Long, FinishEdit As Boolean)

l  ComboDropDown(ByValRow As Long, ByVal Col As Long)

l  Compare(ByVal Row1As Long, ByVal Row2 As Long, Cmp As Integer)

l  DblClick()

l  DragDrop(Source AsControl, X As Single, Y As Single)

l  DragOver(Source AsControl, X As Single, Y As Single, State As Integer)

DrawCell(ByVal hDCAs Long, ByVal Row As Long, ByVal Col As Long, ByVal Left As Long, ByVal Top AsLong, ByVal Right As Long, ByVal Bottom As Long, Done As Boolean)

l  EndAutoSearch()

l  EnterCell()

l  Error(ByValErrorCode As Long, ShowMsgBox As Boolean)

l  FilterData(ByValRow As Long, ByVal Col As Long, Value As String, ByVal SavingToDB As Boolean,WantThisCol As Boolean)

l  GetHeaderRow(ByValRow As Long, HeaderRow As Long)

l  GotFocus()

l  KeyDown(KeyCode AsInteger, Shift As Integer)

l  KeyDownEdit(ByValRow As Long, ByVal Col As Long, KeyCode As Integer, ByVal Shift As Integer)

l  KeyPress(KeyAsciiAs Integer)

KeyPressEdit(ByVal RowAs Long, ByVal Col As Long, KeyAscii As Integer)

l  KeyUp(KeyCode AsInteger, Shift As Integer)

l  KeyUpEdit(ByValRow As Long, ByVal Col As Long, KeyCode As Integer, ByVal Shift As Integer)

l  LeaveCell()

l  LostFocus()

l  MouseDown(ButtonAs Integer, Shift As Integer, X As Single, Y As Single)

l  MouseMove(ButtonAs Integer, Shift As Integer, X As Single, Y As Single)

l  MouseUp(Button AsInteger, Shift As Integer, X As Single, Y As Single)

l  OLECompleteDrag(EffectAs Long)

l  OLEDragDrop(DataAs VSFlex8Ctl.VSDataObject, Effect As Long, ByVal Button As Integer, ByValShift As Integer, ByVal X As Single, ByVal Y As Single)

l  OLEDragOver(DataAs VSFlex8Ctl.VSDataObject, Effect As Long, ByVal Button As Integer, ByValShift As Integer, ByVal X As Single, ByVal Y As Single, State As Integer)

l  OLEGiveFeedback(EffectAs Long, DefaultCursors As Boolean)

l  OLESetCustomDataObject(CustomDataObjectAs Variant)

l  OLESetData(Data AsVSFlex8Ctl.VSDataObject, DataFormat As Integer)

l  OLEStartDrag(DataAs VSFlex8Ctl.VSDataObject, AllowedEffects As Long)

l  RowColChange()

l  SelChange()

l  SetupEditStyle(ByValRow As Long, ByVal Col As Long, ByVal IsCombo As Boolean, Style As Long,StyleEx As Long)

l  SetupEditWindow(ByValRow As Long, ByVal Col As Long, ByVal EditWindow As Long, ByVal IsCombo AsBoolean)

l  StartAutoSearch()

StartEdit(ByVal RowAs Long, ByVal Col As Long, Cancel As Boolean)

l  StartPage(ByValhDC As Long, ByVal Page As Long, Cancel As Boolean)

l  Validate(Cancel AsBoolean)

ValidateEdit(ByVal RowAs Long, ByVal Col As Long, Cancel As Boolean)

 

六、附加功能:

1)         属性页:

在vsFlexGrid的属性页中,可以对表格进行格式和内容设计,这样可以省去一些代码(这部分属性页处理的内容保存在窗体的frx文件中)。

2)         导入/导出:

通过LoadGrid/SaveGrid方法,可以对表格内容进行导入导出;导入导出的格式有几种:

l  它自已的二进制格式。

l  带一定分隔符的文本文件。

l  Excel97格式(不需要安装 Excel,速度很快,但有一些属性不支持)。

3)         打印

通过PrintGrid方法,可以将vsFlexGrid按照当前的格式和数据进行打印输出,但这个功能比较简单,比如不能进行预览,设置页眉页脚等。(ComponentOne的另一套控件vsView与vsFlexGrid配合可以实现强大的打印相关功能)

 

作为一个只有600多K大小的控件(vsFlexGrid.ocx),功能这么强大确实非常不错,在ZLHIS中也进行了大量的使用,上面只是简略列举了它的部分功能,更详细的功能可以运行它的Demo进行展示,也可以查看它的帮助文件,都比较详尽

vsFlexGrid+VSprinter打印

'''''''''''''''''''''''''''''''''----------------------------------------测试打印机支持纸张

'

'    For p = 1 To 256

'

'      If VSPrinter1.PaperSizes(p)Then Debug.Print " paper size "; p; " is available"

'    Next p

'''''''''''''''''''''''''''''''''----------------------------------------读ini文件里面的打印机

Dim lng As Long

Dim dyj As String

dyj = Space$(1000)

lng = GetPrivateProfileString("打印机", "打印机名称","", dyj, 1000, App.Path & "\dy.ini")

dyj = Replace(dyj, Chr(0), "")

dyj = Trim(dyj)

If bblx = "入库明细表" Then

 

SqlDef = "select DH,GYS,JDR,RQ,BZ from YSPF_ZC_PLRKD whereDH='" & rkdydh & "'"

Rst1.Open SqlDef, gConn, adOpenStatic, adLockReadOnly, -1 '进入数据库查询,并把查询结果赋值给rst记录对象

 

SqlDef1 = "select BH AS 编号,MC AS 名称,KH AS 款号,GG AS 规格,JS AS 件数,ZL AS 重量g,DJLX AS 类型," & _

     "DJ AS 单价,JE AS 金额,GFLX AS 类型,GF AS 工费,GFJE AS 工费金额,ZJE AS 总金额,DJ AS 单价,BZ AS 备注 fromYSPF_ZC_PLRKDMX where DH='" & rkdydh & "'"

Rst2.Open SqlDef1, gConn, adOpenStatic, adLockReadOnly, -1 '进入数据库查询,并把查询结果赋值给rst记录对象

 

With VSFlexGrid_dy

    .Row = 0         '活动单元格的列数

    .Col = 0: .Text = "格式":.CellAlignment = 4 '给每列标题赋值,并居中对齐

    .SubtotalPosition = flexSTBelow'合计调整到最后一行

    .AllowUserResizing =flexResizeColumns '设置可以手动调整列宽

    Set .DataSource = Rst2

    For i = 1 To .Rows - 1 '添加行号

        .TextMatrix(i, 0) = i

    Next i

    .Subtotal flexSTSum, -1, 5,"0.00", , RGB(0, 0, 255), False, "%s合计:"

    .Subtotal flexSTSum, -1, 6,"0.00", , RGB(0, 0, 255), False

    .Subtotal flexSTSum, -1, 9,"0.00", , RGB(0, 0, 255), False

    .Subtotal flexSTSum, -1, 12,"0.00", , RGB(0, 0, 255), False

    .Subtotal flexSTSum, -1, 13,"0.00", , RGB(0, 0, 255), False

    .AutoSize 0, 15

End With

'读取配置文件信息

If GetPrivateProfileInt("打印入库单", "序号",Check_dy1, App.Path & "\dy.ini") = 0 ThenVSFlexGrid_dy.ColHidden(0) = True  '隐藏

If GetPrivateProfileInt("打印入库单", "编号",Check_dy2, App.Path & "\dy.ini") = 0 Then VSFlexGrid_dy.ColHidden(1)= True  '隐藏

If GetPrivateProfileInt("打印入库单", "名称",Check_dy3, App.Path & "\dy.ini") = 0 ThenVSFlexGrid_dy.ColHidden(2) = True '隐藏

If GetPrivateProfileInt("打印入库单", "款号",Check_dy4, App.Path & "\dy.ini") = 0 ThenVSFlexGrid_dy.ColHidden(3) = True '隐藏

If GetPrivateProfileInt("打印入库单", "规格",Check_dy5, App.Path & "\dy.ini") = 0 ThenVSFlexGrid_dy.ColHidden(4) = True '隐藏

If GetPrivateProfileInt("打印入库单", "件数",Check_dy6, App.Path & "\dy.ini") = 0 ThenVSFlexGrid_dy.ColHidden(5) = True '隐藏

If GetPrivateProfileInt("打印入库单", "重量g",Check_dy7, App.Path & "\dy.ini") = 0 ThenVSFlexGrid_dy.ColHidden(6) = True '隐藏

If GetPrivateProfileInt("打印入库单", "单价类型",Check_dy8, App.Path & "\dy.ini") = 0 ThenVSFlexGrid_dy.ColHidden(7) = True '隐藏

If GetPrivateProfileInt("打印入库单", "单价",Check_dy9, App.Path & "\dy.ini") = 0 ThenVSFlexGrid_dy.ColHidden(8) = True '隐藏

If GetPrivateProfileInt("打印入库单", "金额",Check_dy10, App.Path & "\dy.ini") = 0 ThenVSFlexGrid_dy.ColHidden(9) = True '隐藏

If GetPrivateProfileInt("打印入库单", "工费类型", Check_dy11,App.Path & "\dy.ini") = 0 Then VSFlexGrid_dy.ColHidden(10) = True'隐藏

If GetPrivateProfileInt("打印入库单", "工费",Check_dy12, App.Path & "\dy.ini") = 0 ThenVSFlexGrid_dy.ColHidden(11) = True '隐藏

If GetPrivateProfileInt("打印入库单", "工费金额",Check_dy13, App.Path & "\dy.ini") = 0 ThenVSFlexGrid_dy.ColHidden(12) = True '隐藏

If GetPrivateProfileInt("打印入库单", "总金额",Check_dy14, App.Path & "\dy.ini") = 0 ThenVSFlexGrid_dy.ColHidden(13) = True '隐藏

If GetPrivateProfileInt("打印入库单", "售价",Check_dy15, App.Path & "\dy.ini") = 0 ThenVSFlexGrid_dy.ColHidden(14) = True '隐藏

If GetPrivateProfileInt("打印入库单", "备注",Check_dy16, App.Path & "\dy.ini") = 0 ThenVSFlexGrid_dy.ColHidden(15) = True '隐藏

    With VSPrinter1

        .ZOrder 0

        .Device = dyj '选择打印机

         .PaperSize = 256

         .Orientation =orPortrait

        .PaperWidth = 24.1 * 567

        .PaperHeight = 5 * 567

        '.Orientation =orLandscape '配置横向打印4010

        '.TableBorder = tbAll

 

        '配置页面四边的边距

        .MarginTop = 2200

        .MarginBottom = 500

        .MarginLeft = 500

        .MarginRight = 500

        .StartDoc

        .TextAlign =taCenterMiddle

       .RenderControl =Form_print.VSFlexGrid_dy.hWnd

        .EndDoc

        For i = 1 To .PageCount

            .StartOverlay i

            .TextAlign =taCenterMiddle

            .FontName = "黑体"

            .FontSize = 20

            .CurrentY =.MarginTop - 1800

            .Text = "PH7银饰批发"

           

            .StartOverlay i

            .TextAlign =taCenterMiddle

            .FontName = "黑体"

            .FontSize = 16

            .CurrentY =.MarginTop - 1400

            .Text = bblx

           

            .CurrentX = 500

            .CurrentY =.MarginTop - 900

            .TextAlign =taLeftTop

            .FontName = "宋体"

            .FontSize = 12

            .Text = "入库单号:" &rkdydh

           

            .CurrentX = 5000

            .CurrentY =.MarginTop - 600

            .TextAlign =taLeftTop

            .FontName = "宋体"

            .FontSize = 12

            .Text = "建 单 人:" &Rst1("JDR")

           

            .CurrentX = 500

            .CurrentY =.MarginTop - 600

            .TextAlign =taLeftTop

            .FontName = "宋体"

            .FontSize = 12

            .Text = "供 应 商:" &Rst1("GYS")

 

            .CurrentX = 5000

            .CurrentY =.MarginTop - 900

            .TextAlign =taLeftTop

            .FontName = "宋体"

            .FontSize = 12

            .Text = "入库日期:" &Rst1("RQ")

           

            .CurrentX = 9000

            .CurrentY = .MarginTop - 600

            .TextAlign =taLeftTop

            .FontName = "宋体"

            .FontSize = 12

            .Text = "打 印 人:" &Sys_Ccy

 

            .CurrentX = 9000

            .CurrentY =.MarginTop - 900

            .TextAlign =taLeftTop

            .FontName = "宋体"

            .FontSize = 12

            .Text = "打印日期:" &Format(Date, "yyyy年mm月dd日")

           

            .CurrentX = 500

            .CurrentY =.MarginTop - 300

            .TextAlign =taLeftTop

            .FontName = "宋体"

            .FontSize = 12

            .Text = "备    注:" &Rst1("BZ")

           

            .FontSize = 10

            .FontName = "宋体"

            .CurrentX = 10000

            .CurrentY =.MarginTop - 1300

            .TextAlign =taLeftTop ' taRightTop

            .Text = "第" & i& "页 共" & .PageCount& "页"

           

'            .CurrentX = 1600

'            .CurrentY =.PageHeight - .MarginBottom + 50

'            .FontName = "宋体"

'            .FontSize = 10

'            .TextAlign =taLeftBottom

'            .Text = "页脚1"

'

'            .FontSize = 10

'            .FontName = "宋体"

'            .TextAlign =taRightBottom

'            .Text = "页脚2"

           

'            .FontSize = 10

'            .FontName = "宋体"

'            .TextAlign =taRightBottom

'            .Text = "打印日期:" &Format(Date, "yyyy年mm月dd日")

            .EndOverlay

 

        Next i

    End With

End If

写INI配置文件

 

'读取INI文件API

Declare Function GetPrivateProfileString Lib"kernel32" Alias "GetPrivateProfileStringA" (ByVallpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String,ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName AsString) As Long

Declare Function WritePrivateProfileStringLib "kernel32" Alias "WritePrivateProfileStringA" (ByVallpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any,ByVal lpFileName As String) As Long

Declare Function GetPrivateProfileInt Lib"kernel32" Alias "GetPrivateProfileIntA" ( _

   ByVal lpApplicationName As String, _

   ByVal lpKeyName As String, _

   ByVal nDefault As Long, _

ByVallpFileName As String) As Long

 

Dim A As Long

'写信息

'修改dy.ini文件中各字段中关键字的值

'如果该文件不存在会自动建立,当函数返回值为0时说明修改不成功

A = WritePrivateProfileString("打印入库单","序号", str$(Check_dy1.Value), App.Path & "\dy.ini")

A =WritePrivateProfileString("打印入库单", "编号", str$(Check_dy2.Value), App.Path & "\dy.ini")

A =WritePrivateProfileString("打印入库单", "名称", str$(Check_dy3.Value), App.Path & "\dy.ini")

A =WritePrivateProfileString("打印入库单", "款号", str$(Check_dy4.Value), App.Path & "\dy.ini")

A =WritePrivateProfileString("打印入库单", "规格", str$(Check_dy5.Value), App.Path & "\dy.ini")

A =WritePrivateProfileString("打印入库单", "件数", str$(Check_dy6.Value), App.Path & "\dy.ini")

A =WritePrivateProfileString("打印入库单", "重量g", str$(Check_dy7.Value), App.Path & "\dy.ini")

A =WritePrivateProfileString("打印入库单", "单价类型", str$(Check_dy8.Value), App.Path & "\dy.ini")

A =WritePrivateProfileString("打印入库单", "单价", str$(Check_dy9.Value), App.Path & "\dy.ini")

A =WritePrivateProfileString("打印入库单", "金额", str$(Check_dy10.Value), App.Path & "\dy.ini")

A =WritePrivateProfileString("打印入库单", "工费类型", str$(Check_dy11.Value), App.Path & "\dy.ini")

A =WritePrivateProfileString("打印入库单", "工费", str$(Check_dy12.Value), App.Path & "\dy.ini")

A =WritePrivateProfileString("打印入库单", "工费金额", str$(Check_dy13.Value), App.Path & "\dy.ini")

A =WritePrivateProfileString("打印入库单", "总金额", str$(Check_dy14.Value), App.Path & "\dy.ini")

A = WritePrivateProfileString("打印入库单","售价", str$(Check_dy15.Value), App.Path & "\dy.ini")

A =WritePrivateProfileString("打印入库单", "备注", str$(Check_dy16.Value), App.Path & "\dy.ini")

If A = 0 ThenMsgBox ("写文件时出错")

Frame5.Visible= False

Call Form_Load

 

 

 

'读取INI信息

Check_dy1 =GetPrivateProfileInt("打印入库单", "序号", Check_dy1, App.Path & "\dy.ini")

Check_dy2 =GetPrivateProfileInt("打印入库单", "编号", Check_dy2, App.Path & "\dy.ini")

Check_dy3 =GetPrivateProfileInt("打印入库单", "名称", Check_dy3, App.Path & "\dy.ini")

Check_dy4 = GetPrivateProfileInt("打印入库单","款号", Check_dy4, App.Path & "\dy.ini")

Check_dy5 =GetPrivateProfileInt("打印入库单", "规格", Check_dy5, App.Path & "\dy.ini")

Check_dy6 =GetPrivateProfileInt("打印入库单", "件数", Check_dy6, App.Path & "\dy.ini")

Check_dy7 =GetPrivateProfileInt("打印入库单", "重量g", Check_dy7, App.Path & "\dy.ini")

Check_dy8 =GetPrivateProfileInt("打印入库单", "单价类型", Check_dy8, App.Path & "\dy.ini")

Check_dy9 =GetPrivateProfileInt("打印入库单", "单价", Check_dy9, App.Path & "\dy.ini")

Check_dy10 =GetPrivateProfileInt("打印入库单", "金额", Check_dy10, App.Path & "\dy.ini")

Check_dy11 =GetPrivateProfileInt("打印入库单", "工费类型", Check_dy11, App.Path & "\dy.ini")

Check_dy12 =GetPrivateProfileInt("打印入库单", "工费", Check_dy12, App.Path & "\dy.ini")

Check_dy13 =GetPrivateProfileInt("打印入库单", "工费金额", Check_dy13, App.Path & "\dy.ini")

Check_dy14 =GetPrivateProfileInt("打印入库单", "总金额", Check_dy14, App.Path & "\dy.ini")

Check_dy15 =GetPrivateProfileInt("打印入库单", "售价", Check_dy15, App.Path & "\dy.ini")

Check_dy16 =GetPrivateProfileInt("打印入库单", "备注", Check_dy16, App.Path & "\dy.ini")

Frame5.Visible= True

 

保存打印机到ini

Private Sub Command3_Click()

'清空组合列表框

   Combo_dyj.Clear

    '获取打印机。如果系统安装了打印机则添加到组合列表框中

   Dim p As Printer

   For Each p In Printers

       Combo_dyj.AddItem p.DeviceName

   Next

    '如果组合列表框中有打印机信息,显示第一项

   If Combo_dyj.ListCount > 0 Then

       Combo_dyj.ListIndex = 0

    '否则提示:系统未安装打印机

   Else

       MsgBox "本计算机上未安装打印机”"

   End If

Frame1.Visible = True

End Sub

Private Sub Command5_Click()

Dim A As Long

'写信息

'修改dy.ini文件中各字段中关键字的值

'如果该文件不存在会自动建立,当函数返回值为0时说明修改不成功

A = WritePrivateProfileString("打印机","打印机名称", Combo_dyj.Text, App.Path & "\dy.ini")

   If A = 0 Then MsgBox ("写文件时出错")

MsgBox "打印机保存成功!!",vbInformation, "提示信息"

Frame1.Visible = False

Call Form_Load

End Sub

'''''''''''''''''''''''''''''''''----------------------------------------读ini文件里面的打印机

Dim lng As Long

Dim dyj As String

dyj = Space$(1000)

lng = GetPrivateProfileString("打印机", "打印机名称","", dyj, 1000, App.Path & "\dy.ini")

dyj = Replace(dyj, Chr(0), "")

dyj = Trim(dyj)

 

0 0
原创粉丝点击