一、软件自主开发的优势

传统的平板仪地形图测量,先不说对中、整平,定向等各方面带来的误差,由标尺读数,然后再计算方身和距离,再把点展到方格网,绘三角网,生成等高线等一系列的机械工作,让人感觉有繁琐,而且效率不高,特别是大面积分幅地形图测量还要接边,手工绘制的地形图更谈不上美观和统一了;控制网平差计算如果计算的待定点多,像手工计算基本上不可能完成的。随着测量工作量越来越多而测量精度需求越来越高,随着测量人员的编制越来越精简而效率需求越来越高等各种矛盾,传统的测量已经无法满足社会的需求,随着全站仪和电子地图的出现及各种测量软件的开发,计算机辅助成图解决了一切的问题,数字化测量模式逐步成熟,这种模式正在替代而且必将完全替代传统的测量技术,成为测绘行业的主流模式。目前在测量中应较广泛的地形图成图软件有南方的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. 对软件开发者给予一定的奖励,如果软件能在工程局得到认可,可以组织相关的人员培训学习。