AMALIY MASHG’ULOT. DELPHINING GRAFIK KOMPONENTLARI.

1. Sodda grafik elementlarni chizish uchun metodlar

Ixtiyoriy rasm, chizma va sxemalarni sodda grafik elementlarning (nuqta, chiziq, aylana, yoy va x.k.) to’plamidan iborat deb qarash mumkin. Shuning uchun ekranda kerakli tasvirni hosil qilish uchun dastur bu tasvirni tashkil qiluvchi grafik sodda elementlarni chizishni (ekranga chiqarishni) ta’minlashi lozim.

Sodda grafik elementlarni komponenta sirtida (forma yoki ilyustrasiyalarni chiqarish sohasida) chizish masalasi shu komponentaning Canvas hususiyatining extiyojga qarab, mos metodlarini qo’llash orqali hal qilinishi mumkin.

Chiziqlar. To’g’ri chiziqlarni chizish uchun LineTo metodidan foydalaniladi. Bu metodni umumiy ko’rinishda quyidagi usulda chaqiriladi:

Komponent.Canvas.LineTo(x,u)

LineTo metodi qalamning joriy pozisiyasidan boshlab, metodga murojaat qilinganda ko’rsatilgan koordinatali nuqtagacha bo’lgan to’g’ri chiziqni (kesmani) yasaydi. Chiziqning boshlang’ich nuqtasini qalamni grafik sirtning kerakli pozisiyasiga surish usuli bilan ko’rsatish mumkin. Bu vazifani MoveTo metodi bajaradi. Uning parametrlari ikkita bo’lib, qalamning navbatdagi pozisiyasini ko’rsatuvchi nuqtani anglatadi. Chiziqning ko’rinishi, (rangi, qalinligi va stili) chiziq chizilishi talab qilingan grafik sirtning Pen hususiyatining qiymatlari bilan aniqlanadi.

Ko’pincha, hisoblashlar natijalarini grafiklar ko’rinishida ifodalash qulay hisoblanadi. Tushunish oson bo’lishi hamda ko’rgazmalilikni oshirish uchun grafiklarni koordinatalar o’qi va raqamli to’r fonidan foydalangan holda yasaladi. 2-listingda forma sirtiga koordinatalar o’qi va raqamli to’rni chiqaruvchi dasturning matni keltirilmoqda. (1-rasm)

 


1-rasm. Koordinata to’ri dasturining oynasi

2-listing. Koordinata o’qlari va raqamlangan to’r

unit grid_;

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

 TForm1 = class(TForm)

 procedure FormPaint(Sender: TObject);

 private

 { Private declarations }

 public

 { Public declarations }

 end;

var

 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormPaint(Sender: TObject);

var

 x0,y0:integer; ¤¤ koordinata o’qlarining boshlang’ich nuqtasi

 dx,dy:integer; ¤¤ koordinata to’rining qadami (piksellarda)

 h,w:integer; ¤¤ koordinata to’rining chiqarish sohasining balandligi va kengligi

 x,y:integer;

 lx,ly:real; ¤¤ to’r chiziqlarini raqamlash (X va Y bo’yicha)

 dlx,dly:real; ¤¤ to’r chiziqlarinig belgilash qadami (X va Y bo’yicha)

 cross:integer; ¤¤ raqamlanmagan to’r chiziqlarining hisoblagich

 dcross:integer; ¤¤ raqamlanganlari orasida raqamlanmagan chiziqlarning miqdori

