一、软件自主开发的优势
传统的平板仪地形图测量,先不说对中、整平,定向等各方面带来的误差,由标尺读数,然后再计算方身和距离,再把点展到方格网,绘三角网,生成等高线等一系列的机械工作,让人感觉有繁琐,而且效率不高,特别是大面积分幅地形图测量还要接边,手工绘制的地形图更谈不上美观和统一了;控制网平差计算如果计算的待定点多,像手工计算基本上不可能完成的。随着测量工作量越来越多而测量精度需求越来越高,随着测量人员的编制越来越精简而效率需求越来越高等各种矛盾,传统的测量已经无法满足社会的需求,随着全站仪和电子地图的出现及各种测量软件的开发,计算机辅助成图解决了一切的问题,数字化测量模式逐步成熟,这种模式正在替代而且必将完全替代传统的测量技术,成为测绘行业的主流模式。目前在测量中应较广泛的地形图成图软件有南方的CASS,平差软件有南方平差易及清华山维,很多同学和同事都在说,像我们测量上必需的软件到网上下载一个破解版用就可以了,开发它干嘛。有的盗版软件在破解时并没有完全破解,以致使很多功能都无法使用,随着国家对知识产权保护,使用或传播盗版软件都有可能受到法律的制裁,那只好花上N多的钱购买正版软件。有什么方法既能使我们的工作高效准确的完成,又不需要花购买软件这个钱,自主开发也许是一条可行的路。
软件自主开发的优势,第一,我们既是软件使用者,也是软件开发者,能准确把握我们的业务,开发出符合我们业务需求的系统;第二,成本方面,目前的商业软件少则上千多则上万,我们自主开发只要有计算机及相应的编程软件就可以了,像计算机这些硬件设备在单位基本上都有,甚至各个门部都有了,开发的成本比购买的商业产品低;第三,开发团队都是自己人,和别的部门的沟通、配合、培训都能做好,实施风险也小,以后维护的成本低,维护起来也容易,如果是购买的软件缺少某一个功能至少要等到他们新的版本出来才能用;第四,一直以来招投标工程都是看某一个单位的硬件设备怎么样,很少会注重软件这一项,如果在相同的硬件设备和施工措施,在将来我相信我们拥有自主开发的软件会是一个亮点;第五,如果我们的软件得到大力的推广并得到社会及同行的认可,可以大大的提高我们单位的品牌。
二、程序开发过程
1.水准网间接平差原理
以下以黄河水利出版社《测量平差》第94页的水准网为例说明,由右边的水准网流程图可以看出水准网平差由以下几个部分组成:(1)、整理测量观测数据;(2)、计算各待定点近拟值,用一个数组来存储高程近拟值,已知点的高程放在这个数组前面,待定点放在后面,然后按照观测输入的顺序由起点和终点去判断,看该高程是否有一个已知点和一个待定点,是就计算出该待定点近拟高程,依次类推计算出所有点的近拟坐标;(3)、由观测值列立误差方程BTPB&x-BTPl=0;(4)、由误差方程组成法方程;(5)解算法方程NBB&x-W=0;(6)、计算平差值及改正数V=B&x-l;(7)、精度评定。
2.程序分析
需要输入的数据包括水准网已知点、待定点,观测值个数、水准路线单位长度值、各水准点的点号和高程及各观测段的高程和距离观测等,由图2程序界面图可以看出。
3.界面设计
界面的设计好坏直接影响用户的使用方便与否,根据程序分析,本程可以用一个简单的界面来让用户完成各种观测值的输入,程序界面如图2所示。
图2 程序界面图
程序中各控件及属性设置
对像 |
属性 |
值 |
对像 |
属性 |
值 |
Label1 |
Caption |
已知点: |
Text3 |
Text |
|
Label2 |
Caption |
待定点: |
Text4 |
Text |
|
Label3 |
Caption |
观测值 |
txtOutput |
text |
|
Label4 |
Caption |
单位权长度 |
Scrollbars |
3 |
|
txtKnow |
Text |
|
cmdNew |
Caption |
新建(N) |
txtUnknow |
Text |
|
cmdOpen |
Caption |
打开(O) |
Text1 |
Text |
|
cmdSave |
Caption |
保存(S) |
Appearance |
0 |
cmdRun |
Caption |
平差(R) |
|
Visible |
False |
MSFlexGrid1 |
Cols |
3 |
|
Text2 |
Text |
|
MSFlexGrid2 |
Cols |
5 |
Appearance |
0 |
|
|
|
|
Visible |
False |
|
|
|
4.程序使用
由图2程序界面可知,首先在“已知点”输入已知点的个数回车直接跳到待定点;在待定点输入相待定点的个数回车后跳到观测值,同时在控件点信息栏会自动统计出已知点和待定点个数,在高程信息栏中“点号”和“高程”输入相应的值就可以了;在“观测值”输入相应的观测值个数回车后在观测值信息栏会出现相应的观测个数,在观测值信息栏中“起点”、“终点”、“观测值(m)”及“水准路线长度(km)”输入相应的值,“起点”和“终点”所输的点号必需和控制点信息栏中的点号相同,“观测值”输入的单位为米;“水准路线长度(km)”输入的值为公里;新建(N)是新建一个水准网工程;打开(O)是打开一个已保存的水准网工程文件;保存(S)是保存一个正在输入的工程文件或将已打开的工程文件另存为其它文件;平差(R)是对新建或打开的工程进行平差计算,运行后结果会在右边的文本框显示。
5.代码设计
Dim nn, un, nl, pc, tn ’定义已知点,待定点,观测值个数及水准网路线计算单位权,总点个数
Dim T, T1, PVV, U
Dim Pname() As String ’点名数组
Dim H(), FistPoint(), EndPoint(), Hight(), Dist() ’定义高程点,起点,终点及水准路线长度数组
Dim B(), P(), L(), L1(), PL(), M1(), N(), MT(), Q(), W(), V(), M()
Private Sub cmdNew_Click() ‘新建水准网
ExitSystem
txtKnow.SetFocus
txtKnow.Text = "": txtUnknow.Text = ""
Text3.Text = "": Text4.Text = ""
MSFlexGrid1.Rows = 2: MSFlexGrid1.Clear
MSFlexGrid2.Rows = 2: MSFlexGrid2.Clear
txtOutput.Text = ""
Setup
End Sub
Private Sub cmdOpen_Click() ‘打开已有水准网数据
cd1.Filter = "平差文件|*.pc"
cd1.ShowOpen
If cd1.FileName = "" Then Exit Sub
Me.Caption = "科智水准网平差 - [" & cd1.FileName & "]"
txtOutput.Text = ""
Open cd1.FileName For Input As #1
Input #1, nn, un, nl, pc ’读入已知点,待定点,观测值个数及水准路线单位长度
txtKnow.Text = nn: txtUnknow.Text = un
Text3.Text = nl: Text4.Text = pc
tn = nn + un
MSFlexGrid1.Rows = tn + 1
For i = 1 To tn
Input #1, TmpName, TmpH ’读入水准点号及高程
MSFlexGrid1.Col = 0
MSFlexGrid1.Row = i
MSFlexGrid1.Text = i
MSFlexGrid1.Col = 1
MSFlexGrid1.Row = i
MSFlexGrid1.Text = TmpName
MSFlexGrid1.Col = 2
MSFlexGrid1.Row = i
MSFlexGrid1.Text = TmpH
Next i
MSFlexGrid2.Rows = nl + 1
For i = 1 To nl
’读入起点点号,终点点号,两点间的高差,两点之间的距离
Input #1, TmpFist, TmpEnd, TmpHight, TmpDist
MSFlexGrid2.Col = 0
MSFlexGrid2.Row = i
MSFlexGrid2.Text = i
MSFlexGrid2.Col = 1
MSFlexGrid2.Row = i
MSFlexGrid2.Text = TmpFist
MSFlexGrid2.Col = 2
MSFlexGrid2.Row = i
MSFlexGrid2.Text = TmpEnd
MSFlexGrid2.Col = 3
MSFlexGrid2.Row = i
MSFlexGrid2.Text = Format(TmpHight, "0.0000")
MSFlexGrid2.Col = 4
MSFlexGrid2.Row = i
MSFlexGrid2.Text = TmpDist
Next i
Close #1
End Sub
Private Sub cmdRun_Click()关 ‘平差计算
PVV = 0: U = 0
txtOutput.Text = ""
If txtKnow.Text = "" Then Exit Sub ’当已知点为空(没有观测数据)退出计算
nn = CDbl(txtKnow.Text): un = CDbl(txtUnknow.Text): pc = CDbl(Text4.Text)
tn = nn + un: T = un: T1 = 2 * T
ReDim Pname(tn), H(tn)
For i = 1 To tn
If MSFlexGrid1.TextMatrix(i, 2) = "" Then MSFlexGrid1.TextMatrix(i, 2) = 0
Pname(i) = MSFlexGrid1.TextMatrix(i, 1) ’读入水准点点号
H(i) = CDbl(MSFlexGrid1.TextMatrix(i, 2)) ’读入该水准点高程
Next i
nl = CDbl(Text3.Text)
ReDim FistPoint(nl), EndPoint(nl), Hight(nl), Dist(nl)
For i = 1 To nl
FistPoint(i) = zhName(MSFlexGrid2.TextMatrix(i, 1)) ’读入水准网起点
EndPoint(i) = zhName(MSFlexGrid2.TextMatrix(i, 2)) ’读入水准网终点
Hight(i) = CDbl(MSFlexGrid2.TextMatrix(i, 3)) ’读入高差观测值
Dist(i) = CDbl(MSFlexGrid2.TextMatrix(i, 4)) ’读入水准路线长度
Next i
’近拟坐标计算
For i = 1 To un
For j = 1 To nl ’找到一个起点相同且终点已知的观测值
If FistPoint(j) = nn + i And EndPoint(j) < nn + i Then
H(nn + i) = H(EndPoint(j)) - Hight(j)
Exit For
End If ’找到一个终点相同且起点已知的观测值
If EndPoint(j) = nn + i And FistPoint(j) < nn + i Then
H(nn + i) = H(FistPoint(j)) + Hight(j)
Exit For
End If
Next j
Next i
txtOutput.Text = txtOutput.Text & "近拟坐标" & vbCrLf
For i = nn + 1 To tn ’输出近拟坐标
txtOutput.Text = txtOutput.Text & i & " " & Pname(i) & " " & H(i) & vbCrLf
Next i
’对每个观测值列误差方程
ReDim B(nl, un), P(nl, nl), L(nl), L1(nl), PL(nl), M1(T, nl), N(T, T1), MT(T, T1), Q(T, T), W(T), V(nl), M(nn + T)
For i = 1 To nl
For j = 1 To T
B(i, j) = 0
If EndPoint(i) > nn Then B(i, EndPoint(i) - nn) = 1 ’若终点未知,则给终点对应的系数“1”
If FistPoint(i) > nn Then B(i, FistPoint(i) - nn) = -1 ’若起点未知,则给起点对应的系数“-1”
L(i) = (H(EndPoint(i)) - H(FistPoint(i)) - Hight(i)) * 1000 ’根据起终点计算常数项
P(i, i) = pc / Dist(i) ’以距离的倒数为权
Next j
Next i
txtOutput.Text = txtOutput.Text & vbCrLf
txtOutput.Text = txtOutput.Text & "由观测值组成误差方程" & vbCrLf
For i = 1 To nl
For j = 1 To T
txtOutput.Text = txtOutput.Text & FormatN(B(i, j))
Next j
txtOutput.Text = txtOutput.Text & FormatN(Int(L(i) * 10 + 0.5) / 10) & vbCrLf
Next i
’由误差方程组成法方程
For i = 1 To T
For j = 1 To nl
For K = 1 To nl
M1(i, j) = M1(i, j) + B(K, i) * P(K, j)
Next K
Next j
Next i
For i = 1 To T
For j = 1 To T
For K = 1 To nl
N(i, j) = N(i, j) + M1(i, K) * B(K, j)
Next K
Next j
Next i
For i = 1 To T
For K = 1 To nl
L1(i) = L1(i) + M1(i, K) * L(K)
Next K
Next i
JSFFC ’调用解算法方程
For i = 1 To T ’计算法方程常数列
W(i) = 0
For j = 1 To T
W(i) = W(i) - Q(i, j) * L1(j)
Next j
Next i
txtOutput.Text = txtOutput.Text & vbCrLf
txtOutput.Text = txtOutput.Text & "由误差方程组成法方程" & vbCrLf
For i = 1 To T
For j = 1 To T
txtOutput.Text = txtOutput.Text & " " & FormatN(Format(Int(N(i, j) * 10000 + 0.5) / 10000, "0.0000")) & " "
Next j
txtOutput.Text = txtOutput.Text & Format(Int(L1(i) * 10 + 0.5) / 10, "0.0") & vbCrLf
Next i
txtOutput.Text = txtOutput.Text & vbCrLf
txtOutput.Text = txtOutput.Text & "解算法方程 " & vbCrLf
For i = 1 To T
For j = 1 To T
txtOutput.Text = txtOutput.Text & " " & FormatN(Format(Int(Q(i, j) * 10000 + 0.5) / 10000, "0.0000")) & " "
Next j
txtOutput.Text = txtOutput.Text & FormatN(Format(Int(W(i) * 10000 + 0.5) / 10000, "0.0000")) & vbCrLf
Next i
txtOutput.Text = txtOutput.Text & vbCrLf
txtOutput.Text = txtOutput.Text & "序号 点号 最或然值(m) " & vbCrLf
For i = nn + 1 To nn + T
j = i - nn
H(i) = H(i) + W(j) / 1000
Next i
For i = 1 To nn + T
txtOutput.Text = txtOutput.Text & " " & i & " " & FormatN(Pname(i)) & " " & FormatN(Format(H(i), "0.0000")) & vbCrLf
Next i
txtOutput.Text = txtOutput.Text & vbCrLf
txtOutput.Text = txtOutput.Text & "序号 观测值(m) 改正数(mm) 平差值(m)" & vbCrLf
For i = 1 To nl
PL(i) = H(EndPoint(i)) - H(FistPoint(i)) ’观测值平差值
V(i) = PL(i) - Hight(i)
V(i) = Int(V(i) * 10000 + 0.5) / 10
txtOutput.Text = txtOutput.Text & " " & i & " " & FormatN(Format(Hight(i), "0.000")) & " " & FormatN(Format(V(i), "0.0")) & " " & FormatN(Format(PL(i), "0.0000")) & vbCrLf
Next i
For i = 1 To nl
For j = 1 To nl
PVV = PVV + V(i) * P(i, j) * V(i)
Next j
Next i
U = Int(Sqr(PVV / (nl - T)) * 1000 + 0.5) / 1000
txtOutput.Text = txtOutput.Text & "" & vbCrLf
txtOutput.Text = txtOutput.Text & "精度评定:" & vbCrLf
txtOutput.Text = txtOutput.Text & " 1、单位权中误差:μ=±" & Format(U, "0.000") & "mm" & vbCrLf
txtOutput.Text = txtOutput.Text & " 2、每公里观测高差中误差(相对中误差):1km:M(km)=±" & Format(U / (Sqr(pc)), "0.000") & "mm" & vbCrLf
txtOutput.Text = txtOutput.Text & " 3、各所求点高程平差值的中误差:" & vbCrLf
For i = nn + 1 To nn + T
j = i - nn
M(j) = U * Sqr(Q(j, j))
txtOutput.Text = txtOutput.Text & " M(" & i & ")=±" & Format(M(j), "0.000") & "mm" & vbCrLf
Next i
End Sub
Private Sub cmdSave_Click() ‘保存平差文件
cd1.Filter = "平差文件|*.pc"
cd1.ShowSave
If cd1.FileName = "" Then Exit Sub
Open cd1.FileName For Output As #2
Print #2, txtKnow.Text & "," & txtUnknow.Text & "," & Text3.Text & "," & Text4.Text
For i = 1 To MSFlexGrid1.Rows - 1
Print #2, MSFlexGrid1.TextMatrix(i, 1) & "," & MSFlexGrid1.TextMatrix(i, 2)
Next i
For i = 1 To MSFlexGrid2.Rows - 1
Print #2, MSFlexGrid2.TextMatrix(i, 1) & "," & MSFlexGrid2.TextMatrix(i, 2) & "," & MSFlexGrid2.TextMatrix(i, 3) & "," & MSFlexGrid2.TextMatrix(i, 4)
Next i
Close #2
End Sub
Private Sub Form_Load()
Setup
End Sub
Sub Setup() ’定义网格格式及M1和M2控件
MSFlexGrid1.Col = 0
MSFlexGrid1.Row = 0
MSFlexGrid1.Text = "序号"
MSFlexGrid1.Col = 1
MSFlexGrid1.Row = 0
MSFlexGrid1.Text = "点号"
MSFlexGrid1.Col = 2
MSFlexGrid1.Row = 0
MSFlexGrid1.Text = "高程(m)"
MSFlexGrid1.ColWidth(0) = 600
MSFlexGrid1.ColWidth(1) = 600
MSFlexGrid1.ColWidth(2) = 1000
MSFlexGrid1.RowHeightMin = 270
MSFlexGrid1.ColAlignment(0) = 3
MSFlexGrid1.ColAlignment(1) = 3
MSFlexGrid1.ColAlignment(2) = 3
MSFlexGrid2.Col = 0
MSFlexGrid2.Row = 0
MSFlexGrid2.Text = "序号"
MSFlexGrid2.Col = 1
MSFlexGrid2.Row = 0
MSFlexGrid2.Text = "起点"
MSFlexGrid2.Col = 2
MSFlexGrid2.Row = 0
MSFlexGrid2.Text = "终点"
MSFlexGrid2.Col = 3
MSFlexGrid2.Row = 0
MSFlexGrid2.Text = "观测值(m)"
MSFlexGrid2.Col = 4
MSFlexGrid2.Row = 0
MSFlexGrid2.Text = "水准路线长度(km)"
MSFlexGrid2.ColWidth(0) = 500
MSFlexGrid2.ColWidth(1) = 600
MSFlexGrid2.ColWidth(2) = 600
MSFlexGrid2.ColWidth(3) = 1000
MSFlexGrid2.ColWidth(4) = 1500
MSFlexGrid2.RowHeightMin = 270
MSFlexGrid2.ColAlignment(0) = 3
MSFlexGrid2.ColAlignment(1) = 3
MSFlexGrid2.ColAlignment(2) = 3
MSFlexGrid2.ColAlignment(3) = 3
MSFlexGrid2.ColAlignment(4) = 3
End Sub
’点名-序号转换函数
Public Function zhName(strP As String) As Integer
’Dim i%
For i = 1 To tn
If strP = Pname(i) Then
zhName = i
Exit For
End If
Next i
End Function
Public Function FormatN(aa) ’取6个字符对齐
While Len(aa) < 6
aa = " " & aa
Wend
FormatN = aa
End Function
Sub JSFFC() ’解算法方程
For i = 1 To T
For j = 1 + T To T1
If j = i + T Then N(i, j) = -1
Next j
Next i
For i = 1 To T1
MT(1, i) = -N(1, i) / N(1, 1)
Next i
For i = 2 To T
For j = i To T1
For K = i - 1 To 1 Step -1
N(i, j) = N(i, j) + MT(K, i) * N(K, j)
Next K
MT(i, j) = -N(i, j) / N(i, i)
Next j
Next i
For i = 1 To T
For j = 1 To T
Q(i, j) = 0
Next j
Next i
For K = 1 To T
For i = T To 1 Step -1
For j = T To i + 1 Step -1
Q(K, i) = Q(K, i) + Q(K, j) * MT(i, j)
Next j
Q(K, i) = Q(K, i) + MT(i, T + K)
Next i
Next K
End Sub
Sub ExitSystem() ’退出科智系统
If txtKnow.Text <> "" Then
Dim iMsg%
iMsg = MsgBox("平差数据已输完或修改,是否保存再退出?", vbYesNo, "退出科智平差")
If iMsg = vbYes Then cmdSave_Click
If iMsg = vbCancel Then Cancel = True
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
ExitSystem
End Sub
Private Sub txtKnow_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then txtUnknow.SetFocus
End Sub
Private Sub txtUnknow_KeyPress(KeyAscii As Integer)
Dim tn
If KeyAscii = 13 Then
tn = CDbl(txtKnow.Text) + CDbl(txtUnknow.Text)
MSFlexGrid1.Rows = tn + 1
For i = 1 To tn
MSFlexGrid1.Col = 0
MSFlexGrid1.Row = i
MSFlexGrid1.Text = i
Next i
Text3.SetFocus
End If
End Sub
Private Sub Text3_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
MSFlexGrid2.Rows = CDbl(Text3.Text) + 1
For i = 1 To CDbl(Text3.Text)
MSFlexGrid2.Col = 0
MSFlexGrid2.Row = i
MSFlexGrid2.Text = i
Next i
Text4.SetFocus
End If
End Sub
Private Sub MSFLexGrid1_KeyPress(KeyAscii As Integer)
Dim char As String
If KeyAscii = 13 Then
Text1.Text = MSFlexGrid1.Text
Text1.SelStart = Len(Text1.Text)
Else
char = Chr$(KeyAscii)
Text1.Text = char
Text1.SelStart = 1
End If
ShowTextBox1
KeyAscii = 0
End Sub
Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single)
Text1.Visible = False
With MSFlexGrid1
m_Row = .MouseRow
m_Col = .MouseCol
If m_Row < .FixedRows Then m_Row = .FixedRows
If m_Col < .FixedCols Then m_Col = .FixedCols
.Row = m_Row: .Col = m_Col
Text1.Move .Left + .CellLeft, .Top + .CellTop, .CellWidth, .CellHeight
Text1.Text = .Text
Text1.Visible = True
Text1.SetFocus
End With
End Sub
’当网格单元发生变化时,取网格单元内容到文本框,等待编辑,从而保证文本框中的内容最新。
Private Sub MSFlexGrid1_RowColChange()
Text1.Text = MSFlexGrid1.Text
End Sub
’ 双击网格单元可以对网格单元中内容进行编辑?
Private Sub MSFlexGrid1_DblClick()
If MSFlexGrid1.Row > 0 And MSFlexGrid1.Col = 0 Then MSFLexGrid1_KeyPress 13
End Sub
’文本框起输入编辑框的作用,模拟网格单元,输入到文本框的内容,经过处理送到网格中,当输入完后按回车键可以自动到下一列,若为最后一列,跳转到下一行的第一列等待输入。
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
MSFlexGrid1.Text = Text1.Text
Text1.Visible = False
MSFlexGrid1.SetFocus
If MSFlexGrid1.Col < (MSFlexGrid1.Cols - 1) Then
MSFlexGrid1.Col = MSFlexGrid1.Col + 1
ElseIf MSFlexGrid1.Row < MSFlexGrid1.Rows - 1 Then
MSFlexGrid1.Row = MSFlexGrid1.Row + 1
MSFlexGrid1.Col = 1
End If
KeyAscii = 0
End If
End Sub
Private Sub MSFLexGrid2_KeyPress(KeyAscii As Integer)
Dim char As String
If KeyAscii = 13 Then
Text2.Text = MSFlexGrid2.Text
Text2.SelStart = Len(Text2.Text)
Else
char = Chr$(KeyAscii)
Text2.Text = char
Text2.SelStart = 1
End If
ShowTextBox2
KeyAscii = 0
End Sub
Private Sub MSFlexGrid2_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single)
Text2.Visible = False
With MSFlexGrid2
m_Row = .MouseRow
m_Col = .MouseCol
If m_Row < .FixedRows Then m_Row = .FixedRows
If m_Col < .FixedCols Then m_Col = .FixedCols
.Row = m_Row: .Col = m_Col
Text2.Move .Left + .CellLeft, .Top + .CellTop, .CellWidth, .CellHeight
Text2.Text = .Text
Text2.Visible = True
Text2.SetFocus
End With
End Sub
Private Sub MSFlexGrid2_RowColChange()
Text2.Text = MSFlexGrid2.Text
End Sub
Private Sub MSFlexGrid2_DblClick()
If MSFlexGrid2.Row > 0 And MSFlexGrid2.Col = 0 Then MSFLexGrid2_KeyPress 13
End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
MSFlexGrid2.Text = Text2.Text
Text2.Visible = False
MSFlexGrid2.SetFocus
If MSFlexGrid2.Col < (MSFlexGrid2.Cols - 1) Then
MSFlexGrid2.Col = MSFlexGrid2.Col + 1
ElseIf MSFlexGrid2.Row < MSFlexGrid2.Rows - 1 Then
MSFlexGrid2.Row = MSFlexGrid2.Row + 1
MSFlexGrid2.Col = 1
End If
KeyAscii = 0
End If
End Sub
Sub ShowTextBox1()
With MSFlexGrid1
Text1.Visible = False
Text1.Height = .RowHeight(.Row) - (Screen.TwipsPerPixelY) * 2
Text1.Width = .ColWidth(.Col)
Text1.Left = .CellLeft + .Left
Text1.Top = .CellTop + .Top
Text1.Visible = True
Text1.SetFocus
End With
End Sub
Sub ShowTextBox2()
With MSFlexGrid2
Text2.Visible = False
Text2.Height = .RowHeight(.Row) - (Screen.TwipsPerPixelY) * 2
Text2.Width = .ColWidth(.Col)
Text2.Left = .CellLeft + .Left
Text2.Top = .CellTop + .Top
Text2.Visible = True
Text2.SetFocus
End With
End Sub
三、软件自主开发的一点建议
1. 组织现有编程爱好的测量人员团体开发,虽然各分局的测量人员分布散,我们可以充分利用现在的网络平台,分工好每个人具体开发的模块,然后把大家编写好的程序统一起来,测试,打包,发布。
2. 在以后招聘大中专毕业学生可优先聘用有计算机程序开发能力的人员,加强我们单位的能开发程序的实力,可以开发像财务、人事、日期管理各类工程局需要的软件。
3. 对软件开发者给予一定的奖励,如果软件能在工程局得到认可,可以组织相关的人员培训学习。