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

Вниз

Создание динамических массивов   Найти похожие ветки 

 
Ученик ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
14-98329
Skier
2002-08-30 11:54
2002.09.30
ТРЕБУЕТСЯ - ШВЕЙ ! (с) С. Довлатов


3-97989
BoxTer
2002-09-09 20:58
2002.09.30
Crystal Report 8, 8.5


1-98050
Uran
2002-09-19 09:58
2002.09.30
Позиционирование в TEdit


4-98393
oduvan
2002-08-13 19:37
2002.09.30
Проблема при подаче сообщения WM_COPYDATA из формы в форму.


3-97984
Кракен
2002-09-08 16:13
2002.09.30
Добавить поле в конец бызы