by ポテト » 2005年11月25日(金) 08:43
> 私の環境では、AB4.11.03では以下のコードがコンパイルできないのです。
>
コード: 全て選択
Dim fontname = "MS ゴシック" As BytePtr
>
> > どうやら、Double_To_String()に問題がありそうです。
>
> 開示可能であれば、
Double_To_Stringを調査しましょうか?
> プライベートメッセージでもかまいませんよ!
大変失礼しました。
Dim fontname = "MS ゴシック" As BytePtr ではなくて、
MainWnd_Create()の中で
fontname = "MS ゴシック" で設定していました。
初心者で恥ずかしいけれど、Double_To_String()です。
内容は、だいぶ前に作ったので忘れました!
コード: 全て選択
'倍制度浮動小数点に符号と小数点を付け桁数を指定して文字列で返す
'Dbl=変換数値 cnt=桁 dot=小数点以下(5以下)
Function Double_To_String(Dbl As Double, cnt As Long,
dot As Integer) As BytePtr
Dim buffer[255] As Byte
Dim buf As BytePtr
Dim buf_hi As String
Dim buf_lo As String
Dim dec As Long
Dim sin As Long
If cnt > 15 Then
Double_To_String = "Error-Over15"
Exit Function
End If
buf = _ecvt(Dbl, cnt, dec, sin) '倍制度浮動小数点を文字列に変換
dec_b=dec
If dec_b > 0 Then '小数点位置
If sin = 1 Then '符号処理
lstrcpy(buffer, "-") '符号(-)を付ける
Else
lstrcpy(buffer, " ") '符号無し
End If
buf_hi = Left$(buf,dec_b) '小数点から上位を取得
lstrcat(buffer, buf_hi) '小数点から上位を表示
lstrcat(buffer, ".") '小数点を追加
buf_lo = Mid$(buf, dec_b+1, dot)'元のバッファーの小数点以下
lstrcat(buffer, buf_lo)
Else
If sin = 1 Then '符号処理
lstrcpy(buffer, "-") '符号(-)を付ける
Else
lstrcpy(buffer, " ") '符号無し
End If
lstrcat(buffer, "0.")
If dot > 5 Then dot=5
Select Case (dot) '小数点以下数
Case 1
If dec_b = 0 Then
buf_lo = Left$(buf,1)
End If
Case 2
If dec_b = 0 Then
buf_lo = Left$(buf,2)
End If
If dec_b = -1 Then
lstrcat(buffer, "0")
buf_lo = Left$(buf,1)
End If
Case 3
If dec_b = 0 Then
buf_lo = Left$(buf,3)
End If
If dec_b = -1 Then
lstrcat(buffer, "0")
buf_lo = Left$(buf,2)
End If
If dec_b = -2 Then
lstrcat(buffer, "00")
buf_lo = Left$(buf,1)
End If
Case 4
If dec_b = 0 Then
buf_lo = Left$(buf,4)
End If
If dec_b = -1 Then
lstrcat(buffer, "0")
buf_lo = Left$(buf,3)
End If
If dec_b = -2 Then
lstrcat(buffer, "00")
buf_lo = Left$(buf,2)
End If
If dec_b = -3 Then
lstrcat(buffer, "000")
buf_lo = Left$(buf,1)
End If
Case 5
If dec_b = 0 Then
buf_lo = Left$(buf,5)
End If
If dec_b = -1 Then
lstrcat(buffer, "0")
buf_lo = Left$(buf,4)
End If
If dec_b = -2 Then
lstrcat(buffer, "00")
buf_lo = Left$(buf,3)
End If
If dec_b = -3 Then
lstrcat(buffer, "000")
buf_lo = Left$(buf,2)
End If
If dec_b = -4 Then
lstrcat(buffer, "0000")
buf_lo = Left$(buf,1)
End If
End Select
lstrcat(buffer, buf_lo)
End If
Double_To_String = buffer
End Function
> 私の環境では、AB4.11.03では以下のコードがコンパイルできないのです。
> [code] Dim fontname = "MS ゴシック" As BytePtr [/code]
>
> > どうやら、Double_To_String()に問題がありそうです。
>
> 開示可能であれば、[b]Double_To_String[/b]を調査しましょうか?
> プライベートメッセージでもかまいませんよ!
大変失礼しました。
Dim fontname = "MS ゴシック" As BytePtr ではなくて、
MainWnd_Create()の中で
fontname = "MS ゴシック" で設定していました。
初心者で恥ずかしいけれど、Double_To_String()です。
内容は、だいぶ前に作ったので忘れました!
[code]
'倍制度浮動小数点に符号と小数点を付け桁数を指定して文字列で返す
'Dbl=変換数値 cnt=桁 dot=小数点以下(5以下)
Function Double_To_String(Dbl As Double, cnt As Long,
dot As Integer) As BytePtr
Dim buffer[255] As Byte
Dim buf As BytePtr
Dim buf_hi As String
Dim buf_lo As String
Dim dec As Long
Dim sin As Long
If cnt > 15 Then
Double_To_String = "Error-Over15"
Exit Function
End If
buf = _ecvt(Dbl, cnt, dec, sin) '倍制度浮動小数点を文字列に変換
dec_b=dec
If dec_b > 0 Then '小数点位置
If sin = 1 Then '符号処理
lstrcpy(buffer, "-") '符号(-)を付ける
Else
lstrcpy(buffer, " ") '符号無し
End If
buf_hi = Left$(buf,dec_b) '小数点から上位を取得
lstrcat(buffer, buf_hi) '小数点から上位を表示
lstrcat(buffer, ".") '小数点を追加
buf_lo = Mid$(buf, dec_b+1, dot)'元のバッファーの小数点以下
lstrcat(buffer, buf_lo)
Else
If sin = 1 Then '符号処理
lstrcpy(buffer, "-") '符号(-)を付ける
Else
lstrcpy(buffer, " ") '符号無し
End If
lstrcat(buffer, "0.")
If dot > 5 Then dot=5
Select Case (dot) '小数点以下数
Case 1
If dec_b = 0 Then
buf_lo = Left$(buf,1)
End If
Case 2
If dec_b = 0 Then
buf_lo = Left$(buf,2)
End If
If dec_b = -1 Then
lstrcat(buffer, "0")
buf_lo = Left$(buf,1)
End If
Case 3
If dec_b = 0 Then
buf_lo = Left$(buf,3)
End If
If dec_b = -1 Then
lstrcat(buffer, "0")
buf_lo = Left$(buf,2)
End If
If dec_b = -2 Then
lstrcat(buffer, "00")
buf_lo = Left$(buf,1)
End If
Case 4
If dec_b = 0 Then
buf_lo = Left$(buf,4)
End If
If dec_b = -1 Then
lstrcat(buffer, "0")
buf_lo = Left$(buf,3)
End If
If dec_b = -2 Then
lstrcat(buffer, "00")
buf_lo = Left$(buf,2)
End If
If dec_b = -3 Then
lstrcat(buffer, "000")
buf_lo = Left$(buf,1)
End If
Case 5
If dec_b = 0 Then
buf_lo = Left$(buf,5)
End If
If dec_b = -1 Then
lstrcat(buffer, "0")
buf_lo = Left$(buf,4)
End If
If dec_b = -2 Then
lstrcat(buffer, "00")
buf_lo = Left$(buf,3)
End If
If dec_b = -3 Then
lstrcat(buffer, "000")
buf_lo = Left$(buf,2)
End If
If dec_b = -4 Then
lstrcat(buffer, "0000")
buf_lo = Left$(buf,1)
End If
End Select
lstrcat(buffer, buf_lo)
End If
Double_To_String = buffer
End Function
[/code]