Visual Basic ортасынының графикасын қолданып анимациялық программа құру


Кіріспе

Visual Basic басқа да Windows операциялық жүйесінің аясында жұмыс істейтін бағдарламалау тілі болғандықтан, онда объектілермен, элементтермен жұмыс істеуге тура келеді. Visual Basic бағдарламалау ортасы Microsoft фирмасының басқа да бағдарламалық пакеттері тәрізді құрылымға ие. Яғни көптеген басқару панельдері, объектілері және элементтерінен тұрады. Қазіргі кездегі алдыңғы қатарлы бағдарламашылар дайындаған бағдарламалық пакеттер терезелерден және формалардан тұрады. Ал бұл формаларды жасау барысында бағдарламашы көптеген басқару элементтерінің көмегін пайдаланады.

Көптеген басқару элементтері құрал-жабдықтар панелінде орналасқан. Мысалы файлдармен жұмыс жасайтын басқару мәзірі файлды алып қарастыруға болады. Ол мәзірдің ішінде файлды құруды, оқу және шығу сияқты басқару элементтері бар. Біз бұл курстық жұмыста өзіміз Visual Basic басқару элементтерін қолданып, әртүрлі элементтерді құрып көреміз.

Visual Basic ортасы іске қосылғаннан кейін терезелі қсымша жасай беруге болады.

Терезелі қосымшалар деп Visual Basic ортасында Windows операциялық жүйесі үшін жұмыс істеуге лайықталып жасалған қосымшаларды айтады. Мысалы Windows операциялық жүйесінің барлық дерлік қолданбалы программалары терезелі қосымша болып табылады. Терезелі қосымшаларда мәліметтерді енгізу-шығару процедуралары қолданылмайды. Олардың орнына арнаулы компаненттер қолданылады. Visual Basic ортасында терезелі қсымшалар жасау үшін алдымен программа терезесінің негізгі элементтерімен толық танысып алу керек.

Window мәзірі Visual Basic ортасындағы терезелердің орналасуын реттейтін командалар болып табылады.

Тарау І. VB ОРТАСЫНДА БАСҚАРУ ЭЛЕМЕНТТЕРІН ПАЙДАЛАНУ ТӘСІЛДЕРІ

1. 1. VB -да жеке басқару элементін құру

Біз басқару элементін Басқару элементтері немесе бүтін группа құрамыз. Парақ, ручка алып басқару элементі тізімін жасаймыз, оларға ат қойып жаңа қасиет жасаймыз. Мысалы: Панелді қою градиенттік фон түрінде жасадым оған FonGrad деп атау бердім, ал жазбада ол керісінше GradFon деп жазылған екен. Бір қасиеттің екі түрлі атаумен аталуы қолайсыз. Ең алдымен оңайынан бастағанымыз жөн. онда қою градиенттік фон панелінің маңыздыларын көрсетеді. Стандарттық БЭ «Panel» алайық, оған керекті қасиеттерін қосайық, (BackColor и BackgroundImage) артығын алып тастаймыз. Неге «Panel»-ді алдық? «контейнер» қасиетін иемдену үшін, яғни жаңа БЭ олда болуы тиіс. «Ие болу» - бұл бәрін алу, атаңнан қалғанын алу, оның істегенін істей алу дегенді білдіреді. Сол себептен жаңа БЭ қайсысы сәйкес екенін анықтап алу қажет. Мен көбінесе атадан қалған «Control»-ды пайдаланғанды жөн көрдім, өйткені ол өз элементіңді нөлден бастауды білдіреді.

Visual Studio іске қосамыз. «New Project» және «Class Library» таңдаймыз. Проектке «NewControl» деп ат береміз БЭ кітапханасын құрамыз, оның ішінде бірнеше жаңа БЭ болады. Оның әрқайсысы өз бетінше класс құрайды. Одан басқада класстар болады, олар БЭ барлығына жалпы. БЭ жеке проект жасаудың қажеті жоқ.

Класстың атын, файлдың атын «NewPanel» деп өзгертеміз өйткені БЭ файлдарының аттары сәйкес келгені дұрыс.

Public Class NewPanel

Inherits Panel

End Class

