Сетка и отображаемый в память файл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) 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. Перевод контента на русский язык: Это программное обеспечение Delphi, которое создает файл с памятью и использует его для отображения сетки чисел в контроле StringGrid на форме. Программа также позволяет пользователю выбирать ячейки в сетке, которые сбрасываются до 0. Вот разбивка кода:
Код использует несколько функций и типов, специфических для Delphi, таких как CreateFileMapping, MapViewOfFile, PInteger и TStringGrid. Он также использует сообщение WM_USER для общения между формой и другими компонентами. Вот некоторые предложения по улучшению кода:
В целом, код хорошо организован и легко понятен, но может улучшиться в плане readability, maintainability и производительности. В статье описывается пример программы на языке Delphi, которая использует файл-карту для отображения данных в памяти и обмена информацией между процессами. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |