Вопрос вот какой:
Есть
Form1
В
Form1.h объявлены в секции
private: int a, b, c; // некоторые данные
на форме есть компоненты
Edit1 - на
Form1 ввод первого числа.
Edit2 - на
Form1 ввод второго числа.
Label1 - на
Form1, если в расчётах не используются 7-значные и более цифры.
Button1 - на
Form1, кнопка производит расчёт и выводит на
Label1 результат и решение, у меня называется она "Показать решение".
CheckBox1 - на
Form1, если не выбран значит вывести на
Form1, если выбран, создать
Form2 и вывести на неё.
Button1 - эта кнопка выводит решение на
Label1. Вот функция:
читать дальше »
Код:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
a = Edit1->Text.ToInt(); //конверт в число a
b = Edit2->Text.ToInt(); //конверт в число b
c = a + b; //сложение
if(CheckBox1->Checked){
Form2 = new TForm2(this);
Form2->Show();
Form2->Label1->Caption = String(a) + " + " + String(b) + " = " + String(c); //вывод на Form2
}
else
Form1->Label1->Caption = String(a) + " + " + String(b) + " = " + String(c); //вывод на Form1
}
Всё работает! Форма создаётся, решение выводится, но загвоздка вот в чём...
Поскольку потенциальный юзер опять вводит данные, то и само собой меняются введённые цифры и результат расчёта!
На
Form2 такие компоненты:
Button1 - кнопка обновить результат "Обновить"
Button2 - кнопка выхода "Выход"
Label1 - куда выводится решение
Жать кнопку выход, а потом заново, "Показать решение" не привлекает! А как сделать, чтобы при нажатии на кнопку "Обновить" на
Form2 решение обновлялось? Посоветовали
UpdateWindows(), (Ею пользоваться не умею!!!), но там возвращается тип
int , а если нужно несколько? Как её правильно вызвать и то ли это? Я ещё вот что придумал, подскажите правильно ли, или есть более простое решение:
В
Form1.h в секции
public: объявил функцию
GetValue(); //Пользовательская фунция
В этой функции поместить всё то, что было в обработчике
Button1 на
Form1
читать дальше »
Код:

//это в Form1 описание Button1 "Показать решение"-------------------------
void __fastcall TForm1::Button1Click(TObject* Sender)
{
GetValue();
}
// это в Form1 описание GetValue() -----------------------------------
void __fastcall TForm1::GetValue()
{
a = Edit1->Text.ToInt(); //конверт в число a
b = Edit2->Text.ToInt(); //конверт в число b
c = a + b; //сложение
if(CheckBox1->Checked){
Form2 = new TForm2(this);
Form2->Show();
Form2->Label1->Caption = String(a) + " + " + String(b) + " = " + String(c); //вывод на Form2
}
else
Form1->Label1->Caption = String(a)+" + "+String(b)+" = "+String(c); //вывод на Form1
}
//-------------------------------------------------------------------
и потом, когда нужно из Form2 обновить, нажимая кнопку "Обновить", вызывать так:
Код:

Form1->GetValue();
поскольку эта функция является открытым членом, и имеет доступ к данным-членам в Form1.h, то и сможет получится обновление!!!!
(Форму Form1 не хочется делать большой, так как компонентов мало, остальное пространство только место занимает)
А потом, когда жму "Обновить", нужно чтобы предыдущая форма уничтожалась - ((Какой должен быть код для этого?) вроде delete Form2, но как его организовать, то есть проверку того, что Form2 уже есть!) - и создавалась новая или не уничтожалась старая, а только результат обновлялся, у меня создаётся их столько сколько жму кнопку "Обновить"...
Может сюда нужно добавить чего то?
Код:

if(Form2) // наверное не так? Потому что так не работает, Подскажите пожалуйста!!!
delete Form2;
И ещё! Как в Edit'e контролировать количество введённых чисел, наподобии как в MaskEdit'e, чтобы не вводилось больше 5-6 значных цифр!
А если мне нужно в переменную типа unsigned long a; поместить значение из
Код:

a = Edit1->Text;
вот тут как преобразовать в
unsigned long? Вот так в
int
Код:

Edit1->Text.ToInt();
// или
StrToInt(Edit1->Text);
, в
double -
ToDouble(); а в
unsigned long как?
И как контролировать чтобы при сложении, умножении числа не выходили за диапазон, unsigned long не спасает! Хотелось бы знать, как можно это держать под контролем, не создавая что-то типа char[], а потом использовать atol?