Оған ыңғайлы жұмыс істеу үшін кітапханаға сілтеме қажет. References проектінде бар жоғы үш сілтеме бар соны ашамыз. Қанағатсыздықтан, атасы үшін «System Windows» сурет салу үшін «System Drawing» қосамыз.

Осы үш қатарды жазбасада болады. Ол жағдайда барлық атауды толығымен көрсетуге тера келеді. «Panel» орнына «System. Windows. Forms. Panel», ал «Color» орнына «System. Drawing. Color». Жақсы, тез оқылуы үшін ең жоғарғы жағына «Imports» қосамыз.

Imports System. Windows. Forms

Imports System. Drawing

Imports System. Drawing. Drawing2D

Public Class NewPanel

Inherits Panel

End Class

Бәрі дайын деуге болады. Стандарттық панелге толығымен дәл келетін өзіміздің БЭ құрдық.

Оны қалай тексеруге болады? Ол үшін проектке жаңа проект қосамыз. «File» басамыз «Add Project», « New Project», «Windows Application» таңдаймыз және оған «TestNewControl» деп атау береміз. Содан оң тетікпен жүріп отырып «Set as Start Up Project» таңдаймыз. Сонда біз бір терезеде БЭ өңдейміз бір жағынан тестке арналған проектпен жұмыс істейміз. VS екінші рет ашуға және соның ішінде тест үшін проект құруға болады, бірақ ол ыңғайлы болмайды. Құрал жабдық понелінде жаңа БЭ белгісі пайда болу үшін бірінші DLL құрамыз (NewControl басып Build таңдаймыз), екіншіден

DLL сілтеме жасау керек («TestNewControl» өтеміз, құрал жабдық панелінде «My User Control» белгісін таңдаймыз, оң тетіктің көмегімен контекстік мәзір қатарын шақырамыз, «Add/Remote Items . . . », «Browse . . . » басамыз және «NewControl/bin» папкасынан өзіміздің «NewControl. dll» тауып аламыз. Бізде «NewPanel» атты донғалақ пайда болды. Оны формаға қасына стандарты панелді орналастырамыз, қарап отырсақ олардың ешқандай айырмашылығы жоқ. Қасиеттері, атқаратын қызметтері де бірдей.

Біріншіден дөңгелек белгі ешнәрсеге жарамайды. өз белгімізді жасаймыз «NewControl» проектісінде оң тетікпен Add таңдаймыз, содан «Add New Items . . . », «Bitmap File» белгілейміз және оған атау береміз. Ол өзіміздің БЭ атауымен сәйкес келуі тиіс, яғни «NewPanel. bmp». Әріптеріне дейін сәйкес келуі тиіс! Немесе БЭ белгіміз жабыспай қалады. «Open» басамыз, ашылған редактордың көмегімен өз суретімізді саламыз. Мұнда да екі жұмыс атқаруымыз керек. Бірінші белгінің өлшеме 16*16. Ол үшін (төменгі оң жақтағы) ақ төртбұрышты керекті өлшемге дейін тартып. Екіншіден -сурет салғанда төменгі сол жақтағы пикселді боямаймыз (оны ақ түрінде қалдырамыз, ол мөлдір түс береді) . Бейнелеу редактрының терезесін жабқаннан кейін, сақтауды бекітіп және соңғы штрих, өз суретімізді проектке белгілейміз, қасиеттер терезесінде «Build Action» қасиетін «Embedded Resourse» қасиетіне дауыстырамыз. Енде тағыда «Build» керек. DLL проектінде өзгертулер енгізген сайын бұны жасап отыруымыз керек. Енді құрал жабдық панеліндегі дөңгелекті өшіреміз (DLL суретті ауыстырған кезде немесе жаңа БЭ қосқанда мұны міндетті түрде істеу қажет) . Құрал жабдық панеліне тағы өз DLL қосамыз («Add/Remote Items . . . » және т. с. с) .

1. 2. Басқару элементін редакциялау

Енді өз БЭ редакторлауға болады. Ал тестік проект «Build» кейін автоматты түрде бетіне шығады. Расында, БЭ салмақты өзгертулерден кейін өзіміздің БЭ формадан өшіруді, содан соң формаға жаңасын қою ұсынады.

Жаңа үш қасиет құру: екі түр және градиент бағыты. Оларды «Color1», «Color2», «ColorN» деп атаймыз. Бұл қасиеттердің жұмыс істеуі үшін үш ішкі айнымалы береміз. «mColor1», «mColor2», «mColorN». Бұл тәсіл программамен жұмыс істегенде қолайлы.

Private mColor1 As Color

Private mColor2 As Color

Private mColorN As LinearGradientMode

Қасиеттің өзін құру әлдеқайда оңай: «Property Color1 as color» теріп Enter басамыз.

Содан соң программада мына текст шығады.

Property Color1() As Color

Get

End Get

Set(ByVal Value As Color)

End Set

End Property

Енді бос қатарға маңызды заттар енгіземіз:

Property Color1() As Color

Get

Return mColor1

End Get

Set(ByVal Value As Color)

mColor1 = Value : MyBase. Invalidate()

End Set

End Property

Бірінші қатардың мәні - бұл қасиеттің мағынасын қайтару. Ал екіншіден - бұл жаңа мағынаның қасиетіне тапсырма және осы өзгерістен кейінгі БЭ перерисовкасы. Қалған екі қасиетті алу үшін, келтірілген фрагменті екі рет және аздап өзгерген түрінен көшіреміз.

Property Color2() As Color

Get

Return mColor2

End Get

Set(ByVal Value As Color)

mColor2 = Value : MyBase. Invalidate()

End Set

End Property

Property ColorN() As LinearGradientMode

Get

Return mColorN

End Get

Set(ByVal Value As LinearGradientMode)

mColorN = Value : MyBase. Invalidate()

End Set

End Property

Енді ең қызықтысы - OnPaint қасиеттіy анықтаудан алдын, оны (Overrides) тізімінің сол жағынан, содан оң жағынан OnPaint таңдаймыз. Текст пайда болады.

Бірінші қатар-БЭ тең болатын төрбұрыштың тапсырмасы. Екіншісі тіктөртбұрышты градиенттік қаламмен толтырамыз.

Public Sub New()

Me. Color1 = Color. FromArgb(255, 221, 236, 254)

Me. Color2 = Color. FromArgb(255, 129, 169, 226)

Me. ColorN = LinearGradientMode. Vertical

End Sub

Жаңа БЭ құрған кезде, бастапқы айнымалылар беріледі. Оның басқада тәсілдері бар- ол бастапқы мәндердің ішкі мәндері (переменныларын) беру. Маған екеуіде ұнайды.

Private mColor1 As Color = Color. FromArgb(255, 221, 236, 254)

Private mColor2 As Color = Color. FromArgb(255, 129, 169, 226)

Private mColorN As LinearGradientMode = LinearGradientMode. Vertical

Мұны істеп болғаннан соң «Build» басамыз да тестік формаға өтеміз. Сол жерде жаңа БЭ құрамыз

Үш қасиет қосамыз, қасиеттер бетінен(страница) бірнешеуін алып тастаймыз. Ол үшін оларды алдын ала анықтап алуымыз қажет. «OnPain» аналитикалық түрде жасалынады сол жақтаға тізімдегі (Overrides), содан оң жақтағы «BackColor» таңдаймыз. Нәтижесінде текст пайда болады.

Public Overrides Property BackColor() As System. Drawing. Color

Get

End Get

Set(ByVal Value As System. Drawing. Color)

End Set

End Property

Енді «Browsable(False) » тексін жазамыз.

Енді біз АТРИБУТТАРды емін еркін қолдана аламыз. Осы қатар болмағанда, бізге мына сөзді жазуға тура келер еді. «System. ComponentModel. Browsable(False) ».

«BackgroundImage» аналогтық түрде келіп түспейтінін ескерейік .

Атрибуттар көмегімен тағы не істеуге болады? Коптеген нәрселер. Бұл праграммалаудың жаңа жетістіктері. Барлық атрибуттар жақша ішінде жазылады <Attribut() >, <Attribut() >, <Attribut() > класс немесе қасиеттердің алдына үтір қоямыз.

Мына атрибуттар жиі кездеседі.

Discription («Первый цвет градиентной заливки») -қасиеттер бетінің төменгі жағында көрінетін, қасиеттер анықтамасы.

Category(“Gradient”) -группаларға және қасиеттер бетінедеп қасиеттерге топтастыру. Егер біз Categorized деп қасиеттерді сартировка жасайтын болсақ (алфабит бойынша емес) онда ол бір категорияға жататын қасиеттер жанына орналасады. Сонда атрибутта осы категорияға жататын жаңа категория құрылады.

БЭ қиындықтарына қарай басқада атритуттарды қарастырамыз.

Енді «градиенттік заливка»қасиетін қарастырып өтейік. Панелде бір ғана градиенттік заливка бар, ал басқа БЭ бірнешеуі болады. Мысалы: тетіктің бір ғана заливкасы болу мүмкін, сонда тетік басулы түрде, екінші-тышқан тетіктің үстінде, үшінші- тетікке рұқсат жоқ. Үш фон залифкасынан басқа тағы текс үшін үш градиент болуы керек. Нәтижесінде 6*3=18 жаңа қасиет п. б. олармен шатасуғада болады. Одан қалай құтыламыз? Егер градиент қасиетін қиындатсақ (мыс: Font немесе Size деп) Нәтижесі анық:қасиеттер саны үш есе кемиді, бұл дегеніміз прграмма қысқа және қасиеттер редакторы оңай дегенді білдіреді.

Ең алдымен жаңа қасиетке жаңа класс құрамыз. Бәрін қайтадан бастау керек пе деген сұрақ туындауы мүмкін?! Жоқ! Біз тек класстың бір бөлігінің кодын қырқып аламыз да келесі класқа қоямыз. «*. vb» файлда бірнеше кластар болуы мүмкін. Бірақ мен жаңа қосымша қасиетке бөлек файл құруды ұсынамын. Сол себептен проектке жаңа «NewControl» класын қосамыз. Атын «Gradient» деп аламыз. Бір уақытта екі проект болғандықтан жаңа элементтер қосудан бұрын сақ болыңыз. Қателіктер жоқ болуы үшін контекс мәзірін қолданған жөн. Үстіндегі бастапқы мәзірге тиіспеңіз. Енді «Imports» бәрін көшіріп аламыз, ол анықталған кластың алдында тұр. Содан анықталған үш ішкі айнымалыны (переменный) қырқып және оларды жаңа класқа қоямыз. Бұны үш қасиетке де жасаймыз. Енді біз өз қасиетімізден «MyBase. Invalidate() »командасын алып тастаймыз. «Gradient» класы қолданысқа дайын.

Енді «NewPanel» ішіне «mGrad() Fon» ішкі айнымалы құрамыз.

Private mGrad0Fon As Gradient

Арықарай жаңа қасиет.

Property Grad0Fon() As Gradient

Get

Return mGrad0Fon

End Get

Set(ByVal Value As Gradient)

mGrad0Fon = Value : MyBase. Invalidate()

End Set

End Property

Кесте

«OnPain» аздап жөндейміз. Ескі «Color1» айнымалысын «mGradColor1» деп көрсетіледі. Сонда «m» әріпінің және айнымалы атауларының арасына жаңа айнымалыларды нүкте арқылы қойып шығамыз. Енді «Build» тестік форманы көрейік. Енгізілген БЭ өте принципиальный болды және ол құрал жабддық панелінде көрінбей қалды. Оны қайтадан ендіру керек болды. Қостық, формаға орналастырдық, ал оның жұмыс істегісі келмейді. Қызыл рамка сызып бірнәрселер жазады. Элементтің рамкасын үлкейтіп қарасақ, оған біздің қатарды бояған БЭ ұнамайды. «Windows Form Designet generated code» қарасақ, онда, автоматты түрде қасиеттер жазылып жатқанын көреміз.

Енді түсінікті болған сияқты. Біз градиентік заливканы түс туралы ешқандай мәлімет білмей жатып жасайын деп жатыр екенбіз. Мұны түзетейік. Бар жоғы анықталған айнымалылар қатарына «New» деген кілтік сөз ендіреміз. Тағы бір көңілсіз жағдай - қасиеттер бетінде (страницасында) біздің жаңа қасиетіміз жоқ.

Ол үшін былай жазылатын атрибут жауап береді.

Оны қасиеттер бетіне қоямыз, қасиеттер ашылатын және ішкі қасиеттерді редакторлайтын жаңа қасиет пайда болды. Тағы бір прблема- проекті қосуда қасиетіміз сақталмайды және бастапқы түрге қайта келе береді.

Бұл жерде өте ұзын көлемдегі атрибут керек.

Яғни, жаңа қасиеттің тексті және оның тақырыбы мына көріністе болады:

<(. Content), _

TypeConverter(GetType() ) > _

Property Grad0Fon() As Gradient

Get

Return mGrad0Fon

End Get

Set(ByVal Value As Gradient)

mGrad0Fon = Value : MyBase. Invalidate()

End Set

End Property

Тарау II. ГРАДИЕНТ ҚАСИЕТІН ПАЙДАЛАНЫП ЭЛЕМЕНТТЕРМЕН ЖҰМЫС

2. 1. Градиент қасиетімен жұмыс істеудің ерекшеліктері

Бәрі жұмыс істеп жатқан сияқты, бірақ қиыншылық бар. БЭ кез келген қасиетін ауыстырсақ, өзгеріс тез іске қосылуы керек, бірақ біздің жағдайда ол іске аспай отыр. Менің ойымша «mGrad() Fon=Value:MyBase. Invalidate() » қатары жұмыс істемей отырған сияқты. Оны алып тастасақта сол нәтиже шығады. Тағы бір атрибут керек сияқты. Градиент қасиетін ауыстырғанда оқиға өзгеру керек, біздің БЭ оқиға әсер етті.

Бірінші қадам. Қасиетті анықтаудың алдында“Gradient. vb”қатар файлын қосамыз. Екінші қадам. Set конструкциясына шақыру оқиғасына үш рет қоюымыз керек. Бұрынғы «MyBase. Invalidate() » тұрған жерге.

Үшінші қадам. Енді біздің қасиетіміз қарапайым емес. Ол енді оқиғалы қасиет. Сол үшін оған «WithEvents» қоямыз.

Нәтижесінде біздің «mGrad() Fon» түсу (выпадающем) тізімінде көріне бастады. Формадағы тетік сияқты көріністе. Сондықтан төртінші қадам ап анық: «mGrad() Fon» сол жақтан, ал оң жақтан жалғыз оқиға «GradChanged» таңдаймыз. Әрине қасына Invalidate.

Енді құрама қасиет өзгерген сайын оның қайтадан боялуына әкеп соқтырады. «New»-де қасиет құрғанда құрылып жатқан қасиеттің атын оның атасын көрсету керек.

Содан соң үш қасиеттің біреуі өзгергенде, Invalidate атасын жасау керек. Жоқ біздің БЭ қылмыскер емес, ол ешкімді инвалид қылған жоқ, ол тек біздің БЭ қайта суреттелуіне ықпалын тигізуде. Жаңа градиенттік заливка қасиетімен жұмыс істеу қиын екен. Өйткені бір панель істедім, заливкасын таңдадым, алдында жасағандарымды жаңасына көшірдім. Бәрі жақсы сияқты. Бір уақытта панелдің стилін ауыстырғым, оны басқа түрде көргім келді. Енді ол үшін қанша өзгерістер енгізуім керек Соның арқасында өмірге жаңа қасиет пайда болды. Мен оны «GradSource» деп атадым яғни градиент көзі. Қасына «GradStyle» ол қасиетті өшіріп/қосу қызметін жасады. Осы екі қасиетті қоямыз және оның қалай жұмыс істеп жатқанын бақылаймыз. Ішкі айнымалылар береміз.

Қасиет құрамыз.

Property GradSource() As NewPanel

Get

Return mGradSource

End Get

Set(ByVal Value As NewPanel)

mGradSource = Value

End Set

End Property

Property GradStyle() As Boolean

Get

Return mGradSTyle

End Get

Set(ByVal Value As Boolean)

mGradSTyle = Value

End Set

End Property

Аздап «OnPaint»-тан көшіреміз.

Бұл жерде «Try» операторына көңіл бөлгеніміз жөн, көшіру барысында ол бізді жағымсыз жәйттерден сақтайды. (мыс: панелдің ені мен ұзындығы нолге тең болса, «GradStyle» қосулы тұрғанда «GradSource» көрсеткіш болмайды немесе сілтеме жүріп жатқан элемент өшіп қалса. )

«Build» жасаймыз, тестік формаға көшеміз және осы жерде жаңа екі панель құрамыз, екіншісінен қасиет тізімінің ішінен «GradSource» таңдаймыз және «GradStyle» қасиетін True-ге қоямыз. Сонда біз қайтасалудағы өз градиентімізді екінші панелден алмаймыз, оны бірінші панелден аламыз. Тексерейік. Бірінші панелдегі градиентті өзгертейік, форманы жаңартайық.

Жаңа қасиеттің нәтижесі не? программа құрғанда көптеген көмек, панелдегі градиенті өзгерте аламыз, нәтижесінде осыған байланысқандардың барлығыныңда өзгерген түрін аламыз. Қолданыстағы барлық түс гаммасын оңай өзгертеміз. Ең бастысы «Me. Refresh() » жасауды ұмытпау.

Градиент қасиетін ары қарай жандандырайық. Мысалы: стандартты градиенттің бірнеше жиынтығын иемденсем деп едім. Жұмыс тапсырғанда оңай болу үшін.

Градиентіміздің класына мына кодты қосамыз.

Public Sub New()

End Sub

Public Sub New(ByVal n As Int16)

Dim a As Int16 = n

Dim r, g, b As Byte

Dim c0() As Byte = {221, 236, 254}

Dim c1() As Byte = {129, 169, 226}

b = a Mod 3 : a = a \ 3 : g = a Mod 3 : a = a \ 3 : r = a Mod 3

Me. Color1 = Color. FromArgb(255, c0(r), c0(g), c0(b) )

Me. Color2 = Color. FromArgb(255, c1(r), c1(g), c1(b) )

Me. ColorN = LinearGradientMode. Vertical

End Sub

Тестік проектке (NewPanel атыБЭ бар деп ойлайық)

Private Sub NewPanel1_Click(ByVal sender As Object, ByVal e As System. EventArgs) _ Handles NewPanel1. Click

Static n As Short

NewPanel1. Grad0Fon = New NewControl. Gradient(n)

Me. Text = n : n = n + 1 : Me. Refresh()

End Sub

Нәтижесінде 27 әртүрлі заливкалы панель аламыз. Градиенттік қасиеттің жеке өз редакторымызды жасап көрейік. Ол үшін «NewControl»проектісіне «GradEdit» атты форма енгізейік.

Оған 6 счетчик енгіземіз. Олар:NR1, NR2, NG1, NG2, NB1. NB2.

Ортасында өзіміздің панельNP.

Редакторлық панелде ButSave жазу өзгерісінің тетігі(кнопка) .

Барлығы қалай жұмыс істеу керек. Форма қосылған кезде редактор панелінен градиент мәнін алу керек және оны NPпанеліне меншіктейміз. Содан NP панелінде счетчиктегі мәнді және тізімдегі қатарды белгілейміз.

Өзгерістер NPпанелінде көрсетіледі. Градиент тетікті басу барысында NPге редакторланып жатқан панелдің аты беріледі.

2. 2. Градиент қасиетінде айнымалыларды қолдану

Градиентті тапсыру барысында барлық айнымалыларды қолданған жөн. Ол үшін «ModulControl. vb» құрамыз және мұнда барлық айнымалылар «gr» екенін хабарлаймыз.

Содан формада келесі кодты құрамыз.

... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
Жоба дайындау үшін компьютерлік бағдарлама мүмкіндіктерін қарастыру
Delphi Windows жүйесінде программалаудың ыңғайлы құралы
VISUAL BASIC басты элементтерімен танысу
Мультимедиялық қосымшалар құру технологиясы
Бағдарламалау тілдерін оқытудың виртуалды ортасын жобалау және бағдарлама құру
Ms access-ті үйренуде компьютерді пайдаланудың алғышарттары
Электрондық оқулықтың құрылымы
Бағдарлама кодының терезесі
Ақпараттық (информациялық) қызмет көрсету жүйелері мен компьютерлік технологияны білім беруде қолдану мәселесі
Форма қасиеттерін өзгерту
Пәндер



Реферат Курстық жұмыс Диплом Материал Диссертация Практика Презентация Сабақ жоспары Мақал-мәтелдер 1‑10 бет 11‑20 бет 21‑30 бет 31‑60 бет 61+ бет Негізгі Бет саны Қосымша Іздеу Ештеңе табылмады :( Соңғы қаралған жұмыстар Қаралған жұмыстар табылмады Тапсырыс Антиплагиат Қаралған жұмыстар kz