Q&A

  • DBgrid 셀한개만 조건에따라서 깜박이기?<부탁>
안녕하세요... dbgird관련해서.. 계속해서 질문을 하게되네요..
우리 오너가 욕심이 많아서 흐흐~~ 그냥 네트웍장비만 관리하던
사람한테.. 간단한 프로그램이라며 만들어 보라고 하더니..
이제는 요구하는것들이 너무 많네요... T.T

질문은 지난번에.. 특정조건에 따라서 해당필드(또는 바로옆필드)
색깔 표시 및 그래프로 dbgrid에 표시하는것 까지 가르쳐 주셨는데..
가르쳐 주신것으로 구현한것은 이렇답니다..

[예]

부서        최초보유     소모     현보유        비율        그래프
-------------------------------------------------------------
인사과      110             60         50              40%        노란색 그래프
홍보과      210             20       190            90%          파랜색 그래프
관리과      310             300      10              10%          노란색 그래프


이런식으로 바로 옆필드에 .. 그래프로 비율에 따른 색상으로 표시를
했는데.. 비율값이 50% 이하일때 그래프 색은 노란색이거든요..
이것을 깜박이게 할수는 없을까요?..... 경고음도 들어가면 좋구요..

정말 자꾸 질문하게 되서..  죄송스럽네요.. 바쁘실텐데..
그래두... 한번만더.. 답변좀 부탁드려요.. 아래는 소나기님께서.
지난번 답변해주신 자료입니당...

=====================================================================

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;


0  COMMENTS