标题:学习一个月,开始开发系统,开贴做个记念!
只看楼主
kings12333
Rank: 2
等 级:论坛游民
帖 子:112
专家分:59
注 册:2012-11-29
得分:0 
回复 13楼 hmj0745
漂亮的布局,能不能分享一下原始文件……我也想看看这些怎么弄出来的
2021-12-09 09:11
kings12333
Rank: 2
等 级:论坛游民
帖 子:112
专家分:59
注 册:2012-11-29
得分:0 
回复 13楼 hmj0745
这个表格控件漂亮,叫什么名字啊……朋友
2021-12-09 09:13
hmj0745
Rank: 2
等 级:论坛游民
帖 子:52
专家分:83
注 册:2021-11-6
得分:0 
回复 22楼 kings12333
不好意思,源文件不方便发你,正在开发我还没有做完。
思路是:MID窗体 左边加一个Picturebox 里面放treeviwe (通过读取配置文件生成,方便个性化调整),通过time 配合Picturebox 的宽度变化,实现菜单栏的推拉式收起和展开,右边功能区通过 Form_Resize() 随时保持功能区窗体同MID窗体的无缝同步。


表格控件是: MSHFlexGrid1
**窗体中代码***************************************
程序代码:
Private Sub 查询_Click()
On Error GoTo errmsg
'Dim t
't = Timer   '//开始时间
Call LockWindowUpdate(Me.hwnd) '//禁止更新防止闪烁
Me.MSHFlexGrid1.Clear
StrDB = "\data\2商务项目.accdb"
myTable = "B1客户列表"

If Me.查询大类 = "" Or Me.关键字 = "" Then
SQL = "select * from " & myTable & " ORDER BY 客户编号 DESC" '//   DESC反序"
Else
Dim NB As String: NB = Me.查询大类
Dim Cx As String: Cx = Me.关键字
SQL = "SELECT * FROM " & myTable & " where " & NB & " like '%" & Cx & "%'"
End If

Opendb (StrDB)
Set RS = CreateObject("adodb.recordset") '//创建一个数据集保存数据
RS.Open SQL, cnn, 1, 3 '//数据集保存数据
Set Me.MSHFlexGrid1.DataSource = RS
Me.Frame2.Caption = "***列表" & RS.RecordCount & "项***"

Call setCol(Me, MSHFlexGrid1, 500, 400) '//自适应列宽,根据是否超首行宽度进行不同的系数补偿
Call SetRowFont(MSHFlexGrid1, 350, 350, 11, 9) '//分别设定首行高度和下面的行高
Call setColAlig(Me, MSHFlexGrid1, 1) '//设置数据对齐方式
Call setBackcol(MSHFlexGrid1) '//设置隔行背景色
Call LockWindowUpdate(0) '//开启更新
GoTo 111
errmsg: MsgBox Err.Description, , "错误报告"
111
'MsgBox "查询完毕!一共用时:" & Format(Timer - t, "#0.0000") & " 秒", , "系统提示!!"   '//提示所用时间
Disconnect
End Sub

***调整表格的代码*************************************************************
程序代码:
    
'01函数名: SetrowFont
'函数功能: MSHFlexGrid设定单元格隔行背景色
'参数说明: 表格控件名,首行高,其它行高,首行字号,其它行字号
'*****************************************************************************************
'*****************************************************************************************
Public Sub SetRowFont(MSHF As Object, RowH1 As Long, RowH As Long, TextSize1 As Single, TextSize As Single)
Dim i As Integer, j As Integer
    With MSHF
               .TextMatrix(0, 0) = "序号"
               .RowHeight(0) = RowH1  '//第一行行高
        For i = 1 To .Rows - 1
               .TextMatrix(i, 0) = i '//在第一列写入行号
               .RowHeight(i) = RowH '//其它行行高
        Next
        
        .CellFontName = "宋体"
        .CellFontSize = TextSize
       ' .ForeColorFixed = RGB(0, 0, 0) '//标头字体色
       ' .ForeColor = RGB(0, 0, 0) '//普通单元格字体颜色
        
        For j = 0 To .Cols - 1
               .Row = 0
               .Col = j
               .CellFontSize = TextSize1
        Next
    End With
End Sub

'02函数名: setCol
'函数功能: MSHFlexGrid设定行自适用列宽+补偿
'*****************************************************************************************
'*****************************************************************************************
Public Sub setCol(Myform As Form, MSHF As Object, B1 As Long, b2 As Long)
Dim x, y As Integer
Dim Width0, maxwidth, minwidth As Double
With MSHF
For y = 1 To .Cols - 1
Width0 = 0
   For x = 0 To .Rows - 1
      If x = 0 Then
        Width0 = Myform.TextWidth(.TextMatrix(x, y)) '// 把第一行的字段宽度做为初始列宽
          GoTo 222 ' 第一行取得列宽初始值后直接跳转到此
             End If
      If Myform.TextWidth(.TextMatrix(x, y)) > Width0 Then
        Width0 = Myform.TextWidth(.TextMatrix(x, y)) '// 遍历此列找到最宽的一个一行数据,赋给Width0
           End If
222
       Next
                
If Width0 = Myform.TextWidth(.TextMatrix(0, y)) Then '//对字段做出判断
.ColWidth(y) = Width0 + b2 ' //如果列内字符长度不超过首行则补偿系数为b2
Else
.ColWidth(y) = Width0 + B1 ' //如果列内字符串长度超过首行则补偿系数为B1
End If
Next
End With
MSHF.ColWidth(0) = 600 '// 在此直接对第一列做出固定定义
End Sub

