Советы по 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 ofnbNext :beginif 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 :beginif not Table2.Bof then Table2.Prior ;if not Table3.Bof then Table3.Prior ;end ;nbFirst :InitPosition ;nbLast :beginTable2.Active := FALSE;Table3.Active := FALSE;end ;end ;end;
  • Данный метод отображает на форме три графических поля. Пожалуйста имейте в виду, что вышеуказанный код НЕ завершен и требует доработки. Кроме того, я уверен, что существуют другие, не худшие решения.

    OAmiry/Borland [000371]



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