Q&A

  • 질문을 자주하네요.. DBGrid 셀 내용 가운데 정렬은?
어제 DBGRID의 특정셀색상을 도움을 주셔서 성공을 했는데.. 셀 안의 내용들이 Rect.Left+2 덕분에 계속 좌측정렬만 되는데.. 모두 Center로 정렬 할수 있는 간단한 방법은 없을까요?

아래는 어제 만들어 주신 소스입니다.. 수정좀 부탁드려요...
=====================================================================

procedure TForm2.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
   with TDBGrid(Sender).Canvas do begin
       if (Column.FieldName = 'percent') then
         begin
           if column.Field.AsInteger > 80 then
             begin
               Brush.Color := clBlue;
               Font.Color := clBlack;
             end
           else if column.Field.AsInteger > 50 then
             begin
               Brush.Color := clYellow;
               Font.Color := clBlack;
             end
           else
             begin
               Brush.Color := clRed;
               Font.Color := clBlack;
             end;
         end;

       if (gdFocused in State) or (gdSelected in State) then begin
           Brush.Color := clHighlight;
           Font.Color := clHighlightText;
       end;

// 이 아래 부분을 어찌 하면 될것 같은데.. T.T

       FillRect(Rect);
       TextOut(Rect.Left+2,Rect.Top+2,Column.Field.AsString);
       Brush.Style := bsSolid;
       Brush.Color := clWindow;
   end;
end;

