Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
{ Copyright © 1999 by Delphi 5 Developer's Guide - Xavier Pacheco and Steve Teixeira } unitMainFrm; interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; const
FName = 'test.txt'; type
TMainForm = class
(TForm) btnUpperCase: TButton; memTextContents: TMemo; lblContents: TLabel; btnLowerCase: TButton; procedure
btnUpperCaseClick(Sender: TObject); procedure
FormCreate(Sender: TObject); procedure
btnLowerCaseClick(Sender: TObject); public
UCase: Boolean; procedure
ChangeFileCase; end
; var
MainForm: TMainForm; implementation
{$R *.DFM} procedure
TMainForm.btnUpperCaseClick(Sender: TObject); begin
UCase := True; ChangeFileCase; end
; procedure
TMainForm.btnLowerCaseClick(Sender: TObject); begin
UCase := False; ChangeFileCase; end
; procedure
TMainForm.FormCreate(Sender: TObject); begin
memTextContents.Lines.LoadFromFile(FName); // Change to upper case by default. UCase := True; end
; procedure
TMainForm.ChangeFileCase; var
FFileHandle: THandle; // Handle to the open file. FMapHandle: THandle; // Handle to a file-mapping object FFileSize: Integer; // Variable to hold the file size. FData: PByte; // Pointer to the file's data when mapped. PData: PChar; // Pointer used to reference the file data. begin
{ First obtain a file handle to the file to be mapped. This code assumes the existence of the file. Otherwise, you can use the FileCreate() function to create a new file. } if
not
FileExists(FName) then
raise
Exception.Create('File does not exist.') else
FFileHandle := FileOpen(FName, fmOpenReadWrite); // If CreateFile() was not successful, raise an exception if
FFileHandle = INVALID_HANDLE_VALUE then
raise
Exception.Create('Failed to open or create file'); try
{ Now obtain the file size which we will pass to the other file- mapping functions. We'll make this size one byte larger as we need to append a null-terminating character to the end of the mapped-file's data.} FFileSize := GetFileSize(FFileHandle, nil
); { Obtain a file-mapping object handle. If this function is not successful, then raise an exception. } FMapHandle := CreateFileMapping(FFileHandle, nil
, PAGE_READWRITE, 0, FFileSize, nil
); if
FMapHandle = 0 then
raise
Exception.Create('Failed to create file mapping'); finally
// Release the file handle CloseHandle(FFileHandle); end
; try
{ Map the file-mapping object to a view. This will return a pointer to the file data. If this function is not successful, then raise an exception. } FData := MapViewOfFile(FMapHandle, FILE_MAP_ALL_ACCESS, 0, 0, FFileSize); if
FData = nil
then
raise
Exception.Create('Failed to map view of file'); finally
// Release the file-mapping object handle CloseHandle(FMapHandle); end
; try
{ !!! Here is where you would place the functions to work with the mapped file's data. For example, the following line forces all characters in the file to uppercase } PData := PChar(FData); // Position the pointer to the end of the file's data inc(PData, FFileSize); // Append a null-terminating character to the end of the file's data PData^ := #0; // Now set all characters in the file to uppercase if
UCase then
StrUpper(PChar(FData)) else
StrLower(PChar(FData)); finally
// Release the file mapping. UnmapViewOfFile(FData); end
; memTextContents.Lines.Clear; memTextContents.Lines.LoadFromFile(FName); end
; end
.