掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
指定のフォントを表示するには? (ID:33559)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>IMEから直接入力したときの表示は文字化けしません。 IMEから直接入力したときに文字化けしていないということでEdit1はUnicodeで文字列を保持しているのかもしれません。 ただ、Delphi 2007のTEditのTextプロパティはWideStringではなくAnsiStringなので、たとえEdit1がUnicodeで文字列を保持していたとしてもTextプロパティで取得したのではAnsiStringに変換された文字列にしかなりません。 ということでGetWindowTextW APIを使えばUnicodeのままで取得できるかもしれないなと思ってGetTextを例示したのですが、だめだったようですね。 となると解決策は ・Delphi 2009にバージョンアップする ・Delphi for .NETにする(Unicodeに対応しています) ・Uniさんが紹介されているTNTWareを利用する ・CreateWindowW APIでUnicode対応のEditコントロールを作る これらのどれかになるのではないでしょうか。 Delphi for .NETが無償で利用できるので特に問題がなければお勧めかなと。 ちなみにCreateWindowW APIの場合。 type TForm1 = class(TForm) ... private { Private 宣言 } F_hEdit: HWND; public { Public 宣言 } end; procedure TForm1.FormCreate(Sender: TObject); begin //Unicode対応エディットコントロール F_hEdit := CreateWindowW( 'EDIT', nil, WS_CHILD or ES_AUTOHSCROLL or ES_NOHIDESEL or WS_VISIBLE, 8, //Left 8, //Top 121, //Width 20, //Height Handle, //親ウィンドウ 0, 0, nil ); //フォントのセット if (F_hEdit <> 0) then begin SendMessageW(F_hEdit, WM_SETFONT, WPARAM(GetStockObject(DEFAULT_GUI_FONT)), 0); end; end; procedure TForm1.FormDestroy(Sender: TObject); begin DestroyWindow(F_hEdit); end; 文字列の取得は先に例示したGetText関数を使います。 procedure TForm1.Button1Click(Sender: TObject); begin DrawCanvas(Image1, 10, 30, GetText(F_hEdit)); end; こんな感じで。 もしかしたらUnicode文字の入力は貼り付けでしかできないかも知れませんが。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.