unit Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, ExtCtrls;

type
  TForm1 = class(TForm)
    edVariable: TEdit;
    lbEnterValues: TLabel;
    bbOK: TBitBtn;
    lbShowValue: TLabel;
    lbVariable: TLabel;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure bbOKClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
    Form1: TForm1;
    // Глобальные переменные
    // Описатель FaleMapping
    hFileMapObj:THandle;
    // Указатель на начальный адрес данных
    lpBaseAddress:PChar;
    
implementation
 
{$R *.DFM}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
    // Создадим FileMapping с именем FileMemory
    // и передадим полученный в результате описатель в глобальную переменную hFileMapObj
    hFileMapObj := CreateFileMapping(MAXDWORD,Nil,PAGE_READWRITE,0,4,'FileMemory');
    If (hFileMapObj = 0) Then
        ShowMessage('Не могу создать проецируемый файл!')
    Else
    // Подключим файл к адресному пространству
    // и получим начальный адрес данных
        lpBaseAddress := MapViewOfFile(hFileMapObj,FILE_MAP_WRITE,0,0,0);
    If lpBaseAddress = Nil Then
        ShowMessage('Не могу подключить проецируемый файл!');
end;

 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    // Отключим файл от адресного пространства
    UnMapViewOfFile(lpBaseAddress);
    // Освобождаем объект файла
    CloseHandle(hFileMapObj);
    // Закрываем форму
    Action := caFree;
end;

procedure TForm1.bbOKClick(Sender: TObject);
begin
    // Считываем данные в дополнительную переменную
    StrPCopy(lpBaseAddress,edVariable.Text);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
    lbVariable.Caption:=PChar(lpBaseAddress);
end;
 
end.


