Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Builder ZipForge. Не получается розпакувать файлы https://www.cyberforum.ru/ cpp-builder/ thread446061.html
Подскажите, что делаю не так, так как первый раз столкнулся з этим компонентом (та и с програмированием тоже начинаючий :-)) Вот код: =================================================== void __fastcall TStartForm::RARButtonClick(TObject *Sender) { if(DBFOpenDialog->Execute()) { AnsiString Path = DBFOpenDialog->FileName; { ...
C++ Builder Как установить DSPACK?
Нужна помощь. Я уже на нервах, не могу уснуть, хотя и надо. Как его установить? Или есть ли ему замена? У меня цель то бональна - вывести на форму видео файл и красиво оформить менюшку. Как подключить эту хрень? Заранее благодарен за ответы. У меня же пока каша в голове... по сети инструкций практически нет, те что есть добавляют каши в голову.
C++ Builder Обновление данных на форме https://www.cyberforum.ru/ cpp-builder/ thread445821.html
Для курсового пишу игру(подобие реверси) помогите сделать в MainMenu кнопку новая игра так, чтобы после её нажатие доска заполненная синим и красным цветом была опять чистая как на первом скрине. На первом скрине форма после запуска игры. https://www.cyberforum.ru/attachment.php?attachmentid=127083&s на втором скрине показано как выглядит форма когда игра закончена. ...
C++ Builder Создание кодового замка. https://www.cyberforum.ru/ cpp-builder/ thread445819.html
Здравствуйте. Есть задание "Создать кодовый замок при помощи VCL". Использую C++ Builder 2010. На данный момент сделал интерфейс + события при нажатии цифровых клавиш + очистка дисплея при нажатии клавиши "C". Нужно: 1. При запуске программы на дисплей выводится предложение о вводе кода. Этот код будет отпирать устройство. Подтверждением о конце кода будет нажатие на кнопку "CODE".
C++ Builder Не выводится в DatagridView
//--------------------------------------------------------------------------- #include <vcl.h> #include <fstream.h> #include <iostream.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init)
C++ Builder Привязка таймера к переменной https://www.cyberforum.ru/ cpp-builder/ thread445557.html
Всем добрый вечер! Знающие люди, помогите. Возможен ли вариант привязки таймера к переменной для будущего построения графика? Допустим через каждую секунду генерируем число, по ординате добавляем секунду, по абсциссе рандом (ну или считываем). Надо переменную как-то связать с реальным временем.
C++ Builder HWND и отправка им сообщений. https://www.cyberforum.ru/ cpp-builder/ thread445485.html
Здравствуйте, я начал изучать язык C++. А также начал обучение для работы с C++ Borland 6. Неддавно покопался в нете и почитал о HWND. Решил попробовать - всё получается на всех программах кроме одной. Проверял я с помощью Spy++ окну приложения шлются сообщения, которые я планировал. Но само приложение на них не реагирует. Оно реагирует только если я сам ту кнопку нажму у себя на клавиатуре.:(...
Как отправить текст клиенту которые не присоединен к серверу зная его ip и порт через ServerSocket? C++ Builder
Как отправить текст клиенту которые не присоединен к серверу зная его ip и порт через ServerSocket?
C++ Builder Размер потока https://www.cyberforum.ru/ cpp-builder/ thread445375.html
имеется функция которую предполагается использовать для вычисления размера потока. если данных в потоке мало - возвращает белиберду (волшебное число 64). в чем проблема? static long sizeof_istream(std::istream &is) { long p = is.tellg(); is.seekg(0, std::ios::end); long res = is.tellg(); is.seekg(p); return res; }
C++ Builder RichEdit курсор и вставка Добрый день подскажете плиз как в RichEdit поймать положение курсора и вставить туда какой-то текст на 2 строки ? а то у меня вообще ничто не получается. https://www.cyberforum.ru/ cpp-builder/ thread445276.html
Чтение из реестра бинарных данных в HEX виде. C++ Builder
Вообщем такое дело, есть в реестре ключ типа REG_BINARY, в нем записаны определенные данные, мне их нужо получить в строковом (string) виде, для дальнейшей с ними работы. Как это реализовать на С++ Builder (или хоть на чем другом)? Пример такого Reg файла приведен ниже.Windows Registry Editor Version 5.00 "AppCompatCache"=hex:ee,0f,dc,ba,77,02,00,00,78,00,00,00,9a,c7,00,00,00,00,00,\ ...
C++ Builder Ошибка при создании COM сервера https://www.cyberforum.ru/ cpp-builder/ thread445247.html
Помогите мне!! Мне нужно создать клиент-серверное приложение с помощью СОМ объектов. Я создала СОМ объект, зарегистрировала библиотеку. Но приложение не запускается! :( Выдает следующие ошибки: Undefined structure ATL_NO_VTABLE Qualifier 'Tcom1Implis' not a class or namespace name Declaration terminated incorrectly // COM1IMPL.H : Declaration of the Tcom1Impl #ifndef com1ImplH #define...
8 / 8 / 0
Регистрация: 14.10.2011
Сообщений: 118
15.02.2012, 12:09 0

Рисуем графики на форме. Как лучше поступить? - C++ Builder - Ответ 2491491

15.02.2012, 12:09. Показов 2403. Ответов 10
Метки (Все метки)

Ответ

посмотри это
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
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
#include "math.h" //Подключаем математическую библиотеку
 
class GraphicClass //Класс, реализующий наш график
 {
 private:
 int xmax, ymax; //Размеры экрана, на котором рисуется график
 int xmid, ymid; //Середина экрана
 int XKind, YKind; //Индекс функций для X и Y из списка
 double X, Y; //Вычисляемые координаты выводимой на экран точки
 double deltaX, deltaY; //Масштаб - длины (в пикселах)
  единичных отрезков в смысле вычисляемых значений
 double a_x, b_x, c_x, a_y, b_y, c_y; //Числовые параметры функций
 public:
 GraphicClass(); //Конструктор класса
 void DrawAxis(); //Функция, рисующая оси
 void DrawGraphic(); //Функция, рисующая сам график
 void SetXKind(int xkind); //Интерфейсные функции, устанавливающие
 void SetYKind(int ykind); //значения соответствующих величин
 void SetAX(double ax);
 void SetBX(double bx);
 void SetCX(double cx);
 void SetAY(double ay);
 void SetBY(double by);
 void SetCY(double cy);
 void SetDeltaX(double dX);
 void SetDeltaY(double dY);
 };
GraphicClass::GraphicClass()
 { //Устанавливаем значения по умолчанию
 xmax = 681;
 ymax = 465;
 xmid = xmax / 2;
 ymid = ymax / 2;
 deltaX = 10;
 deltaY = 10;
 a_x = 1;
 b_x = 1;
 c_x = 0;
 a_y = 1;
 b_y = 1;
 c_y = 0;
 XKind = 0;
 YKind = 0;
 }
void GraphicClass::DrawAxis()
 {
 Form1 -> PaintBox1 -> Repaint(); //Очищаем экран
 Form1 -> PaintBox1 -> Canvas -> MoveTo(1, ymid); //Рисуем линии осей
 Form1 -> PaintBox1 -> Canvas -> LineTo(xmax, ymid);
 Form1 -> PaintBox1 -> Canvas -> MoveTo(xmid, 1);
 Form1 -> PaintBox1 -> Canvas -> LineTo(xmid, ymax);
 
 for (int i = 0; i <= xmax / deltaX; i++)
  { //Для явного отображения масштаба чертим деления на осях-на X...
  Form1 -> PaintBox1 -> Canvas -> MoveTo(xmid + i * deltaX, ymid - 1);
  Form1 -> PaintBox1 -> Canvas -> LineTo(xmid + i * deltaX, ymid + 2);
  Form1 -> PaintBox1 -> Canvas -> MoveTo(xmid - i * deltaX, ymid - 1);
  Form1 -> PaintBox1 -> Canvas -> LineTo(xmid - i * deltaX, ymid + 2);
  }
 for (int i = 0; i <= ymax / deltaY; i++)
  { //...и на Y
  Form1 -> PaintBox1 -> Canvas -> MoveTo(xmid - 1, ymid + i * deltaY);
  Form1 -> PaintBox1 -> Canvas -> LineTo(xmid + 2, ymid + i * deltaY);
  Form1 -> PaintBox1 -> Canvas -> MoveTo(xmid - 1, ymid - i * deltaY);
  Form1 -> PaintBox1 -> Canvas -> LineTo(xmid + 2, ymid - i * deltaY);
  }
 }
void GraphicClass::DrawGraphic()
 {
 for (int t = -1000; t <= 1000; t++)
  { //2001 точка, соответствующая различным значениям параметра
  switch(XKind) //Считаем X для точки в зависимости от выбранной
   { //пользователем формулы
   case 0: X = a_x; break;
   case 1: X = a_x * 0.01 * t + b_x; break;
   case 2: if (!(b_x < 0 && t == 0)) //Ноль в отрицательной степени
    X = a_x * (pow(0.01 * t, b_x) + c_x); break;
   case 3: X = a_x * sin(b_x * 0.01 * t + c_x); break;
   case 4: X = a_x * cos(b_x * 0.01 * t + c_x); break;
   case 5: X = a_x * tan(b_x * 0.01 * t + c_x); break;
   case 6: if (b_x * 0.01 * t + c_x != 0)
    X = a_x / tan(b_x * 0.01 * t + c_x); break;
   case 7: X = a_x * exp(b_x * 0.01 * t + c_x); break;
   case 8: X = a_x * sin(b_x * 0.01 * t) * sin(c_x * 0.01 * t); break;
   case 9: X = a_x * sin(b_x * 0.01 * t) * cos(c_x * 0.01 * t); break;
   case 10: X = a_x * cos(b_x * 0.01 * t) * cos(c_x * 0.01 * t); break;
   case 11: X = a_x * exp(b_x * 0.01 * t) * sin (c_x * 0.01 * t); break;
   };
  switch(YKind) //Аналогично считаем для той же точки Y
   {
   case 0: Y = a_y; break;
   case 1: Y = a_y * 0.01 * t + b_y; break;
   case 2: if (!(b_y < 0 && t == 0))
    Y = a_y * (pow(0.01 * t, b_y) + c_y); break;
   case 3: Y = a_y * sin(b_y * 0.01 * t + c_y); break;
   case 4: Y = a_y * cos(b_y * 0.01 * t + c_y); break;
   case 5: Y = a_y * tan(b_y * 0.01 * t + c_y); break;
   case 6: if (b_y * 0.01 * t + c_y != 0)
    Y = a_y / tan(b_y * 0.01 * t + c_y); break;
   case 7: Y = a_y * exp(b_y * 0.01 * t + c_y); break;
   case 8: Y = a_y * sin(b_y * 0.01 * t) * sin(c_y * 0.01 * t); break;
   case 9: Y = a_y * sin(b_y * 0.01 * t) * cos(c_y * 0.01 * t); break;
   case 10: Y = a_y * cos(b_y * 0.01 * t) * cos(c_y * 0.01 * t); break;
   case 11: Y = a_y * exp(b_y * 0.01 * t) * sin (c_y * 0.01 * t); break;
   };
  Form1 -> PaintBox1 -> Canvas -> Pixels[xmid +
   X * deltaX][ymid - Y * deltaY] = clGreen; //Рисуем эту точку
  }
 }
void GraphicClass::SetXKind(int xkind) //Простые интерфейсные функции
 {
 XKind = xkind;
 }
void GraphicClass::SetYKind(int ykind)
 {
 YKind = ykind;
 }
void GraphicClass::SetAX(double ax)
 {
 a_x = ax;
 }
void GraphicClass::SetBX(double bx)
 {
 b_x = bx;
 }
void GraphicClass::SetCX(double cx)
 {
 c_x = cx;
 }
void GraphicClass::SetAY(double ay)
 {
 a_y = ay;
 }
void GraphicClass::SetBY(double by)
 {
 b_y = by;
 }
void GraphicClass::SetCY(double cy)
 {
 c_y = cy;
 }
void GraphicClass::SetDeltaX(double dX)
 {
 deltaX = dX;
 }
void GraphicClass::SetDeltaY(double dY)
 {
 deltaY = dY;
 }
 
GraphicClass Graphic; //Объект класса графика
//--------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphic.DrawAxis(); //По нажатию кнопки просто рисуются оси
}
//--------------------------------------------------------------------
void __fastcall TForm1::TrackBar1Change(TObject *Sender)
{
Edit7 -> Text = TrackBar1 -> Position; //Выводим значение
Graphic.SetDeltaX(TrackBar1 -> Position); //Устанавливаем масштаб по X
Graphic.DrawAxis(); //Рисуем оси (с перерисовкой экрана)
Graphic.DrawGraphic(); //Рисуем график с учетом изменения масштаба
}
//--------------------------------------------------------------------
void __fastcall TForm1::TrackBar2Change(TObject *Sender)
{ //Аналогично для масштаба по оси Y
Edit8 -> Text = TrackBar2 -> Position;
Graphic.SetDeltaY(TrackBar2 -> Position);
Graphic.DrawAxis();
Graphic.DrawGraphic();
}
//--------------------------------------------------------------------
void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{ //Устанавливаем новую формулу для X и рисуем новый график
Graphic.SetXKind(ComboBox1 -> ItemIndex); 
Graphic.DrawAxis();
Graphic.DrawGraphic();
}
//--------------------------------------------------------------------
void __fastcall TForm1::ComboBox2Change(TObject *Sender)
{ //Новая формула для Y, рисуем график с учетом изменения
Graphic.SetYKind(ComboBox2 -> ItemIndex);
Graphic.DrawAxis();
Graphic.DrawGraphic();
}
//--------------------------------------------------------------------
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
if (Edit1 -> Text == "") Edit1 -> Text = "0";
 //Если поле станет пустым, интерпретируем это как "ноль"
Graphic.SetAX(Edit1 -> Text.ToDouble());
 //Преобразуем строку в число и устанавливаем численный параметр
Graphic.DrawAxis(); //Как и везде, перерисовываем оси и график
Graphic.DrawGraphic();
}
//--------------------------------------------------------------------
void __fastcall TForm1::Edit2Change(TObject *Sender)
{ //Здесь и далее - аналогично
if (Edit2 -> Text == "") Edit2 -> Text = "0";
Graphic.SetBX(Edit2 -> Text.ToDouble());
Graphic.DrawAxis();
Graphic.DrawGraphic();
}
//--------------------------------------------------------------------
void __fastcall TForm1::Edit3Change(TObject *Sender)
{
if (Edit3 -> Text == "") Edit3 -> Text = "0";
Graphic.SetCX(Edit3 -> Text.ToDouble());
Graphic.DrawAxis();
Graphic.DrawGraphic();
}
//--------------------------------------------------------------------
void __fastcall TForm1::Edit4Change(TObject *Sender)
{
if (Edit4 -> Text == "") Edit4 -> Text = "0";
Graphic.SetAY(Edit4 -> Text.ToDouble());
Graphic.DrawAxis();
Graphic.DrawGraphic();
}
//--------------------------------------------------------------------
void __fastcall TForm1::Edit5Change(TObject *Sender)
{
if (Edit5 -> Text == "") Edit5 -> Text = "0";
Graphic.SetBY(Edit5 -> Text.ToDouble());
Graphic.DrawAxis();
Graphic.DrawGraphic();
}
//--------------------------------------------------------------------
void __fastcall TForm1::Edit6Change(TObject *Sender)
{
if (Edit6 -> Text == "") Edit6 -> Text = "0";
Graphic.SetCY(Edit6 -> Text.ToDouble());
Graphic.DrawAxis();
Graphic.DrawGraphic();
}
 Комментарий модератора 
mixe, используйте тег вставки кода :
[CPP ]без пробелов[ /CPP] или кнопка на панели окна редактирования сообщения
Если с вашей стороны и в дальнейшем будут необъятные куски неоформленного кода, можете рассчитывать на последнее китайское предупреждение.


cooller01, если не секрет можеш бросить исходник своей проги, а то у меня анологичная тема и я полносттю завис

Вернуться к обсуждению:
Рисуем графики на форме. Как лучше поступить? C++ Builder
2
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.02.2012, 12:09
Готовые ответы и решения:

Как лучше поступить?
Ребятки, в который раз обращаюсь к вам за помощью, благодарности нет предела. В этот раз у меня...

Как лучше поступить?
Видеокарта GeForce GTX570 Процессор Intel Core i7 2600K Модуль памяти Kingston HyperX 4096Mb x2...

Как лучше поступить?
Добрый день! Я студент 1 курса специальности &quot;Компьютерные науки&quot;. Сейчас мы изучаем язык Си,...

Как лучше поступить?
Есть чистый сайт на нем 2000 страниц тиц 0 и пр 0 что сделать что бы яша весь его проиндексил...

10
15.02.2012, 12:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.02.2012, 12:09
Помогаю со студенческими работами здесь

Как лучше поступить?
Есть активно работающая таблица с несколькими десятками тысяч записей. Только сейчас появилась...

Как лучше поступить?
Доброго времени суток всем. Есть не совсем стандартный вопрос.. Имеем систему мать - Gigabyte...

Как лучше поступить?
Внешние ссылки ведут на страницы которые выдают 404, что с ними делать? На редиректе уже стоит...

Как лучше поступить.
Здравствуйте. Собственно такой вопрос: Почти доделал сайт из 100 страниц рерайта (для людей),...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru