Программи́рования тілдері́



программи́рования тілдері́

    формальный тіл деректердің(ақпаратқа) және оның өңдеуінің алгоритмының(бағдарламалар) сипаттамасы үшін компьютерде. Программирования тілінің негізін алгоритмдік тілдер келеді. Программирования бірінші тілдерімен машинаның тілдері болды, собой команданың жүйелерін нақты компьютерлер үшін ұсынамын. Машинаның командаларымен жұмыс адамның жанасушылығының негізгі тәсілімен компьютермен 20 в. 40-х гг. болды оператор либо тер- машинаның командасының коды айырып-қосқыштармен есептеуші машинаның басқармасының панели, либо оларды эвм жадына арқылы перфокарт және перфолент кіргізді. Осы әдіс-айлалар қажымаушылықты және ұқыптылықты, кодирования және кодов жүйесінің жөн-жосықының тындырымды білімінің сұрады.

    Есептеуші техниканың дамуымен күрделі тілдер түрлі задач шешіміне деген ориентированные программирования: экономикалық ақпараттың(кобол) өңдеуі, инженерлік және ғылыми есептер(фортран), тәлім-тәрбие программированию(алгол-60, паскаль), біткен және др. қалыпта-(слэнг, симула) аумақтау

 

Кіріспе

 

Многие сізден наверняка әркелкі пішіннің(домалақ, треугольные және т.д.) терезесінің бағдарламаларында ара Windows көрді және себе сұрақты: как маған алқындыр- мынадай терезені тапсырма берді? Оқып тастау егер құжаттама ша Visual Basic, сол алқындыру болады тұжырым, не тілдің стандартты ақы-пұлдары мынадай мүмкіндікті жібермейді. Ал не ғой жаса-, өте қала-? Тогда еске алу тиіс, не ара әмір бағдарламашының бас VB тағы және Windows API боламын, нешінші бізге осы көмектес- керек.

Қағидалы негіздер

 

Үшін түптің давайте қараймыз, сияқты сол алқындыру болады қағидалы. Windows құжаттамасынан көрікті, не бас-басы терезе жүйеде множеством бізді сізбен қызықтырып әкет- параметрлердің бейнеленетін . Терезенің видимая облысы жүйеде, жаса- Visual Basic прямоугольника көрінісі имеет, бірақ, арада ұстанымда, ештеме осы облыстың пішінін өзгерту араластырмайды. Терезенің айтылмыш облысы мен көмек Region атал- арнаулы нысанның бейнеленетін. Аймақты түрінде беттің ұсыну болады осы облыстың бұрыштама нүктелері суретте- координатами шектеулі. Жай айт-, суреттеу болады көрінген пішіннің облысын, кейін одан деген жаса-, мен көмек арнаулы атқаратын қызметтерімнің, аймақ және оның к нужому бізге окну.

Windows API несколько атқаратын қызметі аймақтың жаса- үшін деген негізгі келесі болып табыл-: өмір сүретін

 

    CombineRgn - екі аймақты собой арасында қиыстырады

    CreateEllipticRgn - аймақты түрінде эллипса немесе шеңбердің жасайды

    CreatePolygonRgn - аймақты түрінде многоугольника жасайды

    CreateRectRgn - прямоугольный аймақты жасайды

    CreateRoundRectRgn - аймақты скругленными аймақтармен прямоугольной облыстан жасайды

    SetWindowRgn - аймақ көрсетілген терезеге прикрепляет

 

Мен осы атқаратын қызметімнің толық сипаттамасын келтіру болмаймын, себебі ол Win32 API сипаттамасында табу болады. Басқа осы атқаратын қызметтерімнің тағы несколько атқаратын қызметім аймақтармен жұмыс үшін өмір сүреді, бірақ бізге олар сұрамайды.

 

Жай әркелкі терезенің жаса-

 

Енді, қашан бізге негізгі атқаратын қызметтерім белгілі, аймақтың жаса- үшін, біз ал- білімдерді баста тәжірибеде қолдану білеміз. pTestRgn жобасын тие- және мұқият оның код таныс-. Ара осы проете, терезенің пішінінің өзгерісі үшін сопаққа, кода небәрі үш жолы және Win32 API үш атқаратын қызметі пайдаланылады. Басында мен көмек CreateEllipticRgn аймақ құралады, кейін ол терезеге деген прикрепляется және, ақыры, бітірушінің фаза аулақтау, ставшего керексіз, бізбен жаса- аймақтың. Ғой сіз керексізді сізге үлкен нысан алыстатпасаңдар, сол Windows, жаса- аймақ сіз ол өзінде және күт- одан әрі нұсқаулардың ша оның игерушілігінің сақтау болады. Жалпы, нехорошо бәсіре жадты, қарамастан және сізді тықыр аспан бастырмалатады, қарамастан және аспан бұлттармен көк ұзайды, қарамастан және қорқынышты сот над барлық дінге сенбейтіндермен: қысқасы болады код олай: көрінеді

 

Private Sub cmbCreateOval_Click()

   Dim lRgn As Long

   lRgn = CreateEllipticRgn(0, 0, Me.ScaleWidth / Screen.TwipsPerPixelX, _

   Me.ScaleHeight / Screen.TwipsPerPixelY)

   SetWindowRgn Me.hwnd, lRgn, True

   DeleteObject lRgn

End Sub

 

Олай ғой барлық жай, сіз айтасыңдар? Иә, на бірінші назарды барлық өте жай, бірақ сол ғана сияқты. Сіз жаңа ғана, көрді ана мысал тәжірибенің қолданысы Windows осы аддендумдерінде почти имеет. Кімге ғой к баяғы қатал бас кезең программирования кісімсін- жай сопақ терезе керек? Ал міне еркін бы ауыстыр- өзінің пішінінің білген толығымен сұрау біл- терезе. Мысалдар? Пожалуйста, WinAmp, көмекші Microsoft Office және сырттың бағдарламаларына. Как ғой анда барлық сол жүзеге асыр-? Давайте аймақтың мынадай қолданысымен қараймыз.

 

Күрделі әркелкі терезенің жаса-

 

Айталық, не бас біздің сурет ара BMP алқындыруға керекке пішін форматта болатын, ал ақ түс(айталық) онда означает . Алқындыру как ғой пішін? Өте жай, алуға керекке барлық пиксели суретте, оның координат деген жаса- аймақ және прикрепить ол керекке бізге окну. Сарала- пиксели болады GetPixel, сол атқаратын қызметім ша координатам оның түсін қайтарады. Давайте енді мынадай алгоритмды ұяқалыптың BMP сарала- үшін жазып қойамыз. Мен ойла-, не мынадай алгоритм ол белгілі, және ол болма- ол егжей-тегжей тексер-, белгіле- ғана, не сарала- өндіріл- построчно және Pixel- және қосыла кет- в аймақ емес біртіндеп, ал топ построчно. Мынадай тіл табу процессора қамбаларын өлердей үнемдейді, ұтыс өндіргіште 100% жетеді.

 

Public Function lGetRegion(pic As PictureBox, lBackColor As Long) As Long

   Dim lRgn As Long

   Dim lSkinRgn As Long

   Dim lStart As Long

   Dim lX As Long

   Dim lY As Long

   Dim lHeight As Long

   Dim lWidth As Long

 

   'создаем пустой регион, с которого начнем работу

   lSkinRgn = CreateRectRgn(0, 0, 0, 0)

   With pic

      'подсчитаем размеры рисунка в Pixel

      lHeight = .Height / Screen.TwipsPerPixelY

      lWidth = .Width / Screen.TwipsPerPixelX

      For lX = 0 To lHeight - 1

         lY = 0

         Do While lY < lWidth

            'ищем нужный Pixel

            Do While lY < lWidth And GetPixel(.hDC, lY, lX) = lBackColor

               lY = lY + 1

            Loop

            If lY < lWidth Then

               lStart = lY

            Do While lY < lWidth And GetPixel(.hDC, lY, lX) <> lBackColor

               lY = lY + 1

            Loop

            If lY > lWidth Then lY = lWidth

               'нужный Pixel найден, добавим его в регион

               lRgn = CreateRectRgn(lStart, lX, lY, lX + 1)

               CombineRgn lSkinRgn, lSkinRgn, lRgn, RGN_OR

               DeleteObject lRgn

            End If

         Loop

      Next

   End With

   lGetRegion = lSkinRgn

End Function

 

Ақырында, осы алгоритмның тексерісі үшін баста тәжірибеде pTestRgnSkin мысалын тиейсіңдер және мұқият оның код танысасыңдар. Осы жобада бізге керек сурет, жайлылық үшін, <зашит> қамбаның файле, басқа ана жоба және барлық өзгерістер болып жататын Main рәсімінің асқындырады. Басында пішін тиеледі, кейін ара PictureBox қамбалардан бізге керек сурет тиеледі, бұдан әрі аймақты және, ақыры, бітірушінің кезеңін жаса- атқаратын қызметім - аймақтың прикрепление керекке бізге шақырылатын окну. Жайлылық үшін мында ғой атқаратын қызметім шақырылады, терезені саламын <поверх барлық>, чтобы ол <жоғалмады> бас сіздің Windows жұмыстың үстелінде. Басқа ана, бағдарламаның бір қалыпты жұмысы үшін қажет, чтобы үшін PictureBox AutoRedraw сипаты ара True тағайынды болды, әйтпесе ештеме алмайды.

 

