Советы по Delphi. Версия 1.0.6 - страница 8

стр.

>

>   end;

>   ChunkSize.x:= M1;

>   nBlockAlign:= ChunkSize.up;

>   {Считываем  nBitsPerSample}

>   nBitsPerSample:= ChunkSize.dn;

>   for I:= 17 to fmtSize do Read(InFile,MM);

>   NoDataYet:= True;

>   while NoDataYet do begin

>    {Считываем метку блока данных "data"}

>    ReadChunkName;

>    {Считываем DataSize}

>    ReadChunkSize;

>    DataSize:= ChunkSize.lint;

>    if ChunkName <> 'data' then begin

>     for I:= 1 to DataSize do  {пропуск данных, не относящихся к набору звуковых данных}

>      Read(InFile, MM);

>    end else NoDataYet:= False;

>   end;

>   nDataBytes:= DataSize;

>   {Наконец, начинаем считывать данные для байтов nDataBytes}

>   if nDataBytes>0 then DataYet:= True;

>   N:=0; {чтение с первой позиции}

>   while DataYet do begin

>    ReadOneDataBlock(Ki,Kj); {получаем 4 байта}

>    nDataBytes:= nDataBytes-4;

>    if nDataBytes<=4 then DataYet:= False;

>   end;

>   ScaleData(Ki);

>   if Ki.WAV.nChannels=2 then begin Kj.WAV:= Ki.WAV;

>   ScaleData(Kj);

>  end;

>  {Освобождаем буфер файла}

>  CloseFile(InFile);

> end else begin

>  InitSpecs;{файл не существует}

>  InitSignals(Ki);{обнуляем массив "Ki"}

>  InitSignals(Kj);{обнуляем массив "Kj"}

> end;

>end; { ReadWAVFile}


>{================= Операции с набором данных ====================}

>const MaxNumberOfDataBaseItems = 360;

>type  SignalDirectoryIndex = 0..MaxNumberOfDataBaseItems;


>VAR DataBaseFile: file of Observation;

>LastDataBaseItem: LongInt; {Номер текущего элемента набора данных}

>ItemNameS: array[SignalDirectoryIndex] of String[40];


>procedure GetDatabaseItem(Kk : Observation; N : LongInt);

>begin

> if N

>  Seek(DataBaseFile, N);

>  Read(DataBaseFile, Kk);

> end else InitSignals(Kk);

>end; {GetDatabaseItem}


>procedure PutDatabaseItem(Kk : Observation; N : LongInt);

>begin

> if  N

>  Seek(DataBaseFile, N);

>  Write(DataBaseFile, Kk);

>  LastDataBaseItem:= LastDataBaseItem+1;

> end else while lastdatabaseitem<=n do begin

>  Seek(DataBaseFile, LastDataBaseItem);

>  Write(DataBaseFile, Kk);

>  LastDataBaseItem:= LastDataBaseItem+1;

> end else ReportError(1); {Попытка чтения MaxNumberOfDataBaseItems}

>end; {PutDatabaseItem}


>procedure InitDataBase;

>begin

> LastDataBaseItem:= 0;

> if FileExists(StandardDataBase) then begin

>  Assign(DataBaseFile,StandardDataBase);

>  Reset(DataBaseFile);

>  while not EOF(DataBaseFile) do begin

>   GetDataBaseItem(K0R, LastDataBaseItem);

>   ItemNameS[LastDataBaseItem]:= K0R.Name;

>   LastDataBaseItem:= LastDataBaseItem+1;

>  end;

>  if EOF(DataBaseFile) then if LastDataBaseItem>0 then LastDataBaseItem:= LastDataBaseItem-1;

> end;

>end; {InitDataBase}


>function FindDataBaseName(Nstg: String): LongInt;

>var ThisOne : LongInt;

>begin

> ThisOne:= 0;

> FindDataBaseName:= –1;

> while ThisOne

>  if Nstg = ItemNameS[ThisOne] then begin

>   FindDataBaseName:= ThisOne;

>   Exit;

>  end;

>  ThisOne:= ThisOne+1;

> end;

>end; {FindDataBaseName}


>{======================= Инициализация модуля ========================}

>procedure InitLinearSystem;

>begin

> BaseFileName:= '\PROGRA~1\SIGNAL~1\';

> StandardOutput:= BaseFileName + 'K0.wav';

> StandardInput:= BaseFileName + 'K0.wav';

> StandardDataBase:= BaseFileName + 'Radar.sdb';

> InitAllSignals;

> InitDataBase;

> ReadWAVFile(K0R,K0B);

> ScaleAllData;

>end; {InitLinearSystem}


>begin {инициализируемый модулем код}

> InitLinearSystem;

>end. {Unit LinearSystem}

Даты

Вычисление даты Пасхи

>function TtheCalendar.CalcEaster:String;

>var B,D,E,Q:Integer;

> GF:String;

>begin

> B:= 225-11*(Year Mod 19);

> D:= ((B-21)Mod 30)+21;

> If d>48 then Dec(D);

> E:= (Year+(Year Div 4)+d+1) Mod 7;

> Q:= D+7-E;

> If q<32 then begin

>  If ShortDateFormat[1]='d' then Result:= IntToStr(Q)+'/3/'+IntToStr(Year)

>  else Result:='4/'+IntToStr(Q-31)+'/'+IntToStr(Year);

> end else begin

>  If ShortDateFormat[1]='d' then Result:= IntToStr(Q-31)+'/4/'+IntToStr(Year)

>  else Result:='4/'+IntToStr(Q-31)+'/'+IntToStr(Year);

> end;

> {вычисление страстной пятницы}

> If Q<32 then begin

>  If ShortDateFormat[1]='d' then GF:= IntToStr(Q-2)+'/3/'+IntToStr(Year)

>  else GF:='3/'+IntToStr(Q-2)+'/'+IntToStr(Year);

> end else begin

>  If ShortDateFormat[1]='d' then GF:= IntToStr(Q-31-2)+'/4/'+IntToStr(Year)