begin

 x0 := 30; y0 := 220; ¤¤ o’qlar (40,250) nuqtadan boshlanadi.

 dx := 40; dy := 40; ¤¤ koordinata to’rining qadami 40 piksel

 dcross := 1; ¤¤ X to’rning chiziqlarini belgilash: 1 - har birini

 ¤¤ 2 - bittadan oralatib

 ¤¤ 3 - ikkitadan oralatib

 dlx := 0.5; ¤¤ X o’qining belgilash qadami

 dly := 1.0; ¤¤ U o’qining belgilash qadami: 1, 2, 3 va x.k.

 h := 200;

 w := 300;

 with form1.Canvas do

 begin

 cross := dcross;

 MoveTo(x0,y0); LineTo(x0 , y0-h); ¤¤ X o’qi

 MoveTo(x0, y0); LineTo(x0 + w, y0); ¤¤ Y o’qi

 ¤¤ X o’qi bo’yicha bo’laklash, to’r va raqamlash

 x := x0 + dx;

 lx := dlx;

 repeat

 MoveTo(x,y0-3); LineTo(x,y0 + 3); ¤¤ bo’laklash

 cross := cross-1;

 if cross = 0 then ¤¤ raqamlash

 begin

 TextOut(x-8, y0 + 5, FloatToStr(lx));

 cross := dcross;

 end;

 Pen.Style := psDot;

 MoveTo(x, y0-3); LineTo(x, y0-h); ¤¤ to’rning chiziqlari

 Pen.Style := psSolid;

 lx := lx + dlx;

 x := x + dx;

 until (x>x0 + w);

 ¤¤ Y o’qi bo’yicha bo’laklash, to’r va raqamlash

 y := y0-dy;

 ly := dly;

 repeat

 MoveTo(x0-3, y); LineTo(x0 + 3,y); ¤¤ bo’laklash

 TextOut(x0-20, y, FloatToStr(ly)); ¤¤ raqamlash

 Pen.Style := psDot;

 MoveTo(x0 + 3, y); LineTo(x0 + w, y); ¤¤ to’rning chiziqlari

 Pen.Style := psSolid;

 y := y-dy;

 ly := ly + dly;

 until (y<y0-h);

 end;

end;

end.

Keltirilgan dasturning o’ziga hos tomoni shundaki, u to’rning qadami va raqamlash usulini belgilashga imkon beradi. Bundan tashqari, dastur X o’qining to’rining har bir chiziqlarini emas, balki oralatib ham raqamlay oladi. Buning sababi shuki, agar raqamlashda qatnashadigan sonlar bir nechta raqamdan iborat bo’lsa, raqamlashda qatnashadigan sonlarni ekranga chiqarganda ularning ayrim raqamlari bir-birining ustiga tushib qolishi ehtimoli oldini olishdan iborat.

Siniq chiziq. Polyline metodi siniq chiziq chizish uchun xizmat qiladi. Bu metod parametr sifatida Tpoint tipidagi massivni qabul qiladi. Massivning har bir elementi x va y maydonli yozuvdan iborat bo’lib, siniq chiziqning siniq nuqtasini belgilaydi. Polyline metodi koordinatasi massivda joylashgan siniq chiziqning sinish nuqtalarini ketma-ket kesmalar bilan birlashtiradi: birinchini ikkinchi bilan, ikkinchini uchinchi bilan va x.k.

Polyline metodidan yopiq konturlarni chizish uchun ham foydalanish mumkin. Buning uchun metodning parametri sifatida ishtirok etayotgan massivning birinchi va oxirgi elementlari bir hil bo’lishi lozim. Namuna sifatida 3-listingda berilgan dasturni ko’raylik. Bu dastur dialog oynasi sirtida sichqoncha tugmasi chertilgan joyda besh qirrali yulduz tasvirini (11.5-rasm) yasaydi. Yulduz chizilgan rang sichqonchaning qaysi tugmasi chertilishiga bog’liq. Sichqoncha tugmasini chertish (MouseDown xodisasi) uchun xodisalarni qayta ishlash prosedurasi yulduz chizish prosedurasi StarLine ni chaqiradi va unga parametr sifatida sichqoncha nuqtasi chertilgan nuqtaning koordinalarini uzatadi. Yulduzni StarLine prosedurasi chizadi. U parametr sifatida yulduz markazining koordinatalarini hamda holstni oladi. Dastlab, yulduzning uchlari va chuqurliklarining koordinatalari hisoblanadi va bu ma’lumotlar p massivga yoziladi. So’ngra bu massiv PolyLine metodiga parametr qilib uzatiladi. P massiv elementlarini hisoblashda qutb koordinatalar sistemasidan foydalanamiz. Buning uchun burchaklar radianlarda ifodalangan bo’lishi kerak.

3-listing. Yopiq kontur (yulduz) chizish

unit Stars_;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

 TForm1 = class(TForm)

 procedure FormMouseDown(Sender: TObject; Button: TMouseButton;

 Shift: TShiftState; X, Y: Integer);

 private

 { Private declarations }

 public

 { Public declarations }

 end;

var

 Form1: TForm1;

implementation

{$R *.dfm}

procedure StarLine(x0,y0,r: integer; Canvas: TCanvas);

 ¤¤ x0,y0 – Yulduz markazining koordinatasi

 ¤¤ r – yulduzning radiusi

