Вниз
Скачать: CL | DM;

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

← →
Yank   (2002-09-26 00:18) [0]

Помогите, пожалуйста!
Я хочу сохранить в файл данных запись, содержащую динамический массив, но функция sizeOf возвращает размер самой записи без учета размера дин. массива, как быть? (Только начало записи сохраняется в файл)


← →
Rouse_ ©   (2002-09-26 00:50) [1]

полный юнит из моей программы

unit GlobalUnit;

interface

uses
Classes, ComCtrls, SysUtils;

type TPeriodical = (plOneTime, plEveryday, plWeekly, plMonthly, plStartUp);
type TSpetial = (spNone, spShutdown, spPowerOff, spScandisk, spDefragment);
type TStyle = (stNone, stOneTime, stWorck, stWeekend, stEveryday, stEveryweeck, stEveryMonth, stEveryMonthWeek);
type TDelete = (deNone, deCount, deTime);

type TTask = packed record
TaskID : Integer;
Name : String[255];
TaskMessage : String[255];
TaskSound : String[255];
FilePath : String[255];
Run : Boolean;
Priority : TThreadPriority;
Spetial : TSpetial;
SpetialDrive : Char;
Periodical : TPeriodical;
TimeStamp : TDateTime;
Style : TStyle;
FirstParam : Byte;
SeckondParam : Integer;
Length : TDelete;
DelParam : Double;
LastStart : TDateTime;
NextStart : TDateTime;
end;

var
TaskArray : array [0..100] of TTask;
TaskCount: Byte;

procedure AddTask( Value: TTask);
procedure SaveTasks;
procedure LoadTasks;
procedure ShowTasks(var ListView: TListView);
procedure GetNextStart( var Task: TTask);

implementation

procedure AddTask( Value: TTask);
begin
TaskArray[TaskCount] := Value;
Inc(TaskCount);
end;

procedure SaveTasks;
var
F: file of TTask;
i: Byte;
begin
AssignFile(f,"c:\Test.tsk");
Rewrite(f);
for i:= 0 to TaskCount-1 do
Write(f,TaskArray[i]);
CloseFile(f);
end;

procedure LoadTasks;
var
F: file of TTask;
begin
TaskCount := 0;
if not FileExists("c:\Test.tsk") then Exit;
AssignFile(f,"c:\Test.tsk");
Reset(f);
while not EOF(f) do begin
Read(f,TaskArray[TaskCount]);
Inc(TaskCount);
end;
CloseFile(f);
end;

procedure ShowTasks(var ListView: TListView);
var
i:Byte;
begin
if TaskCount = 0 then Exit;
for i:= 0 to TaskCount-1 do begin
with ListView.Items.Add do begin
Caption := TaskArray[i].Name;
SubItems.Add(DateToStr(TaskArray[i].NextStart));
if TaskArray[i].LastStart = 0 then SubItems.Add("none") else
SubItems.Add(DateToStr(TaskArray[i].LastStart));
SubItems.Add(TaskArray[i].TaskMessage);
SubItems.Add(TaskArray[i].FilePath );
end;
end;
end;

procedure GetNextStart(var Task: TTask);
begin
if Task.NextStart = 0 then Task.NextStart := Task.TimeStamp;
case Task.Style of
stOneTime: //


← →
Rouse_ ©   (2002-09-26 00:52) [2]

Будут вопросы, задавай сюда

Желаю успехов


← →
Zuvom ©   (2002-09-26 01:03) [3]

Я всегда при работе с динамическими массивами использую переменную, которая является длиной массива.


← →
Aleks1   (2002-09-26 04:26) [4]

Для динамических массивов определяющей является не функция SizeOf, а функция Length. При записи в файл определяй длину дин. массива и записывай столько байт, сколько нужно. Имхо, стоит записать и саму длину (или кол-во элементов массива), для последущего считывания.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.011 c
14-21230
delta
2002-09-06 18:37
2002.10.07
Сколько вам лет


4-21343
RealDummy
2002-08-22 02:51
2002.10.07
Как ставить хук на минимизацию чужого окна?


1-21050
Termit
2002-09-27 13:46
2002.10.07
Уничтожить компонент из собственного обработчика


3-20890
cutter-pro
2002-09-16 15:57
2002.10.07
Заставь дурака богу молиться он и лоб себе расшебет


14-21251
Soft
2002-09-12 10:26
2002.10.07
FTP в инете нашару




   Наверх