Delphi - база знаний

       

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


Пример массива констант (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 }

Для получения дополнительной информации загляните в главу "open arrays" электронной справки.

Взято из

Советов по Delphi от


Сборник Kuliba







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