TestForm.cpp

TestForm.h

 

#include <string.h>

#include <string>

#include <stdio.h>

#include <math.h>

#pragma once

using namespace std;

class TestForm

{

public:

TestForm(void);

~TestForm(void);

char MyStr[30]; // вспомогательный массив для связи с managed

string sTB1,sTB2,sL1; // строки для надписей компонент

void Calculate(); // вычисление

};

 

 

........

void TestForm::Calculate()

{

double Kurs;

int Kolvo;

double Summa; // результат

string s;

Kurs=atof(sTB1.c_str()); // перевод строки в вещественное

Kolvo=atoi(sTB2.c_str()); // перевод строки в целое

Summa=Kurs*Kolvo;

Summa=floor(Summa*100)/100.0; // округление до копеек

sprintf((char *)s.c_str(),"%7.2f",Summa); // перевод вещ. в строку s

strcpy(MyStr,"Ответ: ");

strcat(MyStr,s.c_str());

}

 

Результат:

 

 

2) Использование элементов типа Label (вывод строки) , Textfield (редактирование одной строки) и button (кнопка)в Java SE

 

 

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.lang.Math.*;

import javax.swing.*;

public class lab8

{

int Kolvo;

double Kurs;

double Summa;

JFrame form; // основная форма

JLabel lb; // поле вывода суммы в рублях

JTextField tf1; // поле для ввода курса

JTextField tf2; // поле для ввода

JButton bt; // кнопка вычислить

lab8() // конструктор

{

// установка положения размеров и заголовка окна

form = new JFrame();

form.setBounds (10,20,500,300);

form.setTitle ("лабораторная 8 ч.1");

form.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

form.setLayout(null); // не использовать менеджер размещений

// задание параметров Label

lb = new JLabel();

lb.setBounds(20,10,400,40); // left,top,width,height

lb.setText("Введите значения курса и долларов");

form.add(lb); // добавка в форму Label lb

// задание параметров первого текстового поля

tf1 = new JTextField();

tf1.setBounds(20,80,100,20);

tf1.setText("");

form.add(tf1); // добавка в форму текстового поля tf1

// задание параметров второго текстового поля

tf2= new JTextField();

tf2.setBounds(180,80,100,20);

tf2.setText("");

form.add(tf2); // добавка в форму текстового поля tf2

// задание параметров кнопки

bt=new JButton();

bt.setBounds(20,130,140,20);

bt.setLabel("Вычислить");

form.add(bt); // добавка в форму кнопки

// добавление отклика на событие click слушатель

bt.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

// при нажатии кнопки bt переход в данную точку

Calculate();

}

});

// задание формы видимой

form.show();

}

public void Calculate()

{

String s1;

int k;

s1=tf1.getText(); // введенная строка курса

Kurs = Double.parseDouble(s1); // перевод в вещественное число

s1=tf2.getText(); // введенная строка количества долларов

Kolvo=Integer.parseInt(s1); // перевод в целое число

Summa=Kurs*Kolvo;

k=(int)Math.round(Summa*100); // округление

Summa=k/100.0; // до копеек

s1=Double.toString(Summa); // перевод вещественного числа в строку

s1="Ответ: "+s1;

lb.setText(s1); // вывод в label

}

 

public static void main (String args[])

{

lab8 f;

f= new lab8();

}

}

 

Результат:

 

 

3) Использование элементов типа Label (вывод строки) , Textfield (редактирование одной строки) и button (кнопка)в Java ME

 

 

import javax.microedition.midlet.*;

import com.sun.lwuit.*;

import com.sun.lwuit.events.*;

import com.sun.lwuit.geom.*;

import com.sun.lwuit.layouts.*;

import java.lang.Math.*;

 

public class lab8 extends MIDlet

{

Form form;

Label lb; // вывод суммы

TextField tf1; // курс

TextField tf2; // количество

Button bt;

int Kolvo;

double Kurs;

double Summa;

public void startApp()

{

int w,h;

Dimension d=new Dimension(200,200); // размер формы

Display.init(this);

form = new Form();

form.setPreferredSize(d); // пытаться установить 200x200,

// но установится форма по разрешению телефона (240x320 ?)

form.setTitle("лабораторная 8 ч.1");

// получение реальных размеров формы

w=form.getWidth();

h=form.getHeight();

.// тип размещения компонент – прямые координаты x,y

CoordinateLayout e = new CoordinateLayout(w,h);

form.setLayout(e);

// положение и надпись label

lb=new Label();

lb.setX(20); // слева 20

lb.setY(30); // сверху 30

lb.setText("Введите курс и количество");

form.addComponent(lb);

// положение и надписи текстовых полей

tf1 = new TextField();

tf1.setX(20);

tf1.setY(60);

tf1.setText("");

form.addComponent(tf1);

tf2= new TextField();

tf2.setX(20);

tf2.setY(90);

tf2.setText("");

form.addComponent(tf2);

// параметры кнопки

bt=new Button();

bt.setX(20);

bt.setY(120);

bt.setText("Вычислить");

// отклик на нажатие кнопки

bt.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

// при нажатии кнопки попадает в эту точку

Calculate();

}

});

form.addComponent(bt);

form.show(); // отображение формы

}

 

public void Calculate()

{

String s1;

s1=tf1.getText(); // введенная строка курса

Kurs = Double.parseDouble(s1); // перевод в вещестенное

s1=tf2.getText(); // введенное количество

Kolvo=Integer.parseInt(s1); // перевод целое

Summa=Kurs*Kolvo;

Summa=Math.floor(Summa*100); // округление результата

Summa=Summa/100.0;

s1=Double.toString(Summa); // перевод в строку

s1="Ответ "+s1;

lb.setText(s1); // вывод результата в label

}

public void pauseApp()

{

}

public void destroyApp(boolean unconditional)

{

}

}

 

 

 

 

менеджеры размещений:

form.setLayout(null); // не использовать менеджер размещений

CoordinateLayout e = new CoordinateLayout(w,h);

form.setLayout(e);

 

Менеджеры размещений позволяют автоматизировать размещение компонент на форме.

Типы менеджеров мобильных приложений:

 

пример автоматического размещения:

 

 

Библиотека Math для мобильных приложений имеет немного функций:

 

sin() cos() tan() sqrt()

 

нет, например, exp(), log(), и т.д.

 

4) Обработка события на выход из textbox в Visual C++

Пример калькулятор: В двух текстовых полях вводится вещественное и целое число. В момент выхода из поля (потеря фокуса) выполняется их суммирование и результат выводится в Label. Если набрано неверно, поле очищается и выводится «неправильно”. При нажатии на кнопку приложение завершается.

 

Начало Form1.h

 

#include "Calculator.h"

#include <stdio.h>

#include <string.h>

Calculator cl; // объект класса Calculator для обработки

#pragma once

 

namespace Lab8 {

 

using namespace System;

using namespace System::ComponentModel;

using namespace System::Collections;

using namespace System::Windows::Forms;

using namespace System::Data;

using namespace System::Drawing;

using namespace Runtime::InteropServices

 

Установка начальных значений текстовых полей (Load):

private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e)

{

textBox1->Text="0.0";

textBox2->Text="0";

}

 

 

Отклик на нажатие кнопки:

 

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)

{

Application::Exit();

}

 

Отклик на события выхода из textbox (leave)

 

 

private: System::Void textBox1_Leave(System::Object^ sender, System::EventArgs^ e)

// private: System::Void textBox2_Leave(System::Object^ sender, System::EventArgs^ e)

{

int k;

String ^ s =gcnew String("");

s=textBox1->Text;

char* chars =

( char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();

strcpy(cl.sTB1,chars);

s=textBox2->Text;

chars =

( char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();

strcpy(cl.sTB2,chars);

k=cl.Work();

String ^ss= gcnew String(cl.sL1);

label1->Text=ss; // вывод в label1 результата

if(k<=0) // перевод чисел не удался?

{

textBox1->Text=""; // textBox2

textBox1->Focus(); // textBox2 не выходить из поля

}

Marshal::FreeHGlobal(IntPtr((void*)chars));

}