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));
}