Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Добавление элементов в массив


Автор: Akella 31.1.2005, 17:14
Странно, но в DRKB такого не нашел, а именно как добавить (удалить) элемент в мессив.

arDate:Array of Cardinal - глобально

1. Как добавить новое значение в массив?
2. Как удалить значение из массива?

Переделал пример из DW6, но нифига не получает, а сам с массивами почти не работал
Код

procedure delElem( var A:Array of Cardinal; Index:Cardinal);
var Last : Cardinal;
begin
  Last:= high( A );
  if Index <  Last then move( A[Index+1], A[ Index ],
      (Last-Index) * sizeof( A[Index] )  );
  SetLength(A,Last);
end;

procedure addElem( var A: Array of Cardinal; Index: integer;ANew:Cardinal);
var Len : Cardinal;
begin
  Len:= Length( A );
  if Index >= Len then Index := Len+1;
  setLength( A, Len+1);
  move( A[Index], A[ Index+1 ],
        (Len-Index) * sizeof( A[Index] ));
  A[Index] := ANew;
end;


Добавлено @ 17:22
просто хочу подставлять сюда данные (вместо [1,8])
Код

MonthCalendar1.BoldDays([1,8], MonthBoldInfo);

Автор: <Spawn> 31.1.2005, 17:23
dsergey Зачем изобратеть велосипед когда есть класс TList? Вот пример:

Код

procedure TForm1.Button1Click(Sender: TObject);
var
 Value: PCardinal;
begin
 with TList.Create do
 try
   //Добавляем одно значение
   GetMem(Value, SizeOf(Cardinal));
   Value^ := 100;
   Add(Value);
   //Второе
   GetMem(Value, SizeOf(Cardinal));
   Value^ := 200;
   Add(Value);
   //Смортим значение первого
   ShowMessage(IntToStr(PCardinal(Items[0])^));
   //Удаляем все
   while Count <> 0 do
     FreeMem(Extract(Items[Count - 1]), SizeOf(Cardinal));
 finally
   Free;
 end;
end;


Вообще для таких случаев я пишу себе наследника TList, работающего с нужными типами.

Автор: Akella 31.1.2005, 17:26
читай, что добавлено

Автор: z-END 31.1.2005, 17:34
Посмотри мой код в этой http://forum.vingrad.ru/index.php?showtopic=41200#

Автор: Akella 31.1.2005, 17:42
Код

SetLength (BDates, Length(BDates) + 1);
BDates[ length(BDates)-1] := DayOf(CDate);

оно?
Добавлено @ 17:44
Нужно, мне кажется написать что-то путевое, и попросить модераторов запихнуть в DRKB.
Добавлено @ 17:46
Странно, в FAQ`е есть удаление элемента массива, а почему бы не добавить "Добавление элемента в массив"

Автор: z-END 31.1.2005, 17:47
Целиком код вставь в свой проект и посмотри на результат...
... в итоге после нажатия кнопки ("ОК") которая изображена у тебя на картинке
в Dates (объяви ее глобальной Dates: TStringList) будет содержаться список всех дат, которые выбраны.

Автор: Bes 1.2.2005, 08:53
Тут где-то Петрович рассказывал как работать с массивами.
Смысл в том, что сначала нужно боъявить новый тип равный массиву, можно даже динамическому, а потом передавать как параметр уже этот тип. Т.е.
Type TMyARR = array of array of Cardinal;

Function GetAr(Var Arr1:TMyARR):TMyARR;
/
/
/
/
/

Автор: Akella 1.2.2005, 10:20
Еще раз smile
Цитата(dsergey @ 31.1.2005, 17:42)
Странно, в FAQ`е есть удаление элемента массива, а почему бы не добавить "Добавление элемента в массив"


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)