Суббота, 23.06.2018, 07:01
Приветствую Вас Гость
Меню сайта


Копилка для дальнейшего развития ресурса.
 
Форма входа
Интересное
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Программирование на Delphi.

Программирование

Главная » FAQ » Базы данных


Разместите и настройте необходимые компоненты для работы с Вашей БД и в обработчике нужного вам события напишите:

var
  i, j, value_width, t: integer;
  koef: byte;
begin
  //Отключаем автопрорисовку DBGrig
  DBGrid1.DefaultDrawing:=false;
  //Задаем коэффициент длины
  koef:=10;
  //Обрабатываем все колонки
  for i:=0 to DBGrid1.Columns.Count-1 do
   begin
  //Задаем начальную длину
    value_width:=0;
    //Пока не проверили все записи
    while not (ADOTable1.Eof) do
     begin
      //Получаем длину очередной записи
      t:=Length(ADOTable1.Fields[i].Value);
      //Если полученная длина больше чем самая большая, то меняем значение value_width
      if value_width<t then value_width:=t;
      //Переходим к следующей записи
      ADOTable1.Next;
     end;
    //Устанавливаем для колонки длину, равную самой длинной записи, помноженный на заданный коэффициент
    DBGrid1.Columns[i].Width:=value_width*koef;
    //Возвращаемся к первой записи
    ADOTable1.First;
   end;
  //Включаем автопрорисовку DBGrid
  DBGrid1.DefaultDrawing:=true;
end;


Разместите на форме необходимые компоненты для работы с БД и настройте их. В свойстве компонента TDBGrid DefaultDrawing установите false, дальше в обработчике событий OnDrawColumnCell напишите:

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
 //Определяем, каким цветом будем закрашивать
 if TDBGrid(Sender).DataSource.DataSet.RecNo mod 2 = 1
 then
   TDBGrid(Sender).Canvas.Brush.Color:=clBlue
 else
   TDBGrid(Sender).Canvas.Brush.Color:=clGreen;

 //Если это выбранная запись, то ее будем рисовать другим цветом
 if  (gdSelected in State)
 then
  begin
   TDBGrid(Sender).Canvas.Brush.Color:= clHighLight;
      TDBGrid(Sender).Canvas.Font.Color := clHighLightText;
  end;

 with  TDBGrid(Sender).Canvas do
 begin
  //Рисуем
    FillRect(Rect);
  //Выводим текст
     TextOut(Rect.Left+2,Rect.Top+2,Column.Field.Text);
 end;
end;


Ставим запрет на нужно Вам поле:

var
  i: integer;
begin
 for i:=0 to DBGrid1.DataSource.DataSet.Fields.Count-1 do
  if DBGrid1.DataSource.DataSet.Fields[i].DisplayName='НАЗВАНИЕ ПОЛЯ ДЛЯ ЗАПРЕТА' then
      DBGrid1.DataSource.DataSet.Fields[i].ReadOnly:=TRUE;
end;


Модифицируем стандартный компонент. Далее выберите пункт Component| Install Component и установите новый компонент. Код нового модуля:

unit ScrollGrid;

interface

uses
  Math,
  Windows, Messages, SysUtils, Classes, Controls, Grids, DBGrids;

type
  //Создаем потомка от стандартного компонента DBGrid
  TScrollGrid = class(TDBGrid)
  private
    procedure WMWheel(var Msg:TWMMouseWheel); message WM_MOUSEWHEEL;
    { Private declarations }
  end;

procedure Register;

implementation

//Регистрируем новый компонент в палитре Delphi
procedure Register;
begin
  RegisterComponents('Samples', [TScrollGrid]);
end;

procedure TScrollGrid.WMWheel(var Msg: TWMMouseWheel);
begin
  DataSource.DataSet.MoveBy(-sign(Msg.WheelDelta));
end;

end.


рrocedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  bmpImage: tBitmap;
  intX, intY: Integer;
begin
  if DataSource1.DataSet.RecNo > 0 then
  begin
    if column.FieldName = 'COUNTRY' then
      with DBGrid1.Canvas do
      begin
        fillRect(rect);
        bmpImage := tBitmap.Create;
        try
          if DBGrid1.DataSource.DataSet.FieldByName('COUNTRY').AsInteger = 0 then
            bmpImage.Assign(image0.Picture.Bitmap);

          if DBGrid1.DataSource.DataSet.FieldByName('COUNTRY').AsInteger = 1 then
            bmpImage.Assign(image1.Picture.Bitmap);

          intX := ((rect.Right - rect.Left) div 2) -
            (bmpImage.Width div 2);

          intY := ((rect.Bottom - rect.Top) div 2) -
            (bmpImage.Height div 2);
          draw(rect.Left + intX, rect.Top + intY, bmpImage);
        finally
          bmpimage.Free;
        end;
      end;
  end;
end;

1-5 6-6