감사합니다...
4  COMMENTS
  • Profile
    박원용 2004.10.22 21:51

    하얀까마귀님... 과 소나기님 그리고 닐리리님 ... 답변주셔서 감사하구요...

    하얀까마귀님이 말씀하신 다른셀의 색상표시하는것도.. 쓰고요..
    해당셀에 표시하는것도 쓰게 되었답니다....

    정말 감사드려요.. 또 모르는거 있으면 질문드릴께요...^^;
  • Profile
    하얀까마귀 2004.10.22 19:51
    안녕하세요 하얀까마귀 입니다
    어제 답변한게 생각나네요. ㅎㅎ 전어제 색상표시하는 셀이 다르다고 봤는데
    아닌모양이군요. ㅎㅎ

    질문하신 내용은
    TextOut(Rect.Left+2,Rect.Top+2,Column.Field.AsString);
    이놈은 애석하게도 정렬이 없습니다. 내부적으로는 있는데...
    left, right만 되구요 가운데 정렬은 없습니다.
    인위적으로 계산을 하셔서..

    txtWid := TextWidth(Column.Field.AsString);
    CellWidth := Rect.right - Rect.Left;

    if CellWidth > txtWid then
    begin
      aLeft := Rect.Left + (( CellWidth - txtWid) div 2 )
    end else begin
      aleft := Rect.Left;
    end;
    TextOut(aLeft.Top+2,Column.Field.AsString);

    요로코롬 하시던지요. 음.. 혹 오타 있을지 모르니. ㅎㅎ 복사해서
    쓰진 마세요. ^^

    저거 말고도 DrawText 라는 함수도 있구요..
    둘중에 아무거나 쓰시면 되겠네요.. DrawText는 플레그가 있어서
    상하정렬도 가능합니다. 물론 저것도 상하값도 계산해서 정렬하시면 되겟죠?
    그럼..


  • Profile
    nilriri™ 2004.10.22 19:35
    가운데 정렬    로 검색해 보세요

    스트링그리드 관련 가운데 정렬 답변들을 참고하시면 원하는 결과를
    얻는데 도움을 받을수 있을겁니다.

    그럼.


    팁 게시판에도 관련 정보가 많네요...^^

          iY := Rect.Top + 4;

          case DataCol of
             0 : begin //right
                iX := Rect.Right - 3;
                SetTextAlign(Handle, TA_RIGHT);
                TextRect(Rect, iX, iY, Column.Field.AsString);
             end;
             2..5 : begin //center
                iX := (Rect.Left + Rect.Right) div 2;
                SetTextAlign(Handle, TA_CENTER);
                TextRect(Rect, iX, iY, Column.Field.AsString);
             end;
             1,6 : begin //left
                iX := Rect.Left + 3;
                SetTextAlign(Handle, TA_LEFT);
                TextRect(Rect, iX, iY, Column.Field.AsString);
             end;
          end;

  • Profile
    석주현 2004.10.22 19:51
    그냥 소스로 대신합니다.

    회사라 ^^ 그럼  아시리라고 생각을 ^^
    =====================================================================

           FillRect(Rect);
           tmpwidth := TextWidth(Column.Field.AsString);
           tmpPos := ((Rect.Right - Rect.Left) - tmpwidth) div 2;
           TextOut(Rect.Left+tmppos,Rect.Top+2,Column.Field.AsString);
           Brush.Style := bsSolid;
           Brush.Color := clWindow;
    • 신석기
    • 2004.10.25 19:03
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 서기원
      2004.12.01 22:38
      http://www.madchick.com/Default.asp?Page=2&SubPage=2# 에 가셔서 "ActiveX 데모 보기" 해보시면 감이 ...
    • 석주현
      2004.10.25 18:08
      stdCTRL.pas 의 소스를 보면 아실 수 있을 것 같네요. ListBox 같은 경우를 보면 TStrings 와 TString...
    • 최용일
      2004.10.25 18:05
      안녕하세요. 최용일입니다. 에러에 나온것처럼.... TStrings는 추상클래스입니다. 하는일이 거의 없...
    • Andrew Choi
    • 2004.10.25 00:50
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2004.10.25 17:59
      안녕하세요. 최용일입니다. 회원인증을 받으셔야 합니다. 가입하실때 적으신 이메일로 인증메일이 가...
    • 유정헌
    • 2004.10.23 23:25
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 진광진
      2004.10.30 00:52
      질문내용을 봐서 TCP를 사용해서 Network쪽에 패킷이 유실되는것 같지는 않습니다. TCP는 그 데이터의 전송...
    • 델사랑
    • 2004.10.23 22:07
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 파멸의슬픔
      2004.10.23 22:26
      스트링그리드 옵션에서 goRangeSelect := False 해보세요...
    • 파멸의슬픔
      2004.10.23 22:29
      업데이트로 검색하시면 제가 올린 샘플 자료 받으실 수 있습니다...
    • 가딘
      2004.10.23 20:38
      저도 그런 경험을 예전에 한것 같은데 아마 도스프로그램 실행 할때 명령프로프트의 visible 을 설정해서 ...
    • 이규하
    • 2004.10.23 20:26
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 착한천사
      2004.10.25 02:04
      착한천사 김경록입니다.. 오라클 버젼을 먼저 올려주셨으면 좋았다고 생각됩니다.. 답은 아니겠지만.. ...
    • 이규하
      2004.10.26 00:12
      안녕하세요 김경록님 ... 오라클 버전은 9i 9.2.1 이구요. 델파이는 7 ent 입니다. Ora client 도 9.2.1...
    • 착한천사
      2004.10.27 06:03
      흠.. 알 수 없는 일이군여.. 일단, 저도 Oracle 9i를 사용하는 관계로 테스트를 해 보았습니다.. 테스트 ...
    • 가딘
    • 2004.10.23 19:41
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 브라운
    • 2004.10.23 07:50
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 정찬희
      2004.10.24 08:07
      두번째 방법은 모르겠구요... 첫번째 방법은 제가 팁게시판에 올려놓았습니다...
    • 최용일
      2004.10.23 03:24
      안녕하세요. 최용일입니다. class reference를 써서 폼의 타입을 저장하세요. var   &nbs...
    • 쁜지아빠
      2004.10.23 18:03
      아 저런 방법이 있었네요~~!!! 정말 감사합니다.!!! 최용일님 만세~~~~~!!! ^^*
    • 애국자
    • 2004.10.22 23:55
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이규하
      2004.10.26 00:19
      첫번째 방법 ... 1 번 DBGrid 에 연결 되어 있는 TQuery 에서요. AfterScroll 에다가 2 번 DBGrid 에 ...
    • 김지선
    • 2004.10.22 23:41
    • 1 COMMENTS
    • /
    • 0 LIKES
    • ㉳㉥ㅗ㉣ㅐ㉧ㅛ
      2004.10.25 18:35
      TDataBase를 사용하면 됩니다.... OnLogin 이벤트에...    LoginParams.Values['USER ...
    • 공왕주
    • 2004.10.22 22:35
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 이정은
    • 2004.10.22 19:57
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 권태훈
      2004.10.22 22:48
      있습니다. 통신서버의 설정이 어떤 방식인지 알아야 합니다. 일반적으로 리눅스에 NAT(ipchain)설정...
    • 김춘경
      2004.10.22 21:53
      가능합니다. Indy UDP 컴포넌트를 써서 브로드캐스팅으로 a server의 IP 주소를 알아낸 다음에 그 주소...
    • 최용일
      2004.10.22 22:31
      안녕하세요. 최용일입니다. 브로드캐스팅으론 불가능합니다. 이론상으론 님 말씀처럼 가능합니만... ...
    • 김춘경
      2004.10.23 01:16
      ^^ 질문자의 질문이 간단해서 간단하게 답한겁니다. 제 답변이 너무 짧아서 문제가 되는군요...^^ 이...
    • 최용일
      2004.10.23 03:05
      안녕하세요. 최용일입니다. 제 답변에 기분이 상하셨다면 죄송합니다... ^^ 질문을 해석하는 관점의 ...
    • 박원용
    • 2004.10.22 17:49
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 박원용
      2004.10.22 21:51
      하얀까마귀님... 과 소나기님 그리고 닐리리님 ... 답변주셔서 감사하구요... 하얀까마귀님이 말씀하...
    • 하얀까마귀
      2004.10.22 19:51
      안녕하세요 하얀까마귀 입니다 어제 답변한게 생각나네요. ㅎㅎ 전어제 색상표시하는 셀이 다르다고 봤는...
    • nilriri™
      2004.10.22 19:35
      가운데 정렬    로 검색해 보세요 스트링그리드 관련 가운데 정렬 답변들을 참고하...
    • 석주현
      2004.10.22 19:51
      그냥 소스로 대신합니다. 회사라 ^^ 그럼  아시리라고 생각을 ^^ =========================...