Чтение онлайн

ЖАНРЫ

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин

Шрифт:

P.S. Пока вы ковыряетесь в DBGRIDS.PAS: найдите и замените TitleColor на FixedColor в TCustomDBGrid.Create и в TCustomDBGrid.DrawCell. Значение свойства FixedColor влияет на показ заголовков колонок, и они будут выводится как и ожидалось.

– Reinhard Kalinke 

TDBGrid Lookup-поле в D2

Delphi 2 

1. Как создать lookup-поле в TDBGrid для Delphi 2.0

2. Разместите на форме 2 компонента TTable, 1 компонент TDataSource и 1 – TDBGrid.

 • Подключите Table1 – к DataSource1 – к DBGrid1

 • DataSource1.DataSet = Table1

 • DBGrid1.DataSource = DataSource1

3.

Установка Table1

 • Table1.Database = DBDemos

 • Table1.TableName = Customer

 • Table1.Active = True

4. Установка Table2

 • Table2.Database = DBDemos

 • Table2.TableName = Orders

 • Table2.Active = True

5. Добавьте все поля для Table1, используя Fields Editor (редактор полей):

 • Дважды щелкните на Table1

 • Нажмите правую кнопку мыши в редакторе полей

 • Выберите пункт Add New Fields. Добавьте их все.

6. Добавьте новое поле для Table1.

 • Нажмите правую кнопку мыши в редакторе полей и выберите пункт «New Field».

7. Определите следующие параметры для вновь добавленного поля:

 • Name: Bob

 • Type: String

 • Size: 30

 • Select Lookup

 • Key Fields: CustNo – Поле в Table1 для хранения значения

 • DataSet: Table2 – Здесь устанавливается табличный lookup

 • LookUpKeys: CustNo – Данный ключ копируется в KeyField

 • Result Field: OrderNo – Значение для показа пользователю в выпадающем списке

8. Запустите приложение

Как зафиксировать один или несколько столбцов в TDBGrid с возможностью навигации по этим столбцам?

Nomadic советует:

Это маленькая вставка в Ваш наследник от TCustomDBGrid, которая решает данную задачу.

// DBGRIDEX.PAS

// ----------------------------------------------------------------------------

destructor TDbGridEx.Destroy;

begin

 _HideColumnsValues.Free;_HideColumns.Free;

 inherited Destroy;

end;

// ----------------------------------------------------------------------------

constructor TDbGridEx.Create(Component : TComponent);

begin

 inherited Create(Component);

 FFreezeCols := ?;

 _HideColumnsValues := TList.Create;

 _HideColumns := TList.Create;

end;

// ----------------------------------------------------------------------------

procedure TDbGridEx.KeyDown(var Key: Word; Shift: TShiftState);

begin

 if (Key = VK_LEFT) then ColBeforeEnter(-1);

 if (Key = VK_RIGHT) then ColBeforeEnter(1);

 inherited;

end;

// ----------------------------------------------------------------------------

procedure TDbGridEx.SetFreezeColor(AColor : TColor);

begin

 InvalidateRow(0);

end;

// ----------------------------------------------------------------------------

procedure TDbGridEx.SetFreezeCols(AFreezeCols : Integer);

begin

 FFreezeCols := AFreezeCols;

 InvalidateRow(0);

end;

// ----------------------------------------------------------------------------

procedure TDbGridEx.ColEnter;

begin

 ColBeforeEnter(0);

 if Assigned(OnColEnter) then OnColEnter(Self);

end;

// ----------------------------------------------------------------------------

procedure TDbGridEx.ColBeforeEnter(ADelta : Integer);

var nIndex : Integer;

 function ReadWidth : Integer;

 var i : Integer;

 begin

i := _HideColumns.IndexOf(Columns[nIndex]);

if i = -1 then result := 120

else result := Integer(_HideColumnsValues[i]);

 end;

 procedure SaveWidth;

 var i : Integer;

 begin

i := _HideColumns.IndexOf(Columns[nIndex]);

if i <> - 1 then begin

_HideColumnsValues[i] := Pointer(Columns[nIndex].Width);

end else begin

Поделиться с друзьями: