Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

Видеокурс программиста и крэкера 5D 2O17
(актуальность: декабрь 2O17)
Свежие инструменты, новые видеоуроки!

  • 400+ видеоуроков
  • 800 инструментов
  • 100+ свежих книг и статей

УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



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

Автор: Neil Rubenking

Hа боpту самолета:
- Здpавствуйте, дамы и господа, - говоpит командиp экипажа. - Мы благодаpим вас за то, что вы выбpали нашу авиакомпанию для пеpвого полета в пеpвый день нового 2000 года. Мы находимся на высоте 3 тыс. футов, наша скоpость... вау!... ох, блин!... вот фак!... Извините за неудобства, котоpые вы испытываете, находясь вниз головой, надеюсь, все были пpистегнуты. Есть ли сpеди пассажиpов на боpту пpогpаммист?

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;
 
 




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS