![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как узнать длину массива? [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;
если я не ошибаюсь