Q&A

  • 스트링그리드에 색을 넣은부분은 정렬되는 소스가 먹지 않습니다.
안녕하세요.

스트링그리드에서 각 행의 Data들을 오른쪽 정렬시키고,

2행마다 색을 넣은 것 까지는 잘 되었는데요,

2행마다 색을 넣은 부분은 오른쪽 정렬이 되지 않습니다.

게시판을 다 뒤져봐도 관련해답을 찾을수 없어서 이렇게 글을 올립니다.

고수님들 ,  알려주세요.

아래는 소스입니다.

procedure TfrmMW0010.StringGrid2DrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
var
...
begin

if ACol = 2 then    // 오른쪽 정렬
begin
   with TStringGrid( Sender ).Canvas do
   begin

      Str_Len := TextWidth( TStringGrid( Sender ).Cells[ 2, ARow ] );
      TextRect( Rect, Rect.Right - Str_Len, Rect.Top + 2, TStringGrid( Sender ).Cells[ 2, ARow ] );
   end;
end;

//////////////////////////////////////// 2 칸 마다 색 넣기 //////////////////////////////////////////
   with StringGrid2 do
   begin
      for i := 1 to rowcount do
      begin
          for j := 0 to 11 do
          begin
              if ( i mod 2 = 0) then
              begin
                  Rect := CellRect(j, i);
                  Canvas.Brush.Color := clcream;
                  Canvas.FillRect(Rect);
                  canvas.TextRect(Rect, Rect.Left + i, Rect.Top + i, cells[j, i]);
              end;
          end;
      end;
   end;

/////////////////////////////////////////////////////////////////////////////////////////////////////
1  COMMENTS
  • Profile
    최석기 2002.04.02 21:24
    TextRect 함수의 쓰임을 잘 이해하지 못하셨나보네요..

    소스를 가져다 쓰시면 소스를 이해를 하셔야 자기 것이 되죠...

    TextRect 함수는 Cavas의 해당 Rect에 글짜를 출력하는 기능을 가지고 있어요..

    처음

    if ACol = 2 then    // 오른쪽 정렬

    이 부분 TextRect에서 오른쪽 정렬을 한 후 색깔을 집어 넣으면서

    다시 한번 TextRect 함수를 사용하므로 먼저 그린 텍스트가 지워지게 됩니다.

    그러니 정렬하는 부분의 코딩을 색깔을 집어 넣고 텍스트를 출력해 주시면 될꺼예요..

    procedure TfrmMW0010.StringGrid2DrawCell(Sender: TObject; ACol,
      ARow: Integer; Rect: TRect; State: TGridDrawState);
    var
    ...
    begin
    //////////////////////////////////////// 2 칸 마다 색 넣기 //////////////////////////////////////////
       with StringGrid2 do
       begin
          for i := 1 to rowcount do
          begin
              for j := 0 to 11 do
              begin
                  if ( i mod 2 = 0) then
                  begin
                      Rect := CellRect(j, i);
                      Canvas.Brush.Color := clcream;
                      Canvas.FillRect(Rect);
                  end;
                  
                  if ACol = 2 then    // 오른쪽 정렬
                  begin
                    with TStringGrid( Sender ).Canvas do
                    begin
                      Str_Len := canvas.TextWidth( TStringGrid( Sender ).Cells[ 2, ARow ] );
                      canvas.TextRect( Rect, Rect.Right - Str_Len, Rect.Top + 2, TStringGrid( Sender ).Cells[ 2, ARow ] );
                    end;
                  end
                  else begin
                    canvas.TextRect(Rect, Rect.Left + i, Rect.Top + i, cells[j, i]);
                  end;
              end;
          end;
       end;