Q&A

  • DBgrid 셀에 막대그래프 넣을수 있을까요?
안녕하세요..!!
정말 프로그램은 한도 끝도 없군요..
지난번 질문드렸던 디비그리드 퍼센트 셀 옆에..
퍼센트 비율에 따른 가로 막대그래프를 셀에 추가가 가능할지요?


   percent        graph
   -----------------------    
   100%            [ ||||||||||] (녹색그래프)
   70%             [||||||||] (노란색 그래프)
   50%             [||||||] (파란색 그래프)

위와 같이 dbgrid 퍼센트 필드에 따라서 그래프 필드에 표시가 가능할까요?
혹시 괜찮은 예문이나 소스라도 가지고 계시다면... 부탁드려요..
매번 공짜로 얻어가는것 같아서 정말 죄송하네요.... 감사합니다..



2  COMMENTS
  • Profile
    석주현 2004.10.26 17:53
    음 제가 그냥 예제에 있는 디비로 해본거라 그것만 바꾸면 아마 잘 될꺼 예요
    모양은 좀더 다듬을 수 있긴 있을 텐데 -_-;;
    그럼 소스 뿌립니다.. ^^
    =====================================================================

    procedure TForm2.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    var
      tmpRect : TRect;
    begin
      with TDBGrid(Sender).Canvas do
        begin
           Brush.Style := bsSolid;
           Brush.Color := clWindow;
           FillRect(Rect);
           tmpRect := Rect;

           if (Column.FieldName = 'Qty') then
             begin
               inc(tmpRect.Top,2);
               dec(tmpRect.Bottom,2);
               if column.Field.AsInteger < 3 then
                 begin
                   Brush.Color := clBlue;
                   tmpRect.Right := Rect.Left + round((Rect.Right - Rect.Left) * 0.3);
                 end
               else if column.Field.AsInteger < 5 then
                 begin
                   Brush.Color := clYellow;
                   tmpRect.Right := Rect.Left + round((Rect.Right - Rect.Left) * 0.5);
                 end
               else
                 begin
                   Brush.Color := clRed;
                   tmpRect.Right := Rect.Left + round((Rect.Right - Rect.Left) * 0.8);
                 end;
             end;

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

           if (Column.FieldName = 'Qty') then
             begin
               Brush.Color := clBlack;
               FrameRect(tmpRect);
             end
           else
             begin
               TextOut(Rect.Left+2,Rect.Top+2,Column.Field.AsString);
             end;
           Brush.Style := bsSolid;
           Brush.Color := clWindow;
       end;
    end;
  • Profile
    박원용 2004.10.26 20:27

    하하~~ 정말기분좋습니다.. 감사하구요..
    수고하세요~~^^;