Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > array of const (как получить нужный тип данных)


Автор: Avers 1.12.2008, 10:25
Есть некая процедура 
Код

  procedure MyProc(AText: string; AInfo: array of const)
  begin
    ...
  end;

AInfo - это чередующийся набор целых чисел и строк. Точно известно, что строки - это нечетные элементы массива. Вопрос: как присвоить эту строку некоторой строковой переменной (пусть будет  Str).

Пробовал сделать так:
Код

  Str := AInfo[i].VString^;

Но так теряется первый символ строки (как указатель).
Help!

Автор: aleksh 1.12.2008, 11:11
за верность кода не ручаюсь, но попробуй 
Код

str:=string(ainfo)

Автор: Christoph 1.12.2008, 13:08
Может быть использовать массив из указателей?

Автор: Rrader 1.12.2008, 14:39
Цитата(Avers @  1.12.2008,  16:25 Найти цитируемый пост)
VString

Это для ShortString.

Код

procedure MyProc(AText: String; AInfo: array of const);
var
  I: Integer;
begin
  for I := 0 to High(AInfo) do
  with AInfo[I] do
    case VType of
      vtInteger: AText := AText + IntToStr(VInteger);
      vtString: AText := AText + VString^;
      vtChar: AText := AText + VChar;
      vtAnsiString: AText := AText + AnsiString(VAnsiString);
      vtWideString: AText := AText + WideString(VWideString);
    end;
  ShowMessage(AText);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 { Демонстрация - типы указаны для наглядности } 
  MyProc('', [Integer(0), Char('1'), Integer(2), AnsiString('34'),
    ShortString(' vtString'), WideString(' vtWideString')]);
end;

Автор: Avers 2.12.2008, 10:46
aleksh, увы не работает (ругается на код) :( а хотелось бы. 
Окзалось почти так))
Rrader, String(VAnsiString) - работает)) 
Всем спасибо)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)