如上图黄色单元格位置
我用如下代码,给单元格添加了边框procedure TForm4.HNsGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
  var
    temp: TRect;
begin
    if (HNsGrid1.Focused) and (HNsGrid1.Col = ACol) and (HNsGrid1.Row = ARow) then
    begin      temp.top := Rect.top-3;
      temp.left := Rect.Left-3;
      temp.right := Rect.right-1;
      temp.Bottom := Rect.Bottom-1;      HNsGrid1.Canvas.Pen.Color := clBlack;
      HNsGrid1.Canvas.Brush.color := clRed;
      HNsGrid1.Canvas.Brush.Style   :=   bsClear;
      HNsGrid1.Canvas.Pen.Width := 5;      HNsGrid1.Canvas.Rectangle(temp);    end;
end;但是出来的效果,如图所示
上和左的边框出来了,右和下的边框不知道为什么被遮挡住了。
大家遇到过没?
求解决办法,谢谢了

解决方案 »

  1.   

    请参考!procedure TForm1.AdvStringGrid1DrawCell(Sender: TObject; ACol,
      ARow: Integer; Rect: TRect; State: TGridDrawState);
    var
      s: string;
    begin
      s := AdvStringGrid1.Cells[ACol, ARow];
      if ARow mod 2 = 0 then
      begin
        AdvStringGrid1.Canvas.Font.Color := clBlack;
        AdvStringGrid1.Canvas.Brush.Color := $00FFCACA;
        AdvStringGrid1.Canvas.FillRect(Rect);
        AdvStringGrid1.Canvas.TextOut(Rect.Left, Rect.top, s);
      end;  if gdFocused in State then
      begin
        AdvStringGrid1.Canvas.Brush.Color := clYellow;
        AdvStringGrid1.Canvas.FillRect(Rect);
        AdvStringGrid1.Canvas.Pen.Width := 3;
        AdvStringGrid1.Canvas.Pen.Color := clBlue;
        AdvStringGrid1.Canvas.Pen.Style := psInsideFrame;
        AdvStringGrid1.Canvas.Rectangle(AdvStringGrid1.CellRect(ACol, ARow));
        AdvStringGrid1.Canvas.TextOut(Rect.Left + 5, Rect.top +3, s);
        AdvStringGrid1.Canvas.Brush.Color := clBlue;
        AdvStringGrid1.Canvas.DrawFocusRect(AdvStringGrid1.CellRect(ACol, ARow));
      end;
    end;
      

  2.   

    设置AdvStringGrid1一下属性:
    AdvStringGrid1.HideFocusRect:=true;
    AdvStringGrid1.SelectionColor:=clYellow;
    AdvStringGrid1.SelectionRectangle:=true;应该能满足你的需求的最简单的方式。