掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
StringGrid の表示方法について (ID:12790)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
縦書きできないのは、 ちょっと頭が固いだけ。 オーナードローにするなら、 自己努力で、てきとーにすれば、 どうにでもかけますので 他の配列に、縦横情報保存するとか、 継承してそういうプロパティ埋め込むとかが あとあと面倒でないような気がします 縦書きは、できます。 編集画面も縦がいいのならコンポーネントを継承してセルのエディットコントロールをカスタマイズする必要があるでしょう 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;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.