DBGridでカラムのタイトルを縦書き

解決


レタス  2020-01-30 14:15:09  No: 148510

DBGridでカラムのタイトルでキャプションを設定するときに横書きでは無く、縦書きでキャプションを設定することは可能でしょうか?
例えば
「備考」というタイトルキャプションがあるとき、通常ならば横書きで
備考
ですが


のようにできるでしょうか?
知っている方がいたましたら、教えてほしいです。


レタス  2020-01-30 14:49:53  No: 148512

上記の訂正をします。
DBGridではなく,StringGridです。


HFUKUSHI  2020-01-30 15:40:00  No: 148513

・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関数は呼ばない)。


igy  2020-01-30 21:46:22  No: 148514

縦書き ではないのですが・・

タイトル欄で、決まった文字だけを表示するなら、
1文字ずつ、1行に、描画するのは、いかがですか?

具体的には、「備考」なら
OnDrawCellイベントで、
 '備' + #13#10 + '考'
を DrawText関数を使って描画するとか・・


HFUKUSHI  2020-01-31 06:33:09  No: 148515

日本語の文字には縦書きと横書きでグリフが異なるものがあるので(長音ーとか小書きのっとか句読点とか


take  2020-02-03 09:15:39  No: 148524

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;


レタス  2020-02-14 15:38:42  No: 148560

返事を忘れていました。すみません!
igy さんと takeさんの回答を参考にして実行したらきれいに表示されました。
ありがとうございました。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加