var

 p : array[1..17] of TPoint; ¤¤ uchlar chuqurliklar massivi

 a: real; ¤¤ Uchlar uchun burchak

 i: integer;

begin

 a := 0; ¤¤ o’ng uchdan yasashni boshlash uchun

 for i := 1 to 16 do

 begin

 if (i mod 2 = 0) then

 begin ¤¤ chuqurlik koordinatalari

 p[i].x := x0 + Round(r ¤ 2*cos(a*2*pi ¤ 360));

 p[i].y := y0-Round(r ¤ 2*sin(a*2*pi ¤ 360));

 end

 else

 begin ¤¤ uchning koordinatalari

 p[i].x := x0 + Round(r*cos(a*2*pi ¤ 360));

 p[i].y := y0 - Round(r*sin(a*2*pi ¤ 360));

 end;

 a := a + 22.5;

 end;

 p[17].X := p[1].X; ¤¤ Yulduz konturini yopish uchun

 p[17].Y := p[1].Y;

 Canvas.Polyline(p); ¤¤ yulduzni chizish

end;

¤¤ sichqoncha tugmalarini chertilishi

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

 if Button = mbLeft ¤¤ chap tugma chertilganmi ?

 then Form1.Canvas.Pen.Color := clBlack

 else Form1.Canvas.Pen.Color := clRed;

 StarLine(x, y, 30,Form1.Canvas);

end;

end.

Eslatma: P massivning o’lchami uchlar va chuqurliklar sonidan bittaga ko’p hamda massivning birinchi va oxirgi elementlari ustma-ust tushadi.

2-rasm. Yulduz

Aylana va ellips. Ellips yoki aylana tasvirini hosil qilish uchun Ellipse metodidan foydalaniladi. Ellips yoki aylana chizish bu metodning parametrlariga bog’liq. Metodni ishga tushirishning umumiy ko’rinishi quyidagicha:

 Ob’ekt.Canvas.Ellipse(x1,y1, x2,u2]

Bu yerda ob’ekt — sirtida rasm chizish talab qilingan ob’ektning (komponentaning) nomi; x1, y1, x2, u2 — aylana yoki ellipsga tashqi chizilgan to’g’ri to’rtburchakning koordinatalari. Demak, agar to’g’ri to’rtburchak kvadratdan iborat bo’lsa aylana, aks holda ellips chiziladi. (11.6-rasm).

Ellips chiziqlarining rangi, qalinligi va stili Pen hususiyatining qiymatlari bilan aniqlanadi, ellipsning ichki rangi va fon berish stili rasm chiziladigan sirtning (canvas ning) Brush hususiyati qiymatlari bilan belgilanadi.

3-rasm. Chiziladigan figura Ellipse metodining parametrlariga bog’liq

Yoy. Yoylarni Arc metodi bilan yasash mumkin. Bu metodni umumiy ko’rinishda quyidagicha yozish mumkin:

 Ob’ekt.Canvas.Arc(x1,y1,x2,u2,x3,u3,x4,u4)

Bu yerda x1, y1, x2, u2 — chizilayotgan yoyning asosi bo’lgan ellipsning (aylananing) parametrlari; x3, u3 — yoyning boshlanish nuqtasini ko’rsatuvchi parametrlar; x4, u4 —yoyning tugash nuqtasini belgilaydigan parametrlar.

Boshlang’ich (oxirgi) nuqta – bu ellips chegarasining ellips markazidan (x3, y3) hamda (x4, y4) koordinatali nuqtalarga o’tkazilgan to’g’ri chiziqlar orasida yotgan qismi. Yoylar soat millariga teskari yo’nalishda yasaladi. (4-rasm).

Yoyning rangi, qalinligi va chiziqlarining stilini rasm chizilayotgan (canvas) sirtning Pen hususiyati qiymatlari bilan ko’rsatiladi.

4-rasm. Yoy ellips (aylana) ning ma’lum bir qismidan iborat.

To’g’ri to’rtburchak. To’g’ri to’rtburchaklar Rectangle metodi bilan chiziladi. Bu metodning umumiy ko’rinishi quyidagicha:

Ob’ekt.Canvas.Rectangle(x1, y1,x2, y2)

Bu yerda Ob’ekt — sirtida rasm chiziladigan ob’ekt (komponent) ning nomi; x1, y1 va x2, u2 — to’g’ri to’rtburchakning chap yuqori va o’ng quyi burchaklarning koordinatalari.

