Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.07;
Скачать: 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 вся ветка

Текущий архив: 2002.10.07;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.022 c
1-21088
France
2002-09-25 09:46
2002.10.07
Перемещение окна за заголовок


1-21105
Viktor Erko
2002-09-24 10:57
2002.10.07
RxLoginDialog


1-20991
AlekseyK
2002-09-24 17:20
2002.10.07
Как вставить строку сместив другую вниз?


1-21032
Alexey3
2002-09-27 10:57
2002.10.07
Имя пользователя


1-21126
Седен
2002-09-24 19:17
2002.10.07
Нужна помощь!