Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
unitMapGForm; interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, SyncObjs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, Grids, ComCtrls; type
TForm1 = class
(TForm) Timer1: TTimer; Chart1: TChart; Series1: TBarSeries; procedure
FormCreate(Sender: TObject); procedure
FormDestroy(Sender: TObject); procedure
Timer1Timer(Sender: TObject); 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; X, Y, Total: Integer; 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
; // start up chart Chart1.Series[0].Clear; for
X := 0 to
9 do
begin
Total := 0; for
Y := 0 to
9 do
begin
Address := pChar(MapFilePointer) + (X + Y * 10) * 4; Inc(Total, PInteger(Address)^); end
; Chart1.Series[0].AddY( Total, IntToStr(X + 1), clRed); end
; end
; procedure
TForm1.FormDestroy(Sender: TObject); begin
UnMapViewOfFile(MapFilePointer); CloseHandle(hMapFile); end
; procedure
TForm1.WmUser(var
Msg: TMessage); var
X, Y, Total: Integer; Address: Pointer; begin
// copy all the data to the graph for
X := 0 to
9 do
begin
Total := 0; for
Y := 0 to
9 do
begin
Address := pChar(MapFilePointer) + (X + Y * 10) * 4; Inc(Total, PInteger(Address)^); end
; Chart1.Series[0].YValue[X] := Total; end
; end
; procedure
TForm1.Timer1Timer(Sender: TObject); var
X, Y: Integer; Address: Pointer; begin
X := Random(10); Y := Random(10); Address := pChar(MapFilePointer) + (X + Y * 10) * 4; PInteger(Address)^ := PInteger(Address)^ + Random(10); Address := pChar(MapFilePointer) + 400; while
PInteger(Address)^ <> 0 do
begin
PostMessage(PInteger(Address)^, wm_user, 0, 0); Address := pChar(Address) + 4; end
; end
; initialization
Randomize; end
.