Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++ Builder

Войти
Регистрация
Восстановить пароль
 
Garik1995
0 / 0 / 0
Регистрация: 15.10.2014
Сообщений: 58
#1

Добавление методов в класс формы - C++ Builder

17.12.2014, 11:52. Просмотров 537. Ответов 1
Метки нет (Все метки)

// Final_Project.cpp
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Final_Project.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm11 *Form11;
//---------------------------------------------------------------------------
__fastcall TForm11::TForm11(TComponent* Owner)
    : TForm(Owner)
{
}
int nQuery = 0; // Всего вопросов
int nRight; // Количество правильных ответов
int Right; // правильный ответ
int Sel; // ответ, выбранный испытуемым
static int mode = 0; // 0 - начало работы программы
                     // (вывести первый вопрос)
                     // 1 - процесс тестирования
                     // 2 - тестирование завершено
// начало работы
 
//---------------------------------------------------------------------------
 
void __fastcall TForm11::FormActivate(TObject *Sender)
{
if (ParamCount() == 0) {
Label1->Caption = "В командной строке надо указать "
                  "имя файла теста";
mode = 2;
return;
}
XMLDocument1->FileName = ParamStr(1);
try
{
// открыть XML-документ
XMLDocument1->Active = True;
}
catch (EDOMParseError &e)
{
Label1->AutoSize = True;
Label1->Caption = "Ошибка доступа к файлу теста " +
                ParamStr(1) +
                "\nMessage: " + e.Message;
mode = 2;
return;
}
Form11->Info(); // вывести информацию о тесте
}
// считывает и выводит вопрос с указанным номером
int __fastcall TForm11::Qery(int i)
{
// привести форму в исходное состояние
RadioButton1->Visible = False;
RadioButton2->Visible = False;
RadioButton3->Visible = False;
RadioButton4->Checked = True;
Button1->Enabled = False;
// настроить интерфейс на работу с узлом qw
_di_IXMLNode gw = XMLDocument1->
                   DocumentElement->ChildNodes->
                      Nodes[WideString("qw")];
if (i > qw->ChildNodes->Count -1) {
   return -1;
};
nQuery++; //количество вопросов
 
/* Узел q - это вопрос.
   Параметр text узла q - это текст вопроса
   дети узла q - это альтернативные ответы */
   _di_IXMLNode q = gw->ChildNodes->Nodes[i];
 
 /* Атрибут Text узла qw - это текст вопроса,
    атрибут right - номер правильного ответа */
 
// вопрос
Label1->AutoSize = false;
Label1->Width = ClientWidth -20;
Label1->Height = 150;
Label1->Caption = q->GetAttribute(WideString("text"));
Label1->AutoSize = true;
 
Right = StrToInt( q->GetAttribute(WideString("right")));
 
// узел "q" состоит из нескольких узлов "a"
// (альтернативных ответов)
_di_IXMLNode a;
int j = 0; // номер узла "a"
while ( j < q->ChildNodes->Count )
    {
      a = q->ChildNodes ->Nodes[j];
      switch (j) {
      case 0: RadioButton1->Caption = a->Text;
              RadioButton1->Top = Label1->Top +
                                  Label1->Height + 10;
              RadioButton1->Visible = True; break;
      case 1: RadioButton2->Caption = a->Text;
              RadioButton2->Top = RadioButton1->Top +
                            RadioButton1->Height + 10;
              RadioButton2->Visible = True; break;
      case 2: RadioButton3->Caption = a->Text;
              RadioButton3->Top = RadioButton2->Top +
                             RadioButton2->Height + 10;
              RadioButton3->Visible = True; break;
      }
       j++;
     
      }
 
     return 0;
     }
  // информация о тесте
  void __fastcall TForm11::Info();
  {
   Form11->Caption = XMLDocument1->DocumentElement->
                ChildNodes->Nodes[WideString("head")]->Text;
    Label1->Caption = XMLDocument1->DocumentElement->
              ChildNodes->Nodes[WideString("description")]->Text;
              }
  // щелчок на кнопке ОК                           
 
void __fastcall TForm11::Button1Click(TObject *Sender)
{
 static int i = 0; // номер вопроса
 int r;            // результат вывода вопроса:
                   // -1 - вопросов больше нет
switch ( mode) {
    
case 0:
        r = Qery(i++);
        mode = 1;
        break;
        
 
      case 1:
             // проверим, правильный ли ответ выбрал
             // испытуемый
             if (Sel == Right) nRight++;
             // вывести следующий вопрос
             r = Qery(i++);
             if (r == -1)
             {
             // результат тестирования
             Result();
             Button1->Enabled = true;
             mode = 2;               
             }               
             break;
 
  case 2: Form11->Close();  // завершить работу программы       
}   
}
 
