Динамикалық кітапханалар құру.
Динамикалық немесе ортақ кітапхана-бұл басқа бағдарламалар пайдаланатын объект файлдары бар файл. Статикалық кітапханалардан айырмашылығы, бұлар бағдарлама қажет болған кезде жұмыс уақытында динамикалық түрде жүктеледі.
Артықшылықтары
Кітапхананың бір көшірмесі оны пайдаланатын бағдарлама іске қосылған кезде жадқа жүктеледі және бірнеше жұмыс істеп тұрған бағдарламалар сол кітапхананы пайдаланған кезде біз көп жадты үнемдей аламыз.
Егер кітапхана ішінде қандай да бір өзгерістер болса, біз өз бағдарламамызды қайта құрастырудың қажеті жоқ.
Жоғарыда аталған артықшылық кітапханаға техникалық қызмет көрсетуді де жеңілдетеді.
Кемшіліктері
Байланыстыру жұмыс уақытында болады, бұл бағдарламаның басталуын күту уақытын арттырады.
Динамикалық орналасу кітапханасын пайдаланатын бағдарлама дербес емес, оның жұмысы DLL кітапханасының (динамикалық орналасу кітапханасы) болуына байланысты және жүктеу кезінде динамикалық орналасу пайдаланылса, іске қосу бағдарламасы DLL жоқ екенін анықтайды. қиындықтар тудырады.
Консольды қосымшаларды программалау
Мәтіндік режим бағдарламасы негізінен DOS бағдарламасына ұқсас жазылады, сондықтан сіз Turbo Pascal-да ұмытылған бағдарламалау тәжірибесін еске түсіруіңіз керек. Негізінен Windows модулінен Win32 API функционалдық қоңыраулары қолданылады. Sysutils утилиталары да пайдалы болуы мүмкін. Кейбір жағдайларда (Windows хабарламаларын өңдеу үшін) Messages модулі қажет болады.
Classes және Forms модульдерін қажетсіз пайдалануға болмайды, әйтпесе Орындалатын файлдың мөлшері бірнеше есе артады, айтарлықтай артықшылықтар жоғалады - работыамдық, жылдамдық және жұмыстың анықтығы. Консоль бағдарламашы тұрғысынан кіріс буферінен және бір немесе бірнеше экрандық буферлерден тұрады.
Кіріс буфері-бұл енгізуге қатысты оқиғалар туралы ақпараты бар жазбалар кезегі, атап айтқанда:
пернелерді басу және босату;
тінтуірдің оқиғалары (түймелерді жылжыту, басу және босату) - егер олар рұқсат етілсе;
белсенді экран буферінің өлшемін өзгерту-егер рұқсат етілсе.
Экрандық буфер-бұл екі өлшемді массив (80х25) таңбалар және олардың атрибуттары (таңба мен фон түсі) консоль терезесіне шығуға арналған. Консольге кіру үшін Win32 API-де жоғары және төмен деңгейлі мүмкіндіктер бар. Екіншісі икемді мүмкіндіктер береді. Әрине, байыпты бағдарламашы Delphi анықтамалық жүйесіндегі функциялардың сипаттамаларына жүгінуі керек (дәлірек айтсақ, Windows SDK), дегенмен бұл ағылшын мәтіндерін si-де жарнамалармен оқу кез-келген "дельфийлерге" оңай көрінбейді. Ия, және бәрі құжатталмаған. Сондықтан бұл мақала дүниеге келді.
Консольдық бағдарламалардың жұмысы
Консоль бағдарламаларының жалпы параметрлері HKEY_CURRENT_USER\CONSOLE кілтінің астындағы жүйелік тізілімде. Кейбір бағдарламаларда HKEY_CURRENT_USER\CONSOLE\бағдарлама атауында сақталған теңшелімдер болуы мүмкін. Бұл қосалқы қосқыш консоль терезесінің қасиеттерін өзгерткен кезде автоматты түрде жасалады (орындалатын бағдарламамен терезенің жүйелік мәзірі арқылы кіру). Жеке параметрлерге басымдық беріледі. Атап айтқанда, бағдарлама Толық экран режимінде орындалуы керек пе - FullScreen параметрін 1 (немесе терезе режимі үшін 0) анықтайды. Әрине, бұл абзац тек NT класс жүйелеріне қатысты. 95/98 класс жүйелерінде бәрі нашар: консольдық қосымшалар жұмыс істеген кезде енгізу-шығару үшін conagent DOS бағдарламасы жауап береді.Windows/System қалтасынан табуға болатын exe. Режим параметрі осы бағдарламаның pif файлында сақталады. Аталған бағдарлама NT консолін эмуляциялайды және мұны жақсы жолмен жасамайды. Сондықтан, егер сіз осындай ОЖ-де әзірленіп жатқан бағдарламаны іске қосқыңыз келсе, оны, әсіресе тінтуірдің жұмысын мұқият тексеріп алуыңыз керек. Pif параметрлерін тексеріңіз, нәтиже де оларға байланысты.
Консоль жасау
Консоль жасау үшін (соның ішінде GUI қосымшасынан) allocconsole функциясын қолданыңыз. Бұл функция стандартты енгізу, шығару және қате өңдегіштің дескрипторларын тағайындайды. Процесте тек бір консоль болуы мүмкін, сондықтан allocconsole функциясын қайта шақыру жалған болады. Терезенің тақырыбын орнатуға болады (консоль терезе режимінде орындалған кезде): SetConsoleTitle ('Super Program' ); әйтпесе, тақырыпта тек Файл атауы болады. Толық экран режимі үшін бұл оператордың мағынасы жоқ. Консоль сеансын аяқтау-FreeConsole қоңырауы. Егер Delphi жобасының файлында {app APPTYPE CONSOLE} директивасы қолданылса, онда консольді құру және босату туралы қамқорлық қажет емес - бұл автоматты түрде жасалады.
Дескрипторлар
GetStdHandle қоңырауы енгізу буферінің дескрипторларын (тұтқаларын), стандартты экран буферін және қате өңдегішін тани алады (қажет емес). Setstdhandle функциясы, қажет болған жағдайда, оларды қайта тағайындауы мүмкін - бұл тек құрылған консольдық процестерді құру кезінде қажет болады.
Жүйелік оқиғаларды өңдеу
Әдепкі бойынша, Ctrl+C, Ctrl+Break пернелерін басу сияқты оқиғалар консольдік бағдарламаның дереу аяқталуына себеп болатын жүйелік оқиғалар ретінде түсіндіріледі. Мысалы, терезенің "крестін" қарапайым басу сияқты әрекет етеді.
Бұл оқиғаларды қоңырау арқылы қайта тағайындауға болады: SetConsoleCtrlHandler (@Proc, True);
Содан кейін көрсетілген комбинацияларды басқан кезде бағдарламада анықталған Proc процедурасы орындалады (аты кез келген болуы мүмкін). Бұл процедура бос болса да-әдепкі әлі де әрекет етпейді. Бұл Windows терезесін жабу әрекетіне де қатысты..
Егер біз Proc аяқталғаннан кейін әдепкі әрекеттерді орындағымыз келсе, оны False функциясын қайтаратын функция ретінде шығарамыз.
Proc әрқайсысына өзінше жауап беру үшін жүйелік оқиға түріне талдау жасай алады. Мысалы, келесідей:
procedure Proc(SysEv: Cardinal);
begin
case SysEv of
CTRL_BREAK_EVENT: ... // егер сіз Ctrl+Break пернелерін бассаңыз
CTRL_CLOSE_EVENT: ... // егер олар терезені жабуға тырысса
CTRL_LOGOFF_EVENT: ... // егер пайдаланушы сеансты аяқтаса
CTRL_SHUTDOWN_EVENT: ... // Егер жүйе жүктелсе
end;
end;
Бағдарламалық ерекшеліктердің пайда болуы стандартты жүйелік ескертулердің берілуіне әкеледі (егер бағдарлама толық экранда жұмыс істесе, ол терезеге ауысады). Мұндай штаттан тыс жағдайлардың алдын алу үшін белгілі ерекше жағдайларды өңдеу операторларын қажетті жерлерде қолдануды ұмытпаңыз.
Консоль режимдері
Жоғары деңгейлі құралдарды пайдалану үшін-консоль режимдері әдепкі бойынша оңтайлы орнатылған. Егер біз төмен деңгейлі қоңырауларды қолданатын болсақ, setconsolemode функциясына назар аудару керек. Шығару режимдеріне қол тигізбеу жақсы, тек енгізу режимі ғана маңызды, атап айтқанда-екі жалауша:
ENABLE_MOUSE_INPUT-тінтуір оқиғаларын қабылдау;
ENABLE_PROCESSED_INPUT-Ctrl+C тіркесімі үшін жүйе күйіне рұқсат етіңіз.
Мысалдар:
SetConsoleMode(inpHnd,0);
(тінтуірді қолдамаңыз, Ctrl+C пернелер тіркесімі ретінде жұмыс істеңіз),
SetConsoleMode(inpHnd,ENABLE_PROCESSED_INPUT+ENABLE_MOUSE_INPUT);
(тінтуірді қолдау, Ctrl + C үшін жүйелік күй).
inpHnd-кіріс буферінің тұтқасы:
inpHnd:=GetStdHandle(STD_INPUT_HANDLE).
Достарыңызбен бөлісу: |