|
Навигация
|
Главная » Новости Форма, демонстрирующая различные методы создания массива с динамически изменяемым размером.Источник: codingrus Kest {++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}{ Форма, демонстрирующая различные методы создания массива с } { динамически изменяемым размером. Разместите на форме четыре кнопки,} { компоненты ListBox и SpinEdit и создайте, как показано ниже, } { обработчики событий, возникающие при нажатии на кнопки. Button1, } { Button2 и Button3 демонстрируют вышеуказанных метода. Button4 } { очищает ListBox для следующего примера. } {++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++} unit Dynarry1; interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Spin; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; SpinEdit1: TSpinEdit; ListBox1: TListBox; Button4: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} Type pSomeType = ^SomeType; SomeType = Integer; procedure TForm1.Button1Click(Sender: TObject); Type pDynArray = ^tDynArray; tDynArray = Array[1..1000] Of SomeType; Var DynArray : pDynArray; I : Integer; begin { Распределяем память } GetMem (DynArray, SizeOf(SomeType) * SpinEdit1.Value); { Пишем данные в массив } For I := 1 to SpinEdit1.Value Do DynArray^[I] := I; { Читаем данные из массива } For I := SpinEdit1.Value DownTo 1 Do ListBox1.Items.Add('Элемент ' + IntToStr(DynArray^[I])); { Освобождаем память } FreeMem(DynArray, SizeOf(SomeType) * SpinEdit1.Value); end; procedure TForm1.Button2Click(Sender: TObject); Var List : TList; Item : pSomeType; I : Integer; begin { Создаем список } List:=TList.Create; { Пишем данные для списка } For I := 1 to SpinEdit1.Value do begin { Распределяем уникальный экземпляр данных } New(Item); Item^:=I; List.Add ( Item ); End; { Читаем данные из списка - базовый индекс списка 0, поэтому вычитаем из I единицу } For I := SpinEdit1.Value DownTo 1 Do ListBox1.Items.Add ( 'Элемент ' + IntToStr(pSomeType(List.Items[I-1])^)); { Освобождаем лист } For I := 1 to SpinEdit1.Value Do Dispose (List.Items[I-1]); List.Free; end; procedure TForm1.Button3Click(Sender: TObject); Var Stream : TMemoryStream; Item : SomeType; I : Integer; begin { Распределяем память потока } Stream:=tMemoryStream.Create; Stream.SetSize(SpinEdit1.Value); { Пишем данные в поток } For I := 1 to SpinEdit1.Value Do { Stream.Write автоматически отслеживает позицию записи, поэтому при записи данных за ней следить не нужно } Stream.Write(I,SizeOf(SomeType)); { Читаем данные из потока } For I := SpinEdit1.Value DownTo 1 do begin Stream.Seek((I-1)*SizeOf(SomeType),0); Stream.Read(Item,SizeOf(SomeType)); ListBox1.Items.Add('Элемент '+IntToStr(Item)); End; { Освобождаем поток } Stream.Free; end; procedure TForm1.Button4Click(Sender: TObject); begin ListBox1.Items.Clear; end; end. - Robert Wittig Кадровая политика в ИТ подразделениях предприятий и организаций. Все о дизайне. Разрабатываем стиль компании.. Аналитика: путь к интеллектуальному бизнесу. Принципы построения системы менеджмента на основе здравого смысла. Минкомсвязи отрегулирует облака. Возможно введение уголовной ответственности. Главная » Новости |
© 2024 Team.Furia.Ru.
Частичное копирование материалов разрешено. |