【DO!BOOK・ページリンク】 2008_migaro_techreport_001 124 / 136 10秒後にBOOKのページに移動します |
|
122 10. StringGridでの 文字列縦表示 StringGrid で表示される文字列 を縦表示したいのですが、可能で しょうか? StringGrid の標準出力では、横 表示となってしまう。そのため、 描画イベントのOnDrawCell イベントで 対象のフォントを回転させて、TextOut やDrawtext で出力させることで縦描写が できる。 OnDrawCel イベントでの描画のソース 例を示す。【ソース8】 この仕組みでは、回転したフォントを作 成して、Canvas 上のフォントと入れ替え を行っている。LFont のifEscapement で 回転の角度を設定することができる。 例えば、90 度であれば900、270 度であ れば2700 と設定する。 ・注意点 注意点としては、使用するフォントに縦 書き用のフォントを使用した場合は、 Single-Byte 文字とDouble-Byte 文字とで 回転方向が異なる点である。 フォントの角度ごとの回転例を示すので 参考にしてほしい。【図10】 Q. A. ソース8 文字列回転描画例 //OnDrawCell イベント procedure TfrmQ5.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var LFont: TLogFont; NFont, OFont: HFont; begin with StringGrid1 do begin Canvas.Font.Size := 20; //Font を取得し、回転させます。 GetObject(Canvas.Font.Handle, SizeOf(LFont), @LFont); with LFont do begin lfEscapement := 900; // 通常:0、左:900、右:2700 lfCharSet := DEFAULT_CHARSET; lfOutPrecision := OUT_DEFAULT_PRECIS; lfClipPrecision := CLIP_DEFAULT_PRECIS; lfQuality := DEFAULT_QUALITY; lfPitchAndFamily := DEFAULT_PITCH; lfFaceName :=‘ @ MS ゴシック’; end; // 描画領域が持っているFont と入れ替えます。 NFont := CreateFontIndirect(LFont); OFont := SelectObject(Canvas.Handle, NFont); // 描画領域の内容をFillRect でクリアします。 Canvas.FillRect(Rect); //Font が変更された状態で描画領域へ文字列を書込みます。 Canvas.TextOut(CellRect(ACol, ARow).Left + 9, CellRect(ACol, ARow).top + 85, Cells[ACol, ARow]); // 入れ替えたFont を元に戻し、新たに設定したFont 情報を // 開放します。 NFont := SelectObject(Canvas.Handle, OFont); DeleteObject(NFont); end; end; 図10 フォントの角度ごとの回転例 |