プログラムソースの移植(VisualBasic5→Delphi7)の中で、
StringGridに表示された数値表の、Shift+マウスクリックで反転選択した複数Cellの数値の和を求めようとしています。
Clipboardの使い方は共通だと思うのですが、静的変数の使用がネックになっています。
アドバイスを!
Private Sub Shukei()'集計
Dim Temp As Long, Ptext$, Total As Long, Indv$
Ptext$ = MSFlexGrid1.Clip
Clipboard.Clear
Clipboard.SetText Ptext$
If Ptext$ = vbNullString Then Temp = MsgBox("計算範囲を指定して下さい。)
End If
Ptext$ = Clipboard.GetText
Total = 0
Indv$ = TOKEN$(Ptext$, vbCr)
Do While Indv$ <> vbNullString
DoEvents
Total = Total + Val(Indv$)
Indv$ = TOKEN$(vbNullString, vbCr)
Loop
Temp = MsgBox(Ptext$ & vbCrLf & "──────" & vbCrLf & Total, , "Total")
End Sub
Private Function TOKEN$(TEXT$, DELIMITA$)
Static I As Integer, A$, N As Integer
Dim B$, C$, Flag As Integer
B$ = vbNullString
If TEXT$ <> vbNullString Then
I = 0
A$ = TEXT$
N = Len(A$)
End If
Flag = 0
Do
I = I + 1
C$ = Mid$(A$, I, 1)
If C$ <> DELIMITA$ Then
B$ = B$ + C$: Flag = 1
ElseIf Flag = 1 Then
TOKEN$ = B$: Exit Function
End If
Loop While I <= N
TOKEN$ = B$
End Function
選択範囲をstring変数に取り込む部分(Ptext$ = MSFlexGrid1.Clip)の
Clipに相当するプロパティーはStringGridにないようです。
この点についても教えてください。
Static I As Integer, A$, N As Integer
の部分は型付き定数を使用して実現できます
const
i:Integer=0;
ただ、型付き定数を使用するにはプロジェクトのオプションで
型付き定数を使用するにチェックを入れる必要があります
StringGridの選択範囲は一度にとれないので一つずつ加算したほうが早いと思います
型付き定数についてPascalを読み直してみます。
shakiさん、いろいろありがとうございました。
ツイート | ![]() |