ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月29日(金) 10:22

全ての表示時間は UTC+09:00 です




返信する
ユーザー名:
件名:
メッセージ本文:
メッセージを入力してください。60000 字まで入力できます。 

フォントサイズ:
フォントカラー
オプション:
BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF
BBCode を無効にする
URL を自動的にパースしない
クイズ
お手数ですがカタカナで「エービー」と4文字を入力してください。:
答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。
   

トピックのレビュー - StrConv関数の大半の機能を使用可能
作成者 メッセージ
  記事の件名:  StrConv関数の大半の機能を使用可能  引用付きで返信する
SJISでのみ、各種変換を行えます。
UNICODEを変換する場合は、以下のように処理してください。
コード:
変換後 = StrConv(StrConv(StrConv(変換前,vbFromUnicode),vbKatakana+vbNarrow),Unicode)
各種制限
Unicode,vbFromUnicodeは単独で使用して下さい。
vbLowerCaseとvbUpperCase、vbHiraganaとvbKatakana、vbNarrowとvbWideの同時指定は出来ません。
コード:
Declare Function WideCharToMultiByte Lib "kernel32" ( _
                 CodePage       As Long, _
                 dwFlags        As Long, _
                 lpWideByteStr  As VoidPtr,_
                 cchWideByte    As Long, _
                 lpMultiCharStr As String, _
                 cchMultiChar   As Long, _
                 pDefaultChar   As Long, _
                 pUsedDefaultChar As Long) As Long

Declare Function GetUserDefaultLCID Lib "kernel32" () As Long

Declare Function LCMapStringA Lib "kernel32" ( _
                 Locale      As Long, _
                 dwMapFlags  As Long, _
                 lpSrcStr    As String, _
                 cchSrc      As Long, _
                 lpDestStr   As String, _
                 cchDest     As Long) As Integer
Const LCMAP_LOWERCASE = &h00000100    '小文字にします
Const LCMAP_UPPERCASE = &h00000200    '大文字にします
Const LCMAP_HIRAGANA  = &h00100000    'ひらがなにします
Const LCMAP_KATAKANA  = &h00200000    'カタカナにします
Const LCMAP_HALFWIDTH = &h00400000    '半角文字にします(適用される場合)
Const LCMAP_FULLWIDTH = &h00800000    '全角文字にします(適用される場合)
'---------------------------------------------------
' StrConv が使用する定数郡
'---------------------------------------------------
Const vbLowerCase    = LCMAP_LOWERCASE   '小文字をにします
Const vbUpperCase    = LCMAP_UPPERCASE   '大文字をにします
Const vbHiragana     = LCMAP_HIRAGANA    'ひらがなにします
Const vbKatakana     = LCMAP_KATAKANA    'カタカナにします
Const vbNarrow       = LCMAP_HALFWIDTH   '半角文字にします
Const vbWide         = LCMAP_FULLWIDTH   '全角文字にします

Const vbUnicode      = 1                 'Unicodeへ変換
Const vbFromUnicode  = 2                 'SJIS   へ変換
'***************************************************
' StrConv
'---------------------------------------------------
' 引数 : 変換する文字列,変換処理
' 戻値 : 変換された文字列
'***************************************************
Function StrConv(sInp As String,eCnv As Long) As String
    'eCnv に対して処理を振り分け
    Dim iLen As Long, oLen As Long, lCnv As Long, LcId As Long
    '
    Select Case(eCnv And 3)

        Case vbFromUnicode
            iLen = Len(sInp) >> 1
            oLen=WideCharToMultiByte(CP_ACP, 0, sInp, iLen, 0, 0, 0, 0)
            StrConv=ZeroString(oLen)                            '作業領域作成
            WideCharToMultiByte(CP_ACP, 0, sInp, iLen, StrPtr(StrConv), oLen, 0, 0)

        Case vbUnicode
            iLen = Len(sInp)
            oLen = MultiByteToWideChar(CP_ACP,0,sInp,iLen,0,0)  '文字数取得
            StrConv=ZeroString(oLen << 1)                       '作業領域作成
            MultiByteToWideChar( CP_ACP,0,sInp,-1,StrPtr(StrConv),oLen)
        
        Case Else
            lCnv = (eCnv And &h00F00300)    '対象確認
            If(lCnv)Then
                LcId = GetUserDefaultLCID()
                iLen = Len(sInp)
                oLen = LCMapStringA(LcId, lCnv, sInp, iLen, 0, 0)
                StrConv=ZeroString(oLen)                            '作業領域作成
                oLen = LCMapStringA(LcId, lCnv, sInp, iLen, StrPtr(StrConv), oLen)
            Else
                StrConv=sInp: debug
            End If
    End Select
End Function
投稿記事 Posted: 2005年10月03日(月) 11:07

全ての表示時間は UTC+09:00 です


ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean