32 Урока Borland Delphi



             

Урок 31 - часть 10


в декларации класса TDBGrid в разделы public и published. Лучше всего создать новый класс - наследника от TDBGrid:

TNewDBGrid = class(TDBGrid)

public

{прямоугольник для указанной ячейки}

function CellRect(ARow, AСol : Integer) : TRect;

{текущий столбец}

property Col;

{текущая строка}

property Row;

{счетчик столбцов}

property ColCount;

{ширина столбцов}

property ColWidths;

{счетчик строк}

property RowCount;

{высота строк}

property RowHeights;

published

{количество “зафиксированных” столбцов}

property FixedCols;

{обработчики событий от мыши}

property OnClick;

property OnMouseMove;

property OnMouseUp;

property OnMouseDown;

end;

. . .

function TNewDBGrid.CellRect(ARow, Acol : Integer) : TRect;

begin

Result:= inherited CellRect(ARow, ACol);

end;
 
 

В примере приведены не все возможные методы и свойства для публикации. Некоторые могут быть полезны. Информацию об этих свойствах и методах можно подчерпнуть из исходных текстов библиотеки и в пункте меню среды Delphi “View|Browser”. Но некоторые свойства, вроде FixedRows, работают не так как ожидается, поскольку их значения переопределяется внутри объекта.

II. Вертикальный ScrollBar.

Обычно возникает вопрос, почему позиция движка в вертикальном ScrollBar’е не соответствует позиции текущей записи в таблице. Ответ частично был дан в предыдущем пункте: не всегда можно говорить о номере текущей записи. Но при желании можно заставить ScrollBar отображать позицию текущей записи в таблице, разумеется, только в случае локальных данных. Например так:
 
 

procedure TForm1.DataSource1DataChange(Sender: TObject;

Field: TField);

begin

if Table1.State = dsBrowse then begin

SetScrollRange(DBGrid1.Handle, SB_VERT, 0,

Table1.RecordCount-1, False);

SetScrollPos(DBGrid1.Handle, SB_VERT, GetRecNo-1, False);

end;

end;

Процедура GetRecNo (приведена в предыдущем пункте) возвращает номер записи. Недостаток данного способа состоит в том, что при переходе на другую запись движок будет перерисовываться два раза, один раз в процедуре Paint, а второй раз в OnDataChange.




Содержание  Назад  Вперед