Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 16.12.2015
Сообщений: 3
1

Как через тело функции влиять на объекты формы?

22.05.2016, 10:29. Показов 989. Ответов 5
Метки нет (Все метки)

Создал отдельный Header File для создания функции. При попытке функции считать информацию или изменить её в объектах формы - выдает ошибку.
Код функции:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "Unit1.h"
 
int messenger(String message1, String  message2, String message3)
{
float n;
n=StrToInt(Form1->Label2->Caption)%2;
if ((message1==Form1->Edit1->Text)&&(n==0))
{
Form1->RichEdit1->SelAttributes->Color=clBlue;
Form1->RichEdit1->Lines->Add(message1);
Form1->RichEdit1->SelAttributes->Color=clBlack;
Form1->Label2->Caption=IntToStr(StrToInt(Form1->Label2->Caption)+2);
if (message2!="")
{
Form1->RichEdit1->Lines->Add(" ");
Form1->RichEdit1->Lines->Add(message2);
Form1->RichEdit1->Lines->Add(" ");
}
if (message3!="")
{
Form1->RichEdit1->SelAttributes->Color=clGreen;
Form1->RichEdit1->Lines->Strings[(Form1->RichEdit1->Lines->Count-1)]=(Form1->RichEdit1->Lines->Count-1)+" //"+message3;
Form1->RichEdit1->SelAttributes->Color=clBlack;
}
}
if ((message1!=Form1->Edit1->Text)&&(n==0))
{
Form1->RichEdit1->SelAttributes->Color=clRed;
Form1->RichEdit1->Lines->Add(" ");
Form1->RichEdit1->Lines->Add("Наверно введённые данные. Попробуйте снова.");
Form1->RichEdit1->SelAttributes->Color=clBlack;
Form1->Label2->Caption=IntToStr(StrToInt(Form1->Label2->Caption)+1);
}
if ((message1==Form1->Edit1->Text)&&(n==1))
{
Form1->RichEdit1->Lines->Delete(Form1->RichEdit1->Lines->Count-1);
Form1->RichEdit1->SelAttributes->Color=clBlue;
Form1->RichEdit1->Lines->Add(message1);
Form1->RichEdit1->SelAttributes->Color=clBlack;
Form1->Label2->Caption=IntToStr(StrToInt(Form1->Label2->Caption)+1);
if (message2!="")
{
Form1->RichEdit1->Lines->Add(" ");
Form1->RichEdit1->Lines->Add(message2);
Form1->RichEdit1->Lines->Add(" ");
}
if (message3!="")
{
Form1->RichEdit1->SelAttributes->Color=clGreen;
Form1->RichEdit1->Lines->Strings[(Form1->RichEdit1->Lines->Count-1)]=(Form1->RichEdit1->Lines->Count-1)+" //"+message3;
Form1->RichEdit1->SelAttributes->Color=clBlack;
}
}
}
Как понимаю, нельзя влиять на объекты формы через тело функции.
Буду крайне признателен, если подскажете как реализовать дееспособность функции, сохранив её функциональность. Хех, функциональность функции.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2016, 10:29
Ответы с готовыми решениями:

Функция создает объекты и указателями на них заполняет массив. При выходе из функции вызываются деструкторы объектов. Как сохранить объекты?
Вопрос прост: как при выходе из функции сохранить объекты, которые были созданы в данной функции...

Свойства группы компонентов одной формы должны влиять на аналогичную группу в другой
есть простая задача - MainForm с 6 кнопками с Content'ом от 1 до 6(для простоты Radiobutton) и с...

Как вернуться в тело основной программы после обработки события формы?
Основная программа доходит до оператора показа формы. Пусть он называется ОПЕРАТОР-1. За ним...

Как получить тело метода через рефлексию?
Скажите, а можно используя рефлексию вытащить тело метода в читабельном виде?

5
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31085 / 20310 / 7908
Регистрация: 22.10.2011
Сообщений: 35,215
Записей в блоге: 6
22.05.2016, 11:26 2
На момент вызова функции форма точно уже создана и показана? Где именно возникает ошибка? Прямо сразу в 6-ой строке? Какая ошибка?
0
Практикантроп
4680 / 2600 / 496
Регистрация: 23.09.2011
Сообщений: 5,580
22.05.2016, 11:33 3
Лучший ответ Сообщение было отмечено windendid как решение

Решение

windendid, а где вы обращаетесь к функции? Если добавлять вот так примерно...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
#include "Unitt.h"
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
( #include "Unitt.h"-ваш Header File - после TForm1 *Form1, то у меня функция отрабатывает без ошибок.
1
0 / 0 / 0
Регистрация: 16.12.2015
Сообщений: 3
22.05.2016, 11:52  [ТС] 4
volvo, спасибо, что отписались, к делу.
упростил для наглядности функцию:

C++
1
2
3
4
5
6
7
#include "Unit1.h"
 
int messenger()
{
if (Form1->Label2->Caption=="2")
a=2;
}
Ошибку выдает не компилятор, код на выполнение идёт. Но стоит, при работе программы, дойти до места, когда вызывается функция - ошибка. Проблема именно в функции. Без неё всё отлично, ошибка одна и та же, что в прошлом коде, что в этом.

Сама ошибка:
Project D:\Project.2K16\Project1.exe faulted with message: 'access violation at 0x004096ed: read of address 0xffffffff'. Process Stopped. Use Step or Run to continue.
0
Практикантроп
4680 / 2600 / 496
Регистрация: 23.09.2011
Сообщений: 5,580
22.05.2016, 11:58 5
(последняя попытка помочь)
Когда #include "ваш хэдэр" стоит перед TForm1 *Form1, то попытка обратиться к функции вызывает AccessViolation. Если после - то всё нормально. Вы попробуйте...
0
0 / 0 / 0
Регистрация: 16.12.2015
Сообщений: 3
22.05.2016, 12:01  [ТС] 6
воу, вроде работает. огромное спасибо. вся суть проблемы была в том, что модуль с функцией (в файле Unit1.cpp) надо было объявлять не в заголовке, а после строки:
C++
1
TForm1 *Form1;
Еще раз спасибо.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2016, 12:01

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как объединить объекты формы в массив
Доброго времени суток) Неуверен в постановке вопроса, но суть вот в чем Создаю форму с большим...

Как переместить объекты из одной формы в другую во время выполнения программы?
В общем задача такая: есть две формы Form1 и Form2, в Form1(есть кнопка допустим button1), в Form2...

Как скопировать с одной формы все объекты со свойствами в новую форму
Всем привет! Итак уважаемые знатоки вопрос - как скопировать с одной формы все объекты со...

Как при наведении на определенную область формы сделать видимыми объекты?
Нужно сделать так, чтобы при наведении курсора на некоторую область формы становилась видимой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.