Q&A

  • 스트링그리드 각셀에서 데이타 중앙정렬 시키는 법
스트링그리드 각셀에서 데이타 중앙정렬 시키는 법 좀 가르켜주세요?

1  COMMENTS
  • Profile
    초보 2001.10.16 00:28
    서수난 wrote:

    > 스트링그리드 각셀에서 데이타 중앙정렬 시키는 법 좀 가르켜주세요?



    이렇게 해보세요..근데 안될 수도 있습니다...^^



    procedure TForm1.StringGridDrawCell(Sender: TObject; Col,

    Row: Integer; Rect: TRect; State: TGridDrawState);

    var

    S: String;

    Old_Align: Word;

    begin

    //StringGrid 정렬 및 색넣기

    S := TStringGrid(Sender).Cells[Col, Row];

    if gdFixed in State then //고정셀 가운데 정렬

    begin

    Old_Align := SetTextAlign( TStringGrid(Sender).Canvas.Handle, TA_CENTER );

    TStringGrid(Sender).Canvas.FillRect(Rect);

    ExtTextOut( TStringGrid(Sender).Canvas.Handle, Rect.Left+(Rect.Right-Rect.Left) div 2,

    Rect.Top + 3, ETO_CLIPPED or ETO_OPAQUE, @Rect, PChar(S), Length(S), nil);

    SetTextAlign( TStringGrid(Sender).Canvas.Handle, Old_Align);

    Exit;

    end;



    with TStringGrid(Sender).Canvas do

    begin

    Brush.Color := $00C1E2EA;

    Font.Color := clBlack;



    if Col = 1 then

    Old_Align := SetTextAlign(Handle, TA_LEFT ); //좌

    if Col in [2,3,4,7] then

    Old_Align := SetTextAlign(Handle, TA_CENTER ); //중

    if Col in [5,6] then

    Old_Align := SetTextAlign(Handle, TA_RIGHT ); //우



    FillRect(Rect);



    //셀별로...

    if Col = 1 then

    ExtTextOut( Handle, Rect.Left + 2, Rect.Top + 2, ETO_CLIPPED or

    ETO_OPAQUE, @Rect, PChar(S), Length(S), nil);

    if Col in [2,3,4,7] then

    ExtTextOut( Handle, Rect.Left+(Rect.Right-Rect.Left) div 2, Rect.Top + 2,

    ETO_CLIPPED or ETO_OPAQUE, @Rect, PChar(S), Length(S), nil);

    if Col in [5,6] then

    ExtTextOut( Handle, Rect.Right - 2, Rect.Top + 2, ETO_CLIPPED or

    ETO_OPAQUE, @Rect, PChar(S), Length(S), nil);

    SetTextAlign(Handle, Old_Align);

    end;

    end;





    //무조건 전체를 가운데로 하고 싶다면..

    //Row 수 만큼...

    Old_Align := SetTextAlign( TStringGrid(Sender).Canvas.Handle, TA_CENTER );

    TStringGrid(Sender).Canvas.FillRect(Rect);

    ExtTextOut( TStringGrid(Sender).Canvas.Handle, Rect.Left+(Rect.Right-Rect.Left)

    div 2, Rect.Top + 3, ETO_CLIPPED or ETO_OPAQUE, @Rect, PChar(S), Length(S), nil);

    SetTextAlign( TStringGrid(Sender).Canvas.Handle, Old_Align);

    //하면되지 않을까....^^





    SetTextAlign()와 ExtTextOut()를 help에서 참고하세요..