Модални облици нуде одређене карактеристике које не можемо имати када се приказују немодално. Најчешће ћемо приказати образац модално да изолирамо његове процесе од свега што би се у супротном могло догодити на главном обрасцу. Након што се ови процеси доврше, можда желите да знате да ли је корисник притиснуо дугме Саве или Цанцел да затвори модални образац. Можете да напишете занимљив код да бисте то постигли, али то не мора бити тешко. Делпхи испоручује модалне форме са својством МодалРесулт, које можемо прочитати како бисмо открили како је корисник напустио образац.
Следећи код враћа резултат, али позивна рутина га игнорише:
вар Ф: ТФорм2; започети Ф: = ТФорм2.Цреате (нула); Ф.СховМодал; Ф.Релеасе; ...
Горе приказани пример само приказује образац, омогућава му да нешто уради са њим, а затим га отпусти. Да бисмо проверили како је образац завршен, морамо искористити чињеницу да је СховМодал метода функција која враћа једну од неколико вредности МодалРесулт. Промените линију
Ф.СховМодал
до
ако Ф.СховМодал = мрОк онда
Потребан нам је неки код у модалном облику да бисмо поставили шта год желимо да преузмемо. Постоји више начина да набавите МодалРесулт јер ТФорм није једина компонента која има својство МодалРесулт - и ТБуттон га има.
Погледајмо прво ТБуттон-ов МодалРесулт. Покрените нови пројекат и додајте један додатни образац (Главни мени Делпхи ИДЕ: Датотека -> Ново -> Образац). Овај нови образац имаће назив "Форм2". Затим додајте ТБуттон (Име: 'Буттон1') у главни образац (Форм1), двокликните нови тастер и унесите следећи код:
процедура ТФорм1.Буттон1Цлицк (Пошиљалац: ТОбјецт); вар ф: ТФорм2; започети ф: = ТФорм2.Цреате (нула); покушатиако ф. СховМодал = мрОк онда Натпис: = 'Да' друго Натпис: = 'Не'; напокон ф. Издање; крај; крај;
Сада одаберите додатни образац. Дајте му два ТБуттона, а један означите са 'Саве' (Назив: 'бтнСаве'; Опис: 'Сачувај') и други 'Откажи' (Назив: 'бтнЦанцел'; Натпис: 'Откажи'). Изаберите дугме Саве и притисните Ф4 да бисте приказали Објецт Инспецтор, помичите се горе / доле док не пронађете својство МодалРесулт и подесите на мрОк. Вратите се у образац и одаберите дугме Откажи, притисните Ф4, одаберите својство МодалРесулт и подесите га на мрЦанцел.
То је тако једноставно. Сада притисните Ф9 да бисте покренули пројекат. (У зависности од подешавања окружења, Делпхи може затражити да сачувате датотеке.) Када се појави главни образац, притисните дугме1 који сте додали раније, да бисте приказали надређени образац. Када се прикаже подређени образац, притисните дугме Саве (Спреми) и образац се затвара, враћајући се на главни образац уз напомену да је у потпису написано „Да“. Притисните тастер главне форме да бисте поново отворили дечији образац, али овај пут притисните дугме Откажи (или системски мени Затворите ставку или тастер [к] у пољу с натписима). Наслов главне форме гласиће „Не“.
Како ово ради? Да бисте сазнали, погледајте догађај „Цлицк“ за ТБуттон (од СтдЦтрлс.пас):
процедура ТБуттон. Кликните; вар Облик: ТЦустомФорм; започети Облик: = ГетПарентФорм (Селф); ако Образац нил онда Образац. МодалРесулт: = МодалРесулт; наслеђено Кликните; крај;
Оно што се догађа је да Власник (у овом случају секундарни облик) ТБуттона добија свој МодалРесулт сет према вредности модалРесултата ТБуттона. Ако не подесите ТБуттон. МодалРесулт, вредност је мрНоне (подразумевано). Чак и ако се тастер стави на другу контролу, родитељски образац се и даље користи за постављање резултата. Последњи ред позива на догађај Цлицк наслеђен из класе предака.
Да бисте схватили шта се дешава са Формс МодалРесулт, вриједно је прегледати код у Формс.пас који бисте требали наћи у.. \ ДелпхиН \ Соурце (где Н представља број верзије).
У функцији СховМодал компаније ТФорм, непосредно након приказивања обрасца, петља Понављај док се не покрене, која наставља да проверава да ли променљива МодалРесулт постаје вредност већа од нуле. Када се то догоди, коначни код затвара образац.
Можете да поставите МодалРесулт у време пројектовања, као што је описано горе, али такође можете да поставите својство МодалРесулт облика директно у код у време извођења.