静的変数


monst  2004-04-16 18:36:49  No: 8404

プログラムソースの移植(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


monst  2004-04-16 19:02:58  No: 8405

選択範囲をstring変数に取り込む部分(Ptext$ = MSFlexGrid1.Clip)の
Clipに相当するプロパティーはStringGridにないようです。
この点についても教えてください。


shaki  2004-04-27 09:09:30  No: 8406

Static I As Integer, A$, N As Integer
の部分は型付き定数を使用して実現できます
const
  i:Integer=0;
ただ、型付き定数を使用するにはプロジェクトのオプションで
型付き定数を使用するにチェックを入れる必要があります
StringGridの選択範囲は一度にとれないので一つずつ加算したほうが早いと思います


monst  2004-04-27 21:52:23  No: 8407

型付き定数についてPascalを読み直してみます。
shakiさん、いろいろありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加