Программа интерфейсін құру. Аспаптарды өңдеу принциптары. Интерфейс құру әдістері және аспаптық құралдары



Дата24.11.2023
өлшемі27.39 Kb.
#484370
түріПрограмма
Проектр тех лек10


10 дәріс. Программа интерфейсін құру. Аспаптарды өңдеу принциптары. Интерфейс құру әдістері және аспаптық құралдары
Дәріс мақсаты: жүйенің стандартты интерфейсін; бір- және көпбеттік интерфейстер түрлерін; интерфейсті визуальды жобалауды қамтамасыздандыру технологияларын; интерфейске инженерлік психология және эргономика талаптарын; визуальды дизайнерлердің интерфейстік объектілерін және олардың интерфейс құрудағы қолданылуын; Open Tools API интерфейстерін қарастыру.
TActionList компоненті, бұл — орталықтандырылған сақтау, мұнда падйланушы жағынан әрекеттер олармен оындалатын реакциялармен байланысады.
Әрекет (Action) деп операцияны атаймыз, оны пайдаланушы интерфейс элементтеріне әрекеттесіп жасайды. Әрекет орындалу керек компонент әрекет (Action target) мақсаты деп аталады. Әрекет инициализацияланған компонент (батырма, пункт меню), — әрекет клиенті (Action client) деп аталады.
Ескерту. Барлық әрекеттер бір компоненттер TActionList немесе TActionManager тізіміне біріккен кезде ғана жұмыс істей алады. Бұл компоненттердің сыртынан ешбір әрекет орындалмайды.
Бірінші жұмыс формаға TActionList компонентін орнатудан басталады. Ол бірінші Standard бетіндегі компоненттер палитрасында орналасқан. Бұдан кейін әрекеттер тізімінің редакторын тінтуірдің басқышын екі рет компонент немесе контекстік менюді басу арқылы жіберу керек.
Әрекеттерді қосу. Қоспастан бұрын әрекет дегеніміз не?
Әрекеттермен байланысты уақиғалар TAction компоненті үш уақиғаға көңіл бөледі: OnExecute, OnUpdate И OnHint.
Бірінші — және бұл негізгі — берілген әрекетке берілетін реакция. Бұл уақиға басқышты басу кезінде орындалады. Мұнда — тәртіпке байланысты орындалады. Тәртіпке байланысты дер отырғанымыз, ол сигналды өңдеу сұлбасы бойынша орындалады, оның 4 - этапы бар:
1) Бірінші әрекеттер тізімінен OnExecute уақиға өңдегіші шақырылады.
TActionList:
property OnExecute: TActionEvent; TActionEvent = procedure (Action: TBasicAction; var Handled: Boolean)
of object;
Егер бұл уақиғаның өңдегіші сізбен қаралмаса онда келесі уақиға генерациясы орындалады — қадам 2.
2) Глобальды Application объектісінің onActionExecute уақиғалар өңдегіші шақырылады (уақиға типі алдындағыдай — TActionEvent). Егер әрекет сигналын орындамаса онда келесі қадамға өтеміз.
3) Әрекеттің өзінен onExecute уақиға өңдегіші шақырылады (объект типі TAction немесе мұраға алынады).
4) Егер бірінші үш қадам жағдайды өңдемесе (False болса), онда, мүмкін, бұл дұрыс қойылмаған мақсатқа байланысты болған шығар (Target).
Соңғы шанс ретінде қосымшаға CM_ACTIONEXECUTE хабарламасы жіберіледі. Бұл жағдайда бұл жағдай үшін басқа мақсат ізделеді.
onupdate оқиғаларды енгізу. onupdate оқиғаларды қолдануға мысал:
procedure TForml.PasteActionUpdate(Sender: TObject); begin
TAction(Sender).Checked := Clipboard.HasFormat(CFJTEXT);
end;
Ескерту onupdate оқиғаларды шақыру кезінде де 4 – этаптық әрекеттер тізбегі орындалады, ол алдыңғы OnExecute –ге ұқсас.
Үшінші уақиға типі келесідегідей:
THintEvent = procedure (var HintStr: string; var CanShow: Boolean) of object;
Ол басқару элементінен берілген әрекетке байланысты жауаптар керек болған кезде шақырылады. Оқиғалар өңдегішінде бірнәрсе шығатын шықпайтындығын көрсетуге болады (CanShow параметрі) және, егер шықса онда не шығатындығы (Hintstr параметрі).
Бұлар Taction компонентіне байланысты уақиғалар болған. Ал TActionList компонентінің өзінің үш уақиғасы бар: OnExecute, OnUpdate және OnChange. Бірінші екеуін біз қарастырдық; ал үшінші тізімді өзгерту кезінде орындалады (әрекеттерді қосу немесе жою).
Әрекеттер клиенттеріне таратылатын қасиеттер Егер бірнеше басқыштардың немесе меню пунктерінің бір ғана жалпы өңдегіші болса, онда олардың басқа қасиеттерінің де бірдей болуын талап еткен дұрыс. Delphi –де ол солай тартылған.
TActionManager компоненті (ары қарай мәтінде - әрекеттер менеджері). Ол басқа да көптеген қосымша мүмкіндіктер береді.
TActionManager редакторының бірінші бетінде (екілік тінтуірді басу арқылы немесе контексті менюдегі Customize командасы арқылы шақырылады) барлық панельдер тізімі тұрады, олар берілген әрекеттер менеджерімен байланысқан. Сіз жаңа компонент қосып немесе бұрынғы компонентті TActionToolBar басқышындағы New және Delete басу арқылы орындай аласыз.
Жүйенің стандартты интерфейсі. Интерфейсті өңдеу мысалы – MS Visual Systems, Borland Visual Systems, Oracle Visual Systems және т.б. Шешімі, артықшылықтары, кемшіліктері, мобильдігі, тереңдігі, түсі, өлшемі, анимациясы, масштабталуы, сенімділігі, қатынау жылдамдығы және т.б. Жүйенің стандартты интерфейсінің элементтері және олардың компоненттік таратылу.
Кірісу минимизациясы. Автоматизация деңгейі және компетенттік емес жағдайлардың сақтау. Әрекеттер тізбегі және сеанстары. Шаблондарды қолдану. Көптүрлілік және мобильдік көрсеткіштері. Жүйелерді қолдану, – аспаптарды, істік графиканы.
Бір қосымшаның екі рет жіберілуінен қалай құтылуға болады?
Мұндай жағдай көп кездеседі. Мұндағы негізгі идея, ол қосылатын қосымша қосылар алдында ресурсты алып алу керек, ал қалғандары да оны орындағысы келеді, бірақ ол бос болмағандықтан өз жұмыстарын аяқтайды да оның басқа қосымшалары жасалмайды.
Мұндай ресурстың мысалы — жадығы бейнеленетін файлдағы жалпы блок. Бұл ресурстың аты болғандықтан, оны өз қосымшыңызға уникальды етіп жзасауға болады:
var UniqueMapping : THandle;
FirstWindow : THandle
;begin
UniqueMapping := CreateFileMapping($ffffffff,
nil, PAGE_READONLY, 0, 32,'MyMap');
if UniqueMapping = 0 then
begin ShowMessage(SysErrorMessage(GetLastError));
Halt; end
else if GetLastError = ERROR_ALREADY_EXISTS then
begin FirstWindow := FindWindowEx(0, 0, TfmMain.ClassName, nil);
if FirstWindowoO then SetForegroundWindow(FirstWindow};
Halt; end;
// Application.Initialize қосмышасының басқа көшірмесі жоқ;
Бұндай жолдарды жоба формасын құрудан бұрын мәтіннің басын орналастыру керек.
Жадымен бірге қолданылатын блок жүйеілік бет файлында беріледі (бұл жайында бірінші параметр айтып тұр, ол -1 тең, функция сипаттамасын қара.
CreateFileMapping). Оның аты — муМар. Егер блокты құру кезінде қате коды алынса ERROR_ALREADY__EXISTS, онда ол қосымшаның жұмыс істеп тұрған көшірмесінің бар екендігін білдіреді.
Экранға орналастыру. Бір- және көпбеттік интерфейс. Модальды терезелер және фокус. Панелдер, фреймдер, ағаштар, графтар, желілер – оқиғалық парадигмалардың визуальды бейнеленуінің ақпараттық моделі. Концентрация және интерфейстің таратылу жалпыламасы. Интерфейстің көпбетілігі және көппроцесорлығы. Бейнелерді өзгерту – программадағы әрекеттер. Интерфейс элементтерінің активациясы және фокустың қолданылуы. Форманың модальдығы – артықшылықтары және кемшіліктері.
Set консольдік терезеде шығатындықтан, барлық жол тұрақтыларын кодтау DOS-тікі болуы қажет. Программаны Wіndows - қолданба сияқты іске қоссақ, консольді терезе тек бір секундқа пайда болады. Мұның мәні консольді қолданба өз консольін құра алатындығында болып табылады. Бұл жағдайда барлық енгізу-шығару осы консольде жүргізіледі. Егер де қолданба консольді құрмаса, онда мұнда екі жақты жағдай пайда болады: не программа іске қосылған консоль пайда болады, не Wіndows қолданба үшін өз консольін құрайды.
Өз консольімізді құру үшін AllocConcole функциясын қолдану қажет. Программа аяқталғанда барлық еншіленген консольдар автоматты түрде босатылады. Бірақ мұны FreeConsole функциясын қолданып та жасауға болады. Консоль дескрипторын алу үшін GetStdHandle функциясы пайдаланылады, оның аргументі келесі үш тұрақтылардың бірі болуы мүмкін:
STD_ІNPUT_HANDLE equ – 10 ; енгізу үшін
STD_OUTPUT_HANDLE equ – 11 ; шығару үшін
STD_ERROR_HANDLE equ –12 ; қателік жайлы хабар үшін
Бір үрдістің бір консольі ғана болатынын атап өтейік, сондықтан программа басында FreeConsole-ді орындау міндетті. “Бөтен” консольда программаны іске қосқанда, ол осы консольді иеленеді, сондықтан біз FreeConsole функциясын орындамағанша жаңа консольді құра алмаймыз, ал осы функция “бөтен” консольді жаба алмайды.
Консоль буферінен оқу үшін ReadConsole функциясы қолданылады. Осы функцияның параметрлері (солдан-оңға) келесідей:
1-параметр - кіріс буферінің дескрипторы;
2-параметр - енгізілетін ақпарат орналасатын буфер адресі;
3-параметр - осы буфердің ұзындығы;
4-параметр - нақты оқылған символдар саны;
5-параметр – резервтелген.
Консольдағы меңзер позициясын SetConsoleCursorPosition функциясының көмегімен орнатуға болады:
BOOL SetConsoleCursorPosition (HANDLE hConsoleOutput, COORD dwCursorPosition)
Оның параметрлері:
1-параметр - консольдің кіріс буферінің дескрипторы;
2-параметр - COORD құрылымы. Ол:
COORD STRUC
x WORD ?
y WORD ?
COORD ENDS.
Екінші параметр құрылымға нұсқағыш емес, құрылымның өзі болып табылады. Шын мәнінде ассемблер үшін бұл қос сөз (DWORD), кіші сөзі – Х координатасы, ал үлкен сөзі – Ү координатасы болып табылады.
Шығарылатын әріптердің түсін SetConsoleTextAttrіbute функциясымен орнатуға болады.
BOOL SetConsoleTextAttribute (HANDLE hConsoleOutput, WORD wAttributes)
Осы функциясының бірінші параметрі – консольдің кіріс буферінің дескрипторы, ал екіншісі - әріптердің және фонның түсі. Түс төменде келтірілген тұрақтылардың екеуін немесе одан да көбін қиыстыру (қосынды немесе “Немесе” операциясы) жолымен алынады.
FOREGROUND_BLUE equ 1h ; әріптердің көк түсі
FOREGROUND_GREEN equ 2h ; әріптердің жасыл түсі
FOREGROUND_RED equ 4h ; әріптердің қызыл түсі
FOREGROUND_ІNTENSІTY equ 8h ; жоғары үдемелілік
FOREGROUND_BLUE equ 10h ; фонның көк түсі
FOREGROUND_GREEN equ 20h ; фонның жасыл түсі
FOREGROUND_RED equ 40h ; фонның қызыл түсі
FOREGROUND_ІNTENSІTY equ 80h ; жоғары үдемелілік
Консоль терезесінің бастамасын анықтау үшін SetConsoleTіtle функциясы қолданылады:
BOOL SetConsoleTitle (LPCTSTR lpConsoleTitle)
оның жалғыз параметрі – соңында нөлі бар жол адресі. Ескерту: егер консольдің өз терезесіне шығару үшін DOS - кодтама қажет болғанда, онда бастаманы орнату үшін Wіndows-кодтамасы қажет.
Жолдарды қайта кодтама үшін арнайы CharToDem функциясы орындалады:
BOOL CharToOem (LPCTSTR lpszSourse, LPTSTR lpszDest)
Бірінші параметрі – қайта кодтамаға қажетті жолға нұсқағыш, ал екінші параметрі – нәтижені орналастыратын жолға нұсқағыш. Сонымен, жол нәтижені қайта кодтау жолға да орналастыруға болады. Көптеген консольдік функцияларға тән қасиет – олардың дұрыс аяқталуында нөлдік емес мәні қайтып келеді. Қателік жағдайда EAX-те нөл болады.

Достарыңызбен бөлісу:




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет