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


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



"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..2of Byte;
  end
;

function
 PtrToStr(P: Pointer): string;
const

  HexChar: array
[0..15of 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..5of Char;

begin

  P := 'Привет'#0
;
  Display([-12345678
, True, 'A'1.2345'ABC', Ptr($1234$5678), P,
    Form1]);
end
;

 

Взято с www.delphiworld.narod.ru





DELPHI FAQ




EOMY TOP 100      Рейтинг@Mail.ru      Rambler's Top100