【DO!BOOK・ページリンク】
2008_migaro_techreport_001   124 / 136

BOOKをみる

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 フォントの角度ごとの回転例