Delphiコードのみ用いたものと、Windows APIを用いたものを併記。速度はWindows APIの方が速い。
RichEdit1.SelStart := 2; // 開始位置 RichEdit1.SelLength := 3; // 範囲量
uses Windows, RichEdit; : : var ChrRng: TCharRange; : : ChrRng.cpMin := 2; // 開始位置 ChrRng.cpMax := 2 + 3; // 終了位置 RichEdit1.Perform(EM_EXSETSEL, 0, lParam(@ChrRng)); // 範囲を選択 // SendMessage(RichEdit1.Handle, EM_EXSETSEL, 0, lParam(@ChrRng)); // 範囲を選択
// 事前に範囲を指定しておくこと。 RichEdit1.SelAttributes.Color := clRed; // TColor型
uses Windows, RichEdit; : : var ChrFmt: TCharFormat; : : ChrFmt.cbSize := SizeOf(ChrFmt); // メモリを予約 : : // 事前に範囲を指定しておくこと。 ChrFmt.dwMask := CFM_COLOR; // 変更可能な書式はColorのみ ChrFmt.crTextColor := ColorToRGB(clRed); // 文字色を指定 RichEdit1.Perform(EM_SETCHARFORMAT, SCF_SELECTION, lParam(@ChrFmt)); // 変更 // SendMessage(RichEdit1.Handle, EM_SETCHARFORMAT, SCF_SELECTION, lParam(@ChrFmt)); // 変更
EM_SETCHARFORMAT は「文字の書式指定」操作を意味する。続くパラメータは「操作範囲, 書式情報」。
操作範囲の SCF_SELECTION は「事前に指定した範囲」。SCF_ALL で全範囲指定。
書式情報の lParam(@ChrFmt) は、書式設定 ChrFmt のアドレス。
// 事前に範囲を指定しておくこと。 RichEdit1.SelAttributes.Style := [fsBold, fsItaric]; // TFont.Style
uses Windows, RichEdit; : : var ChrFmt: TCharFormat; : : ChrFmt.cbSize := SizeOf(ChrFmt); // メモリを予約 : : // 事前に範囲を指定しておくこと。 ChrFmt.dwMask := CFM_BOLD + CFM_ITALIC; // 変更可能な書式はBoldとItaricのみ ChrFmt.dwEffects := CFE_BOLD + CFE_UNDERLINE; // BoldとUnderline装飾を指定 // dwMask と dwEffects の両方で指定された装飾のみ有効。 // このプログラムの場合、Boldは有効、ItaricとUnderlineは無効。 RichEdit1.Perform(EM_SETCHARFORMAT, SCF_SELECTION, lParam(@ChrFmt)); // 変更 // SendMessage(RichEdit1.Handle, EM_SETCHARFORMAT, SCF_SELECTION, lParam(@ChrFmt)); // 変更
// 事前に範囲を指定しておくこと。 RichEdit1.SelAttributes.Name := 'MS 明朝';
uses Windows, RichEdit; : : var ChrFmt: TCharFormat; : : ChrFmt.cbSize := SizeOf(ChrFmt); // メモリを予約 : : // 事前に範囲を指定しておくこと。 ChrFmt.dwMask := CFM_FACE; // 変更可能な書式はフォント名のみ ChrFmt.szFaceName := 'MS 明朝'; // 半角32文字まで RichEdit1.Perform(EM_SETCHARFORMAT, SCF_ALL, lParam(@ChrFmt)); // 変更 // SendMessage(RichEdit1.Handle, EM_SETCHARFORMAT, SCF_SELECTION, lParam(@ChrFmt)); // 変更
// 事前に範囲を指定しておくこと。 RichEdit1.SelAttributes.Size := 15; // 単位はpoint
uses Windows, RichEdit; : : var ChrFmt: TCharFormat; : : ChrFmt.cbSize := SizeOf(ChrFmt); // メモリを予約 : : // 事前に範囲を指定しておくこと。 ChrFmt.dwMask := CFM_SIZE; // 変更可能な書式はフォントサイズのみ ChrFmt.yHeight := 300; // 単位は twip(1twip=1/20point=1/1440inch) RichEdit1.Perform(EM_SETCHARFORMAT, SCF_ALL, lParam(@ChrFmt)); // 変更 // SendMessage(RichEdit1.Handle, EM_SETCHARFORMAT, SCF_SELECTION, lParam(@ChrFmt)); // 変更
使用フォントに縦書きフォント(フォント名の前に半角@を付けたもの。「MS 明朝」の縦書きフォントは「@MS 明朝」)を指定するだけ。
ただし Windows 2000以降、RichEdit をコントロールする dll から縦書き表示機能が排除されたらしいので、2000以降は縦書きフォントの横向き表示になる(反時計回りに90度回転した状態)。縦書き表示するには、縦書き表示対応の古い dll を使うか、独自に縦書き表示を実装する必要がある。