Примеры программирования.
Пример 21.1. Создать приложение, в котором при щелчке мыши на кнопке появляется приветствие.
-
Запустить C++Builder.
-
Командой File/New открыть новое приложение, выбрав в открывшемся каскадном меню раздел Application.
-
Перенести на открывшуюся пустую форму кнопку TButton со страницы Standard палитры компонентов. Для этого выделяют пиктограмму и щелкают мышью в нужном месте формы. На форме появляется кнопка с именем по умолчанию Button1.
-
Выделить на форме кнопку с именем Button1, присвоенным по умолчанию. Перейти в инспектор объектов и изменить ее свойство Caption на значение «Начало».
-
Перенести на форму со страницы Standard палитры компонентов метку Label1. Здесь будет появляться текст при нажатии кнопки «Начало».
-
Для задания стиля шрифта сообщения в метке Label1 в окне инспектора объектов используют свойства Font (шрифт), Style (стиль) и т.д.
-
Убрать текст в свойстве Caption метки Label1, чтобы до нажатия кнопки «Начало» экран оставался пустым.
-
Поскольку текст на экране должен появляться при нажатии кнопки «Начало», следует написать обработчик события OnClick. Заготовку для этого обработчика можно получить двумя способами.
-
Выделить кнопку Button1 на форме и перейти в инспектор объектов, открыть в нем страницу событий (Events), найти событие кнопки OnClick, сделать двойной щелчок в окне справа от имени этого события;
-
Сделать двойной щелчок на компоненте Button1 на форме.
После этого произойдет переход в окно редактора кода, в котором окажется заготовка функции обработчика событий:
void _ _fastcall TForm1::Button1Click(TObject *Sender)
{
}
Между фигурными скобками следует написать оператор:
Label1->Caption = “Мы начинаем осваивать С++Builder.”;
Пример 21.2. Обработчик щелчка левой кнопкой мыши на форме.
void _ _fastcall TForm1::FormClick(TObject *Sender)
{ MessageDlg( "A study of events", mtInformation,
TMsgDlgButtons()<<mbOK, 0);
}
Все шаги для создания этой программы аналогичны приведенным в примере 13.1.
При запуске этой программы каждый раз при щелчке левой кнопкой мыши на форме появляется диалоговое окно вида, показанного на рис.21.5 .
Рис.21.5. Окно формы.
При возникновении определенного события операционная система сопровождает передачу сообщения о событии несколькими служебными информационными битами. Например, при нажатии кнопки мыши программа получает данные о том, где произошло событие и какая именно кнопка мыши была нажата. Доступ к этой информации можно получить в окне Object Inspector (вкладка Events).
Пример 21.3. Обработка событий OnMouseDown.
void __fastcall TForm10::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
if (Shift.Contains(ssRight))
{ Canvas->Brush->Style = bsClear;
Canvas->TextOut(X, Y, "MouseRightKey");
}
}
Каждый раз при нажатии правой кнопки мыши на экране появляется надпись MouseRightKey. При этом устанавливается стиль кисти bsClear, который делает фон прозрачным.
Функция CanvasText распечатывает текст, начиная с позиции, заданной перемещенными X и Y, где X и Y – координаты курсора мыши в момент нажатия клавиши.
Пример 21.4. Ввод чисел в двух разных полях и умножение введенных данных.
Открыть новое приложение и разместить в нем следующие компоненты: два окна редактирования (LabeledEdit или Edit) со страницы Additional, одну панель Panel, одну кнопку Button и одну метку Label (для подписи) со страницы Standard и одну метку(три метки в случае окна редактирования Edit).
Изменить надписи в метках компонентов на «Множимое», «Множитель», «Произведение», а свойство Caption кнопки Button на «Посчитаем!».
Обработчик нажатия кнопки имеет вид:
void __fastcall TForm13::Button1Click(TObject *Sender)
{
Panel1->Caption = LabeledEdit1->Text+"*"+
LabeledEdit2->Text+"="+
FloatToStr(StrToFloat(LabeledEdit1->Text)*
StrToFloat(LabeledEdit2->Text));
}
При использовании компонента Edit LabeledEdit заменить на Edit.
Графические возможности C++Builder.
Многие компоненты в C++Builder имеют свойство Canvas, которое представляет собой графические возможности компонента.
Canvas имеют формы, компоненты Image, PaintBox, BitMap и др.
Каждая точка графического поля(канвы) имеет координаты X и Y, при этом X возрастает при перемещении слева направо, Y – сверху вниз. Здесь координаты измеряются в пикселах. Пиксел – наименьший графический объект на экране. Кроме координат пиксел имеет еще одно свойство – цвет, для описания которого используется тип TColor. Цвет можно задать с помощью предопределенных констант: clRed – красный, clBlack – черный, clGreen – зеленый и т.д. или с помощью так называемого RGB-кода:
$00FF0000 – синий,
$0000FF00 – зеленый,
$000000FF – красный,
$00000000 – черный,
$00FFFFFF – белый.
Рисовать можно двумя способами: по пикселам и с помощью пера. При рисовании по пикселам рисунок получается дискретным, т.е. состоящим из отдельных точек, при рисовании пером – рисунок непрерывный.
При рисовании по пикселам используется свойство канвы Pixels, которое представляет собой матрицу CanvasPixels[int X][int Y], каждая точка которой определяет цвет пиксела на канве.
Пример 21.5. Рисование по пикселам.
float X, Y; //координаты точек изображаемой функции
int PX, PY; //координаты соответствующих им пикселов
float Xmax, Xmin, Ymax, Ymin; //координаты максимальных и //минимальных значений X и Y для данного отрезка функции,
//необходимые для масштабирования графика и его равномерного
//расположения на экране
for(PX = 0; PX <= ImageWidth; PX++)
{ X = Xmin+PX*(Xmax – Xmin) / Image1Width;
Y = F(X); //F(X) – функция, график которой мы хотим //построить
PY = Image1Height – (Y – Ymin)*Image1Height / (Ymax – Ymin);
//Будем рисовать красным цветом:
Image1CanvasPixels[PX][PY] = clRed;
}
Здесь Image1Height и Image1Width - высота и ширина экрана (в пикселах).
Пример 21.6. Рисование функции y = cos(x) на отрезке x[0, 2].
Для данной функции X изменяется на отрезке от 0 до 2, Y – от -1 до 1, поэтому Ymin = -1, Ymax = 1.
Создаем форму и помещаем на нее компонент Image и кнопку с надписью y = cos(x).
Обработчик события OnDblClick (двойной щелчок левой кнопкой мыши) будет иметь вид:
#define PI 3.14159 //или const float Pi = 3.14159;
float X, Y, Xmax=2*PI, Xmin=0, Ymax=1,Ymin=-1;
int PX, PY;
for(PX=0; PX<=Image1->Width; PX++)
{ X=Xmin+PX*(Xmax-Xmin) / Image1->Width;
Y=cos(X);
PY=Image1->Height-(Y+Ymax)* Image1->Height / (Ymax-Ymin);
Image1->Canvas->Pixels[PX][PY]=clRed;
}
Если нужен непрерывный рисунок, используют свойство Pen – перо, которое в свою очередь, тоже имеет ряд свойств: Color –цвет, Width – ширина линии в пикселах(по умолчанию – 1), Style – вид линии.
Свойство канвы PenPos определяет текущую позицию пера. Перемещение пера без прорисовки линии осуществляется методом канвы MoveTo(X, Y). Метод LineTo(X, Y) рисует линию от текущего положения пера к точке с координатами (X, Y).
Пример 21.7. Рисование графика из примера 13.6 с помощью пера.
#define PI 3.14159 //или const float Pi = 3.14159;
float X, Y, Xmax=2*PI, Xmin=0, Ymax=1,Ymin=-1;
int PX, PY;
for(PX=0; PX<=Image1->Width; PX++)
{ X=Xmin+PX*(Xmax-Xmin) / Image1->Width;
Y=cos(X);
PY=Image1->Height-(Y+Ymax)* Image1->Height / (Ymax-Ymin);
Image1->Canvas->Pixels[PX][PY]=clWhite;
Image1->Canvas->LineTo(PX, PY);
}
С помощью пера можно рисовать не только линии, но и фигуры в табл.13.1.
Таблица 21.1