Delphi: заметки программиста. Часть 2

Листинг 3

unit Unit1; 
  
interface 
  
uses 
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,    StdCtrls, ComCtrls, Spin; 
  
type 
  TForm1 = class(TForm) 
    btMem: TButton; 
    btFile: TButton; 
    se: TSpinEdit; 
    Label1: TLabel; 
    pb: TProgressBar; 
    Label2: TLabel; 
    lbMem: TLabel; 
    lbFile: TLabel; 
    procedure btMemClick(Sender: TObject); 
    procedure btFileClick(Sender: TObject); 
  private 
    { Private declarations } 
  public 
    { Public declarations } 
  end; 
  
var 
  Form1: TForm1; 
  
implementation 
  
{$R *.DFM} 
  
  
procedure TForm1.btMemClick(Sender: TObject); 
// Создание файла методом его отображения 
type 
  PReal = ^Real; 
var 
  HFile, HMap: THandle; 
  AdrBase, AdrReal: PReal; 
  k: Integer; 
  FSize: Cardinal; 
  BegTime: TDateTime; 
begin 
  BegTime := Time;   // Засекаем время пуска 
  // Готовим ProgressBar: 
  pb.Max := se.Value; 
  pb.Position := 0; 
  pb.Show; 
  FSize := se.Value * SizeOf(Real); // Длина файла  
  HFile := FileCreate('test.dat');  // Создаем файл    
  if HFile = 0 then     // Ошибка:    возбуждаем исключение 
    raise Exception.Create('Ошибка создания файла');  
  try 
    // Отображаем файл в память 
    HMap := CreateFileMapping( 
HFile, NIL, PAGE_READWRITE, 0, FSize, NIL); 
    if HMap = 0 then    // Ошибка:    возбуждаем исключение 
      raise Exception.Create('Ошибка отображения    файла'); 
    try 
      // Создаем окно просмотра: 
      AdrBase := MapViewOfFile(HMap, FILE_MAP_WRITE,    0, 0, FSize); 
      if AdrBase = NIL then  //    Ошибка: возбуждаем исключение 
        raise Exception.Create('Невозможно    просмотреть файл'); 
      // Сохраняем начальный адрес для правильной    ликвидации 
      // окна просмотра: 
      AdrReal := AdrBase; 
      for k := 1 to se.Value do 
      begin 
        AdrReal^ := Random;  //    Помещаем в файл новое число 
        // Перед наращиванием текущего    адреса необходимо 
        // привести его к типу Integer    или Cardinal: 
        AdrReal := Pointer(Integer(AdrReal)    + SizeOf(Real)); 
        lbMem.Caption := IntToStr(k); 
        pb.Position := k; 
        Application.ProcessMessages; 
      end; 
      // Освобождаем окно просмотра: 
      UnmapViewOfFile(AdrBase) 
    finally 
      // Освобождаем отображение 
      CloseHandle(HMap) 
    end 
  finally 
    // Закрываем файл 
    CloseHandle(HFile) 
  end; 
  // Сообщаем время счета 
  pb.Hide; 
  lbMem.Caption := TimeToStr(Time-BegTime) 
end; 
  
procedure TForm1.btFileClick(Sender: TObject); 
// Создание файла обычным методом 
var 
  F: File of Real; 
  k: Integer; 
  BegTime: TDateTime; 
  R: Real;   // Буферная переменная для обращения к Write  
begin 
  BegTime := Time;  // Засекаем начальное время счета 
  // Готовим ProgressBar: 
  pb.Max := se.Value; 
  pb.Position := 0; 
  pb.Show; 
  // Создаем файл: 
  AssignFile(F, 'test.dat'); 
  Rewrite(F); 
  for k := 1 to se.Value do 
  begin 
    R := Random;   // Параметрами обращения к Write  
    Write(F, R);   // могут быть только переменные  
    lbFile.Caption := IntToStr(k); 
    pb.Position := k; 
    Application.ProcessMessages; 
  end; 
  CloseFile(F); 
  pb.Hide; 
  lbFile.Caption := TimeToStr(Time-BegTime) 
end; 
  
end. 

возврат


Наш канал на Youtube

1999 1 2 3 4 5 6 7 8 9 10 11 12
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 1 2 3 4 5 6 7 8 9 10 11 12
2003 1 2 3 4 5 6 7 8 9 10 11 12
2004 1 2 3 4 5 6 7 8 9 10 11 12
2005 1 2 3 4 5 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
Популярные статьи
КомпьютерПресс использует