Проблема передачи записи

Материал из DRKB

Проблема передачи записи[править | править код]

Может это не то, что вы ищете, но идея такая:

Определите базовый класс с именем, скажем, allrecs:

TAllrecs = class
  function getVal (field: integer): string; virtual;
end;


Затем создаем классы для каждой записи:

recA = class(TAllrecs)
  this      : Integer;
  that      : String;
  the_other : Integer;
  function getVal (field: integer): string; virtual;
end;


Затем для каждой функции класса определите возвращаемый результат:

function recA.getVal(field: integer); string;
begin
  case field of
    1: getVal := intToStr (this);
    2: getVal := that;
    3: getVal := intToStr (the_other);
  end;
end;

Затем вы можете определить


function myFunc(rec: tAllrecs; field: integer);
begin
  label2.caption := allrecs.getVal(field);
end;


затем вы можете вызвать myFunc с любым классом, производным от tAllrecs, например:

myFunc (recA, 2);
myFunc (recB, 29);

(getVal предпочтительно должна быть процедурой (а не функцией) с тремя var-параметрами, возвращающими имя, тип и значение.)

Все это работает, т.к. данный пример я взял из моего рабочего проекта.

[Sid Gudes, cougar@roadrunner.com]

Если вы хотите за один раз передавать целую запись, установите на входе ваших функций/процедур тип 'array of const' (убедитесь в правильном приведении типов). Это идентично 'array of TVarRec'. Для получения дополнительной информации о системных константах, определяемых для TVarRec, смотри электронную справку по Delphi.


Source: http://delphiworld.narod.ru
ID: 00783