unit MapTestForm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, JclFileUtils;
type
TTestForm = class(TForm)
mmData: TMemo;
Label1: TLabel;
edFile: TEdit;
edMap: TEdit;
odFile: TOpenDialog;
Label3: TLabel;
cmdFile: TButton;
cmdGo: TButton;
cmdWrite: TButton;
cbTime: TComboBox;
Timer1: TTimer;
Label5: TLabel;
Memo1: TMemo;
procedure cmdFileClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure cmdGoClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Timer1Timer(Sender: TObject);
procedure cbTimeChange(Sender: TObject);
procedure cmdWriteClick(Sender: TObject);
private
FMap: TJclCustomFileMapping;
FView: TJclFileMappingView;
public
{ Public declarations }
end;
var
TestForm: TTestForm;
implementation
{$R *.DFM}
uses
JclAnsiStrings,
MapWriteForm;
procedure TTestForm.cmdFileClick(Sender: TObject);
begin
if odFile.Execute then
edFile.Text := odFile.Files[0];
end;
procedure TTestForm.FormCreate(Sender: TObject);
begin
cbTime.ItemIndex := 0;
end;
procedure TTestForm.cmdGoClick(Sender: TObject);
var
ViewIndex: Integer;
begin
if edFile.Text <> '' then
begin
FMap := TJclFileMapping.Create(edFile.Text, fmOpenReadWrite, edMap.Text, PAGE_WRITECOPY, 0, nil);
ViewIndex := FMap.Add(GENERIC_READ or GENERIC_WRITE, GetFileSize(TJclFileMapping(FMap).FileHandle, nil), 0);
FView := FMap.Views[ViewIndex];
end
else
begin
FMap := TJclSwapFileMapping.Create(edMap.Text, PAGE_WRITECOPY, 4096, nil);
ViewIndex := FMap.Add(GENERIC_READ or GENERIC_WRITE, 4096, 0);
FView := FMap.Views[ViewIndex];
end;
cmdGo.Enabled := False;
cmdWrite.Enabled := True;
Timer1.Enabled := True;
Timer1Timer(Self);
end;
procedure TTestForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FView.Free;
FMap.Free;
end;
procedure TTestForm.Timer1Timer(Sender: TObject);
var
S: AnsiString;
L: Cardinal;
begin
mmData.Clear;
SetLength(S, 4096);
FView.Position := 0;
L := FView.Read(S[1], 4096);
if L > 0 then
begin
StrResetLength(S);
mmData.Lines.Text := string(S);
end;
end;
procedure TTestForm.cbTimeChange(Sender: TObject);
begin
Timer1.Interval := (cbTime.ItemIndex + 1) * 1000;
end;
procedure TTestForm.cmdWriteClick(Sender: TObject);
var
S: AnsiString;
begin
WriteForm := TWriteForm.Create(Self);
WriteForm.ShowModal;
S := AnsiString(WriteForm.mmWrite.Lines.Text);
if Length(S) > 0 then
begin
FView.Position := 0;
FView.Write(S[1], Length(S));
end;
end;
end.