Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как узнать длину массива? [D6]


AFROLOV ©   (2002-08-29 14:24:00) 

в качестве параметра передается 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;


AFROLOV   (2002-08-29 15:56:00) [1]

Извеняюсь, последнее это не "C" -это 0 так в калькуляторе отобразился.
To
> Skier © (29.08.02 15:15)
Идея насчет varсработала.
Всем большое спасибо.


Ученик   (2002-08-29 15:46:00) [2]

varVariant = $000C;
varByRef = $4000;


AFROLOV   (2002-08-29 15:36:00) [3]

VarType - возвращает 16396 ($400C) - такого кода нет для TVarType в help"е.


Ученик   (2002-08-29 15:18:00) [4]

А VarType что возвращает ?


Skier   (2002-08-29 15:15:00) [5]

>AFROLOV
А ежели так ?
procedure TMyAuto3.PrintArray( varArr: OleVariant);


AFROLOV   (2002-08-29 15:14:00) [6]

Obj:=CreateOleObject("Project1.MyAuto3");
Может это из-за того, что параметры передаются на сервер OLE?


Skier   (2002-08-29 15:06:00) [7]

> 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 14:57:00) [8]

Большое спасибо.
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;


Ученик   (2002-08-29 14:38:00) [9]

function VarLength(V : Variant) : Integer;
begin
if VarIsArray(V) then
Result := VarArrayHighBound(V, 1) + 1
else
Result := 1
end;


AFROLOV   (2002-08-29 14:34:00) [10]

Пишет, что типы не совместимые.


Skier   (2002-08-29 14:34:00) [11]

> AFROLOV
VarArrayLowBound(...)
VarArrayHighBound(...);


lenin   (2002-08-29 14:28:00) [12]


> AFROLOV © (29.08.02 14:24)

for i:=low(Arr) to high(Arr) do
begin
form1.RichEdit1.Lines.Add(Arr[i]);
end;
end;

если я не ошибаюсь


Наверх

Титульная страница Поиск, карта сайта Написать письмо