Q&A

  • DBGrid에서 내용을 오른쪽 정렬하고 싶어요?

DBGrid에 값이 나오거든요
그런데 전부다 왼쪽 정렬이더군요

그래서 RightXXXX로 전부다 바꿔줬는데
디자인모드(?)에서는 오른쪽 정렬로 해서
화면에 나오더군요 .

근데 실행모드에서 오른쪽 정렬했던 놈이
다시 왼쪽으로 옮겨져요.

디자인모드(?)와 실행모드에서 값이 다르게 표시되는군요..

히히.고수님 한수 가르쳐 주세요

"실행모드시 실제 저장된 값 오른쪽,가운데 정렬법.."
그럼.즐프
2  COMMENTS
  • Profile
    홍성락 2002.07.11 01:22
    hsr//////////////////////////////////////////////////
    아래 이벤트로 해보세요
    OnDrawColumnCell 또는 OnDrawDataCell에다 해도 되며
    고쳐쓰시면 됩니다.

    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
       with TDBGrid(Sender) do begin
          if DataCol=1 then begin //원하는 필드 우측정렬
             canvas.TextRect(Rect, Rect.Right - canvas.TextWidth(Fields[DataCol].AsString) - 3, Rect.Top, Fields[DataCol].AsString)
          end
          else if DataCol=2 then begin //원하는 필드 중앙
             Canvas.TextRect(Rect,(Rect.left+Rect.right) div 2, Rect.Top, Fields[DataCol].AsString);
          end
          else if DataCol=3 then begin //원하는 필드 폰트바꾸기
             Canvas.Font.Color:=clYellow;
             DefaultDrawColumnCell(Rect, DataCol, Column,[]);
          end;
       end;
    end;
  • Profile
    임시현 2002.07.11 19:06
    헤헤 ...
    잘 되는군요.. 감사합니다..히히

    근데 DBGrid에 문자가 들어가 있는 경우는 잘 됩니다.

    제가 DBGrid에 그림을 넣었더니 그림이 사라지는군요.
    아마
              canvas.TextRect(Rect, Rect.Right - canvas.TextWidth(Fields[DataCol].AsString) - 3, Rect.Top, Fields[DataCol].AsString)
    에서 문자열만 처리해서 그런것 같습니다

    그래서 DBGrid에는 그림과 문자가 같이 나올때 그림은 왼쪽에 있고
    글자는 오른쪽에 있고 하는 법입니다.히히 그냥 한번올립니다.

    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    var
    bmp : TBitmap;
    outrect : Trect;
    bmpwidth : integer;
    begin

        outrect := Rect;

        if Column.FieldName = 'SABUN' then begin //DB 컬럼이름이 사번.
            bmp := TBitmap.Create;
            bmp.LoadFromFile('c:DLeft.bmp'); // 그림파일 명

            bmpWidth := (Rect.Bottom - Rect.Top)*2 ;
            Outrect.Right := Rect.Left + bmpWidth;
            DBGrid1.Canvas.StretchDraw( Outrect , bmp);
            bmp.Free;

            Outrect := rect;
            Outrect.Left := Outrect.Left + bmpWidth;

            // 드로잉
            DBGrid1.DefaultDrawDataCell( outrect , column.Field , state);
        end;


        // 오른쪽 정렬을 하는 부분.
        with TDBGrid(Sender) do begin
          if DataCol=0 then begin //원하는 필드 우측정렬
    //       canvas.TextRect(Rect, Rect.Right - canvas.TextWidth(Fields[DataCol].AsString) - 3, Rect.Top, Fields[DataCol].AsString)
             canvas.TextRect(OutRect, OutRect.Right - canvas.TextWidth(Fields[DataCol].AsString) - 3, OutRect.Top, Fields[DataCol].AsString)

          end
          else if DataCol=1 then begin //원하는 필드 중앙
             Canvas.TextRect(Rect,(Rect.left+Rect.right) div 2, Rect.Top, Fields[DataCol].AsString);
          end
          else if DataCol=2 then begin //원하는 필드 폰트바꾸기
             Canvas.Font.Color:=clYellow;
             DefaultDrawColumnCell(Rect, DataCol, Column,[]);
          end;
       end;

    end;

    그럼 즐거운 프로그램 하세요..^^