График и отображаемый в память файлDelphi , Файловая система , ФайлыГрафик и отображаемый в память файл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) 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. Here is a translation of the content into Russian: Создание формы Процедура
Уничтожение формы Процедура
Обработка сообщения WM_USER Процедура Обработка события таймера Процедура
Инициализация случайных чисел Секция Предложения по улучшению кода Вот некоторые предложения по улучшению кода:
В статье описывается создание графика и отображаемого в память файла с помощью языка программирования Delphi, используя компоненты Chart и Grids. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |