StringGrid の表示方法について

解決


メポ  2005-01-19 22:42:23  No: 12787

よろしくお願いします.

TStringGrid を使用してセルに文字を書き込むのですが
縦書きで文字を書きたいのですが、どうすればよいのでしょうか?

失敗例
  StringGrid1.Cells[1,0] := 'か' + #13#10 + 'き' + #13#10 + 'く';

イメージ
┌───┬─┬─┬─┐
│      │か│  │  │
│      │き│  │  │
│      │く│  │  │
├───┼─┼─┼─┤
│あいう│  │  │  │
└───┴─┴─┴─┘


へいた  2005-01-19 23:50:25  No: 12788

標準のStringGridでは縦書きも、改行もできません。
改行はできるので、縦書きに見えるように調整すれば
いいと思います。
ここを参考にされるとよろしいかと思います。
http://www.borland.co.jp/tips/delphi/dh011/index.html


メポ  2005-01-20 01:08:24  No: 12789

リンク先を見て
よくわかりました.
ありがとうございます.


  2005-01-20 02:19:10  No: 12790

縦書きできないのは、
ちょっと頭が固いだけ。

オーナードローにするなら、
自己努力で、てきとーにすれば、
どうにでもかけますので
他の配列に、縦横情報保存するとか、
継承してそういうプロパティ埋め込むとかが
あとあと面倒でないような気がします

縦書きは、できます。
編集画面も縦がいいのならコンポーネントを継承してセルのエディットコントロールをカスタマイズする必要があるでしょう

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
  var aCanvas : TCanvas;
      H,W ,Left,mLeft,Top,mTop : integer;
      i , j : integer;
      text : WideString;
      StrList : TStringList;
begin
  aCanvas := TStringGrid(Sender).Canvas;
  aCanvas.FillRect(Rect);
  if Length(TStringGrid(Sender).Cells[ACol,ARow])=0 then Exit;

  try
    StrList := TStringList.Create;
    StrList.Text := TStringGrid(Sender).Cells[ACol,ARow];

    H := aCanvas.TextHeight('■')+1;
    W := aCanvas.TextWidth('■') +1;
     Left := 2;
    for i := 0 to StrList.Count-1 do begin
     Top  := 2;
     text := StrList.Strings[i];
     for j := 1 to Length(text) do begin
       mLeft := Rect.Left + Left+(W - aCanvas.TextWidth(text[j])) div 2;
       mTop  := Rect.Top  + Top +(H - aCanvas.TextHeight(text[j])) div 2;
       if mLeft+w > Rect.Right then Break;
       if mTop+H  > Rect.Bottom then Break;
       aCanvas.TextOut(mLeft ,mTop ,text[j]);
       Top  := Top  + H;
      end;
      Left := Left + W;
   end;
  finally
    StrList.free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  StringGrid1.Cells[1,1] := 'あいうえお';
  StringGrid1.Cells[2,1] := 'かきくけこ';
  StringGrid1.Cells[3,1] := 'あいうえお'+#13#10+'かきくけこ';
  StringGrid1.Cells[4,1] := 'あいうえお'+#13#10+'かきくけこ'+#13#10'abcde';
end;


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

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






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