Идёт загрузка страницы...

htp://aptem.net.ru





Delphi 1

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

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 ;

  6. В обработчике события Form.OnShow вызовите InitPosition.
  7. В обработчике события 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]