Программы   Загрузка Партнерство   О компании Контакты  
 
                    
  Карта Сайта   
   





DBGrid с цветными ячейками 3

Автор: Neil Rubenking


C цветом ячейки DBGrid не так все просто, ведь в Delphi 1.0 разукрасить ячейку можно в обработчике события OnDrawDataCell, тогда как в Delphi 2.0 вам придется прибегнуть к событию OnDrawColumnCell. Для того чтобы создать код, который бы работал в ОБОИХ версих Delphi, вам необходимо прибегнуть к механизму условной компиляции, с помощью которого вы можете СКРЫТЬ обработчик OnDrawColumnCell в Delphi 1.0 и ВКЛЮЧИТЬ его в Delphi 2.0. Вот пример, в котором все ячейки строки рисуются красным, если колонка 'Preferred' содержит 'True':


...
private
{ Private declarations }
{$IFDEF Win32}

procedure DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
{$ENDIF}
  procedure DrawField(const Value: string; const Rect: TRect;
    vCanvas: TCanvas; vFont: TFont; vAlignment: TAlignment);
    ...
      procedure TForm1.DrawField(const Value: string; const Rect: TRect;
      vCanvas: TCanvas; vFont: TFont; vAlignment: TAlignment);
    var
      X: Integer;
    begin
      vCanvas.Font := vFont;
      vCanvas.Font.Color := clRed;
      vCanvas.Font.Style := vCanvas.Font.Style + [fsUnderline];
      case vAlignment of
        taRightJustify:
          begin
            SetTextAlign(vCanvas.Handle, TA_RIGHT);
            X := Rect.Right - 2;
          end;
        taLeftJustify:
          begin
            SetTextAlign(vCanvas.Handle, TA_LEFT);
            X := Rect.Left + 2;
          end;
        taCenter:
          begin
            SetTextAlign(vCanvas.Handle, TA_CENTER);
            X := (Rect.Right + Rect.Left) div 2;
          end;
      end;
      vCanvas.TextRect(Rect, X, Rect.Top + 2, Value);
      SetTextAlign(vCanvas.Handle, TA_LEFT);
    end;

    procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect:
      TRect; Field: TField; State: TGridDrawState);
    begin
      with Sender as TDBGrid, DataSource.DataSet do
      begin
        if FieldByName('Preferred').AsString <> 'True' then
          Exit;
        DrawField(Field.DisplayText, Rect, Canvas, Canvas.Font,
          Field.Alignment);
      end;
    end;

  {$IFDEF Win32}
    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    begin
      with Sender as TDBGrid, DataSource.DataSet do
      begin
        if FieldByName('Preferred').AsString <> 'True' then
          Exit;
        DrawField(Column.Field.DisplayText, Rect, Canvas,
          Column.Font, Column.Alignment);
      end;
    end;
  {$ENDIF}

    procedure TForm1.FormCreate(Sender: TObject);
    begin
  {$IFDEF Win32}
      DBGrid1.OnDrawDataCell := nil;
      DBGrid1.OnDrawColumnCell := DBGrid1DrawColumnCell;
  {$ENDIF}
    end;


           




Программы  |  Загрузка  |  Партнерство  |  О компании  |  Контакты

Copyright © LSD Software 2006 - 2011