Если у вас D2, вы можете воспользоваться свойством Lookup. Для этого выберите в контекстном меню объекта table редактор полей (fields editor). Затем для добавления нового поля нажмите
Добавление к TDBGrid события OnClick
Delphi 1
TGroothuisGrid = class {!}
published
property OnClick;
end;
Это все! OnClick уже объявлен в TControl как защищенное свойство. Все, что вы должны сделать, это опубликовать это свойство в компоненте-наследнике, зарегистрировать его (смотри гл. 8 Руководства по созданию компонентов, Component Writer's Guide) и использовать взамен TDBGrid.
Позиция ячейки в TDBGrid
Delphi 1
В TCustomGrid определен метод CellRect, который, к сожалению, защищен. Это означает, что даный метод доступен только для TCustomGrid и его наследников. Но все-таки существует немного мудреное решение вызова данного метода:
type TMyDBGrid = class(TDBGrid)
public
function CellRect(ACol, ARow: Longint): TRect;
end;
function TMyDBGrid.CellRect(ACol, ARow: Longint): TRect;
begin
Result := inherited CellRect(ACol, ARow);
end;
Вы можете сделать приведение типа вашего DBGrid к TMyDBGrid (это возможно, поскольку CellRect статический метод) и вызвать CellRect:
Rectangle := TMyDBGrid(SomeDBGrid).CellRect(SomeColumn, SomeRow);
procedure TfmLoadIn.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn;State: TGridDrawState);
const Disp = 2; //Правильно выравниваем компонент
begin
inherited;
if (gdFocused in State) then begin
if (Column.FieldName = 'TYPEDescription') then begin
dlTYPEDescription.Left := Rect.Left + DBGrid1.Left + Disp;
dlTYPEDescription.Top := Rect.Top + DBGrid1.top + Disp;
dlTYPEDescription.Width := Rect.Right – Rect.Left;
dlTYPEDescription.Height := Rect.Bottom – Rect.Top;
dlTYPEDescription.Visible := True;
end;
end;
end;
Dbgrid с цветными ячейками VI
Delphi 1
Установите defaultDrawing в false, и создайте собственный onDrawDataCell, в котором и задавайте нужный вам цвет ячеек. Примерно так:
procedure Tform1.DBgrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);
begin
{ выберите цвет для текста (font.color) и фона (brush.color) }
if (field = table1Status) then begin
{ белый на красном }
DBgrid1.canvas.font.color := clWhite;
DBgrid1.canvas.brush.color := clRed;
end else begin
{ черное на белом }
DBgrid1.canvas.brush.color := clWhite;
DBgrid1.canvas.font.color := clBlack;
end;
{ рисуем ячейку }
DBgrid1.canvas.textrect(rect, rect.left+2, rect.top+2, field.asString);
end;
procedure TMainForm.CharGridDrawCell(Sender: TObject; Col, Row: Longint; Rect: TRect; State: TGridDrawState);
var TheText: string;
begin
TheText := CharGrid.Cells[Col, Row];
with CharGrid.Canvas do begin
{ Определяем цвет фона в зависимости от состояния ячейки: }
if gdFocused in State then Brush.Color := clYellow {Цвет ячейки с фокусом}
else if gdSelected in State then Brush.Color := clOlive {Цвет выбранной ячейки}