StringGridのセルを結合後の文字列について

解決


Mac Sony  2003-04-01 03:31:01  No: 3246

こんにちは。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;


にしの  2003-04-01 04:27:45  No: 3247

DefaultDrawingプロパティをFalseにしてもうまくいきませんか?


にしの  2003-04-01 04:29:42  No: 3248

原因がわかりました。
1列目のときに、1〜2列目を描画していますが、2列目だけ再描画されたときに消えます。
2列目を描画するとき、1〜2列目を描画するようにすればOKです。


Mac Sony  2003-04-01 19:20:54  No: 3249

>2列目だけ再描画されたときに消えます。
確かにそうでした。
自分では2列目を再描画する時に1列目も再描画してるつもりでしたが、
2  : Rect.Left  := Rect.Left  + ColWidths[1];
ではなく
2  : Rect.Left  := Rect.Left  - ColWidths[1];
としなくてはいけませんでしたね。
ありがとうございました。
これからもよろしくお願いします。


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

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






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