掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Unicodeで入力した文字を、StringGridに入れるには? (ID:38582)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
Delphi6 Pro XPで。 Unicodeな文字列をUTF-7に変換してStringGridに入れ、StringGridのOnDrawCellイベントででUTF-7に変換した文字列をUnicode文字列に戻して表示させるという方法があります。 function gfnsWideToUtf7(sSrc: WideString): AnsiString; //WideStringをUTF-7にエンコードして返す var li_Len: Integer; lp_Buff: PAnsiChar; begin li_Len := WideCharToMultiByte(CP_UTF7, 0, PWideChar(sSrc), -1, nil, 0, nil, nil); lp_Buff := AllocMem(li_Len + 1); try WideCharToMultiByte(CP_UTF7, 0, PWideChar(sSrc), -1, lp_Buff, li_Len, nil, nil); Result := AnsiString(lp_Buff); finally FreeMem(lp_Buff); end; end; function gfnsUtf7ToWide(sSrc: AnsiString): WideString; //UTF-7でエンコードされている文字列をWideStringにして返す var li_Len: Integer; lp_Buff: PWideChar; begin li_Len := MultiByteToWideChar(CP_UTF7, 0, PAnsiChar(sSrc), -1, nil, 0); lp_Buff := AllocMem((li_Len + 1) * 2); try MultiByteToWideChar(CP_UTF7, 0, PAnsiChar(sSrc), -1, lp_Buff, li_Len); Result := WideString(lp_Buff); finally FreeMem(lp_Buff); end; end; procedure TForm1.Button1Click(Sender: TObject); var ls_Wide: WideString; begin ls_Wide := WideString(WideChar($6AD0)) + WideString(WideChar($6AD1)) + WideString(WideChar($6AD2)) + WideString(WideChar($6AD3)) + WideString(WideChar($6AD4)) + WideString(WideChar($6AD5)) ; StringGrid1.Cells[0, 0] := gfnsWideToUtf7(ls_Wide); end; procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin with StringGrid1.Canvas do begin FillRect(Rect); DrawTextW(Handle, PWideChar(gfnsUtf7ToWide(StringGrid1.Cells[ACol, ARow])), -1, Rect, DT_NOPREFIX or DT_VCENTER or DT_SINGLELINE); end; end; >※ 櫒 =6AD2は、NotePadでは表示されません。 フォントを変えれば表示されると思います。 私の環境では「MS Pゴシック」だと表示されませんが、「MS ゴシック」や「MS P明朝」なんかだと表示されます。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.