Форум: "Основная";
Текущий архив: 2002.09.30;
Скачать: [xml.tar.bz2];
ВнизСоздание динамических массивов Найти похожие ветки
← →
Ученик (2002-09-19 09:20) [0]function CreateDynArray(Elements : array of const) : Pointer;
Может у кого-нибудь есть готовая реализация ?
← →
Separator (2002-09-19 09:46) [1]var
DynArray: array of array of const;
ArraysCreate: array of boolean;
ArraysCount: word = 0;
function CreateDynArray: integer;
var
Res: integer;
procedure AddArrayEnd;
begin
Inc(ArraysCount);
SetLength(DynArray, ArraysCount);
SetLength(DynArray[ArraysCount-1], 1);
SetLength(ArraysCreate, ArraysCount);
ArraysCreate(ArraysCount-1):= true;
Res:= ArraysCount-1
end;
procedure AddArrayNotEnd(N: word);
begin
SetLength(DynArray[N], 1);
ArraysCreate(N):= true;
Res:= N
end;
begin
Result:= -1;
if ArraysCount<>0 then
begin
for i:= 0 to ArraysCount-1 do
if not ArraysCreate[i] then
begin
AddArrayNotEnd(i);
break
end;
if Res=-1 then
AddArrayEnd
end
else
AddArrayEnd;
Result:= Res
end;
procedure DynArrayDestroy(N: word)
var
i: integer;
begin
if N<ArraysCount then
begin
SetLength(DynArray[N], 0);
ArraysCreate(N):= false
for i:= ArraysCount-1 downto 0 do
if not ArraysCreate(i) then
begin
Dec(ArraysCount);
SetLength(DynArray, ArraysCount);
SetLength(ArraysCreate, ArraysCount)
end
else
break
end
end;
В общем попробуй так, правда я тока счас написал, но вроде работает :)
← →
Ученик (2002-09-19 09:55) [2]>Separator © (19.09.02 09:46)
Спасибо, но имелось ввиду немного другое (когда ж я научусь вопросы задавать)
type
TIntegerArray = array of Integer;
TFontArray = array of TFont;
procedure TForm1.Button1Click(Sender: TObject);
var
A : TIntegerArray;
F : TFontArray;
begin
A := CreateDynArray([1, 2, 3, 4]);
F := CreateDynArray([Font1, Font2, Font3, Font4]);
end;
← →
Separator (2002-09-19 10:00) [3]А не легче тщгда сделать так:
procedure TForm1.Button1Click(Sender: TObject);
var
A : TIntegerArray;
F : TFontArray;
begin
SetLength(A, 4);
A:= [1,2,3,4];
end;
← →
Ученик (2002-09-19 10:05) [4]>Separator © (19.09.02 10:00)
?????
← →
Alx2 (2002-09-19 10:15) [5]>Ученик © (19.09.02 10:05)
В стремлении к универсальности? :)
Совсем не то, правда, но где-то рядом :):
function VarArrayOf(const Values: array of Variant): Variant;
← →
Separator (2002-09-19 10:17) [6]> немного не правильно :))
← →
Ученик (2002-09-19 10:25) [7]>Alx2 © (19.09.02 10:15)
Развивая-DynArrayFromVariant, но тоже не то, надеялся, что у кого-нибудь есть готовое.
← →
Separator (2002-09-19 10:28) [8]Готовое врядли у кого-нибудь найдется, попробуй сам написать, это будет намного проще, так как сделаешь именно то, что тебе нужно
← →
Ученик (2002-09-19 10:45) [9]Задача всплывает в том или ином виде на форуме постоянно, наверно, было бы полезно многим
← →
Separator (2002-09-19 10:51) [10]Я наверное не доконца понял, что нужно сделать
← →
Ученик (2002-09-19 11:28) [11]Забавно,
procedure TForm1.Button1Click(Sender: TObject);
var
A : TIntegerArray;
begin
A := CreateDynArray([1, 2, 3, 4]);
В A значение не попадает, но адрес A передается в ECX
← →
qube (2002-09-19 11:32) [12]procedure DynArrayFromVariant(var DynArray: Pointer; const V: Variant; TypeInfo: Pointer);
Description
Call DynArrayFromVariant to copy the contents of a variant (V) to an existing dynamic array variable (DynArray).
DynArray is a dynamic array variable whose value is assigned from the Variant.
V is the Variant to copy. Its value must be an array.
TypeInfo points to the runtime type information that identifies the type of array elements. You can obtain this pointer using the TypeInfo function.
← →
Ученик (2002-09-19 11:48) [13]>qube © (19.09.02 11:32)
Ученик © (19.09.02 10:25)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.30;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c