Советы по Delphi


Работа с несколькими записями


DBGrid не отображает графические поля. Тем не менее вы можете решить эту задачу программным путем. Один из методов заключается в следующем: на форме располагаются несколько компонентов TTable со ссылкой на одну и ту же таблицу, и несколько компонентов DBImage, связанные с компонентами TTable. Основная идея заключается в синхронизации позиции курсора, управляемым пользователем. Для этого мы применим компонент DBNavigator, который заботится о перемещении в первую таблицу и запишем код для обработчика события навигатора OnClick для позиционирования указателя записи для других объектов. Для воссоздания примера выполните следующее:

  1. Расположите на форме три компонента TTable с именами Table1, Table2, и Table3 соответственно
  2. Расположите на форме три компонента DataSources и свяжите их с Table1..Table3
  3. Расположите на форме три компонента DBImage и свяжите их с DataSource1..DataSource3, все они будут иметь одно и тоже значение свойства DataField.
  4. Расположите на форме компонент DBNavigator и свяжите его с DataSource1.
  5. Создайте процедуру как показано ниже:

    procedure InitPosition ;
begin
{ Начальная позиция } Form1.Table2.Active := TRUE ; Form1.Table3.Active := TRUE ;

if Form1.Table1.RecordCount > 1 then Form1.Table2.MoveBy(1) ; if Form1.Table2.RecordCount > 2 then Form1.Table3.MoveBy(2) ; end ;

  • В обработчике события Form.OnShow вызовите InitPosition.
  • В обработчике события OnClick компонента DBNavigator создайте следующий код:
        procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
    begin
    case
    button of nbNext : begin if not Table2.Eof then Table2.Next ; if Table2.Eof then Table2.Active := FALSE ; if not Table3.Eof then Table3.Next ; if Table3.Eof then Table3.Active := FALSE ; end ; nbPrior : begin if not Table2.Bof then Table2.Prior ; if not Table3.Bof then Table3.Prior ; end ; nbFirst : InitPosition ; nbLast : begin Table2.Active := FALSE; Table3.Active := FALSE; end ; end ; end;
  • Данный метод отображает на форме три графических поля. Пожалуйста имейте в виду, что вышеуказанный код НЕ завершен и требует доработки. Кроме того, я уверен, что существуют другие, не худшие решения.

    OAmiry/Borland [000371]



    Содержание раздела