Delphi-Help

Главная Статьи Массивы Пример массива констант (Array of Const)

Пример массива констант (Array of Const)

Оцените материал
(0 голосов)


Пример массива констант (Array of Const)

"Array of const" это массив переменных, декларированных как константы. Непосредственно они представлены структурой TVarRec. Скобки просто ограничивают массив. Массив констант дает вам возможность передавать процедуре переменное количество параметров type-safe (безопасным) способом. Вот пример:

type
  TVarRec = record
    Data: record case Integer of
        0: (L: LongInt);
        1: (B: Boolean);
        2: (C: Char);
        3: (E: ^Extended);
        4: (S: ^string);
        5: (P: Pointer);
        6: (X: PChar);
        7: (O: TObject);
    end;
    Tag: Byte;
    Stuff: array[0..2] of Byte;
  end;
 
function PtrToStr(P: Pointer): string;
const
  HexChar: array[0..15] of Char = '0123456789ABCDEF';
 
  function HexByte(B: Byte): string;
  begin
    Result := HexChar[B shr 4] + HexChar[B and 15];
  end;
 
  function HexWord(W: Word): string;
  begin
    Result := HexByte(Hi(W)) + HexByte(Lo(W));
  end;
 
begin
  Result := HexWord(HiWord(LongInt(P))) + ':' + HexWord(LoWord(LongInt(P)));
end;
 
procedure Display(X: array of const);
var
  I: Integer;
begin
  for I := 0 to High(X) do
    with TVarRec(X[I]), Data do
    begin
      case Tag of
        0: ShowMessage('Integer: ' + IntToStr(L));
        1: if B then
            ShowMessage('Boolean: True')
          else
            ShowMessage('Boolean: False');
        2: ShowMessage('Char: ' + C);
        3: ShowMessage('Float: ' + FloatToStr(E^));
        4: ShowMessage('String: ' + S^);
        5: ShowMessage('Pointer: ' + PtrToStr(P));
        6: ShowMessage('PChar: ' + StrPas(X));
        7: ShowMessage('Object: ' + O.ClassName);
      end;
    end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  P: array[0..5] of Char;
 
begin
  P := 'Привет'#0;
  Display([-12345678, True, 'A', 1.2345, 'ABC', Ptr($1234, $5678), P,
    Form1]);
end;

 

 

Массив констант (array of const) фактически является открытым массивом TVarRec (описание предекларированных типов Delphi вы можете найти в электронной справке). Приведенный ниже "псевдокод" на языке Object Pascal может послужить скелетом для дальнейшего развития:

procedure AddStuff(const A: array of const);
var i: Integer;
begin
  for i := Low(A) to High(A) do
    with A[i] do
      case VType of
        vtExtended:
          begin
{ добавляем натуральное число, все real-форматы
автоматически приводятся к extended }
          end;
        vtInteger:
          begin
 
{ добавляем целое число, все integer-форматы
автоматически приводятся к LongInt }
          end;
        vtObject:
          begin
            if VObject is DArray then
              with DArray(VObject) do
                begin
{ добавляем массив double-типа }
                end
            else if VObject is IArray then
              with IArray(VObject) do
                begin
{ добавляем массив integer-типа }
                end;
          end;
      end; { Case }
end; { AddStuff }
Прочитано 5393 раз

Авторизация



Счетчики