6.6-jadval. Xossalar.
t.r.
|
Xossa nomi
|
Vazifasi yoki qiymati
|
TPen elementi
|
1
|
Color
|
Rangni aniqlaydi.
|
2
|
Handle
|
deskriptorор Pen.
|
3
|
Mode
|
Nuqtaning bosh holati.
|
4
|
Style
|
Chiziqning ko`rinishi (Stil).
|
5
|
Width
|
Chiziqning uzunligini aniqlash.
|
TBrush elementi
|
6
|
Bitmap
|
.bmp tili fayllar uchun fon osti tanlash uchun.
|
7
|
Color
|
Fon rangi.
|
8
|
Handle
|
deskriptorор HBRUSH. WinAPI uchun qo`llaniladi.
|
9
|
Style
|
Fonning variantlari (stil).
|
Ixtiyoriy rang TColor qiymati sonli va binar amallar and, or, not, xor lar kombinatsiyasi bilan hosil qilinadi.
6.7- jadval. Xossalar.
t.r.
|
Xossa nomi
|
Vazifasi yoki qiymati
|
TColor qiymatlari
|
1
|
pmCopy
|
Aralashmagan rang.
|
2
|
pmNotCopy
|
ranglar orasida bog`lanish.
|
3
|
pmNot
|
Fonning rangi aralashgan holatga o`tadi
|
4
|
pmXor
|
xor ko`rsatilgan. 1 bitli ranglar to`plami
|
5
|
pmNotXor
|
avval pmXor ga o`tkaziladi va not amali yordamida samarali
rang tanlaniladi.
|
6
|
pmMask
|
Mantiqiy and, ranglar orasida bog`lanish.
|
7
|
pmNotMask
|
pmMask tanlaniladi, so`ng pmNot
|
8
|
pmMerge
|
mantiqiy or, ranglar orasida bog`lanish..
|
9
|
pmNotMerge
|
ranglar orasida bog`lanish.
|
10
|
pmNop
|
O`zgarmas rang
|
11
|
pmBlack
|
Qora
|
12
|
pmWhite
|
Oq
|
TColor ning qiymatlarini TPen ning Mode xossasiga qiymat qilib berish mumkin.
TBrush ning style xossasining qiymatlari quyidagicha:
6.8- jadval. Xossalar.
nomi
|
Ko`rinishi
|
nomi
|
Ko`rinishi
|
bsBDiagonal
|
|
bsDiagCross
|
|
bsFDiagonal
|
|
bsHorizontal
|
|
bsCross
|
|
bsVertical
|
|
bsClear
|
Bo`sh
|
Grafiklar turli shakllar yordamida hosil qilinadi. Biz endi ular bilan tanishamiz.
6.9- jadval. Xossalar.
Xossa nomi
|
Vazifasi yoki qiymati
|
Chiziq
|
MoveTo
|
Berilgan nuqtaga o`tish.
|
LineTo
|
LineTo – Chiziq chizish ( joriy nuqtadan berilgan nuqtagacha).
|
Polyline
|
Polyline – Tpoint ning massiv ob`yektlarini birlashtirish
|
Shakllar
|
Polygon
|
Nuqtalar bo`yicha soha chizadi.
|
Rectangle
|
To`g`ri burchakli to`rtburchak.
|
FillRect
|
Chegarasiz to`g`ri burchakli to`rtburchakni fonni.
|
FrameRect -
|
To`g`ri burchakli to`rtburchak atrof chiziqlarini 1 pikselga
tenglashtirish, To`g`ri burchakli to`rtburchak fonsiz.
|
Polygon (soha)ni grafik ko`rinishga tasvirlashga bitta listing. Bu listing kvadratni chizadi.
TPoint points[5]; points[0].x=50; points[0].y=50; points[1].x=150; points[1].y=50; points[2].x=150; points[2].y=150; points[3].x=50; points[3].y=150; points[4].x=50; points[4].y=50;
Canvas->Polygon(points,4);
|
Grafikli matnlarni ekranga chiqaruvchi protseduralar. TextOut – Berilgan matnni kerakli nuqtaga chiqarish.
TextExtent – matnning birinchi va oxirgi qatorlarining orasidagi o`lchamlarini qaytaradi.
TextWidth – Matnning uzunligi.
TextHeight – Matnning balandligi.
TextRect – Matnni berilgan nuqta va shaklda chiqarish.
Egri chiziq (PolyBezier). Odatda egri chiziqli grafiklar matematik formula yordamida yaratiladi. Egri chiziq chizish texnologiyasi birinchi va oxirgi chegaralar, oraliqdagi nuqtalar beriladi va burilish aniqlanadi. Masalan, listing.
TPoint points[7]; points[0]=TPoint(0,0); points[1]=TPoint(800,30); points[2]=TPoint(0,40); points[3]=TPoint(550,400); points[4]=TPoint(350,200); points[5]=TPoint(550,400); points[6]=TPoint(0,500);
Canvas->PolyBezier(points,6);
|
Fon. FillRect fon usulidan farqli qiziqarli FloodFill foni mavjud. Berilgan nuqtadan boshlab fon qo`yadi, xuddi PaintBrush kabi. Uning birinchi ikkita qiymati koordinatalar, uchinchisi rang, to`r`tinchisi fon turi. fsSurface va fsBorder fon turlarini qabul qiladi.
Ellipse. Bu ellipsni chizadi, to`g`ri burchakli to`rt burchak kabi.
RoundRect. Aniq chegaralangan to`g`ri burchakli to`rt burchak chizadi.
Pixels. Ikki o`lchovli massiv bo`lib piksellar ranggini saqlaydi. Birinchi o`lchov - X, ikkinchisi - Y.
Draw. Berilgan nuqtada (X,Y) TGraphic ob`yektini chiqarish. TGraphic – abstract (barcha virtual metodlar bilan) sinf. Uni dasturda to`g`ridan to`g`ri foydalanib bo`lmaydi. U meroslari - TBitmap, TIcon, TMetaFile. Bularning barchasiga rasmlar, ikonkalar, metafayllar kiradi va - .bmp, .ico, .wmf, .emf. TJPEGImage nomi sinf ham mavjudki, JPEG formatli rasmlarni ko`rsatadi.
StretchDraw. Bu ham xuddi Draw kabi, faqat bu rasmlarni TRect yordamida avtomatik masshtabga keltiradi. Masalan,
Canvas->StretchDraw(TRect(0,0,40,40),MyGraphic);
|
CopyRect. Bir sohani nusxalash.
CopyMode. Nusxalash usuli. Xuddi Mode xossasiga o`xshash.
Yuqoridagi funksiya va usullardan foydalanib biz C++ Builderda ixtiyoriy grafikni hosil qilishimiz mumkin. Masalan, ning garafigini chizish.
6.6-listing.
|
ning garafigini chizish.
|
Canvas->MoveTo(15,15);
Canvas->Pen->Color=RGB(255,255,0); for(int i=0;i<30;i++) {
Canvas->LineTo(i*10,(i*i)*10);}
|
Rangli quyosh
|
Canvas->MoveTo(ClientWidth/2,ClientHeight/2);
Canvas->Pen->Color=RGB(random(255),random(255),random(255)); Canvas->LineTo(random(ClientWidth),random(ClientHeight));
|
To`g`ri burchakli to`rtburchak.
|
Canvas->Rectangle(50,50,150,150);
|
Fon o`rnatish
|
Canvas->Brush->Style=bsCross; TRect tRect(0,0,100,100);
Canvas->FillRect(tRect);
|
Fonli ellips
|
Canvas->Brush->Style=bsDiagCross; Canvas->Pen->Color = clBlue; Canvas->Pen->Mode=pmNotCopy;
Canvas->Ellipse(0,0,500,500);
|
Matn chiqarish
|
AnsiString vasS="Matn";
|
Canvas->Font->Color=clRed; Canvas->Font->Size=50;
Canvas->TextOutA(50,50,vasS);
|
Besh yulduz
|
TPoint tPoints[6];
Canvas->Pen->Color = clRed; Canvas->Pen->Width=3; tPoints[0].x = 40;
tPoints[0].y = 10;
tPoints[1].x = 20;
tPoints[1].y = 60;
tPoints[2].x = 70;
tPoints[2].y = 30;
tPoints[3].x = 10;
tPoints[3].y = 30;
tPoints[4].x = 60;
tPoints[4].y = 60;
tPoints[5].x = 40;
tPoints[5].y = 10;
Canvas->Polyline(tPoints,5);
| Mustahkamlash uchun savollar.
C++ Builderda grafik imkoniyatlarni tashkil qilib beruvchi bo`lim bormi?
VCL ning vazifasi nima ?
Pen va TCanvas elementi qanday element?
Color xususiyatining vazifasini ayting.
Tbrush elementining style xossasining qanday qiymatlarini bilasiz ?
LineTo ning vazifasini ayting.
Tpoint nima uchun ishlatiladi ?
Grafik matnlar bilan ishlovchi protseduralarni ayting.
Egri chiziqni qanday chizish mumkin ?
Draw nima ?
Bеrilgаnlаrni fаyllаrdа sаqlаsh.
Muhim so`zlar: LoadFromFile, SaveFromFile, TMemo, TStringList, TlistBox, TComboBox, TRichEdit, delete, insert, add, count, TFileStream.
Bilib olasiz: Fayllar bilan ishlash, ma`lumot o`qish, yozish, qo`shish, o`chirish, LoadFromFile, SaveFromFile protseduralar bilan ishlash, TMemo, TStringList, TlistBox, TComboBox, TRichEdit elementlarda matnlarni yozish, qo`shish, o`chirish qulayliklari, TFileStream sinfi bilan tanishish.
Juda ko`p visual elementlar va ba`zi sinflar fayllar bilan ishlash imkoniyatiga egadir. Asosan fayllar bilan ishlaganda quyidagi ikkita visual funksiyalardan foydalanamiz
LoadFromFile("Fayl nomi");
|
Faylni o`qish
|
SaveToFile("Fayl nomi ");
|
Faylni saqlash
|
Bu funksiyalar matnli fayllar bilan ishlash uchun qulaydir. Masalan,
6.7-listing.Faylni yuklash va saqlash.
|
TMemo elementi yordamida faylni yuklash va saqlash.
|
Memo1->Lines->Clear();
Memo1->Lines->LoadFromFile("a.txt");
......
Memo1->Lines->SaveToFile("a.txt");
......
|
TStringList elementi yordamida faylni yuklash va saqlash.
|
TStringList * ptStrintList; ptStrintList->Clear();
ptStrintList=new TStringList();
|
6.7-listing.Faylni yuklash va saqlash.
|
ptStrintList->LoadFromFile("a.txt");
......
ptStrintList->SaveToFile("a.txt");
......
ptStrintList->Free();
|
TListBox elementi yordamida faylni yuklash va saqlash.
|
ListBox1->Items->Clear();
ListBox1->Items->LoadFromFile("a.txt");
......
ListBox1->Items->SaveToFile("a.txt");
|
TComboBox elementi yordamida faylni yuklash va saqlash.
|
ComboBox1->Items->Clear();
ComboBox1->Items->LoadFromFile("a.txt");
......
ComboBox1->Items->SaveToFile("a.txt");
|
TRichEdit elementi yordamida faylni yuklash va saqlash.
|
RichEdit1->Lines->Clear();
RichEdit1->Lines->LoadFromFile("a.txt");
.....
RichEdit1->Lines->SaveToFile("a.txt");
|
Bu elementlardan tashqari C++ Builder da bir nechta elementlar borki, ulardan ham fayllarni yuklash va saqlashda foydalanish mumkin.
SaveToFile funksiyasidan foydalanilganda fayl bo`lmasa, funksiya bu faylni darhol yaratib beradi. Barcha fayllar matnli fayl bo`lib yaratiladi. Faqatgina TRichEdit elementi yordamida *.rtf kengaytmali fayl bilan ishlash mumkin. Shuning uchun mantiqiy yozish maqsadga muvofiqdir.
RichEdit1->Lines->SaveToFile("a.rtf");
|
Matnli fayllar bilan ishlaganda foydalaniladigan funksiya va ularning xossalari qatorning sonini hisoblaydi. Masalan,
Memo1->Lines->Count; RichEdit1->Lines->Count; ptStrintList->Count; ListBox1->Items->Count;
ComboBox1->Items->Count;
|
Barcha elementlar qator qo`shish, o`chirish imkoniyatlarini bajaradi. Masalan, elementning ikkinchi qatorini o`chirib, o`rniga yangi matnni qo`yish va matn oxirida qo`shishni olaylik.
6.8-listing. Matn qo`shish
|
AnsiString vasS="Yes";
|
TMemo elementi
|
if(Memo1->Lines->Count >= 2) { Memo1->Lines->Delete(1); Memo1->Lines->Insert(1,vasS); }
Memo1->Lines->Add(vasS);
|
TRichEdit elementi
|
if(RichEdit1->Lines->Count >= 2) { RichEdit1->Lines->Delete(1); RichEdit1->Lines->Insert(1,vasS); }
RichEdit1->Lines->Add(vasS);
|
TStrintList elementi
|
if(ptStrintList->Count >= 2) { ptStrintList->Delete(1); ptStrintList->Insert(1,vasS); }
ptStrintList->Add(vasS);
|
6.8-listing. Matn qo`shish
|
TListBox elementi
|
if(ListBox1->Items->Count >= 2) { ListBox1->Items->Delete(1); ListBox1->Items->Insert(1,vasS); }
ListBox1->Items->Add(vasS);
|
TComboBox elementi
|
if(ComboBox1->Items->Count >= 2) { ComboBox1->Items->Delete(1); ComboBox1->Items->Insert(1,vasS); }
ComboBox1->Items->Add(vasS);
|
Matnni saqlovchi qator soni bo`yicha ham saralash mumkin. Masalan,
AnsiString vasS;
vasS=Memo1->Lines->Strings[n]; vasS=RichEdit1->Lines->Strings[n]; vasS=ptStrintList->Strings[n]; vasS=ListBox1->Items->Strings[n];
vasS=ComboBox1->Items->Strings[n];
|
Keltirilgan elementlar va ularning xossalari matnli fayllar bilan ishlash imkoniyatini yaratib beradi. Eng ko`p ishlatiladigan elementlarga TMemo TrichEdit va sinflardan TStringList bilan ishlash tavsiya etiladi.
TFileStream sinfi ham borki, u yordamida matnli fayllar bilan ishlashda juda ko`p imkoniyatlar bor. Masalan, TFileStream sinfida matnli fayl bilan ishlash ancha qulayliklarni beradigan listingni keltiramiz.
6.9-listing
|
//yangi oqim yaratamiz va unga faylni o`qish va yozish uchun yuklaymiz. TFileStream * tfile=new TFileStream("b.txt",fmOpenReadWrite);
//kursorni (0,0) ga joylashtiramiz.
|
6.9-listing
|
tfile->Seek(0,0);
//bufferni tanlash. char *vchrgBuf;
//buffer uchun xotira olinadi.
if ((vchrgBuf = (char *) malloc(tfile->Size)) == NULL) {
// buffer uchun olingan xotiraning mavjud emasligi haqidagi xabarni yozish
// mumkin. return; }
//buferdan axborotni o`qiymiz. tfile->Read(vchrgBuf,tfile->Size);
// bufferda axborotni o`zgaruvchi o`qib olamiz. AnsiString vasS=vchrgBuf;
//har ehtimolga qarshi vasS.SetLength(tfile->Size);
//xotirani tozalash free(vchrgBuf);
//oqimni tozalash tfile->Size=0;
// TMemo elementiga axborotni ko`rish uchun yozamiz
//Memo1->Lines->Clear(); Memo1->Lines->Add(vasS);
//axborotni o`zgartirmiz
if(Memo1->Lines->Count >= 2) { Memo1->Lines->Delete(1);
String vasS1="Salom Buxoro !!!"; Memo1->Lines->Insert(1,vasS1); }
//AnsiString ga TMemo ning ma`lumotini olamiz
|
6.9-listing
|
vasS=Memo1->Lines->GetText();
// buffer uchun xotira olinadi.
if ((vchrgBuf = (char *) malloc(vasS.Length())) == NULL) {
// // buffer uchun olingan xotiraning mavjud emasligi haqidagi xabarni yozish
// mumkin. return; }
//matnni buferga olish. vchrgBuf=vasS.c_str();
tfile->Write(vchrgBuf,vasS.Length());
//oqimni tozalaymiz tfile->Free();
//xotirani tozalaymiz.
free(vchrgBuf);
|
Yuqorida keltirilgan imkoniyatlar C++ Builderda matnli fayllarga ma`lumotlarni yozish, o`qish, o`zgartirish bilan ishlash juda ko`p qulayliklarni yaratib beradi. Bundan tashqari C++ Builderda tipli fayllari bilan ham ishlash mumkin.
Do'stlaringiz bilan baham: |