// вывести результат тестирования
void __fastcall TForm1::Result()
{
int i = 0;
int score;
_di_IXMLNode ls;  // интерфейс доступа к узлу levels
_di_IXMLNode l;   // интерфейс доступа к узлу level
 
// считываем последовательно узлы level и сравниваем
// значение параметра score с количеством правильных
// ответов
ls = XMLDocument1->DocumentElement->
             ChildNodes->Nodes[WideString("levels")];
while ( i < ls->ChildNodes->Count)
{
l = ls->ChildNodes->Nodes[i];
score = StrToInt( l->
              GetAttribute[WideString("score")));
 
    if (nRight >= score) break;
    i++; 
 
}            
AnsiString mes;
mes.printf("Экзамен закончен\n"
           "Всего вопросов: %i\n"
           "Правильных ответов: %i\n",
           nQuery,nRight);
 
mes = mes + l->GetAttribute(WideString("text"));
Label1->Width = Form11->ClientWidth - 20;
Label1->Caption = mes;
}
// пользователь выбрал первый ответ 
void __fastcall TForm11::RadioButton1Click(TObject *Sender)
{
 Sel = 1;
 Button1->Enabled = True;   
}
 
//пользователь выбрал второй ответ
void __fastcall TForm11::RadioButton2Click(TObject *Sender)
{
 Sel = 2;
 Button1->Enabled = True;   
}
//пользователь выбрал третий ответ
 
void __fastcall TForm11::RadioButton3Click(TObject *Sender)
{
 Sel = 3;
 Button1->Enabled = True;   
}
//---------------------------------------------------------------------------
//Final_Project.h
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
//---------------------------------------------------------------------------
 
#ifndef Final_ProjectH
#define Final_ProjectH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <msxmldom.hpp>
#include <XMLDoc.hpp>
#include <xmldom.hpp>
#include <XMLIntf.hpp>
//---------------------------------------------------------------------------
class TForm11 : public TForm
{
__published:    // IDE-managed Components
    TLabel *Label1;
    TRadioButton *RadioButton1;
    TRadioButton *RadioButton2;
    TRadioButton *RadioButton3;
    TRadioButton *RadioButton4;
    TXMLDocument *XMLDocument1;
    TButton *Button1;
    void __fastcall FormActivate(TObject *Sender);
    void __fastcall Button1Click(TObject *Sender);
    void __fastcall RadioButton1Click(TObject *Sender);
    void __fastcall RadioButton2Click(TObject *Sender);
    void __fastcall RadioButton3Click(TObject *Sender);
 
private:
 
 
    // User declarations
public:
__fastcall TForm11 Info(); // User declarations
    __fastcall TForm11(TComponent* Owner);
 
};
//---------------------------------------------------------------------------
extern PACKAGE TForm11 *Form11;
//---------------------------------------------------------------------------
#endif
[C++ Error] Final_Project.cpp(55): E2316 '_fastcall TForm11::Qery(int)' is not a member of 'TForm11'
[C++ Error] Final_Project.cpp(116): E2333 Class member '_fastcall TForm11::Info()' declared outside its class
[C++ Error] Final_Project.cpp(116): E2316 '_fastcall TForm11::Info()' is not a member of 'TForm11'
[C++ Error] Final_Project.cpp(117): E2040 Declaration terminated incorrectly

Проблема в том, что я пытаюсь описать функцию,но не помогает. Подскажите что нужно прописать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2014, 11:52
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Добавление методов в класс формы (C++ Builder):

Перенос методов формы в другие модули - C++ Builder
В общем такая проблема. Создаю форму, на которой очень много всяких элементов, различных вкладок, кнопочек с собственными обработчиками и...

Добавление кнопки в класс - C++ Builder
Создал свой класс, наследуемый от TImage Мне нужно, чтобы под изображением была кнопка Пробовал объявить private: TButton...

Добавление формы в BPL - C++ Builder
Доброго дня! Создал библиотеку компонентов(компоненты, формы, фреймы) для повторного использования в проектах в виде BPL. Однако...

"Unresolved external" методов формы - C++ Builder
выбивает такие ошибки я прикрепил свой проект посмотрите выбивает такие ошибки Unresolved external '__fastcall...

Добавление строки в СтринГрид с формы... - C++ Builder
Подскажите пожалуйста где ошибка, я добавляю строчку в stringgrid. Сначала добавляется пустая строка, а потом то что вводила в прошлый...

Класс и Формы - C++ Builder
Такая проблема: Есть Класс(N) и 2 формы(Form1, Form2), как сделать так, чтобы один объект класса был доступен в обоих формах? Т.е. в...

1
D1973
Модератор
3222 / 2270 / 918
Регистрация: 21.01.2014
Сообщений: 9,404
Записей в блоге: 3
Завершенные тесты: 1
17.12.2014, 20:11 #2
в *.h файле:
1. после private: сделай объявление
C++
1
int __fastcall Qery(int);
2. после public: измени объявление
C++
1
void __fastcall Info();
Добавлено через 2 минуты
3. В *.срр в строке 116 убери ; после заголовка функции
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2014, 20:11
Привет! Вот еще темы с ответами:

Перемещение формы через собственный класс - C++ Builder
Написал класс для динамического создания форм-подсказок. Подсказки появляются нормально, но когда я начинаю ее двигать по экрану (см....

Перевести с консоли на формы и доработать класс временных меток - C++ Builder
Добрый день! Помогите пожалуйста переделать программу на C++ Builder?

Прозрачность формы, при наведении мыши на кнопку реализовать изменение её положения относительно формы с невозможностью выхода за границы формы - C++ Builder
доброй ночи, уважаемые программисты, студенты,а также любители программировать. помогите, пожалуйста, написать программу на языке С++ ...

Добавление методов к стандартным классам - C++
Возникла необходимость добавить свой метод в стандартный класс. Можно ли как-то это сделать?


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

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

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