Сетка и отображаемый в память файл

Советы » Файлы » Сетка и отображаемый в память файл

unit

MapGForm; interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, SyncObjs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, Grids, ComCtrls; type

TForm1 = class

(TForm) StringGrid1: TStringGrid; procedure

FormCreate(Sender: TObject); procedure

FormDestroy(Sender: TObject); procedure

StringGrid1SelectCell(Sender: TObject; Col, Row: Integer; var

CanSelect: Boolean); private

hMapFile: THandle; MapFilePointer: Pointer; public

procedure

WmUser(var

Msg: TMessage); message

wm_user; end

; var

Form1: TForm1; implementation

{$R *.DFM} procedure

TForm1.FormCreate(Sender: TObject); var

Address: Pointer; begin

hMapFile := CreateFileMapping( $FFFFFFFF, // file handle ... or memory nil

, // security Page_ReadWrite, // access rights 0, // high memory size 10000, // low memory size 'DdhMappedFileGraph'); // mapped file name if

hMapFile <> 0 then

MapFilePointer := MapViewOfFile( hMapFile, // handle returned above File_Map_All_Access, // access rights 0, 0, 0) // access the entire mapped file else

ShowMessage('hMapFile = 0'); if

MapFilePointer = nil

then

ShowMessage('MapFilePointer = nil') else

begin

// add window to area Address := pChar(MapFilePointer) + 400; while

PInteger(Address)^ <> 0 do

Address := pChar(Address) + 4; PInteger(Address)^ := Handle; end

; // posts an update request to itself PostMessage(Handle, wm_user, 0, 0); end

; procedure

TForm1.FormDestroy(Sender: TObject); begin

UnMapViewOfFile(MapFilePointer); CloseHandle(hMapFile); end

; procedure

TForm1.WmUser(var

Msg: TMessage); var

X, Y: Integer; Address: Pointer; begin

// update the grid for

X := 0 to

9 do

for

Y := 0 to

9 do

begin

Address := pChar(MapFilePointer) + (X + Y * 10) * 4; StringGrid1.Cells[X, Y] := IntToStr(PInteger(Address)^); end

; end

; procedure

TForm1.StringGrid1SelectCell(Sender: TObject; Col, Row: Integer; var

CanSelect: Boolean); var

Address: Pointer; begin

// reset the cell to 0 Address := pChar(MapFilePointer) + (Col + Row * 10) * 4; PInteger(Address)^ := 0; // notify all listeners Address := pChar(MapFilePointer) + 400; while

PInteger(Address)^ <> 0 do

begin

PostMessage(PInteger(Address)^, wm_user, 0, 0); Address := pChar(Address) + 4; end

; end

; end

.

Другое по теме:

Категории

Статьи

Советы

Copyright © 2022 - All Rights Reserved - www.delphirus.com