'02函数名: setColAlig
'函数功能: MSHFlexGrid设定单元格对齐方式
'*****************************************************************************************
'*****************************************************************************************
Public Sub setColAlig(Myform As Form, MSHF As Object, x As Integer)
Dim y As Integer
For y = 0 To MSHF.Cols - 1

 MSHF.ColAlignment(y) = x

 MSHF.FixedAlignment(y) = 4 '设置首行的对齐方式
Next
End Sub
        
'02函数名: setbackcol
'函数功能: MSHFlexGrid设定单元格隔行背景色
'*****************************************************************************************
'*****************************************************************************************
Public Sub setBackcol(MSHF As Object)
Dim x As Integer
With MSHF
         .AllowBigSelection = True '设置网格样式
         .FillStyle = flexFillRepeat
    For x = 1 To .Rows - 1
         .Row = x: .Col = .FixedCols
         .ColSel = .Cols() - .FixedCols ' - 1
         If x Mod 2 = 0 Then
         .CellBackColor = vbWhite '
         Else
         .CellBackColor = RGB(213, 216, 217) '
         End If
    Next
   '.FocusRect = flexFocusNone
    End With
End Sub
    



[此贴子已经被作者于2021-12-10 22:39编辑过]


不去做永远没有结果!
2021-12-10 22:37
hmj0745
Rank: 2
等 级:论坛游民
帖 子:52
专家分:83
注 册:2021-11-6
得分:0 
回复 20楼 kings12333
字体好像不能改变大小,好像是根据行高自动适配的。
可以通过在imagelist 插入一个指定像素高度的图片。
这个方法可以调整行高,字体大小,也可以实现隔行变色。
我在 Excelhome 论坛查到过资料,也试过,能实现。
就是我觉得 listviwe 不够稳定,有时在别的是脑上不能打开。
所以不太想用这个控件。

不去做永远没有结果!
2021-12-10 22:48
kings12333
Rank: 2
等 级:论坛游民
帖 子:112
专家分:59
注 册:2012-11-29
得分:0 
回复 23楼 hmj0745
帮忙做个例子,看你怎么实现的。
2021-12-11 19:07
hmj0745
Rank: 2
等 级:论坛游民
帖 子:52
专家分:83
注 册:2021-11-6
得分:0 
回复 25楼 kings12333
因为我开发的项目都是相关联的,拆分出来一小块还比较麻烦。
给你拆分出来MSHFlexGrid1 表格的一个实例 。以及增删改查的全套代码和一些我使用成熟的函数。
里面都写了注释,我也是刚学一个月,理解的不一定正确,具体你自己一步一步看吧
*附件***********************
MSHFlexGrid1表格使用示例.rar (47.23 KB)

如果你要 listviwe 的资料,进这个excel论坛查看
https://club.

[此贴子已经被作者于2021-12-11 20:03编辑过]


不去做永远没有结果!
2021-12-11 19:58
hmj0745
Rank: 2
等 级:论坛游民
帖 子:52
专家分:83
注 册:2021-11-6
得分:0 
    哈哈有点小开心了,到现在BOM模块基本上算是写完了。这也是物料管理的最核心部分了。就这一个子模块功能,前前后后用了快两周了,脑细胞死了不少!
总结一下,以下几点:
1. 数据库内层级码规律的设计,字符串的拆分组合逻辑。排序,层级逻辑。
2. 从数据库内查询层级码后,自动生成Treeviwe,这里攻关了根据件名全自动匹配零件图,总成子件的多层级严格排序难点(产品由多层级的总成,小总成,子件构成,对层级的变化和要求很严格)
3. 从Treeviwe界面上可视化,随意增改删各层级子件,和图片,理论上可以无限层级增加,每个单层级的子件上限为999件,相信如果不是造飞机,这个量是冗余量是够了的。
4. 可操作Excel模板批量编辑BOM层级,导入数据库,自动加载到软件前端。批量上传前进行自检,和比对数据库中已存在同零件层级码,因为层级码的规则是BOM精确性的关键点,所以上传前双层自检很重要,本来想简单点,如果上传的数据错了,删除重新上传。但想一下还是做好防呆吧,有可能错误的数据不要进数据库。这里用到了数组和字典,字典不太熟所以多花了一天时间。
    我相信在现有这个思路上,还是有很多提升的空间,后面自己有能力了再从算法上改良吧。 有一个缺憾就是,用VB操作EXcel ,开始调用时,响应会有个1秒的延迟,不够丝滑啊。 考虑加个进度条吧,VB的单线程,也不好搞。因为我这个过程不是循环造成的。也不好加进度条,有点难搞啊。

不去做永远没有结果!
2021-12-12 01:18
kings12333
Rank: 2
等 级:论坛游民
帖 子:112
专家分:59
注 册:2012-11-29
得分:0 
回复 27楼 hmj0745
大哥,没有数据库报错,起动不了
2021-12-12 22:08
kings12333
Rank: 2
等 级:论坛游民
帖 子:112
专家分:59
注 册:2012-11-29
得分:0 
报错信息
2021-12-12 22:14
hmj0745
Rank: 2
等 级:论坛游民
帖 子:52
专家分:83
注 册:2021-11-6
得分:0 
回复 29楼 kings12333
1. 解压文件后,数据库是包含在DATA 文件夹内的。代码会自动访问连接。解压后不要把文件拖出来启动,就在哪个文件夹里运行。因为数据路径设为了 APP.path\DATA
2. 报错的是表格插件,其实示例里面没有用到,不影响。 你可以在部件里加载这个就行了。
*************

不去做永远没有结果!
2021-12-12 22:41



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-507778-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.099373 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved