Главная страница
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.017 c
1-21036
Саша
2002-09-27 08:17
2002.10.07
Как положить Splitter.


14-21261
RV
2002-09-13 11:05
2002.10.07
про Мышление. (Не про девушек :), просто...)


4-21332
delphiguru
2002-08-21 12:54
2002.10.07
Где найти литературу или обучалку по WinAPI?


3-20899
kazaam
2002-09-13 08:16
2002.10.07
Как добавить запись в конец таблицы?


1-21142
Степан
2002-09-24 15:36
2002.10.07
Ограничение ввода в TEdit