よろしくお願いします.
TStringGrid を使用してセルに文字を書き込むのですが
縦書きで文字を書きたいのですが、どうすればよいのでしょうか?
失敗例
StringGrid1.Cells[1,0] := 'か' + #13#10 + 'き' + #13#10 + 'く';
イメージ
┌───┬─┬─┬─┐
│ │か│ │ │
│ │き│ │ │
│ │く│ │ │
├───┼─┼─┼─┤
│あいう│ │ │ │
└───┴─┴─┴─┘
標準のStringGridでは縦書きも、改行もできません。
改行はできるので、縦書きに見えるように調整すれば
いいと思います。
ここを参考にされるとよろしいかと思います。
http://www.borland.co.jp/tips/delphi/dh011/index.html
リンク先を見て
よくわかりました.
ありがとうございます.
縦書きできないのは、
ちょっと頭が固いだけ。
オーナードローにするなら、
自己努力で、てきとーにすれば、
どうにでもかけますので
他の配列に、縦横情報保存するとか、
継承してそういうプロパティ埋め込むとかが
あとあと面倒でないような気がします
縦書きは、できます。
編集画面も縦がいいのならコンポーネントを継承してセルのエディットコントロールをカスタマイズする必要があるでしょう
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;
ツイート | ![]() |