Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.09;
Скачать: CL | DM;

Вниз

как узнать длину массива?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
14-27213
perov
2002-08-15 08:43
2002.09.09
odac


1-26970
Tornado
2002-08-27 14:51
2002.09.09
Пдскажите плиз


7-27244
Tahion
2002-06-30 08:25
2002.09.09
На каие файлы можно устанавливать свойство для иконок %1?


3-26909
Programmer1
2002-08-16 14:02
2002.09.09
Upgrade базы данных Paradox


1-26938
Igel
2002-08-27 11:14
2002.09.09
Подскажите где найти инфу по интерфейсам?