RoundRec metodi uchlari yoysimon bo’lgan to’g’ri to’rtburchak yasash uchun foydalaniladi. Bu metodni umumiy ko’rinishda

Ob’ekt.Canvas.RoundRec(x1,y1,x2, u2, x3, u3)

tarzida ishga tushiriladi. Bu yerda x1, y1, x2, u2 – yoysimon uchli to’g’ri to’rtburchakka tashqi chizilgan to’g’ri to’rtburchakning koordinatalari; x3, u3 — chorak qismi to’g’ri to’rtburchak uchi sifatida chiziladigan ellipsning o’lchamlari (5-rasm).


5-rasm. RoundRec metodi uchlari yoysimon to’g’ri to’rtburchak chizadi

To’g’ri to’rtburchak chiziqlarining rangi, qalinligi va stili Pen hususiyatining qiymatlari bilan aniqlanadi. To’g’ri to’rtburchakning ichki rangi va fon berish stili rasm chiziladigan sirtning (canvas ning) Brush hususiyati qiymatlari bilan belgilanadi.

To’g’ri to’rtburchak yasash uchun yana ikkita metod mavjud. Bu metodlar qalam o’rniga mo’yqalam bilan chizadi. FillRect metodi bo’yalgan to’g’ri to’rtburchak, FrameRect metodi esa faqat to’g’ri to’rtburchak konturini chizish uchun foydalaniladi. Bu metodlarning har ikkisida faqat bitta parametr - TRect tipidagi struktura qatnashadi. TRect strukturasining maydonlari to’g’ri to’rtburchakli sohaning koordinatalarini saqlaydi, ular Rect funksiyasi yordamida aniqlanishi mumkin.

Ko’pburchak. Polygon metodi ko’pburchak chizish uchun xizmat qiladi. Bu metodning parametri Tpoint tipdagi massivdan iborat. Bu masivning har bir elementi yozuv bo’lib, ikkita maydon x va u larni o’z ichiga oladi. Bu yozuv-nuqta ko’pburchakning bitta uchini ifodalaydi. Polygon metodi koordinatalari massivda ko’rsatilgan nuqtalarni ketma-ket kesmalar bilan birlashtiradi: birinchisini ikkinchi bilan, ikkinchisini uchinchisi bilan va x.k. So’ngra oxirgi nuqta va birinchi nuqtalar tutashtiriladi.

Ko’pburchak chiziqlarining rangi, qalinligi va stili Pen hususiyatining qiymatlari bilan aniqlanadi, ko’pburchakning ichki rangi va fon berish stili rasm chiziladigan sirtning (canvas ning) Brush hususiyati qiymatlari bilan belgilanadi, soha so’yqalamning joriy rangi va stilida bo’yaladi. Quyidagi prosedurada polygon metodi bilan uchburchak yasaladi.

procedure TForm1.Button2Click(Sender: TObject);

var

pol: array[1..3] of TPoint; ¤¤ Uchburchak uchlarining koordinatalari

begin

pol[1].x := 10; pol[1].y := 50;

pol[2].x := 40; pol[2].y := 10;

pol[3].x := 70; pol[3].u := 50;

Form1.Canvas.Polygon(pol);

end;

Sektor. Sektorlarni Pie metodi yordamida chizish mumkin. Bu metodni umumiy ko’rinishda quyidagi bo’yruq bilan chaqiriladi:

 Ob’ekt. Canvas.Pie(x1,y1,x2,y2,x3,u3,x4,u4)

Bu yerda x1, y1, x2, u2 — sektorning asosi bo’lgan ellipsni (aylanani) aniqlaydigan parametrlar; x3, u3, x4, u4 - sektorning chegarasi bo’lgan to’g’ri chiziqlarning oxirgi nuqtalarining koordinatalari.

To’g’ri chiziqlarning boshlang’ich nuqtalari ellips (aylana) markazi bilan ustma-ust tushadi. Sektor soat millariga teskari yo’nalishda kesib olinadi: koordinatalari (xZ, u3) bo’lgan nuqtadan boshlanib, (x4, u4) koordinatali nuqtada tugaydi. (6-rasm).

6-rasm. Pie metodining parametrlariga sektorning bog’liqligi

Nuqta. Dastur grafik chizadigan sirtga Canvas ob’ekti mos keladi. TColor tipidagi ikki o’lchovli massivdan iborat bo’lgan Pixels hususiyati grafik sirtning har bir nuqtasining rangi haqidagi ma’lumotni saqlaydi. Pixels hususiyatidan foydalanib, grafik sirtning ixtiyoriy nuqtasiga talab qilingan rangni berish mumkin. Masalan,

Form1.Canvas.Pixels[10,10] := clRed;

buyrug’i forma sirtidagi (10, 10) koordinatali nuqtaga qizil rang beradi.

Pixels massivining o’lchamlari grafik sirtning o’lchamlari bilan belgilanadi. Formaning grafik sirtining (klientlar sohasi deb ham ataladi ishchi sohaning) o’lchamlari Clientwidth va ClientHeight hususiyatlarining qiymatlari bilan aniqlanadi, Image komponentasining o’lchamlari esa Width va Height hususiyatlarining qiymatlari bilan belgilanadi. Formaning ishi sohasining chap yuqori burchagiga pixels[0,0], o’ng quyi burchakka esa -Pixels[Clientwidth-1,ClientHeight-1] elementlari mos keladi.

Pixels hususiyatidan grafiklar yasashda foydalaniladi. Odatda grafiklar berilgan formulalar bo’yicha hisoblashlar natijasi asosida quriladi. Funksiya argumentining o’zgarish diapazoni boshlang’ich ma’lumot deb qabul qilinadi. Funksiya qiymatlarining o’zgarish sohasi va diapazonini esa hisoblab topish mumkin. Olingan ma’lumotlar asosida masshtabni topish mumkin. Masshtab yasalayotgan grafik rasm chizish uchun mo’ljallangan forma yoki sirtni to’la egallashi uchun kerak bo’ladi. Masalan, agar biror f(x) funksiya 0 dan 1000 gacha bo’lgan qiymatlarni qabul qilsa, hamda uning grafigini chiqarish uchun balandligi 250 piksel bo’lgan forma sohasi olingan bo’lsa, u holda Y o’qi bo’yicha masshtabni  formula bilan topiladi. Shunday qilib, f(x) = 70 nuqtaga koordinatasi Y = 233 bo’lgan nuqta mos keladi. Y ning koordinatalari formula bilan topilgan. Bu yerda h – grafik quriladigan sohaning balandligi. E’tibor bergan bo’lsangiz,  ifodaning aniq qiymati 232,5 ga teng. Ammo, nuqtani Canvas sirtiga chiqarish uchun foydalaniladigan pixels hususiyatining indeksi faqat butun son bo’lishi mumkin. Shuning uchun 232,5 soni o’ziga eng yaqin butun son, ya’ni 233 orqali yaxlitlandi.

Quyida keltirilayotgan dastur matni (.4-listing) pixels hususiyatidan foydalangan holda  funksiyasining grafigini chizadi. Grafik chizish uchun formaning mumkin bo’lgan barcha qismi band qilinadi. Agar foydalanuvchi dasturning ishi davomida oyna o’lchamlarini o’zgartirsa, grafik yangi masshtab bo’yicha boshqatdan chiziladi.

4-listing. Funksiyaning grafigi

unit grfunc_;

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type

 TForm1 = class(TForm)

 procedure FormPaint(Sender: TObject);

 procedure FormResize(Sender: TObject);

 private

 { Private declarations }

 public

 { Public declarations }

 end;

var

 Form1: TForm1;

implementation

{$R *.DFM}

¤¤ grafigini chizish talab qilingan funksiya

 Function f(x:real):real;

 begin

 f := 2*Sin(x)*exp(x ¤ 5);

 end;

¤¤ funksiya grafigini chizish

procedure GrOfFunc;

var

 x1,x2:real; ¤¤ funksiya argumentining o’zgarish chegarasi

 y1,y2:real; ¤¤ funksiya qiymatining o’zgarish chegarasi

 x:real; ¤¤ funksiyaning argumenti

 y:real; ¤¤ funksiiyaning x nuqtadagi qiymati

 dx:real; ¤¤ argument orttirmasi

 l,b:integer; ¤¤ grafik sohaning chap quyi burchagi

 w,h:integer; ¤¤ grafik sohaning kengligi va balandligi

 mx,my:real; ¤¤ X va Y o’qlari bo’yicha masshtab

 x0,y0:integer; ¤¤ koordinatalar boshi

