Форум: "Основная";
Текущий архив: 2002.09.09;
Скачать: [xml.tar.bz2];
Внизкак узнать длину массива? Найти похожие ветки
← →
AFROLOV (2002-08-29 14:24) [0]в качестве параметра передается OleVariant представляющий из себя массив строк, как можно узнать сколько в нем элементов?
procedure TMyAuto3.PrintArray(Arr: OleVariant);
var
i:integer;
begin
form1.RichEdit1.Lines.Clear();
for i:=??? to ??? do
begin
form1.RichEdit1.Lines.Add(Arr[i]);
end;
end;
← →
lenin (2002-08-29 14:28) [1]
> AFROLOV © (29.08.02 14:24)
for i:=low(Arr) to high(Arr) do
begin
form1.RichEdit1.Lines.Add(Arr[i]);
end;
end;
если я не ошибаюсь
← →
AFROLOV (2002-08-29 14:34) [2]Пишет, что типы не совместимые.
← →
Skier (2002-08-29 14:34) [3]> AFROLOV
VarArrayLowBound(...)
VarArrayHighBound(...);
← →
Ученик (2002-08-29 14:38) [4]function VarLength(V : Variant) : Integer;
begin
if VarIsArray(V) then
Result := VarArrayHighBound(V, 1) + 1
else
Result := 1
end;
← →
AFROLOV (2002-08-29 14:57) [5]Большое спасибо.
VarArrayLowBound(...)
VarArrayHighBound(...) - работают.
А вот VarIsArray(), что-то не так - не хочет он массив распозновать, может массив надо как то по другому создавать или передовать?
Создаю массив:
procedure TForm1.Button4Click(Sender: TObject);
var
Test:OleVariant;
Count,i:Integer;
begin
Count:=3;
Test:=VarArrayCreate([0,Count],varVariant);
for i:=0 to Count-1 do
begin
Test[i]:=IntToStr(i);
end;
Obj.PrintArray(Test);
end;
Использую:
procedure TMyAuto3.PrintArray(Arr: OleVariant);
var
i:integer;
begin
if VarIsArray(Arr) then //если без этой проверки то все работает если с ней то условие не выполняется и ничего не происходит
begin
form1.RichEdit1.Lines.Clear();
for i:=VarArrayLowBound(Arr,1) to VarArrayHighBound(Arr,1) do
begin
form1.RichEdit1.Lines.Add(Arr[i]);
end;
end;
end;
← →
Skier (2002-08-29 15:06) [6]> AFROLOV
Странно...
Если так то всё работает.
Может с Obj какие-то проблемы ?
procedure PrintArray(Arr: OleVariant);
var
i:integer;
begin
if VarIsArray(Arr) then
begin
form1.RichEdit1.Lines.Clear();
for i:=VarArrayLowBound(Arr,1) to VarArrayHighBound(Arr,1) do
begin
form1.RichEdit1.Lines.Add(Arr[i]);
end;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
Test:OleVariant;
Count,i:Integer;
begin
Count:=3;
Test:=VarArrayCreate([0,Count],varVariant);
for i:=0 to Count-1 do
begin
Test[i]:=IntToStr(i);
end;
PrintArray(Test);
end;
← →
AFROLOV (2002-08-29 15:14) [7]Obj:=CreateOleObject("Project1.MyAuto3");
Может это из-за того, что параметры передаются на сервер OLE?
← →
Skier (2002-08-29 15:15) [8]>AFROLOV
А ежели так ?
procedure TMyAuto3.PrintArray( var Arr: OleVariant);
← →
Ученик (2002-08-29 15:18) [9]А VarType что возвращает ?
← →
AFROLOV (2002-08-29 15:36) [10]VarType - возвращает 16396 ($400C) - такого кода нет для TVarType в help"е.
← →
Ученик (2002-08-29 15:46) [11]varVariant = $000C;
varByRef = $4000;
← →
AFROLOV (2002-08-29 15:56) [12]Извеняюсь, последнее это не "C" -это 0 так в калькуляторе отобразился.
To
> Skier © (29.08.02 15:15)
Идея насчет var сработала.
Всем большое спасибо.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.09;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c