DBGridでカラムのタイトルでキャプションを設定するときに横書きでは無く、縦書きでキャプションを設定することは可能でしょうか?
例えば
「備考」というタイトルキャプションがあるとき、通常ならば横書きで
備考
ですが
備
考
のようにできるでしょうか?
知っている方がいたましたら、教えてほしいです。
上記の訂正をします。
DBGridではなく,StringGridです。
・TStringGridでセルの描画をデフォルトから変えるときはOnDrawCellイベントで描画処理を行う
・Windowsで縦書きをするときはCreateFont関数 https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-createfontw でパラメータcOrientationに270(degree)を、パラメータpszFaceNameに@付のフォント名('@MS UI Gothic')を指定したフォントを作成して、そのフォントでテキスト描画する
ということで、TStringGridのOnDrawCellイベント内で、対象となるセルだったらCanvas.Font.Handleに↑のように作成したフォントのハンドルを与えてStringGrid1.Canvas.TextRect()で描画すればいいのではないかと(この場合作ったフォントは自動的に削除されるのでDeleteObject関数は呼ばない)。
縦書き ではないのですが・・
タイトル欄で、決まった文字だけを表示するなら、
1文字ずつ、1行に、描画するのは、いかがですか?
具体的には、「備考」なら
OnDrawCellイベントで、
'備' + #13#10 + '考'
を DrawText関数を使って描画するとか・・
日本語の文字には縦書きと横書きでグリフが異なるものがあるので(長音ーとか小書きのっとか句読点とか
igyさんのやり方に追加でTextWidth を使って文字幅を取得して
文字の中心が同じになるようにすると綺麗に表示出来ます。
x を中心とする場合に描画する座標 xx を計算
yy := y;
for i := 1 to Length(str) do begin
s := Copy(str,i,1);
xx := x - StringGrid1.Canvas.TextWidth(s) div 2;
StringGrid1.Canvas.TextOut(xx,yy,s);
yy := yy + StringGrid1.Canvas.TextHeight(s);
end;
返事を忘れていました。すみません!
igy さんと takeさんの回答を参考にして実行したらきれいに表示されました。
ありがとうございました。
ツイート | ![]() |