注册 登录
编程论坛 VB6论坛

有偿制作,vb6里面能根据数据中的4个项目做“管制图”吗?

牛掰 发布于 2023-02-07 20:06, 3641 次点击
有偿制作:联系方式:18284014838(微信同号)   
vb6里面能根据数据中的“基板编号”给4个项目做“管制图”吗?4个项目分为:上限、下限、目标值、实际值。下面是希望的效果图:
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2023-2-7 20:09编辑过]

30 回复
#2
cwa99582023-02-08 08:08
基板编号是什么?管制图是什么?
不要把你的叫法与vb混淆。
一般来说,对于数据处理,vb都可以做到。
你要说明你具体的需求说明。
#3
牛掰2023-02-08 09:00
回复 2楼 cwa9958
就是做图表,这种图表在Excel中叫管制图
#4
cwa99582023-02-08 16:40
有管制图这个说法吗?
你只要有数学模型,vb就可以做
#5
牛掰2023-02-08 18:40
回复 4楼 cwa9958
麻烦版主帮助做个案列,费用可以谈
#6
cwa99582023-02-09 08:26
我都不知道你说的管制图是什么,怎么做呢。
#7
风吹过b2023-02-09 14:54
就是有4根线的 折线图, 这个图,我都不愿动了。刚重写过了一个类似的,又把 15年 的代码翻出来的 。我
15年的代码里图形符合你的要求,唯一不符合的就是 竖排 文字而以。
#8
yuma2023-02-09 19:00
用Excel图表方便。录制宏提取代码,在Excel中完成。
#9
牛掰2023-02-10 12:25
回复 7楼 风吹过b
版主可以分享给我吗?如果有费用的话请加我微信,谢谢
#10
牛掰2023-02-10 12:26
回复 8楼 yuma
有相关案列吗,谢谢
#11
cuituo2023-02-11 01:01
回复 7楼 风吹过b
vb中竖排文字只能转换成图片,旋转
#12
风吹过b2023-02-11 13:14
以下是引用牛掰在2023-2-10 12:25:58的发言:

版主可以分享给我吗?如果有费用的话请加我微信,谢谢


https://bbs.bccn.net/thread-511192-1-1.html

https://bbs.bccn.net/thread-511100-1-1.html

都看一下吧。
#13
yuma2023-02-11 14:31
只有本站会员才能查看附件,请 登录


工程——部件——勾选Microsoft Chart Control 6.0(OLEBD)

Private Sub Form_Load()
    Randomize Timer
    Dim i As Integer, jls As Integer
    Dim Values(1 To 15, 1 To 3)
    For i = 1 To 15
        Values(i, 1) = "T" & Format(i, "00")
    Next i
   
    For i = 1 To 15
        Values(i, 2) = Rnd * 100 '以下两个赋相同的值就行了。
        Values(i, 3) = Rnd(0) * 100
    Next i
    MSChart1.chartType = VtChChartType2dCombination
    MSChart1.Plot.SeriesCollection.Item(1).SeriesType = VtChSeriesType2dLine
    MSChart1.Plot.SeriesCollection.Item(2).SeriesType = VtChSeriesType2dBar
    MSChart1.ChartData = Values
End Sub
#14
yuma2023-02-11 15:05
只有本站会员才能查看附件,请 登录


工程——部件——勾选Microsoft Chart Control 6.0(OLEBD)

Private Sub Form_Load()
    Randomize Timer
    Dim i As Integer, jls As Integer
    Dim Values(1 To 15, 1 To 3)
    For i = 1 To 15
        Values(i, 1) = "T" & Format(i, "00")
    Next i
   
    For i = 1 To 15
        Values(i, 1) = Rnd * 100
    Next i
    MSChart1.chartType = VtChChartType2dCombination
    MSChart1.Plot.SeriesCollection.Item(1).SeriesType = VtChSeriesType2dLine
    MSChart1.Plot.SeriesCollection.Item(2).SeriesType = VtChSeriesType2dBar
    MSChart1.ChartData = Values
End Sub
#15
yuma2023-02-11 15:05
只有本站会员才能查看附件,请 登录


工程——部件——勾选Microsoft Chart Control 6.0(OLEBD)

Private Sub Form_Load()
    Randomize Timer
    Dim i As Integer, jls As Integer
    Dim Values(1 To 15, 1 To 3)
    For i = 1 To 15
        Values(i, 1) = "T" & Format(i, "00")
    Next i
   
    For i = 1 To 15

        Values(i, 3) = Rnd * 100
    Next i
    MSChart1.chartType = VtChChartType2dCombination
    MSChart1.Plot.SeriesCollection.Item(1).SeriesType = VtChSeriesType2dLine
    MSChart1.Plot.SeriesCollection.Item(2).SeriesType = VtChSeriesType2dBar
    MSChart1.ChartData = Values
End Sub
#16
yuma2023-02-11 15:06
只有本站会员才能查看附件,请 登录


工程——部件——勾选Microsoft Chart Control 6.0(OLEBD)

Private Sub Form_Load()
    Randomize Timer
    Dim i As Integer, jls As Integer
    Dim Values(1 To 15, 1 To 2)
    For i = 1 To 15
        Values(i, 1) = "T" & Format(i, "00")
    Next i
   
    For i = 1 To 15
        Values(i, 2) = Rnd * 100
    Next i
    MSChart1.chartType = VtChChartType2dCombination
    MSChart1.Plot.SeriesCollection.Item(1).SeriesType = VtChSeriesType2dBar
    MSChart1.ChartData = Values
End Sub

[此贴子已经被作者于2023-2-11 15:35编辑过]

