こんにちは。Mac Sonyです。
いつも参考にさせていただいております。
今回、StringGridの特定のセルを結合して文字列を中央に書き込む
処理をOnDrawCellイベントにて行ってみました。
とりあえず、下記のコードで0行目のセルの1列目と2列目を結合し
文字列を中央に書くことはできたのですが、スクロールをすると
文字列が途中で消えてしまうことがあります。
OnDrawCellイベントはDebugもできないためどうしてそのようになるのか
わかりません。
よきアドバイスをお願いします。
procedure StringGrid1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
with StringGrid1 do
begin
if ARow = 0 then
begin
case ACol of
1 : Rect.Right := Rect.Right + ColWidths[2];
2 : Rect.Left := Rect.Left + ColWidths[1];
end;
Canvas.Brush.Color := clWindow;
Canvas.FillRect(Rect);
//StringGrid1.Cells[1,0]、StringGrid1.Cells[2,0]には
//前もって同じ文字列を入れてある。
DrawText(Canvas.Handle, PChar(Cells[ACol, ARow]), -1, Rect,
DT_SINGLELINE or DT_VCENTER or DT_CENTER);
end;
end;
end;
DefaultDrawingプロパティをFalseにしてもうまくいきませんか?
原因がわかりました。
1列目のときに、1〜2列目を描画していますが、2列目だけ再描画されたときに消えます。
2列目を描画するとき、1〜2列目を描画するようにすればOKです。
>2列目だけ再描画されたときに消えます。
確かにそうでした。
自分では2列目を再描画する時に1列目も再描画してるつもりでしたが、
2 : Rect.Left := Rect.Left + ColWidths[1];
ではなく
2 : Rect.Left := Rect.Left - ColWidths[1];
としなくてはいけませんでしたね。
ありがとうございました。
これからもよろしくお願いします。
ツイート | ![]() |