Практикалық жұмыс №9 "Экрандық объектілерді сүйреу"
Экрандық объектілерді сүйреу тышқанның көмегімен жеке құрауыштардың арасында ақпаратты тиімді тасымалдауға мүмкіндік береді. Жолды бір тізімнен екінші тізімге сүйреу тетігін мысалда қарастырайық. Жоғарғы жақта жазбасы бар ListBox1 және ListBox2 құрауыштарынан тұратын жоба құрыңыздар. Бірінші тізімді апта аттарының атымен толтырыңыздар. Келесі қадамдар сүйреудің төрт қадамынан тұратын хабарламаны өңдеу мысалдарынан тұрады.
1 этап. Сүйреудің басталуы. Тышқанды сол жақ батырмасына басып жылжытқанда өрбиді. ListBox1 құрауышының DragMode қасиетіне dmAutomatic орнатыңыздар, яғни құрауыш өзіне осы этаптың өңделуін алады. Егер осы қасиетке dmManual орнататын болсақ, онда бағдарлама құрушы сүйреудің басын (мысалы, MouseDown оқиғасы бойынша) және оның тетігін іске қосуды (BeginDrag әдісі) өзі қолмен анықтауы керек болады. Сүйреуді бастау сәтінде құрауыш OnStartDrag оқиғасын өрбітеді. Осы қасиетті өңдеу оқиғасына мына жолды жазыңыздар:
Color:=clRed;
2 этап. Құрауыштан объектіні сүйреу. Тышқанның көрсеткішін құрауыштың үстінен жылжытқанда болатын сүйреуде ол OnDragOver оқиғасын өрбітеді. Осы оқиғаны өңдеудің келесі параметрлерін қарастырайық: Source - объект — сүйреудің көзі, X,Y – тышқанның көрсеткішінің координаталары, Accept – құрауыш сүйреп әкелінген ақпаратты қабылдай ма? жоқ па?, соны анықтайтын буль типтес айнымалы. ListBox2 құрауышының осы оқиғасы үшін келесі жолды жазыңыздар, ол тек ListBox1 құрауышынан ғана сүйреуге рұқсат береді:
Accept := Source=ListBox1;
3 этап. Ақпаратты толық құрауышқа лақтыру. Құрауыштан тышқанның батырмасын босатқан сәтте орындалатын сүйреу OnDragDrop оқиғасын өрбітеді. Осы оқиғаның өңдеуішіне сүйреу сәйкес келетін қимыл жазылуы керек. Біздің жағдайда ол жолды сол жақ тізіменен оң жақ тізімге тасымалдау қимылы. ListBox2.OnDragDrop оқиғасының өңдеуішіне ListBox1 тізімінде ерекшеленген жолды ListBox2 тізіміне қосатын операторды жазыңыздар:
with ListBox1 do ListBox2.Items.Add(Items[ItemIndex]);
4 этап. Сүйреуді аяқтау. Құрауыш - сүйреудің көзі оны босатқан сәтте OnEndDrag оқиғасын өрбітеді, оның Target параметрі басқа толық құрауышқа сәйкес келеді (біздің жағдайда ListBox2). Бұл оқиғаның өңдеуішіне бірінші тізімнен таңдап алынған жолды жоятын операторды және пішіннің түсін өзгертетін операторды жазыңыздар:
if Target = ListBox2 then
with ListBox1 do Items.Delete(ItemIndex);
Color := clYellow;
Компиляцияны орындаңыздар және сүйреу тетігінің жұмысын тексеріңіздер.
Өздік жұмысқа тапсырма №9_1
Екі ListBox тізімінен, Edit құрауышынан, Panel құрауышынан, екі батырмадан және төрт жазбадан тұратын жоба құрыңыздар. Берілген жоба келесі функциялардың жұмысын қамтамасыз етуі керек:
-
жолды Edit құрауышынан екі тізімге тасымалдау;
-
жолды бірінші тізімнен екінші тізімге тасымалдау және керісінше;
-
жолды қара панельге сүйреу арқылы жою;
-
файлдағы жолды бірінші тізімде оқу;
-
екінші тізімнің жолдарын файлға сақтау.
Көп таңдау жасалғанда барлық таңдап алынған жолдарды тасымалдау.
Edit - тен <Ctrl> пернесі басылған тасымал жасалғанда, көшірме алынады (тышқанның көрсеткішінің түрі – crCross).
Өздік жұмысқа тапсырма №9_2
Екі ListBox тізімдерінен, Edit құрауышынан және екі батырмадан тұратын жоба құрыңыздар. Ерекшеленген сөзді тасымал жасағанда орындалатын функцияларды іске асыратын бағдарлама құрыңыздар:
-
ListBox1 пішін: ListBox1 – дегі сөз қосарланады;
-
ListBox2 пішін: ListBox2 – дегі сөз жойылады;
-
ListBox1 ListBox2: сөздердің қарапайым тасымалдануы;
-
ListBox1 Edit1, ListBox2 Edit1: сөздердің орынмен ауысуы;
-
Edit1 ListBox1, Edit1 ListBox2: тышқанның сол жақ пернесі – тасымал, оң жағы – сөздің көшірмесі.
-
ListBox1 (ListBox2) Button1: файлдан барлық тізімді оқу;
-
ListBox1 (ListBox2) Button2: барлық тізімді файлға сақтау.
Көп таңдау жасалғанда барлық таңдап алынған жолдарды тасымалдау.
Edit1 – ден көшірмесін алғанда тышқанның көрсеткішінің түрі – crCross.
Ұсыныс :
Edit1 – ден сүйреудің бастамасын өңдеуді қолмен ұймдастырыңыздар, яғни Edit1.DragMode=dmManual орнатыңыздар және Edit1.OnMouseDown өңдеуішіне келесіні жазыңыздар (бұл толық емес):
if (Button=mbLeft) and (Edit1.Text<>'') then
Edit1.BeginDrag(False);
Практикалық жұмыс №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);
Достарыңызбен бөлісу: |