#17
yuma2023-02-11 15:38
楼主以前想要收我100元制作的图,现在给你免费做出来了。哪里能找到我这样对你好的人。
#18
牛掰2023-02-13 15:31
回复 17楼 yuma
您好,谢谢您的耐心制作,但是我想要的是一楼上传的图片的样式,再次感谢
#19
kings123332023-02-13 18:54
回复 16楼 yuma
如果左,右两边的刻度不一样,该如何绘制两组数据(即一组数据参考左边的刻度,一组参考右边的刻度)
#20
yuma2023-02-13 19:25
那要定制开发了。
#21
kings123332023-02-13 21:05
回复 20楼 yuma
应该比较麻烦
#22
mrexcel2023-02-14 16:41
以下是引用kings12333在2023-2-13 18:54:27的发言:

如果左,右两边的刻度不一样,该如何绘制两组数据(即一组数据参考左边的刻度,一组参考右边的刻度)

双轴双柱图,EXCEL和PowerPoint的图表是支持的
#23
cwa99582023-02-15 08:23
回复 19楼 kings12333
排列图?
只有本站会员才能查看附件,请 登录
#24
freeshierly2023-02-15 08:30
这是管理图。很简单的折线图。用不着vb,用EXCEL 就完成了。
#25
William19492023-02-15 10:42
回复 11楼 cuituo
vb 竖排文字 可以使用 CreateFont api 来实现,把其中一个参数设为90度,就能达到竖排的效果,不过这样做出来,每个字符都是斜的(一楼图)。

还有一种方法:使用 PolyTextOut  来实现 ,设置每个字符的 X、Y 坐标 达到竖排的效果,

示例:

程序代码:
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function SetTextAlign Lib "gdi32" (ByVal hDc As Long, ByVal wFlags As Long) As Long
Private Declare Function GetTextMetricsA Lib "gdi32" (ByVal hDc As Long, lpMetrics As Any) As Long

Private Type POLYTEXT
    X       As Long
    Y       As Long
    cCh     As Long
    lpStr   As Long
    uiFlags As Long
    Rcl(3)  As Long
    pDx     As Long
End Type
Private Declare Function PolyTextOutW Lib "gdi32" (ByVal hDc As Long, pPTxt As POLYTEXT, ByVal cStrings As Long) As Long

Private Sub Command1_Click()
    Call strVertical(10, 0, Me.hDc, "VB竖排文字")
End Sub

Private Sub strVertical(ByVal X As Long, ByVal Y As Long, ByVal hDc As Long, ByVal Text As String)
    Dim sLen        As Long, P As Long, teY As Long, oldAlign As Long, tmHeight As Long, tmExternalLeading As Long
    Dim iPT()       As POLYTEXT
    Dim iStr()      As String
    Dim lpMetrics() As Byte

    oldAlign = SetTextAlign(hDc, 6)

    ReDim lpMetrics(52) As Byte
    Call GetTextMetricsA(hDc, lpMetrics(0))
    Call CopyMemory(tmHeight, lpMetrics(0), 4)
    Call CopyMemory(tmExternalLeading, lpMetrics(16), 4)

    sLen = Len(Text) - 1
    ReDim iPT(sLen) As POLYTEXT
    ReDim iStr(sLen) As String
    For P = 0 To sLen
        iStr(P) = Mid$(Text, P + 1, 1)
        With iPT(P)
            .X = X
            .Y = Y + teY
            .cCh = 1
            .lpStr = StrPtr(iStr(P))
        End With
        teY = teY + tmHeight + tmExternalLeading
    Next
    Call PolyTextOutW(hDc, iPT(0), sLen + 1)
    Call SetTextAlign(hDc, oldAlign)
    Erase lpMetrics(), iPT(), iStr()
End Sub
#26
牛掰2023-02-15 12:22
回复 25楼 William1949
请问老师有附件吗?
#27
kings123332023-02-15 14:52
回复 23楼 cwa9958
对,就这个意思,用VB MSChart控件能写吗?
#28
yuma2023-02-16 19:17
有人来点赞吗,不用API文字也可以竖排。

Private Function Vertical_Horizontal(ByVal nStr As String) As String
    Dim MyStr As String, i As Integer
    Static Vert As Boolean
    For i = 1 To Len(nStr)
        If i < Len(nStr) Then
            MyStr = MyStr + Mid$(nStr, i, 1) & vbCrLf
        Else
            MyStr = MyStr + Mid$(nStr, i, 1)
        End If
    Next
    Vertical_Horizontal = MyStr
    Vert = True
End Function
Private Sub Form_Load()
    Label1.AutoSize = True
    Label1.Caption = "VB让Label标签里的文字竖排"
    Label1.Caption = Vertical_Horizontal(Label1.Caption)
End Sub
#29
kings123332023-02-16 19:27
回复 28楼 yuma
大佬,你给的代码图表需要对其中一个柱子的改颜色改如何写啊.
程序代码:

Private Sub Form_Load()
    Randomize Timer
    Dim i As Integer, jls As Integer
    Dim Values(1 To 15, 1 To 3)
    For i = 1 To 15
        Values(i, 1) = "T" & Format(i, "00")
    Next i
   
    For i = 1 To 15

        Values(i, 3) = Rnd * 100
    Next i
    MSChart1.chartType = VtChChartType2dCombination
    MSChart1.Plot.SeriesCollection.Item(1).SeriesType = VtChSeriesType2dLine
    MSChart1.Plot.SeriesCollection.Item(2).SeriesType = VtChSeriesType2dBar
    MSChart1.ChartData = Values
End Sub


只有本站会员才能查看附件,请 登录
#30
yuma2023-02-16 19:36
不知道、只能统一为一种颜色好像。如红色、绿色、蓝色。
#31
kings123332023-02-16 19:50
回复 30楼 yuma
找了半天没有找到好的方法,按常理说应该是可以做到的
1