Sub Main()

   Dim lRgn As Long

   Load frmTestRgnSkin

   frmTestRgnSkin.pic.Picture = LoadResPicture(101, vbResBitmap)

   lRgn = lGetRegion(frmTestRgnSkin.pic, vbWhite)

   SetWindowRgn frmTestRgnSkin.hWnd, lRgn, True

   DeleteObject lRgn

   frmTestRgnSkin.Show

   SetFormPosition frmTestRgnSkin.hWnd, True

End Sub

 

Енді асқындыру болады жоба... О, таныс бет, сіз айт-, сол ғой <Скрепыш> из Microsoft Office. Иә, ұқсас, бірақ емес ада-гүде, <Скрепыш> жүреді, ал осы бол-. Не ғой алқындыруға керекке, чтобы сол терезе үдемелі өзінің пішінін ша сурет, в айтылмыш кез кейіпте- уақытқа ара PictureBox өзгертті?

Терезенің пішінінің үдемелі өзгерісі

 

Бағдарламалар нешіншіде қажет үдемелі барысында жұмыстың өзгерт- терезенің(айталық анимированный кейіпкер из Microsoft Office) пішінінің өмір сүреді. Барлық сол емес өте жүзеге асыру қиын, PictureBox уақиғасына деген керек.Change үсте- келесі код:

 

lRgn = lGetRegion(frmTestRgnSkin.pic, vbWhite)

SetWindowRgn frmTestRgnSkin.hWnd, lRgn, True

DeleteObject lRgn

SetFormPosition frmTestRgnSkin.hWnd, True

 

Арада ұстанымда барлық әзір, ғана үсте- код суреттің өзгерісі үшін пішінде қалды, қарамастан және қарамастан <Скрепыш> тіріледі. Біздің мысалымызда өзгерт- сурет ара Timer топтама боламыз, т.е. анимация толассыз болады, олай жай. Ақырында, және Timer пішініне деген үстейміз сал- <оған> ара PictureBox үшін суреттің өзгерістерінің жауап беретін шағын код. Әлеміштердің қамбаның файле он дана, сол себептен I 101 до 110 өзгеруге керекке. Өзгерістің код олай: көрінеді

 

Static i As Long

If i < 101 Then i = 101

If i > 110 Then i = 101

frmAnimateForm.pic.Picture = LoadResPicture(i, vbResBitmap)

i = i + 1

 

 

Әзір, асқындыру болады жоба, қарамастан және сіз бақытты иеленуші Pentium III немесе Athlon, сол сізге сәттілік күледі, себебі <Скрепыш> жүру болады. бірақ егер Pentium II сіздің процессор және аласа, сол компьютер қажетті есептерді үшін біз керек уақытты емес орындай алады сможет, себебі үшін байсалды анимации үшін көргізуге қажетке(біздің уақиғамыз үшін) порядка 15 кадр в секундта, ал нақтырақ бас-басы 80 милисекунд ша кадрға және тағы қой- уақыт үшін компьютер сырт задач үшін. Сияқты біз біздің алгоритмдарымызды ашық және үшін арнаулы көреміз мынадай задач үшін созбаппын <жұмыстардың> сұрамаппын терезенің пішінінің мынадай аспа-жалап өзгерістерінің, себебі, айталық бас Celeron 333 бір кадр около 100 милисекунд белгілі нысанға келеді. Не ғой жаса-?

 

Алгоритмның оңтайландыруы аспа-жалап анимации үшін

 

Алгоритмның жұмысының сарала- көргізеді, не уақыттың наибольшие шығындары GetPixel атқаратын қызметіне деген приходятся. Сол сондықтан, не болып жатады суреттің сарала- бар- ауызекі экранда. Алгоритмның быстродействия аумақтауының бірден-бір жолы, сол в компьютердің жадының және игерушілікті бұл ретте Win 32 API сарала- тасымалының. мынадай алгоритмдар өмір сүреді, бірақ сол жеке әңгіменің тақырыбы, ғана айтамын, не үшін жұмыстың оңтайландыруы үшін алгоритм оқшау үшін түстің бас-басы тереңдігі үшін жазылады және при мынадай нобайдың қолданысында быстродействие почти в төрт ретте ауқымданады және іс жүзінде көрінген анимацию жасау қой-.



Программи́рования тілдері́