begin

 ¤¤ grafik soha

 l := 10; ¤¤ X - chap yuqori burchakning koordinatasi

 b := Form1.ClientHeight-20;¤ Y-chap yuqori burchak koordinatasi

 h := Form1.ClientHeight-40; ¤¤ balandligi

 w := Form1.Width-40; ¤¤ kengligi

 x1 := 0; ¤¤ argument diapazonining quyi chegarasi

 x2 := 25; ¤¤ argument diapazonining yuqori chegarasi

 dx := 0.01; ¤¤ argument qadami

 ¤¤ funksiyaning [x1, x2]kesmadagi eng katta va eng kichik qiymatlarini topamiz

 y1 := f(x1); ¤¤ minimum

 y2 := f(x1); ¤¤ maksimum

 x := x1;

 repeat

 y := f(x);

 if y < y1 then y1 := y;

 if y > y2 then y2 := y;

 x := x+dx;

 until (x>=x2);

¤¤ masshtabni hisoblaymiz

 my := h ¤ abs(y2-y1); ¤¤ Y o’qi bo’yicha masshtab

 mx := w ¤ abs(x2-x1); ¤¤ X o’qi bo’yicha masshtab

¤¤ o’qlar

 x0 := l;

 y0 := b-Abs(Round(y1*my));

 with form1.Canvas do

 begin

 ¤¤ o’qlar

 MoveTo(l,b);LineTo(l,b-h);

 MoveTo(x0,y0);LineTo(x0+w, y0);

 TextOut(l+5, b-h, FloatToStrF(y2, ffGeneral, 6, 3));

 TextOut(l+5, b, FloatToStrF(y1, ffGeneral, 6, 3));

 ¤¤ grafikni yasash

 x := x1;

 repeat

 y := f(x);

 Pixels[x0+Round(x*mx),y0-Round(y*my)] := clRed;

 X := x + dx;

 until (x>=x2);

 end;

end;

procedure TForm1.FormPaint(Sender: TObject);

begin

 GrOfFunc;

end;

¤¤ dastur oynasining o’lchami o’zgardi

procedure TForm1.FormResize(Sender: TObject);

begin

 ¤¤ formani tozalash

 form1.Canvas.FillRect(Rect(0,0,ClientWidth,ClientHeight));

 ¤¤ grafikni yasash

 GrOfFunc;

end;end.

Ushbu dasturda asosiy ishni GrOfFunc prosedurasi bajaradi. U dastlab funksiyaning [x1,x2] oraliqdagi maksimal (u2) va minimal (yl) qiymatlarini hisoblaydi. So’ngra formaning kengligi (Forml.Clientwidth -40) va balandligi (Form1.ClientHeight - 40) kabi ma’lumotlarni e’tiborga olib, X o’qi bo’yicha masshtab (mx) va Y o’qi bo’yicha masshtablarni (mu) topadi.

Grafik chiqariladigan sirtning balandligi va kengligi formaning ishchi (klient) sohasi sarlavha va chegaralarni hisobga olmasdan aniqlanadi. Masshtab topilganidan so’ng, prosedura gorizontal o’qning u koordinatasini (OY) aniqlaydi va graifkning koordinata o’qlarini chizadi. So’ngra bevosita funksiyaning grafigini yasashga o’tiladi. (7-rasm).

GrOfFunc prosedurasiga murojaat qilishni onPaint va onFormResize xodisalarni qayta ishlash proseduralari bajaradi. TForm1.FormPaint prosedurasi dastur ishga tushirilib, ekranda forma paydo bo’lgan zahoti grafikni chizilishini ta’minlaydi. TForm1.FormResize prosedurasi forma o’lchamlari o’zgarganidan keyin grafik yasashni o’z zimmasiga olgan.

7-rasm. GrOfFunc prosedurasi bilan chizilgan grafik


Keltirilgan ushbu dastur universal hisoblanadi. Dastur matnidagi f(x) funksiyani almashtirib, boshqa funksiyaning grafigini ham yasash mumkish. Funksiyaning ko’rinishidan qat’iy nazar, uning grafigi formani to’la egallaydi.

Eslatma: Sizlarga taklif qilingan dastur grafigi chizilayotgan funksiya ham manfiy, ham musbat qiymatlar qabul qilganda to’g’ri ishlaydi. Agar sizning funksiyangiz faqat musbat, yoki faqat manfiy qiymatlarni qabul qilsa, dastur matniga kichik o’zgartirishlar kiritishingizga to’g’ri keladi. Bu o’zgarishlarni aniqlash o’zingizga havola.

 


 

Комментарии

Популярные сообщения из этого блога