掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
UTF-8対応のEditコンポーネントを作りたい (ID:41186)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
function GetText(hHandle: HWND): WideString; var li_Len : Integer; lp_Buff : PWideChar; begin Result := ''; li_Len := GetWindowTextLengthW(hHandle) +1; if (li_Len > 0) then begin lp_Buff := AllocMem(li_Len * 2); try GetWindowTextW(hHandle, lp_Buff, li_Len); Result := WideString(lp_Buff); finally FreeMem(lp_Buff); end; end; end; procedure TForm1.Button1Click(Sender: TObject); var l_List : TStrings; begin l_List := TStringList.Create; try l_List.Text := Utf8Encode(GetText(richEditx)); l_List.SaveToFile('save_utf8.txt'); finally l_List.Free; end; end; CreateWindowW APIでUnicode対応のEditコントロールを作成した場合の注意点として。 ・タブの入力ができません。 タブの入力が必要な場合はTMenuItemやTActionのShortCutプロパティに「Tab」をセットして procedure TForm1.Action1Execute(Sender: TObject); var ls_Tab: WideString; begin ls_Tab := #9; SendMessageW(richEditx, EM_REPLACESEL, WPARAM(1), LPARAM(PWideChar(ls_Tab))); end; というようにしてタブコードを挿入してあげないとなりません。 ・TButtonやTCheckBox、TListBox、TStringGridなどなどキー入力のあるコントロールのあるフォームだと方向キーをそれらのコントロールに奪われてしまうのでカーソルの移動ができなくなります。 そのあたりの問題を色々取り扱ったページです。 参考までにどうぞ。 http://drang.s4.xrea.com/program/tips/unicode/edit_memo.html またわざわざCreateWindowW APIで作成しなくともD7のVCLのTRichEditはそのままでUnicode対応になっていると思います。 Unicodeな文字の表示、UTF-8のBOM付で保存してあるファイルの読み込み、クリップボードへのUnicodeな文字のコピー、IMEでのUnicodeな文字の入力などはできると思います。 ただクリップボードからの貼り付けやファイルへの書き出しでUnicodeな文字が化けてしまうのでちょっと力技な一工夫が必要で使い勝手はあまり良くないのですが手軽さはあります。 http://drang.s4.xrea.com/program/tips/unicode/vcl_richedit.html そのあたりを色々試してみた結果のページです。 これまた参考までに。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.