Тәжірибелік жұмыс №10 «Мәтіндік редактор»
Қадам 1. Пішінді TextEditor атпен атау және жобаны Editor.dpr атпен сақтау. (Пішін үшін фирмалық таңбашаны орнатуды, сонымен бірге тақырыбы мен қосымша үшін де таңбашаны, барлық батырмаларға көмекші кеңесті орнатуды ұмытпаңыздар.)
Қадам 2. Пішінге Panel1 құрауышын орналастырыңыздар және оның қасиеттерін орнатыңыздар (осы және басқа қасиеттердің не үшін тағайындалғанын міндетті түрде қарау.)
Align = alTop;
Caption = ’’;
Қадам 3. Пішіге Memo1 құрауышын орналастырыңыздар және оны қасиеттерін беріңіздер
Align = alClient;
Lines = ’’;
WordWrap = TRUE;
ScrolBars = ssBoth;
HideSelection = False; (фокус басқа құрауышқа өткенде ерекшеленген мәтіннің ерекшеленуі өшпейді).
Қадам 4. Пішінге келесі қасиеттері бар OpenDialog1 құрауышын орналастырыңыздар
DefaultExt = TXT;
Filter = ’Текстовые файлы | *.txt’ + ’Все файлы | *.*’;
Title = ’Открытие текстового файла’;
Options (TRUE – ні орнату)
ofHideReadOnly - диалог терезесінен “Открыть только для чтения” қосқышы жойылады ”;
ofFileMustExist - егер жоқ файл таңдап алынатын болса, онда қате туралы хабарлама генерацияланады;
ofNoReadOnlyReturn - егер ReadOnly типті файл таңдап алынса, онда қате туралы хабарлама шығады.
Қадам 5. Пішінге келесі қасиеттері бар SaveDialog1 құрауышын орналастырыңыздар
DefaultExt = TXT;
Filter = ’Текстовые файлы | *.txt’ + ’Все файлы | *.*’;
Title = ’Сохранение текстового файла’;
Options (установить в TRUE)
ofHideReadOnly
ofNoReadOnlyReturn
ofOverwritePrompt - бар файл таңдап алынған кезде қате туралы хабарлама генерацияланады.
Қадам 6. Панелге &Open атпен батырманы орналастырыңыздар және келесі OnClick оқиғасының өңдеуішін жазыңыздар (міндетті түрде әр команданың мағынасын түсініңіздер)
With OpenDialog1 do
if Execute then begin
Memo1.Lines.LoadFromFile(FileName);
Caption:='TextEditor - '+ExtractFileName(FileName);
SaveDialog1.FileName:=FileName;
FileName:='';
end;
Қадам 7. Панелге &Save атпен батырманы орналастырыңыздар және OnClick оқиғасының өңдеуішін жазыңыздар:
Memo1.Lines.SaveToFile(SaveDialog1.FileName);
Қадам 8. Панелге Save&As атпен батырманы орналастырыңыздар және OnClick оқиғасының өңдеуішін жазыңыздар:
With SaveDialog1 do
if Execute then begin
Memo1.Lines.SaveToFile(FileName);
Caption:='TextEditor - '+ExtractFileName(FileName);
end;
Қадам 9. Панелге E&xit атпен батырманы орналастырыңыздар және OnClick оқиғасының өңдеуішін жазыңыздар:
Close;
Қадам 10. Пішінге OnApply оқиға өңдеуіші бар FontDialog1 құрауышын орналастырыңыздар
Memo1.Font := FontDialog1.Font;
Қадам 11. Панелге &Font атпен батырманы орналастырыңыздар және OnClick оқиғасының өңдеуішін жазыңыздар:
With FontDialog1 do
if Execute then Memo1.Font:=Font;
Қадам 12. Пішінге PrinterSetupDialog1 құрауышын орналастырыңыздар.
Қадам 13. Панелге Printer Set&up атпен батырманы орналастырыңыздар және OnClick оқиғасының өңдеуішін жазыңыздар:
PrinterSetupDialog1.Execute;
Қадам 14. Пішінге PrintDialog1 құрауышын орналастырыңыздар
Қадам 15. Панелге &Print атпен батырманы орналастырыңыздар және OnClick оқиғасының өңдеуішін жазыңыздар:
var FileOut : TextFile;
k : Integer;
begin
if PrintDialog1.Execute then begin
AssignPrn(FileOut);
Rewrite(FileOut);
Printer.Canvas.Font:=Memo1.Font;
for k:=0 to Memo1.Lines.Count-1 do
Writeln(FileOut,Memo1.Lines[k]);
CloseFile(FileOut)
end;
end;
Принтермен жұмыс істеу процедурасы Printers модулінде орналасқан. Оның атын Unit1 модулінің interface бөлімінің uses тізімінде белгілеңіздер.
Қадам 16. Панелге Fi&nd атпен батырманы орналастырыңыздар және OnClick оқиғасының өңдеуішін жазыңыздар:
FindDialog1.Execute;
Қадам 17. Панелге &Replace атпен батырманы орналастырыңыздар және OnClick оқиғасының өңдеуішін жазыңыздар:
ReplaceDialog1.Execute;
Қадам 18. Пішінге FindDialog1 және ReplaceDialog1 құрауыштарын орнатыңыздар және Options тобының жалпы қасиеттеріне TRUE мәнін орнатыңыздар
frHideMachCase - “С учетом регистра” қосқышын тығып қояды,
frHideWholeWord - “Только слово целиком” қосқышын тығып қояды,
frHideUpDown - іздеу бағытын таңдау батырмаларын тығып қояды.
Қадам 19. FindDialog1 құрауышының OnFind оқиға өңдегішін анықтау:
Өңдеуіштің мәтіні
|
Түсініктеме
|
var Buff,FT,P : PChar;
BuffLen : Integer;
|
Көмекші айнымалылардың сипаттамасы.
|
Begin
With Sender as TfindDialog do begin
|
Процедураның басында төменде қолданылатын қасиеттер мен әдістер TFindDialog класының объектісі ретінде қарастырылатын Sender (оқиға көзі) объектісіне қатысты екені көрсетіледі.
|
BuffLen:=Memo1.GetTextLen+1;
GetMem(Buff,BuffLen);
Memo1.GetTextBuf(Buff,BuffLen);
|
Memo1 – дегі мәтін динамикалық Buff айнымалысына көшіріледі. Ол үшін BuffLen - ге мәтіннің ұзындығы кіргізіледі, Buff айнымалысына жадыда орын бөлінеді және көшіру орындалады.
|
GetMem(FT,Length(FindText)+1);
StrPCopy(FT,FindText);
|
Аналогиялық түрде FT динамикалық айнымалысына іздеу жолындағы мәтін көшіріледі.
|
P:=Buff+Memo1.SelStart+
Memo1.SelLength;
|
P айнымалысына іздеудің басқы адресі кіргізіледі.
|
P:=StrPos(P,FT);
|
P айнымалысына іздеу үлгісіне сай келетін бағыныңқы жолдың адресі кіргізіледі.
|
If P=Nil
then MessageBeep(0)
|
Егерадрес ноөлдік болса (үлгі табылған жоқ), онда дыбыстық дабыл генерацияланады.
|
else begin
Memo1.SelStart:=P-Buff;
Memo1.SelLength:=Length(FindText)
end;
|
Әйтпесе, егер үлгі табылса, ол Memo1 – де ерекшеленеді.
|
FreeMem(FT);
FreeMem(Buff,BuffLen);
end;
end;
|
Процедура аяқталғанда динамикалық айнымалылар бүлінеді.
|
Қадам 20. ReplaceDialog1 құрауышы үшін OnFind өңдеуішін FindDialog1 құрауышының оқиғасы ретінде (Object Inspector терезесінде) көрсету керек (сондықтан бұл процедурада FindText іздеу жолы нақты FindDialog1 немесе ReplaceDialog1 құрауыштарынан емес, оқиға көзі Sender – ден алынады.).
Қадам 21. ReplaceDialog1 құрауышы үшін OnReplace оқиға өңдеуішінің мәтінін енгізу.
Өңдеуіштің мәтіні
|
Түсініктеме
|
With ReplaceDialog1 do
Repeat
|
Цикл ұйымдастырылады.
|
if Memo1.SelText<>FindText
then FindDialog1Find(Sender);
|
Егер ерекшеленген үзінді іздеу үлгісіне сай келмесе, онда FindDialog1 құрауышының OnFind оқиға өңдеуішін шақыру арқылы келесі сай келетін үзіндіні табу.
|
if Memo1.SelLength=0 then Break;
|
Егер үзінді табылмаса, онда цикл жабылады.
|
Memo1.SelText:=ReplaceText;
|
Ерекшеленген үзіндіні айырбас үлгісіне айырбастау.
|
until not (frReplaceAll in Options);
|
Егер “Заменить все” режимі таңдалмаса, онда циклді тоқтату керек.
|
Өз беттеріңше: (тәжірибелік жұмыстан 5 деген баға алам деушілер 3 және 6 пункттерін орындаулары қажет)
1. Панельге келесі функцияларды орындауға мүмкіндік беретін батырманы қосу
Вариант
|
Тапсырма
|
1, 6, 11, 16, 21, 26
|
Мәтінді жолдағы сөздер саны бойынша сұрыптау
|
2, 7, 12, 17, 22, 27
|
Жолдарды кері ретпен қою
|
3, 8, 13, 18, 23, 28
|
Мәтінді жолдағы цифрлар саны бойынша сұрыптау
|
4, 9, 14, 19, 24, 29
|
Мәтінді жолдағы бос орын саны бойынша сұрыптау
|
5, 10, 15, 20, 25, 30
|
Жолдарды ереже бойынша қою 0-1, 2-3, 4-5,…
|
2. Панельге ‘proba.txt’ файлына келесілерді сақтауға мүмкіндік беретін батырманы қосу
Вариант
|
Тапсырма
|
1, 7, 13, 19, 25
|
Соңғы K жолды
|
2, 8, 14, 20, 26
|
Жұп санды сөздерден тұратын жолды
|
3, 9, 15, 21, 27
|
L - ден басталатын K жолды
|
4, 10, 16, 22, 28
|
Тура К сөзден тұратын жолды
|
5, 11, 17, 23, 29
|
Бірдей сөздер кезігетін жолды
|
6, 12, 18, 24, 30
|
Барлық символдары өзгеше жолдарды
|
K және L сандары панелде орналасқан SpinEdit құрауышына енгізіледі (SpinEdit - тегі мәндер мәтіннің жағдайына сай келуі керек).
3. Панельге файлдан (файлдың аты диалог терезесінде анықталады) 2 – ші тапсырмада (варианта – сіздікінен кейінгі вариант) берілген жолдарды есептеуге мүмкіндік беретін батырманы қосу. Жолдар бар мәтінді ауыстырады немесе оған қосылып жазылады (басына, аяғына, N – ші жолдан кейін – қолданушының таңдауына қарай). Барлық баптау диалогтың уақытында негізгіні айырбастайтын диалог панельінде анықталады. Диалогты болдырмау мүмкіндігін де қарастырыңыздар.
4. Мәтіннің көрінісінің түсін таңдауға тағайындалған батырманы қосу.
5. TMainMenu құрауышының көмегімен жобаның негізгі менюін ұйымдастыру қажет, оған негізгі панельдің барлық батырмаларының функциясын саналы түрде орналастырыңыздар (Әрине, бұл функцияларды қайта жазбай, меню пунктінің OnClick оиғасының дайын өңдеуішін тағайындауға (атын қайта өзгерту) болады).
6. Тәжірибелік жұмыстан 5 деген баға алам деушілер, жобада қосымшаның 2 және 3 пункттерін іске асырулары қажет (төменнен қараңыздар).
Қосымша:
1. Memo - құрауышы қосымшамен жұмыс істегенде ғана қолдануға болатын қасиеттердентұрады.
Қасиет
|
Мән
|
SelText
|
Мәтіннің ерекшеленген үзіндісі
|
SelLength
|
Ерекшеленген үзіндінің ұзындығы
|
SelStart
|
Ерекшеленген үзіндінің бірінші символының нөмірі, барлық мәтіннің басынан бастағанда. Егер ерекшелеу жоқ болса, онда тышқанның нұсқағышы мәтіннің ішінде
|
Modified
|
TRUE, егер мәтін өзгерсе.
|
2. Келесі бағдарламалық код Memo1 құрауышындағы тышқанның ңұсқағышының орынын анықтауға мүмкіндік береді:
var X,Y : Integer;
begin
Y:=Memo1.Perform(EM_LINEFROMCHAR, Memo1.SelStart, 0);
X:=Memo1.Perform(EM_LINEINDEX, Y, 0);
Y:=Y+1;
X:=Memo1.SelStart-X+1;
end;
3. Memo1 редактіріндегі әрекетті болдырмау үшін келесі бағдарламалық кодты қолдануға болады:
Memo1.Perform(EM_UNDO, 0, 0);
Әрекетті болдырмау мүмкіндігін тексеру үшін функцияның мәнін нөлмен салытыруға болады:
Memo1.Perform(EM_CANUNDO, 0, 0);
Достарыңызбен бөлісу: |