Программирование
Главная » 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