TMainMenu – головне меню, TPopupMenu – контекстне меню, TActionList – список дій 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

TMainMenu – головне меню, TPopupMenu – контекстне меню, TActionList – список дій



Постановка задачі: використати компоненти TMainMenu, TPopupMenu, TActionList для побудови графічного інтерфейсу додатку.

Послідовність виконання:

1 Помістіть на форму компоненти: MainMenu1, PopupMenu1, Button1, Button2, ActionList1.

2 На компоненті MainMenu1 в випадаючому меню виберіть Menu Disigner.

3 Добавте в пункти меню і пункти підменю. Надпис на кожному пункті задається його властивістю Caption. Пункти підменю створюються шляхом вибору Create Submenu в випадаючому меню.

4 Аналогічно добавте в PopupMenu1 пункти і пункти за допомогою Menu Disigner...

5 На компоненті ActionList1 в випадаючому меню виберіть Action List Editor.

6 Добавте дії Action1 і Action2 за допомогою кнопки New Action.

7 Створіть функції обробки подій OnExecute для Action1 і Action2 і в кожну з них вставте відповідно:

Application->MessageBox("дія Action1", " Action1", MB_OK);

Application->MessageBox("дія Action2", " Action2", MB_OK);

8 Змініть значення властивості Action для Button1, одного пункту MainMenu1 і PopupMenu1 на Action1.

9 Змініть значення властивості Action для Button2, одного пункту MainMenu1 і PopupMenu1 на Action2.

10 Запустіть програму: Run.

 

TLabel – мітка, надпис Label1->AutoSize=false; //немає автоматичної зміни розмірівLabel1->Alignment=taRightJustify; //вирівнювання надписуLabel1->Font->Color=clRed; //колір шрифтуLabel1->Font->Size=14; //розмір шрифтуLabel1->Caption="Hello"; //текст надписуLabel1->Caption=5.1; //текст надписуLabel1->Caption="Float "+FloatToStr(2.5); //текст надпису TButton - кнопка Button1->Caption="OK"; //текст надписуButton1->Hint="Button1"; //текст підказкиButton1->ShowHint=true; //показувати підказкуButton1->Top=100; //Y-координата верхнього лівого кутаButton1->Left=100; //X-координата верхнього лівого кутаButton1->Height=20; //висотаButton1->Width=30; //ширина Створення єдиної функції-обробника події для всіх кнопок TButton//конструктор форми__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner){//вказати функцію-обробник події OnClick Button1->OnClick=Button1Click; Button2->OnClick=Button1Click; Button3->OnClick=Button1Click;}//функція-обробник події OnClickvoid __fastcall TForm1::Button1Click(TObject *Sender){static int i=1; //статична змінна//створити вказівник на об’єкт, який викликав подію OnClickTButton *Button=(TButton*)Sender;Button->Caption=i++; //змінити надпис на кількість викликів} TRadioButton - перемикач RadioButton1->Checked=true; //вибраний станRadioButton1->Caption="check1"; //текст надписуRadioButton1->Enabled=false; //не доступний TCheckBox - прапорець if (CheckBox1->Checked==true) //якщо стан вибраний{CheckBox1->Caption="true";} //змінити надпис на "true"else //інакше{CheckBox1->Caption="false";} //змінити надпис на "false"CheckBox1->Checked=true; //вибраний станCheckBox1->State=cbGrayed; // “третій” стан Присвоєння властивості Checked=true всім компонентам TCheckBox//для всіх компонентів на форміfor(int i=0; i<ComponentCount; i++){//створити вказівник типу TCheckBox* на даний компонент шляхом//спроби динамічного перетворення типу TCheckBox *CBox=dynamic_cast<TCheckBox*>(Components[i]);if (CBox) CBox->Checked=true; //встановити вибраний стан} TEdit – поле редагування Edit1->Text="Hello"; //текст у поліEdit1->Text=2.1; //текст у поліdouble x=StrToFloat(Edit1->Text); //перетворити текст у дійсне числоEdit1->Text=x;char s[128]; //масив символівstrcpy(s,Edit1->Text.c_str()); //помістити текст у масив символівEdit1->Text=s;Edit1->PasswordChar='*'; //символ для вводу пароляEdit1->Clear(); //очистити поле TMemo – багаторядкове поле редагування Memo1->Lines->Add("1"); //додати рядок "1"Memo1->Lines->Strings[0]="2"; //змінити перший рядок на "2"Memo1->Lines->Assign(ListBox1->Items); //установити рядки з ListBox1 Memo1->Lines->SaveToFile("Data.txt"); //зберегти рядки у файлMemo1->Lines->LoadFromFile("Data.txt"); //читати рядки з файлу//вивести весь текст Memo1 в діалоговому вікні MessageBoxAApplication->MessageBoxA(Memo1->Text.c_str(),"",mbNone); TListBox – список рядків //добавити елементи "1", "2", "3"ListBox1->Items->DelimitedText="1,2,3";ListBox1->Items->Clear(); //очиститиListBox1->Items->Add("1"); // добавити елемент "1",ListBox1->Items->Add("2"); // добавити елемент "2",char c[][10]={"1000","2000","3000"}; //масив символів//додати елементи "1000", "2000", "3000"for(int i=0;i<3;i++)ListBox1->Items->Add(c[i]);ListBox1->Items->Insert(1,"3"); //помістити елемент "3" на друге місцеListBox1->Items->Delete(1); //видалити другий елементint k= ListBox1->Items->Count; //кількість елементівint i=ListBox1->ItemIndex; //індекс вибраного елементуString s=ListBox1->Items->Strings[i]; //текст і-го елементу Заповнення ListBox об’єктами//добавити елемент з рядком Button1->Name і об’єктом Button1ListBox1->Items->AddObject(Button1->Name,Button1);//добавити елемент з рядком Button2->Name і об’єктом Button2ListBox1->Items->AddObject(Button2->Name,Button2);int i=ListBox1->ItemIndex; //індекс вибраного елементу//створити вказівник типу TButton* на об’єкт з індексом іTButton *b=(TButton*)(ListBox1->Items->Objects[i]);b->Caption="Selected Button"; //змінити текст надпису TComboBox – випадаючий список рядків ComboBox1->Text="5"; //текст//добавити елемент з рядком ComboBox1->Text ComboBox1->Items->Add(ComboBox1->Text); TScrollBar – смуга прокручування ScrollBar1->Kind=sbVertical;//тип смуги прокручування – вертикальна ScrollBar1->Min=1;//мінімальне значенняScrollBar1->Max=100;//максимальне значенняScrollBar1->LargeChange=10;//великий крокScrollBar1->SmallChange=1;//малий крокint i=ScrollBar1->Position;//позиціяEdit1->Text=i; TPanel - панель Динамічне створення і видалення компонентів//функція-обробник події OnClick для Button1void __fastcall TForm1::Button1Click(TObject *Sender){TButton *Btn=new TButton(Panel1); //динамічно створити кнопкуBtn->Parent=Panel1; //власник кнопки - Panel1//координати кнопкиBtn->Left=10;Btn->Top=10;Btn->Caption="Btn"; //текст надписуBtn->OnClick=BtnClick; //функція-обробник події OnClick}//функція-обробник події OnClick об’єкту Btnvoid __fastcall TForm1::BtnClick(TObject *Sender){//показати діалогове вікно з надписом "Remove" Application->MessageBoxA("Remove","",mbNone);TControl *Btn=Panel1->Controls[0]; // Btn – перший об’єкт на Panel1 Panel1->RemoveControl(Btn); //видалити об’єкт Btn}

Компоненти Additional

TBitBtn – кнопка з піктограмою BitBtn1->Kind=bkOK; //тип кнопкиBitBtn1->Glyph->LoadFromFile("1.bmp"); //рисунок на кнопціBitBtn1->Caption="Hello"; //текст надпису Приклад використання технології Drag&Drop//натиснута кнопка миші на BitBtn1void __fastcall TForm1::BitBtn1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y){//якщо натиснута права кнопка, розпочати перетягуванняif(Button==mbRight)BitBtn1->BeginDrag(false,5);BitBtn1->BringToFront(); //винести на передній план}//відбувається перетягування над Panel1void __fastcall TForm1::Panel1DragOver(TObject *Sender, TObject *Source, int X, int Y, TDragState State, bool &Accept){//вивести координати у надпис форми Form1->Caption=IntToStr(X)+","+IntToStr(Y);}//завершено перетягуванняvoid __fastcall TForm1::Panel1DragDrop(TObject *Sender, TObject *Source, int X, int Y){ BitBtn1->Parent=Panel1; //власник BitBtn1 - Panel1 BitBtn1->Top=Y; //координати кнопки BitBtn1->Left=X;}//натиснута кнопка BitBtn1void __fastcall TForm1::BitBtn1Click(TObject *Sender){//вивести ім’я власника BitBtn1Application->MessageBox(BitBtn1->Parent->Name.c_str(),"Parent",mbNone);} TSpeedButton – кнопка з піктограмою і фіксацією SpeedButton1->Glyph->LoadFromFile("1.bmp"); //рисунок на кнопціSpeedButton1->Caption="Ok"; //текст надпису на кнопці TMaskEdit – поле редагування з шаблонами MaskEdit1->Clear(); //очиститиMaskEdit1->Text="150797"; //текст до застосування маскиMaskEdit1->EditMask="!99/99/00;1"; //маскаString S=MaskEdit1->EditText;//текст після застосування маски TStringGrid - таблиця StringGrid1->ColCount=3; //кількість колонок StringGrid1->RowCount=3; //кількість рядків StringGrid1->Cells[0][1]="row1"; //текст в комірці Cells[0][1] StringGrid1->Cells[1][0]="col1"; //текст в комірці Cells[1][0] StringGrid1->Cells[1][1]=2; //текст в комірці Cells[1][1]//дозвіл і заборона редагування вмісту комірок StringGrid1->Options<<goEditing; //додаємо в множину goEditing StringGrid1->Options>>goEditing; //видаляємо з множини goEditing int c=StringGrid1->Col; //індекс колонки вибраної комірки int r=StringGrid1->Row; //індекс рядка вибраної коміркиEdit1->Text=StringGrid1->Cells[c][r]; //помістити в поле вміст Cells[c][r] TDrawGrid – таблиця зображень //при необхідності перерисування зображення в комірках DrawGrid1void __fastcall TForm1::DrawGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State){//створити графічний об’єкт bmpGraphics::TBitmap *bmp = new Graphics::TBitmap();bmp->LoadFromFile("1.bmp"); //завантажити з файлуTRect b; //створити об’єкт-прямокутникb.Left=0; //координати прямокутникаb.Top=0;b.Right=bmp->Width;b.Bottom=bmp->Height;//перерисування зображення в комірці 1,1if ((ACol==1)&&(ARow==1)){DrawGrid1->Canvas->CopyRect(Rect,bmp->Canvas,b);}//перерисування зображення в комірках використовуючи//список зображень ImageList1 int i=ARow*DrawGrid1->ColCount+ACol;if (i<=ImageList1->Count-1){ImageList1->Draw(DrawGrid1->Canvas,Rect.Left,Rect.Top,i,true);}} TImage – контейнер графічних зображень, TPicture – графічне зображення Image1->Picture->LoadFromFile("1.bmp"); //завантажує картинку з файлуImage1->AutoSize=true; //автоматична зміна розміру Image1Image1->Stretch=false; //автоматична зміна розміру картинки відключенаImage1->Center=true; // розташовує картинку по центру Image1int h=Image1->Height; //висотаint w=Image1->Width; //ширинаImage1->Canvas->LineTo(w,h); //рисує на канві лінію до точки (w,h)Image1->Picture->SaveToFile("2.bmp"); //зберегти картинку у файл TShape – геометрична форма, TBrush - пензель, TPen - перо Shape1->Shape=stCircle; //форма - коло Shape1->Brush->Color=clGreen; //колір пензля Shape1->Brush->Style=bsSolid; //стиль пензля//створити графічний об’єкт BrushBmp Graphics::TBitmap *BrushBmp = new Graphics::TBitmap; BrushBmp->LoadFromFile("1.bmp"); //завантажити з файлу Shape1->Brush->Bitmap=BrushBmp; //установити рисунок пензля Shape1->Pen->Style=psDot; //стиль пера Shape1->Pen->Color=clBlue; //колір пера Shape1->Pen->Mode=pmCopy; //режим рисування ліній TScrollBox – контейнер прокручування ScrollBox1->AutoScroll=true; //автоматично відображати лінійки прокручування//прокручувати вміст відразу ScrollBox1->HorzScrollBar->Tracking=true; ScrollBox1->VertScrollBar->Tracking=true; TCheckListBox – список рядків з індикаторами CheckListBox1->Items->Add("1"); //добавити елемент "1"CheckListBox1->Items->Add("2"); //добавити елемент "2"//і змінюється від 0 до кількості елементівfor (int i=0;i<CheckListBox1->Items->Count;i++){if (CheckListBox1->Checked[i]), //якщо елемент [і] вибраний{CheckListBox1->Items->Strings[i]="true";} //змінити надпис на "true"else //інакше{CheckListBox1->Items->Strings[i]="false";} //змінити надпис на " false "} TSplitter - розділювач ListBox1->Align=alLeft; //вирівнює розташування ListBox1ListBox2->Align=alClient; //вирівнює розташування ListBox2Splitter1->Left=ListBox2->Left; //координата Splitter1 по горизонталіSplitter1->Align=alLeft; //вирівнює розташування Splitter1 TControlBar – контейнер інструментальних панелей BitBtn1->DragMode=dmAutomatic; //автоматичний режим перетягуванняBitBtn1->DragKind=dkDock; //вид перетягуванняControlBar1->AutoDrag=true; //дозволяє перетягування за межі компонентуControlBar1->AutoDock=true; //автоматичне вбудовування при перетягуванні над компонентомControlBar1->RowSize=50; //висота рядка TApplicationEvents – перехоплювач подій додатку int i,j=0;//при простоюванніvoid __fastcall TForm1::ApplicationEvents1Idle(TObject *Sender, bool &Done){Application->Title=IntToStr(i++)+" "+IntToStr(j);}//при активізаціїvoid __fastcall TForm1::ApplicationEvents1Activate(TObject *Sender){Application->MessageBox("Activate","",0);}//при мінімізаціїvoid __fastcall TForm1::ApplicationEvents1Minimize(TObject *Sender){Application->MessageBox("Minimize","",0);}//при отриманні повідомлення Windowsvoid __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg, bool &Handled){j++;} TValueListEditor – компонент редагування списків, які містять пару ім’я/значення int r;//при натиску на кнопку Button1void __fastcall TForm1::Button1Click(TObject *Sender){ ValueListEditor1->InsertRow("I","1",true); //вставити рядок ValueListEditor1->InsertRow("II","2",true); //вставити рядок ValueListEditor1->InsertRow("III","3",true); //вставити рядок//стиль редагування першого значення - простий ValueListEditor1->ItemProps[0]->EditStyle=esSimple;//стиль редагування другого значення - список ValueListEditor1->ItemProps[1]->EditStyle=esPickList;//додати елементи в список ValueListEditor1->ItemProps[1]->PickList->Add("1"); ValueListEditor1->ItemProps[1]->PickList->Add("2");//стиль редагування третього значення – через діалогове вікно ValueListEditor1->ItemProps[2]->EditStyle=esEllipsis;//вивести текст третього ключа Edit1->Text=ValueListEditor1->Keys[2];//вивести текст значення з ключем "II" Edit2->Text=ValueListEditor1->Values["II"]; }//натиснута кнопка для редагування третього значенняvoid __fastcall TForm1::ValueListEditor1EditButtonClick(TObject *Sender){//якщо вибрано третій рядок змінити текст значення з ключем "III" за допомогою діалогового вікнаif(r==3)ValueListEditor1->Values["III"]=InputBox("","","");}//вибрана коміркаvoid __fastcall TForm1::ValueListEditor1SelectCell(TObject *Sender, int ACol, int ARow, bool &CanSelect){r=ARow; //присвоїти номер вибраного рядка} TLabeledEdit – поле редагування з надписом LabeledEdit1->EditLabel->Caption="Hello"; //текст надписуLabeledEdit1->LabelPosition=lpLeft; //розміщення надписуLabeledEdit1->Text="User"; //текст TColorBox – вікно вибору кольору, TColor - колір ColorBox1->Style<<cbCustomColor; //стиль вікна вибору кольоруForm1->Color=ColorBox1->Selected; //колір форми змінити на вибраний колір TChart - діаграма Добавляємо на форму компонент Chart і викликаємо редактор діаграми Edit Chart... В редакторі діаграм добавляємо дві серії типу Line. В конструктор форми вставляємо код: Chart1->Title->Text->Clear(); //очистити надпис назви діаграмиChart1->Title->Text->Add("My Chart"); //змінити текст надпису назвиChart1->BottomAxis->Title->Caption="X"; //текст надпису осі XChart1->LeftAxis->Title->Caption="Y"; //текст надпису осі YSeries1->Clear(); //очистити серію 1Series1->Title="x^2"; //надпис серії 1Series2->Clear(); //очистити серію 2Series2->Title="x^3"; //надпис серії 2//добавити дані (X, Y) в серії 1 і 2for (float x=0; x<5;x+=0.1){ Series1->AddXY(x,x*x,"",clRed); Series2->AddXY(x,x*x*x,"",clBlue);}//змінити всі значення X серії 1 на 1for (int i=0; i<Series1->Count();i++){ Series1->XValues->Value[i]=1;}

Компоненти Win32

TTabControl - вкладки TabControl1->Tabs->Add("1"); //добавити вкладку "1"TabControl1->Tabs->Add("2"); //добавити вкладку "2"TabControl1->Tabs->Add("3"); //добавити вкладку "3"//якщо вибрана третя вкладка, змінити її надпис на "*"if (TabControl1->TabIndex==2)TabControl1->Tabs->Strings[2]="*"; TPageControl - сторінки PageControl1->TabPosition=tpLeft; //розміщення закладок зліваTTabSheet *Tab=new TTabSheet(this);//динамічне створення сторінкиTab->PageControl=PageControl1; //вказує PageControl для сторінкиTab->Caption="New"; //текст надписуPageControl1->ActivePage=Tab; //зробити сторінку Tab активноюint i=PageControl1->ActivePageIndex; //індекс активної сторінкиPageControl1->Pages[i]->Caption="Sel"; //надпис і-ї сторінки TImageList – список зображень, TBitmap – зображення, бітова матриця //динамічно створює графічний об’єктGraphics::TBitmap *Bmp = new Graphics::TBitmap;Bmp->LoadFromFile("1.bmp"); //завантажити зображення з файлуImageList1->Add(Bmp,NULL); //додати графічний об’єкт в списокBmp->LoadFromFile("2.bmp"); //завантажити зображення з файлуImageList1->Insert(0,Bmp,NULL); //вставити об’єкт на перше місцеImageList1->Move(1,0); //перемістити зображення з позиції 1 на позицію 0ImageList1->GetBitmap(1,Bmp); //отримати об’єкт зі списку по індексу 1Image1->Picture->Bitmap=Bmp; //нарисувати зображення Bmp в Image1//нарисувати зображення з індексом 0 на форміImageList1->Draw(Form1->Canvas,10,10,0,true);ImageList1->Delete(1); //видалити зображення з індексом 1 TRichEdit – багаторядкове поле редагування з розширеним форматуванням //конструктор форми__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner){RichEdit1->Lines->LoadFromFile("1.rtf"); //зчитати рядки з файлуRichEdit1->WordWrap=false; //заборонити переніс текстуRichEdit1->DefAttributes->Color = clBlue; //колір по замовчуваннюRichEdit1->DefAttributes->Style=RichEdit1->DefAttributes->Style << fsBold << fsItalic; //стиль по замовчуваннюRichEdit1->Lines->Add("First line"); //добавити рядок "First line"RichEdit1->Lines->Insert(0,"Second line"); //вставити рядок "Second line" в позицію 0}//натиснута кнопка Button1void __fastcall TForm1::Button1Click(TObject *Sender){RichEdit1->SelAttributes->Color = clRed; //колір виділеного текстуRichEdit1->SelAttributes->Height = 14; //висота виділеного текстуRichEdit1->Paragraph->Alignment = taCenter; //вирівнювання поточного абзацуString S=RichEdit1->SelText; //виділений текстfor(int i=1;i<=RichEdit1->SelLength;i++)S[i]='*'; //змінити всі символи на '*'RichEdit1->SelText=S; //вставити рядок S замість виділеногоRichEdit1->Lines->SaveToFile("1.rtf"); //зберегти рядки у файл} TTrackBar - повзунок //конструктор форми__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner){TrackBar1->Orientation=trVertical; //орієнтація вертикальнаTrackBar1->Frequency=5; //частота поділокTrackBar1->Min=-10; //мінімальне значенняTrackBar1->Max=20; //максимальне значенняTrackBar1->SelStart=0; //мінімальне значення виділеногоTrackBar1->SelEnd=20; //максимальне значення виділеногоTrackBar1->Position=10; //позиція повзунка}//при зміні TrackBar1void __fastcall TForm1::TrackBar1Change(TObject *Sender){Label1->Caption=TrackBar1->Position;} //вивести в надпис Label1 поточну позицію повзунка TProgressBar – індикатор прогресу ProgressBar1->Smooth=true; //неперервне відображенняProgressBar1->Max=10; //максимальне значенняProgressBar1->Step=1; //крок приростуProgressBar1->Position++; //збільшити позицію на 1ProgressBar1->StepBy(2); //збільшити позицію на 2ProgressBar1->StepIt(); //збільшити позицію на значення кроку TUpDown – спарені кнопки вверх-вниз, лічильник UpDown1->Associate=Edit1; //пов’язане з UpDown1 поле Edit1 UpDown1->Wrap=true; //переносити при досягненні граничного значення UpDown1->Min=2; //мінімальне значення UpDown1->Max=10; //максимальне значення UpDown1->Increment=2; //приріст int i=UpDown1->Position; //поточне значення THotKey – клавіша гарячого виклику Добавте на форму компоненти HotKey, ActionList та два компоненти Button. Створіть дію Action1. Запрограмуйте події OnExecute для Action1 та OnClick для Button1. //при натиску кнопки Button1void __fastcall TForm1::Button1Click(TObject *Sender){//присвоїти дії Action1 клавіші гарячого викликуAction1->ShortCut=HotKey1->HotKey;Button2->Action=Action1; //пов’язати кнопку Button2 з дією Action1}//при виконанні дії Action1void __fastcall TForm1::Action1Execute(TObject *Sender)//змінити гарячі клавіші на "Ctrl+O"{HotKey1->HotKey=ShortCut(Word('O'), TShiftState() << ssCtrl);} TAnimate – анімація відеозаписів Animate1->Active=false; //не програвати кліп Animate1->CommonAVI=aviFindComputer; //стандартний кліп avi//програвати всі кадри нескінченно Animate1->Play(Animate1->StartFrame,Animate1->StopFrame,0); Sleep(1000); //зупинити виконання програми на 1 секунду Animate1->Stop(); //зупинити програвання Animate1->FileName="1.avi"; //завантажити файл 1.avi//програвати всі кадри один раз Animate1->Play(Animate1->StartFrame,Animate1->StopFrame,1); Sleep(3000); //зупинити виконання програми на 3 секунди Animate1->Seek(5); //показати п’ятий кадр TDateTimePicker – вибір дати/часу, TDateTime – дата/час DateTimePicker1->ShowCheckbox=true; //показувати індикаторif(DateTimePicker1->Checked) //якщо індикатор вибрано{DateTimePicker1->Kind=dtkTime; //тип - часDateTimePicker1->Time=Time(); //присвоїти поточний час}else //інакше{DateTimePicker1->Kind=dtkDate; //тип - датаDateTimePicker1->Date=Date(); //присвоїти поточну датуDateTimePicker1->DateFormat=dfLong; //формат датиDateTimePicker1->DateMode=dmComboBox; //спосіб зміни дати}//присвоїти змінній DT значення властивості DateTimeTDateTime DT=DateTimePicker1->DateTime;Edit1->Text=DT.DateString(); //вивести в поле Edit1 датуEdit2->Text=DT.TimeString(); //вивести в поле Edit2 час TMonthCalendar - календар, TDate - дата TDate DMin=EncodeDate(2007,9,3); //присвоїти DMin вказану датуTDate DMax=Date()+50; //присвоїти DMax поточну дату+50 днівMonthCalendar1->MinDate=DMin; //встановити мінімальну датуMonthCalendar1->MaxDate=DMax; //встановити максимальну датуTDate D=MonthCalendar1->Date; //присвоїти D вибрану дату unsigned short y,m,d; //рік, місяць і деньD.DecodeDate(&y,&m,&d); //декодувати датуEdit1->Text=d; //вивести в поле день TTreeView – деревовидний список //конструктор форми__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner){ TTreeNode *N; //вказівник на вузол дерева TreeView1->Items->Clear(); //очистити вузли TreeView1->Items->Add(NULL,"#1"); //добавити вузол "#1" N= TreeView1->Items->Item[0]; //вказівник вказує на перший вузол TreeView1->Items->Add(N,"#2"); //добавити вузол "#2" TreeView1->Items->Add(N,"#3"); //добавити вузол "#3" TreeView1->Items->AddChild(N,"+1"); //добавити дочірній вузол "+1" N= TreeView1->Items->Item[1]; //вказівник вказує на другий вузол TreeView1->Items->AddChild(N,"1"); //добавити дочірній вузол "1" TreeView1->Items->Add(N,"+2"); //добавити вузол "+1" Edit1->Text=TreeView1->Items->Item[4]->Text; //текст п’ятого вузла}//при натиску на кнопці Button2void __fastcall TForm1::Button2Click(TObject *Sender){//вивести в поле текст вибраного вузла і його індексEdit1->Text=(TreeView1->Selected->Text)+"-"+(TreeView1->Selected->Index);//вставити на місце вибраного вузла вузол "New"TreeView1->Items->Insert(TreeView1->Selected,"New");//видалити вибраний вузолTreeView1->Items->Delete(TreeView1->Selected);} TListView – табличний список елементів //при створенні формиvoid __fastcall TForm1::FormCreate(TObject *Sender){ TListColumn *Col; //колонка списку TListItem *ListItem; //елемент списку ListView1->ViewStyle=vsReport; //стиль списку ListView1->Checkboxes=true; //показувати прапорці ListView1->ShowColumnHeaders=true; //показувати заголовки колонок//створити три колонки for (int i = 0; i < 3; i++) { Col = ListView1->Columns->Add(); //добавити колонку Col->Caption = "Col "+IntToStr(i); //змінити надпис колонки }//створити п’ять елементів з піделементами for (int i = 0; i < 5; i++) { ListItem = ListView1->Items->Add(); //добавити елемент (рядок) ListItem->Caption = "Row "+IntToStr(i); //змінити надпис рядку ListItem->SubItems->Add(i); //добавити піделемент ListItem->SubItems->Add(i+1); //добавити піделемент }}//при натиску на колонціvoid __fastcall TForm1::ListView1ColumnClick(TObject *Sender, TListColumn *Column)//вивести в поле надпис і індекс колонки{ Edit1->Text=Column->Caption+" "+Column->Index;}//при виборі елементаvoid __fastcall TForm1::ListView1SelectItem(TObject *Sender, TListItem *Item, bool Selected){//якщо прапорець елемента вибраний і індекс більше 1if((Item->Checked)&&(Item->Index>1))//вивести в поле надпис елемента і першого піделементаEdit1->Text=Item->Caption+" "+Item->SubItems->Strings[0];} THeaderControl - заголовки //при створенні формиvoid __fastcall TForm1::FormCreate(TObject *Sender){//добавити дві секції з надписами HeaderControl1->Sections->Add()->Text="1"; HeaderControl1->Sections->Add()->Text="2"; }//при перетягуванні секціїvoid __fastcall TForm1::HeaderControl1SectionTrack(THeaderControl *HeaderControl, THeaderSection *Section, int Width, TSectionTrackState State){//координата Left Edit1 дорівнює координаті Left першої секції Edit1->Left=HeaderControl->Sections->Items[0]->Left;//ширина Edit1 дорівнює ширині першої секції Edit1->Width=HeaderControl->Sections->Items[0]->Width;//координата Left Shape1дорівнює координаті Left другої секції Shape1->Left=HeaderControl->Sections->Items[1]->Left;//ширина Shape1дорівнює ширині другої секції Shape1->Width=HeaderControl->Sections->Items[1]->Width;} TStatusBar – рядок стану //конструктор форми__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner){Form1->Cursor=crCross; //змінити вид курсоруStatusBar1->Panels->Add(); //добавити панельStatusBar1->Panels->Add(); //добавити панель}//при переміщенні курсору миші над формоюvoid __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y){//X,Y – координати курсоруStatusBar1->Panels->Items[0]->Text=IntToStr(X); //змінити текст на XStatusBar1->Panels->Items[1]->Text=IntToStr(Y); //змінити текст на YStatusBar2->SimpleText=IntToStr(X)+","+IntToStr(Y); //змінити текст на X,Y} TToolBar – панель інструментів Для створення панелі інструментів ToolBar на етапі проектування і зв’язування її елементів керування з головним меню виконайте дії:1 Помістіть на форму компоненти: MainMenu1, ActionList1, ImageList1, ToolBar1.2 Створіть пункти меню MainMenu1.3 Створіть дії ActionList1 і функції-обробники подій OnExecute.4 Добавте рисунки в ImageList1.5 Добавте кнопки в ToolBar1.6 Змініть властивість Images компонентів ActionList1 і ToolBar1 на ImageList1.8 Змініть властивість ImageIndex компонента Action1 на 0.9 Змініть властивість Action одного пункта MainMenu1 на Action1.10 Змініть властивість Action однієї кнопки ToolBar1 на Action1. Для створення панелі інструментів ToolBar динамічно:1 Добавте на форму компонент ActionList1 і добавте дію Action1. 2 Створіть для неї обробник події OnExecute. 3 Добавте в модуль директиву: #include <comctrls.hpp> і код: //при створенні формиvoid __fastcall TForm1::FormCreate(TObject *Sender){//створити контрольну панель Bar1 TControlBar *Bar1= new TControlBar(Form1); Bar1->Parent=Form1; //батьківський компонент - форма Bar1->Left=0; //координата Left Bar1->Width=Form1->Width; //ширина дорівнює ширині форми//створити панель інструментів Bar2 TToolBar *Bar2= new TToolBar(Bar1); Bar2->Parent=Bar1; //батьківський компонент - Bar1 Bar2->Left=0; //координата Left Bar2->ShowCaptions = True; //показувати надписи Bar2->Height = 40; //висота//створити кнопку Button TToolButton *Button = new TToolButton(Bar2); Button->Parent = Bar2; //батьківський компонент – Bar2 Button->Action=Action1; //пов’язати з дією Action1 }//відбулась дія Action1void __fastcall TForm1::Action1Execute(TObject *Sender)//вивести повідомлення "Execute"{Application->MessageBox("Execute","Action1",0);} TCoolBar – панель зі шторками //створити панель зі шторкамиTCoolBar *CoolBar = new TCoolBar(this);CoolBar->Parent = this; //батьківський компонентCoolBar->Align = alTop; //вирівнюванняCoolBar->Bands->Add(); //добавити смугуCoolBar->Bands->Items[0]->Text ="Band"; //змінити надпис першої смугиTButton *Button = new TButton(CoolBar); //створити кнопкуButton->Caption="Button"; //надпис на кнопціButton->Parent=CoolBar; //батьківський компонент - CoolBarCoolBar->Bands->Items[0]->Control=Button; //компонент що належить до смуги - Button TPageScroller – панель з прокручуванням 1 Помістіть на форму компоненти Panel1 і PageScroller1. 2 На панелі Panel1 розмістіть довільну кількість інших компонентів.3 Змініть властивість Control компонента PageScroller1 на Panel1. TComboBoxEx – комбінований список зі значками ComboBoxEx1->Images=ImageList1; //список рисунків для ComboBoxEx1ComboBoxEx1->ItemsEx->AddItem("1",0,0,0,0,NULL); //добавити елементComboBoxEx1->ItemsEx->AddItem("2",1,1,1,1,NULL); //добавити елементComboBoxEx1->ItemsEx->AddItem("3",1,1,1,0,NULL); //добавити елемент

Компоненти System

TTimer - таймер //конструктор форми__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner){Form1->Caption="0"; //надпис на форміTimer1->Interval=2000; //інтервал таймеру – 2 секундиTimer1->Enabled=true; //включити таймер}//пройшов інтервал часуvoid __fastcall TForm1::Timer1Timer(TObject *Sender){int t=StrToInt(Form1->Caption); //t – кількість мілісекунд //якщо t<10000 змінити надпис формиif (t<10000)Form1->Caption=t+Timer1->Interval;else Timer1->Enabled=false; //інакше виключити таймер} TPaintBox – область рисування, TCanvas - канва, TBrush - пензель, TPen - перо //при необхідності перерисування зображенняvoid __fastcall TForm1::PaintBox1Paint(TObject *Sender){//створити графічний об’єкт bmpGraphics::TBitmap *bmp = new Graphics::TBitmap();bmp->LoadFromFile("1.bmp"); //завантажити з файлуPaintBox1->Canvas->Draw(30,50,bmp); //нарисувати bmp в заданих координатахPaintBox1->Canvas->TextOutA(10,100,"Hello"); //вивести текст в заданих координатахPaintBox1->Canvas->Ellipse(100,100,200,300); //нарисувати еліпсPaintBox1->Canvas->Brush->Color=clRed; //колір пензляPaintBox1->Canvas->FloodFill(110,200,clBlack,fsBorder); //залити площу в заданих координатахPaintBox1->Canvas->Brush->Bitmap=bmp; //рисунок пензля - bmpPaintBox1->Canvas->FloodFill(20,5,clBlue,fsSurface); //залити площу в заданих координатахPaintBox1->Canvas->Pen->Width=5; //ширина пераPaintBox1->Canvas->Pen->Style=psDashDotDot; //стиль пераPaintBox1->Canvas->MoveTo(20,20); //перемістити перо в точкуPaintBox1->Canvas->LineTo(50,150); //рисувати лінію до точкиfor(int x=0;x<200;x+=2)//змінити колір пікселів з координатами [x][x] на червоний{PaintBox1->Canvas->Pixels[x][x]=clRed;}TPoint p[3]; //масив точокp[0]=Point(0,0); //перша точкаp[1]=Point(100,90); //друга точкаp[2]=Point(250,50); //третя точкаPaintBox1->Canvas->Pen->Color = clBlue; //колір пераPaintBox1->Canvas->Polygon(p,3); //нарисувати полігон по точкам pPaintBox1->Canvas->Polyline(p,3); //нарисувати полілінію по точкам pPaintBox1->Canvas->PolyBezier(p,3); //нарисувати лінію Без’є по точкам p} TMediaPlayer – мультимедіа плейер //конструктор форми__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner){MediaPlayer1->FileName="1.avi"; //ім’я файлу мультимедіаMediaPlayer1->Open(); //відкритиMediaPlayer1->Display=Panel1; //відображати вміст на Panel1MediaPlayer1->TimeFormat = tfFrames; //формат часу - кадриCaption=MediaPlayer1->Length; //вивести в надпис форми загальну кількість кадрів у файлі}//при натиску кнопки на MediaPlayer1void __fastcall TForm1::MediaPlayer1Click(TObject *Sender, TMPBtnType Button, bool &DoDefault){DoDefault=false; //заборонити використання кнопок по замовчуваннюswitch (Button) //якщо натиснута: { case btPlay: //кнопка "програвати" MediaPlayer1->StartPos=3; //встановити початкову позицію MediaPlayer1->Play(); //програвати break; case btPause: //кнопка "пауза"//встановити позицію на попередню MediaPlayer1->Position=MediaPlayer1->Position-1; MediaPlayer1->Pause(); //пауза break; case btStep: //кнопка "крок" MediaPlayer1->Frames=1; //кількість кадрів у кроці MediaPlayer1->Step(); //перемістити на задану у Frames кількість кадрів break; case btNext: //кнопка "наступний"//програти 5 раз фрагмент починаючи з позиції 2 до позиції 4 for (int i=1;i<5;i++) { MediaPlayer1->StartPos=2; MediaPlayer1->EndPos=4; MediaPlayer1->Wait=true; MediaPlayer1->Play(); } break; }} TOleContainer – контейнер OLE //при створенні формиvoid __fastcall TForm1::FormCreate(TObject *Sender){if (OleContainer1->InsertObjectDialog())//якщо вибраний OLE об’єкт з діалогу//вивести ім’я класу в заголовку формиCaption=OleContainer1->OleClassName;//інакшеelse if (OpenDialog1->Execute())//якщо вибраний файл//створити OLE об’єкт з файлу OleContainer1->CreateObjectFromFile(OpenDialog1->FileName,false);//створити другий OLE об’єкт класу Equation.3OleContainer2->CreateObject("Equation.3", false);//завантажити з файлуOleContainer2->LoadFromFile("1.ole");//заповнити список ListBox1 списком команд OLE контейнераListBox1->Items=OleContainer2->ObjectVerbs;OleContainer2->DoVerb(1);//виконати другу команду}//при натиску кнопки Button1void __fastcall TForm1::Button1Click(TObject *Sender){OleContainer2->SaveToFile("1.ole");//зберегти об’єкт у файлOleContainer1->SaveAsDocument("1");//зберегти як документOleContainer2->DestroyObject();//знищити об’єкт} TDdeServerConv, TDdeServerItem, TDdeClientConv, TDdeClientItem – компоненти для динамічного обміну даними 1 Створюємо DDE сервер, зберігаємо проект під назвою «Project1_s»://при створенні формиvoid __fastcall TForm1::FormCreate(TObject *Sender){DdeServerItem1->ServerConv=DdeServerConv1;//вказує об’єкт для елементаDdeServerItem1->Lines->Add("Hello");//додає рядки в елементDdeServerItem1->Lines->Add("Hello2");Edit1->Text=DdeServerItem1->Lines->Strings[0];//виводить рядок в Edit1 Edit2->Text=DdeServerItem1->Lines->Strings[1];//виводить рядок в Edit2}//при зміні Edit1void __fastcall TForm1::Edit1Change(TObject *Sender){DdeServerItem1->Lines->Strings[0]=Edit1->Text;//змінити рядок в елементі}//при зміні Edit2void __fastcall TForm1::Edit2Change(TObject *Sender){DdeServerItem1->Lines->Strings[1]=Edit2->Text;//змінити рядок в елементі} 2 Створюємо DDE клієнта://при створенні формиvoid __fastcall TForm1::FormCreate(TObject *Sender){DdeClientConv1->ConnectMode=ddeManual;//режим з’єднанняDdeClientItem1->DdeConv=DdeClientConv1;//вказує об’єкт для елемента DdeClientItem1->DdeItem="DdeServerItem1";//вказуємо на елемент сервера}//натиснута кнопка Button1void __fastcall TForm1::Button1Click(TObject *Sender){//якщо установлений зв’язок з серверомif(DdeClientConv1->SetLink("Project1_s","DdeServerConv1")){if(DdeClientConv1->OpenLink())//якщо відкритий зв’язок{//запит даних з елементу сервера і розміщення їх в елементі клієнтаDdeClientConv1->RequestData(DdeClientItem1->DdeItem);DdeClientConv1->FormatChars=true;//установка форматування рядків//вивід рядків елементу в Edit1 і Edit2 Edit1->Text=DdeClientItem1->Lines->Strings[0];Edit2->Text=DdeClientItem1->Lines->Strings[1];DdeClientConv1->CloseLink();//закрити зв’язок}else Caption="Not OpenLink";}else Caption="Not SetLink";}

Діалогові вікна

TOpenDialog – відкриття файлу, TSaveDialog – збереження файлу //при натиску кнопки "прочитати"void __fastcall TForm1::Button1Click(TObject *Sender){OpenDialog1->DefaultExt = "TXT";//розширення файлу по замовчуваннюOpenDialog1->FileName = "*.txt";//ім’я файлуOpenDialog1->Title="Open text";//заголовок діалогуOpenDialog1->InitialDir="C:\\";//початковий каталогif (OpenDialog1->Execute())//показати діалог і, якщо вибір файлу зроблений//прочитати рядки з вибраного файлуMemo1->Lines->LoadFromFile(OpenDialog1->FileName);}//при натиску кнопки "зберегти"void __fastcall TForm1::Button2Click(TObject *Sender){SaveDialog1->Options<<ofAllowMultiSelect;//дозволити вибір багатьох файлівif (SaveDialog1->Execute())//показати діалог і, якщо вибір зроблений{//цикл з першого по останній рядок у списку вибраних файлівfor (int i=0;i<SaveDialog1->Files->Count;i++)//зберегти рядки у кожен файлMemo1->Lines->SaveToFile(SaveDialog1->Files->Strings[i]);}}//при спробі закрити діалог без відміниvoid __fastcall TForm1::SaveDialog1CanClose(TObject *Sender, bool &CanClose){//цикл з першого по останній рядок у списку вибраних файлівfor (int i=0;i<SaveDialog1->Files->Count;i++)//якщо рядки зі списку файлів не містять ".txt", не закривати діалогif (!SaveDialog1->Files->Strings[i].Pos(".txt")) CanClose=false;} 4.9 Робота з базами даних

Робота з базами даних у C++ Builder за допомогою BDE

(TDataSource, TDatabase, TTable, TQuery, TDBGrid, TDBNavigator)

1 Створіть базу даних Paradox за допомогою Database Desktop. Запустіть програму C:\Program Files\Common Files\Borland Shared\Database Desktop\dbd32.exe

2 Створіть нову таблицю File/New/Table.../Paradox 7

3 Створіть поля таблиці (рис.) і збережіть її як C:\My_db \table1.bd

4 Визначте другий індекс і назвіть його n

5 Заповніть записи таблиці (рис.)

6 Виберіть в меню Tools/Alias Manager...(рис.) Задайте псевдонім бази (my), тип драйверу, шлях до таблиць та натисніть Keep New.

 

7 Створіть проект C++ Builder (File|New| Application)

8 Помістіть на форму такі компоненти: TDBGrid, TDBNavigator, TButton (5 штук), TDataSource, TTable, TQuery.

9 Властивості компонентів для роботи з базами даних можна виставити вже на етапі проектування і вже на етапі проектування переглядати вміст бази даних, але в даному випадку, з навчальною метою, значення властивостей задаються в коді програми.

10 Заповніть код програми:

 

//обробник події створення форми

void __fastcall TForm1::FormCreate(TObject *Sender)

{

Table1->Active=false;//деактивувати таблицю

DataSource1->DataSet=Table1;//вказати набір даних для джерела даних

DBGrid1->DataSource=DataSource1;//вказати джерело даних для таблиці

DBGrid1->Width=Form1->ClientWidth;//установити ширину таблиці

DBNavigator1->DataSource=DataSource1;//вказати джерело даних для навігатора

DBNavigator1->ShowHint=true;//показувати підказки кнопок

Table1->DatabaseName="my";//псевдонім БД

Table1->TableName="table1.db";//таблиця БД

Table1->Active=true;//активувати таблицю

Table1->IndexName="n";//задати ім'я індексу

Table1->Fields->Fields[0]->Visible=false;//сховати поле 0

Table1->FieldByName("Name")->DisplayLabel="Прізвище";//змінити надпис поля Name

Table1->Fields->Fields[2]->DisplayLabel="Група";//змінити надпис поля 2

Table1->Fields->Fields[3]->DisplayLabel="Бал";//змінити надпис поля 3

Table1->EnableConstraints();//дозволити обмеження

//установити обмеження для поля 3

Table1->Fields->Fields[3]->CustomConstraint="x>=0 and x<=5";

Table1->Fields->Fields[3]->ConstraintErrorMessage="!";

DBGrid1->Columns->Items[2]->ButtonStyle=cbsAuto;//стиль колонки 2

//список вибору колонки 2

DBGrid1->Columns->Items[2]->PickList->Add(3);

DBGrid1->Columns->Items[2]->PickList->Add(4);

DBGrid1->Columns->Items[2]->PickList->Add(5);

//змінити надписи на кнопках

Button1->Caption="Insert";

Button2->Caption="Filter";

Button3->Caption="Edit";

Button4->Caption="Find";

Button5->Caption="Query";

TStringList *ss=new TStringList;

Session->GetAliasNames(ss);//записати у список імена псевдонімів БД

Session->GetTableNames("my","",true,false,ss);//записати у список імена таблиць БД my

}

//обробник події натиску на кнопці Button1

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Table1->Insert();//вставити запис

//заповнити поля

Table1->FieldByName("Name")->AsString="Шевченко";

Table1->FieldByName("Group")->AsInteger=2;

Table1->FieldByName("B")->AsFloat=3.8;

Table1->Post();//надіслати у БД

//заборонити зміну поля Group

Table1->FieldByName("Group")->ReadOnly=true;

}

//обробник події натиску на кнопці Button2

void __fastcall TForm1::Button2Click(TObject *Sender)

{

if (Table1->Filtered)//якщо дані фільтровані

{Table1->Filtered=false;//відмінити фільтрацію

Table1->CancelRange();}//відмінити діапазони

else//інакше

{Table1->Filter="(Group=1)and(B<5)";//фільтр мовою SQL

Table1->Filtered=true;//установити фільтрацію

Table1->IndexFieldNames="Name";//ім'я поля індексу

Table1->SetRange(&TVarRec("Н"),0,&TVarRec("Я"),0);//установити діапазон імен від Н до Я

}

}

//обробник події натиску на кнопці Button3

void __fastcall TForm1::Button3Click(TObject *Sender)

{

String s="Мельник";//рядок

Table1->Edit();//редагувати

Table1->FieldByName("Name")->AsString=s;//запис у поле рядка

int i=Table1->FieldByName("Group")->AsInteger;//читання поля

Table1->FieldByName("B")->AsFloat=4.1;//запис у поле дійсного числа

Table1->Post();//надіслати у БД

}

//обробник події натиску на кнопці Button4

void __fastcall TForm1::Button4Click(TObject *Sender)

{

//перший варіант пошуку

String s="Мельник";//рядок

Table1->First();//перехід до першого запису

while (!Table1->Eof)//поки не кінець таблиці

{

//якщо вміст поля Name=s, видалити цей запис

if(Table1->FieldByName("Name")->AsString==s)Table1->Delete();

Table1->Next();//перехід по наступного запису

}

//другий варіант пошуку

bool find=false;//булева змінна

TLocateOptions options;//опції пошуку

//часткове співпадання і нечутливість до регістру

options<<loPartialKey<<loCaseInsensitive;

//результат пошуку в полі Name присвоїти змінній find

find=Table1->Locate("Name","Шевченко",options);

//або пошук по кільком полям

find=false;

Variant v[]={"Шевченко","1"};

//результат пошуку в полях Name і Group присвоїти find

find=Table1->Locate("Name;Group",VarArrayOf(v,1),options);

//третій варіант пошуку

//присвоїти змінній b вміст поля B знайденого запису

float b=StrToFloat(Table1->Lookup("Name","Шевченко","B"));

//четвертий варіант пошуку

Table1->IndexFieldNames="Name;Group";

//перемістити курсор до найбільш подібного запису

Table1->FindNearest(OPENARRAY(TVarRec,("Шевченко","1")));

}

//обробник події натиску на кнопці Button5

void __fastcall TForm1::Button5Click(TObject *Sender)

{

Table1->Active=false;//деактивувати таблицю

Query1->DatabaseName=Table1->DatabaseName;//псевдонім БД для запиту

DataSource1->DataSet=Query1;//вказати набір даних для джерела даних

//створити параметр P

TParam *p = Query1->Params->CreateParam(ftFloat, "P", ptInput);

p->AsFloat = 4.1;//присвоїти число

//сформувати рядок динамічного запиту SQL з параметром

String s="SELECT * FROM table1 WHERE (B>:P)";

try

{

Query1->SQL->Clear();//очистити рядки команд SQL

Query1->SQL->Add(s);//добавити рядок команди SQL

Query1->Open();//виконати запит

}

catch (EDatabaseError&)//при помилці

{Query1->ExecSQL();}//виконати інші команди SQL (крім SELECT)

delete p;//знищити p

}

//обробник події, яка виникає перед записом у БД

void __fastcall TForm1::Table1BeforePost(TDataSet *DataSet)

{

//якщо не вибрана кнопка YES

if (Application->MessageBoxA("Записати?","",MB_YESNOCANCEL)!=IDYES)

{

DataSet->Cancel();//відмінити зміни

Abort();

}

}

 



Поделиться:


Последнее изменение этой страницы: 2017-01-24; просмотров: 248; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.149.250.1 (0.227 с.)