Файлдардың жадыдағы бейнеленуі
Файлдарды бейнелеу үш тәсілмен жүзеге асырылады.
Файлдарды құру және ашу
Алдымен файл
Function FileCreate(FileName:String):Integer;
функциясының көмегімен құрылып,
Function FileOpen(const Filename:String; Mode:LongWord): integer; функциясының көмегімен ашылады.
Екі функцияда да FileName– файл аты, файлға кіру маршруты көрсетілуі мүмкін. Mode параметрі файлға кіру режимін анықтайды және төмендегі мәндердің біреуін ғана қабылдайды: fmOpenRead - тек оқу үшін, fmOpenWrite - тек жазу үшін, fmOpenReadWrite - жазу және оқу. Or операциясының көмегімен бұл тұрақтыларды бірнеше программалар файлына бірлесе кіру мүмкіндігін реттейтін төмендегі операторлармен топтастыруға болады:
fmShareExclusive - бірлесе кіру мүмкіндігі рұқсат етілмейді; fmShareDenyWrite - басқа программаларға жазуға рұқсат етілмейді; fmShareDenyRead - басқа программаларға оқуға рұқсат етілмейді; fmShareDenyNone - бірлесе кіру шектелмеген. Егер операция ойдағыдай орындалмаса екі функцияда құрылған (ашылған) файлдың дескрипторын береді немесе 0-ге тең.
Бейнелеу объектісін құру
Екінші кезеңде жадыда бейнелеу объектісі құрылады. Ол үшін төмендегідей функция пайдаланылады:
Function CreateFileMapping(hFile:Thandle;
lpFileMappingAttributes: PsecurityAttributes; flProtect,
dwMaximumSizeHeigh, dwMaximumSizeLow: Dword;
lpName:PChar):Thandle;
Мұндағы hFile – файл дескрипторы; lpFileMappingAttributes - құрылатын объектінің ұрпақ объект құра алатындығы жөніндегі құрылымды анықтайтын көрсеткіш; flProtect - файлды бейнелеу терезесінде қолданылатын қорғау типін анықтайды; dwMaximumSizeHeigh, dwMaximumSizeLow - сәйкес үлкен және кіші 32 разрядты файл өлшемі, егер ұзындығы 4 ГБайтқа дейінгі файлды бейнелеу қажет болса, онда – ноль мәні меншіктеледі, ал dwMaximumSizeLow – файл ұзындығы, егер екі параметрде нольге тең болса, онда бейнелеу терезесінің өлшемі файл өлшеміне тең; lpName - бейнеленетін объектінің атауы.
FlProtect параметрі – файлды көру терезесіне қолданылатын қорғау типін береді және ол төмендегі мәндердің бірін қабылдауы мүмкін:
PAGE-READONLY-файл тек оқу үшін (файл fmOpenRead режимінде ашылған немесе құрылған болуы мүмкін); PAGE-READWRITE - файлды оқуға және оған жаңа мәндер жазуға болады (файл fmOpenReadWrite режимінде ашылады); PAGE-WRITECOPY - файл жазу немесе оқу үшін ашылады, бірақ жаңартылған мәліметтер жадының жеке қорғалған бөлігінде сақталады (бейнеленген файлдар программалармен бөлінуі мүмкін), бұл режимде әрбір программа жадының жеке бөлігінде өзгерісті сақтайды; файл fmOpenReadWrite немесе fmOpenWrite режимінде ашылады; қорғаудың бұл типін Windows 95/98–де пайдалануға болмайды. Or операциясының екі гімен ашылады.
у және ашун жүзеге асырылады.
а мағынасы бар және мәліметтер блогының өлшемін береді.
көмегімен flProtect параметріне төмендегідей атрибуттарды жалғауға болады:
Sec_Commit - бейнелеуге арналған физикалық жадыны бөліп көрсетеді; SEC_IMAGE - файл образын атрибуттарды бейнелеу жөнінде ақпарат алынады; SEC_NoCaSHE - бейнеленетін мәліметтерге оперативті жадыдан орын бөлінбей, тікелей дискіге жазылады; SEC_RESERVE - физикалық жадыдан орын бөлінбей, бірден бөлім беттері резервтеледі.
Көру терезесін құру
Үшінші кезеңде көру терезесі құрылады, яғни мәліметтерді программаның адрестік кеңістігінде бейнелеу:
function MapViewOfFile(hFileMappingObject: Thande; dwDesiresAccess: DWord; dwFileOffSetHigh, dwFileiffSetLow, dwNumberBytes – ToMap:DWord):Pointer.
Мұнда hFileMappingObject -объектіні бейнелеу дескрипторы, dwDesiresAccess - мәліметтерге кіру тәсілін анықтайды және төмендегі мәндердің біреуін қабылдауы мүмкін: File_Map_Write - оқуға және жазуға мүмкіндік береді, бұдан CreateFillMapping функциясында PageReadONLY немесе Page_ReadWrite атрибуты пайдаланылуы мүмкін; File_Map_All_Access атрибутының жұмысы File_Map_Write жұмысымен бірдей; File_Map_Copy - мәліметтерді оқуға және жазуға болады, бірақ жаңартылған мәліметтер жадының жеке қорғалған бөлігінде сақталады; CreateFileMapping функциясында Page_Write атрибуты пайдаланылуы тиіс; dwFileOffSetHeigh, dwFileiffSetLow - файл басынан ығысатын сәйкес үлкен және кіші разрядтарды анықтайды және сол жерден бейнелеу орындалады; dwNumberBytesToMap - бейнелеу терезесінің ұзындығын анықтайды (0 – ұзындық файл ұзындығына тең).
Бейнелеу ресурстарын босату
Бейнеленген мәліметтерді пайдаланғаннан кейін терезені бейнелеу ресурстарын
Function UnMapViewOfFile(lpBaseAdress:Pointer):Bool;
функциясының көмегімен босату керек, оны шақыратын жалғыз параметр бірінші бейнеленген байттың адресінен тұруы тиіс, яғни ол MapViewOfFile функциямен шақырылатын адрес.
Бейнелеу объектісін және файлдың өзін жабу
Function CloseHandle(hObject:THandle)
функциясының көмегімен орындалады.
Файлдармен жұмыс істейтін объектілі модель
Delphi ортасында TStream абстрактылы класы пайдаланылады (мәліметтер ағыны), ол объектілермен жұмыс істегендегідей файлдар жұмысы үшін негіз болады. Объектілер жағдайында ақпарат тасымалдаушы дискілік файл, таспалық тасымалдаушы немесе оперативті жады болып табылады. TStream арнайы ұрпағында файлдық объектіге толық кіру мүмкіндігін ашатын Read, Write және Seek стандартты әдістері анықталған. Объект конструкторымен құрылып, деструкторымен өшіріледі.
Келесі мысалда Edit1.Text атауымен сақталған файл Edit2.Text файлына көшіріледі.
Procedure TForm1.CopyFileClick(Sender: TObject);
Var
Stream1,Stream2:TStream;
Begin
Stream1:=TFileStream.Create(Edit1.text, fmOpenRead or fmShareDenyWrite);
Try
Stream2:= TFileStream.Create(Edit2.text, fmOpenCreate or fmShareDenyRead);
Try
Stream2.CopyForm(Stream1, Stream1:Size);
Finally
Stream2.Free;
Finally
Stream1.Free;
End;
TStream абстрактылы Read класы Write және кілттік әдістерді хабарлайды, ол төмендегі операцияларды орындау үшін оның мұрагерлерінде жабылады:
-
TFileStream - файлдармен мәліметтер алмасу;
-
TSringStream - ұзын жолмен (жадыда) мәліметтер алмасу;
-
TMemoryStream - жадыдағы мәліметтермен алмасу;
-
TBLOBStream – BLOB типті мәліметтер өрісін оқу/жазу (Binary Large Object – үлкен екілік объект);
-
TWinSocketStream – OLE сокетті жалғанатын мәліметтермен алмасу;
-
TOLEStream – OLE форматыфндағы мәліметтермен алмасу.
Кез-келген мұрагер CopyForm әдісінің көмегімен басқа ағынның мазмұнын оқи
алады. Осындай тәсілмен, файлдық мәліметтерді жадыға орналастыруға немесе керісінше – жадыда орналасқан мәліметті дискідегі файлға жазуға болады.
Дәл осылайша TStream класынан басқа да пайдалы әдістер жиынтығы шығады, оның ішінде:
-
Seek - ағынның ағымдағы орнынан бастап, қажетті байт мөлшерін жібереді;
-
ReadBuffer - ағынға буферден қажетті байт мөлшерін оқиды;
-
ReadComponent - ағыннан компонент қасиетін оқиды;
-
WriteBuffer - берілген ұзындықтағы буфердегі мәлімет мазмұнын ағынға жазады;
-
WriteComponent - ағынға компонент қасиетін жазады.
Келесі BbRunClick оқиға өңдеушісі mmOutput редакторына bbRun батырмасының қасиетін шығарады;
Программаға түсініктеме. Алдымен компоненттің қасиеті MemSourceStream ағынына жазылады. Осылайша алынған екілік мәліметтер оқылатын түрге келу үшін ObjectBinarryToText процедурасы пайдаланылады, ол MemSourceStream ағынынан мәліметтерді түрлендіріп MemSourceStream ағынына орналастырады. Осы екінші ағындағы мәліметтерді mmOutput терезесіне шығарады.
ТАПСЫРМА:
Тапсырма №1. 100000 кездейсоқ нақты саннан тұратын дискілік файлды құратын программа мысалын қарастырайық (файлдың ұзындығын «массив ұзындығы» редакторының мәнін өзгерту арқылы таңдауға болады). “Test.dat” атты файл файлды жадыда бейнелеу жолымен құрылады – жады батырмасы және дәстүрлі тәсілмен файл батырмасы. Екі жағдайда да уақыты көрсетіледі (процессор – 400 МГц, жады – 64 МБайт). Жиілік пен жады қаншалықты көп болса, уақыттың арасындағы айырмашылықта соғұрлым үлкен болады.
Тапсырма №2.
Memo өрісіне мәтіндік файлдың мазмұнын шығаратын программа құру.
Тапсырма №3.
Күндік температура туралы ақпараттан тұратын, мәтіндік файл түрінде құрылған “Ауа райы” мәліметтер қорына мәлімет қосатын программа жазыңдар. Датаны енгізу үшін MonthCalendar компонентін пайдаланыңдар.
Тапсырма №4.
N aдамнан тұратын оқушылардың оқу үлгерімі жөніндегі тізімдегі мәліметті файлға жазатын және одан оқитын программа құрайық. Файлдың әрбір жазуы оқушының аты-жөнінен және үш пәннен: математика, физика, химия пәндерінен алған бағаларынан тұратын болсын. Сонымен қатар, жазулар алфавиттік ретпен сұрыпталып, мәтіндік файл түрінде сақталсын.
ТАПСЫРМАНЫ ОРЫНДАУҒА ӘДІСТЕМЕЛІК НҰСҚАУЛАР:
Тапсырма №1.
Unit Unit1;
Interfase
Uses
Windows, Messages, SysUnits, Classes, Graphics, Countrols, Forms, Dialogs, StdCtrls, ComCtrls, Spin;
Type
TForm1=class(TForm)
btMem:Tbutton;
btFile:Tbutton;
se:TSpinEdit;
Label:TLabel;
Pb:TProgressBar;
Label2:TLabel;
btMem:Tlabel;
btFile:Tlabel;
Procedure btMemClick (Sender:TObject);
Procedure btFileClick (Sender TObject);
Private {Private declarations}
Public {Public declarations }
End
Var
Form1:TForm1;
Implementation {SR*.DFM}
Procedure TForm1.btMemClick (Sender:TObject);
//Бейнелеу жолымен файл құру
Type
Real=^Real;
Var HfileHMap:Thandle;
AdrBase, AdrReal:PReal;
K:integer;
Fsize:Cordinal;
BegTime:TdateTime;
Begin
BegTime:=Time; //Жіберілу уақытын тіркейміз.
//ProgressBar-ны дайындаймыз.
Pb.Max:=se.Value;
Pb.Position:=0;
Pb.Show;
Fsize:=se.Value*SizeOf(Real);//Файл ұзындығы!
HFile:=FileCreate(‘test.dat’);//Файл құрамыз!
If Hfile=0 then //қате!
Raise Exception.Create(Файл құруда қате бар!)
Try//Файлды жадыда бейнелейміз.
HMap:=CreateFileMapping(HFile, Nill, Page_ReadWrite, 0, Fsize, Nill);
If Hmap=0 then //қате!
Raise Exception.Create(‘Файлы бейнелеуде қате бар’);
Try//көру терезесін құрамыз:
AdrBase:=MapViewOfFile(Hmap, File_Map_Write, 0, 0, FSize);
IfadrBase=Nil then //қате!
Raise Exception.Create(‘Файлы көру мүмкін емес’);
//Құру терезесін дұрыс шығару үшін бастапқы адресті сақтаймыз:
AdrReal:=AdrBase;
For k:=1 to se.Value do
Begin
AdrReal^:=Random; //Файлға жаңа санды орналастырамыз!
//Ағымдағы адресті шығарудан бұрын оны Integer немесе Cardinal типіне келтіру қажет!
AdrReal”=Pointer(Integer(AddReal)+SizeOf(Real));
LbMem.Caption:=IntToStr(k);
Pb.Position:=k;
Application.ProcessMessage;
End; //Көру терезесін бостамыз!
Unmap ViewofFile(AdrBase)
Finally //Бейнелеуден босатамыз
CloseHandle(HMap) End;
Finally //Файлды жабамыз!
CloseHandle(HFile) End; //Есептеу уақытын хабарлаймыз.
Pb.Hide;
LbMem.Caption:=TimeToStr(Time_BegTime) End;
Procedure Tform1.btFileClick(Sender.TObject);
//Файлды әдеттегі әдіспен құру
var F: File of Real; K: Integer;
BegTime:TdateTime;
R:Real; //Writе операторына арналған буферлік айнымалы
Begin
BegTime:=Time; //Уақытты іске қосамыз
//ProgressBar дайындалады:
Pb.Max:=se.Value;
Pb.Position:=0;
Pb.Show; //Файл құрамыз
AssignFile(F, ‘test.dat’);
Rewrite(F);
For I:=1 to se.Value do
Begin R:=Random;
//Write операторын шақыру параметрі тек //айнымалы болуы мүмкін
Write(F,R); LbFile.Caption:=IntToStr(k);
Pb.Position:=k;
Application.ProcessMessages;
End;
CloseFile(F); Pb.Hide;
LpFile.Caption:=TimeToStr(Time_BegTime)
End; End.
Тапсырма №2.
//мәтіндік файлды көру және жөндеу
unit rd_;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
Type
TForm1=class(TForm)
Memo1:TMemo;
Edit1:TEdit;
Button1:TButton;
Button2:TButton;
CheckBox1:TCheckBox;
Procedure Button2Click(Sender:TObject);
Procedure Button1Click(Sender:TObject);
Procedure Edit1KeyPress(Sender:TObject; var Key:Char);
Procedure CheckBox1Click(Sender:TObject);
Private {Private declarations}
Public {Public declarations}
End;
Var
Form1:TForm1;
Implementation {SR*.dfm} //жөндеу алаңында клавишты басу
Procedure TForm1.Edit1KeyPress (Sender:TObject; var Key: Char);
Begin
If Key=#13 // клавишы
Then Button1.SetFocus;
End;
//ашу батырмасын басу
Procedure TForm1.Button1Click(Sender:TObject);
Var f:TextFile; //файл
fName:String[80]; //файл аты
buf:String[80]; //жолды оқуға арналған буфер
begin
fName:=Edit1.text;
AssignFile(f, fName);
Try Reset(f); //файлды оқу үшін ашу
except
on EInOutError do
begin
ShowMessage(‘Файлға кіруде қате бар’+ fName);
Exit; end; end; //файлдан оқу
While not EOF(f) do
Begin
Readln(f, buf); //файлдан жолды оқу
Memo1.Lines.Add(buf); //Memo1 өрісіне жол қосу
End;
CloseFile(f); //файлды жабу
end; // Сақтау батырмасын басу
procedure TForm1.Button2Click(Sender: TObject);
var
f: TextFile; // файл
fName: String[80]; // файл аты
i: integer;
begin
fName:=Edit1.Text;
AssignFile(f, fName);
try
Rewrite(f); // файлды қайта жазу үшін ашу
except
on ElnOutError do
begin
ShowMessage(‘Файлға кіруде қате бар’+fName);
exit;
end;
end;
// файлға жазу
for i:=0 to Memo1.Lines.Count do // Memo редакторындағы жолдар нөлден бастап нөмірленген
writeln(f, Memo1.Lines[i]);
CloseFile(f); // файлды жабу
MessageDlg(‘мәліметтер файлға жазылды’,mtInformation,[mbOk],0);
end;
// Тек оқу үшін ауыстырып қосқышын басу
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if not CheckBox1.Checked then
begin
Memо1.ReadOnly:=False;
Button2.Visible:=True
end
else
begin
Memo1.ReadOnly:=True; // жөндеуді шектеу
Button2.Visible:=False; // Сақтау батырмасы жұмыс істемейді
end;
end;
end.
Тапсырма №3.
unit pogoda_;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
Type
TForm1=class(TForm)
MonthCalendar1: TMonthCalendar;
Label1: TLabel;
Button1: TButton;
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure ButtonClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
implementation
{ $R*.dfm }
const
DBNAME=’pogoda.txt’;
var
db:TextFile; //файл – мәліметтер қоры
//Жұмыстың басы. Мәліметтер қоры файлын ашамыз немесе құрамыз.
Procedure TForm1.FormCreate(sender:TObject);
var
r:integer; // пайдаланушының жауабы
begin
AssignFile(db,DBNAME);
Try
Append(db); // қате болу мүмкін
except
on E:EInOutError do
begin
r:=MessageDlg(‘(pogoda.txt)мәліметтер қоры файлы табылған жоқ.’+
#13+’Файл құру керек
?’,mtWarining,[mbOk,mbCancel],0);
if r=mrOK
then begin
Rewrite(db); //Файл құрамыз
ShowMessage(‘мәліметтер қоры файлы құрылады!’);
End
Else Application.Terminate; //Программа жұмысын аяқтау
End;
End;
Edit1.Enabled:=True;
Button1.Enabled:=True;
End;
//Температура өрісінде клавишты басу
Procedure TForm1.Edit1KeyPress(Sender:TObject; var Key:Char);
Begin
Case Key of
‘0’..‘9’,#8: ; // цифрлар және
#13: // клавишы
If Length(Edit1.Text)<>0
then Button1.SetFocus;
‘,’,’.’ begin // ондық нүкте
Key:=DecimalSeparator;
If Pos(DecimalSeparator,Edit1.Text) <> 0
then
then
else Key:=Char(0);
else Key:=Char(0); // қалған символдар рұқсат етілмейді
end;
end;
// Қосу батырмасын басу
Procedure TForm1.Button1Click(Sender: TObject);
begin
if Length(Edit1.Text)=0
then ShowMessage(‘Температураны енгіз’)
else begin
writeln(db,
FormatDateTime(‘dd/mm/yy’,MonthCalendar1.Date),
‘’,Edit1.Text);
Edit1.Text:=’’;
End;
End;
//Программа жұмысының аяқталуы
Procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CloseFile(db); //Файлды жабу
end;
end.
Тапсырма №4.
Файлдарды сақтау және оқу жұмысын SaveDialog1 және OpenDialog1 компоненттері арқылы ұйымдастырылады. Бұл компоненттер бетінде Dialogs орналасқан (ол жөнінде ІV тарауда айтылған).
Енді оқиғаны өңдеуші процедуралар құруды қарастырайық. әрбір компоненттің Name қасиетін: BitBtn1-ді -BitBtnNew, BitBtn2-ні -BitBtnOpen, BitBtn3-ті -BitBtnSort, BitBtn4-ті – BitBtnSave деп алмастырайық. Әрбір батырманы жылдам екі рет басу арқылы сәйкес оқиғаларды өңдеуші процедураларды ашып, төмендегі программа мәтінін енгіземіз.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin, Buttons, Grids;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
BitBtnNew: TBitBtn;
BitBtnOpen: TBitBtn;
BitBtnSort: TBitBtn;
BitBtnSave: TBitBtn;
SaveDialog1: TSaveDialog;
OpenDialog1: TOpenDialog;
SpinEdit1: TSpinEdit;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure BitBtnSortClick(Sender: TObject);
procedure BitBtnNewClick(Sender: TObject);
procedure SpinEdit1Change(Sender: TObject);
procedure BitBtnOpenClick(Sender: TObject);
procedure BitBtnSaveClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var mzap:array[1..20] of zap; //жазулар массивін хабарлау
FileZap:file; // мәтіндік файлды хабарлау
FileNameZap,FileNameText:String; //жазулар файлы мен мәтіндік файлдардың атаулары
n:integer; //жазулар массивінің ағымдағы элементтер саны
//форма құру процедурасы
var
Form1: TForm1;
Implementation {$R *.dfm}
type
zap=record // жазуды хабарлау
fio:string[20];
mat, phiz, chem:integer;
end;
var mzap:array[1..20] of zap; // жазулар массивін хбарлау
fileZap:file of zap; // жазулар файлын хабарлау
fileText:textfile; //мәтіндік файлды хабарлау
filenameZap,FileNameText:string; // жазулар файлы мен мәтіндік файлдардың атаулары
n:integer; //жазулар массивінің ағымдағы элементтер саны
//форма құру процедурасы
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
with stringGrid1 do
begin //StringGrid 1 ұяшықтарын толтыру
Cells[0,0]:='ғ';
Cells[1,0]:='fio';
Cells[2,0]:='matem';
Cells[3,0]:='phyzics';
Cells[4,0]:='chemstry';
end;
BitbtnSort.Hide; // батырманы жасыру
{BitbtnSave.Hide;}
end;{}
// Сұрыптауды орындайтын процедура
procedure TForm1.BitBtnSortClick(Sender: TObject);
var i,j:integer; vper:zap;
begin
for i:=1 to n do
with StringGrid1, mzap[i] do
begin
fio:=Cells[1,i];
mat:=StrToInt(Cells[2,i]);
phiz:=StrToInt(Cells[3,i]);
chem:=StrToInt(Cells[4,i]);
end; // көпіршікті сұрыптау әдісі
for i:=2 to n do
for j:=n downto i do
if mzap[j-1].fio>mzap[j].fio then
begin
vper:=mzap[j-1];
mzap[j-1]:=mzap[j];
mzap[j]:=vper;
end;
for i:=1 to n do // StringGrid1 ұяшығын жазулар массивінің өрістерімен толыру
with StringGrid1, mzap[i] do
begin Cells[0,i]:=intTostr(i);
Cells[1,i]:=fio;
Cells[2,i]:=intTostr(mat);
Cells[3,i]:=intTostr(phiz);
Cells[4,i]:=intTostr(chem);
end;
end;
// жаңа жазу файлын құру
procedure TForm1.BitBtnNewClick(Sender: TObject);
var
i:integer;
begin
if MessageDlg('Файл мазмұнының өшірілмейтініне сенімдісі
бе?',mtConfirmation, mbYesNoCancel,0)<>mrYes
Then
begin
for i:=1 to n do
with StringGrid1, mzap[i] do
begin
fio:=Cells[1,i];
mat:=StrToInt(Cells[2,i]);
phiz:=StrToInt(Cells[3,i]);
chem:=StrToInt(Cells[4,i]);
end;
with SaveDialog1 do
begin
Title:='Create file'; // сұхбат терезе тақырыбы
if Execute then
begin
FileNameZap:=Filename;
AssignFile(FileZap, FileNameZap);
Rewrite(FileZap); //файлды жазу үшін ашу
for i:=1 to n do
write(FileZap, mzap[i]); // файлға жазулар массивін жазу
end;
end;
end;
end;
// батырманың өлшемінің өзгеруін басқаратын батырма
end;
//батырманың өлшемінің өзгеруін басқаратын батырма
procedure TForm1.SpinEdit1Change(Sender: TObject);
var i,m:integer;
begin
SpinEdit1.Text:='5';
m:=StrToInt(SpinEdit1.Text); // өлшемге жаңа мән меншіктеу
with StringGrid1 do
begin
RowCount:=m+1; // жолдар санын есептеу
if m>n then
for i:=n+1 to m do
begin
Cells[0,i]:=intToStr(i);
Cells[1,i]:='';
Cells[2,i]:='';
Cells[3,i]:='';
Cells[4,i]:='';
end;
end;
n:=m;
end;
//Open батырмасының процедурасы
procedure TForm1.BitBtnOpenClick(Sender: TObject);
var i:integer;
begin
with OpenDialog1 do
begin Title:='Openfile'; // сұхбат терезе тақырыбы
if Execute then
begin
FileNameZap:=FileName;
AssignFile(FileZap,FileNameZap);
Reset(FileZap);
n:=0; while not E of (FileZap) do
begin n:=n+1;
read(fileZap,Mzap[n]);
end;
SpinEdit1.text:=IntToStr(n);
StringGrid1.RowCount:=n+1;
for i:=1 to n do
with StringGrid1, MZap[i] do
begin
Cells[0,i]:=IntToStr(i);
Cells[1,i]:='fio';
Cells[2,i]:=IntToStr(mat);
Cells[3,0]:=IntToStr(phiz);
Cells[4,0]:=IntToStr(chem);
end; clouseFile(FileZap); end; end;
BitbtnSort.Show; BitbtnSave.Show; end; end;
// мәліметтерді мәтіндік файлда сақтау процедурасы
procedure TForm1.BitBtnSaveClick(Sender: TObject);
var i:integer;
begin
with SaveDialog1 do
begin
if Execute then
begin
Filenametext:=FileName;
AssignFile(FileText, FilenameText);
Rewrite(Filetext);
for i:=1 to n do
with MZap[i] do
writeln(Filetext, i:3,fio:20,mat:5,phiz:5,chem:5);
CloseFile(FileText);
end; BitbtnSort.Hide;
end;
end;
end.
Достарыңызбен бөлісу: |