Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 03.11.2018
Сообщений: 2

Перемещение динамически созданного объекта

03.11.2018, 09:54. Показов 846. Ответов 1

Студворк — интернет-сервис помощи студентам
Суть задания в том чтобы сделать что то вроде калькулятора математической логики, но в виде схем. В интернете есть максимально приближенная программа, называется Mmlogic. Грубо говоря вы просто располагаете на форме блок действия с 2 входами и 1 выходом, подключаете ко входам выключатель (по нажатии на него будет меняться картинка и значение передающееся на вход), а на выходе лампочка, которая либо горит, либо нет, в зависимости от ответа (ВСЕ БЛОКИ И ЭЛЕМЕНТЫ(выключатели и лампочки) РЕАЛИЗОВАНЫ КАРТИНКАМИ). Вычисления производятся как в математической логике, т.е. есть только 0 и 1, и 8 действий от простого "не" до штриха Шиффера например.

Теперь сами вопросы: Как реализовать подключение (ниже есть код, но он неправильно работает)? И есть ли смысл развивать это именно в этом русле, учитывая что на OnClick тех же выключателей нужно будет менять их значение + учитывая что еще как то нужно графически их связывать?

Вот код:

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
TForm1 *Form1;
int i = 1;
int x = 0;
 
int x1, y1;
 
int x_f, y_f;
 
int x_cursor, y_cursor;
 
 
 
class block
{
public:
    TImage *im;
    void create(int x);
    void __fastcall omd(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
    void __fastcall omu(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
    void __fastcall omm(TObject *Sender, TShiftState Shift, int X, int Y);
};
 
void block::create(int x)
{
    int n = a, m = b;
 
    im=new TImage(Form1);
    im->Parent = Form1->ScrollBox1;
    im->Left = n;
    im->Top = m;
    b = b + 110;
    if(x == 1) { im->Picture->LoadFromFile("AND2B.bmp"); im->Transparent = true;}
    else if (x == 2) { im->Picture->LoadFromFile("NOR2B.bmp"); im->Transparent = true;}
    im->Stretch=true;
 
    im->OnMouseDown = omd;
    im->OnMouseUp = omu;
    im->OnMouseMove = omm;
}
 
block t;
 
 
void __fastcall block::omd(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
    if(Button == mbLeft)
    {
        t.im->Tag=0;
        x1 = X;
        y1 = Y;
    }
}
 
 
void __fastcall block::omu(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
    t.im->Tag=1;
    x_f=t.im->Left;
    y_f=t.im->Top;
    t.im->Left = x_cursor;
    t.im->Top = y_cursor;
    //ShowMessage(IntToStr(x_f)+":"+IntToStr(y_f));
}
 
//---------------------------------------------------------------------------
 
 
void __fastcall block::omm(TObject *Sender, TShiftState Shift, int X, int Y)
{
    if (t.im->Tag)
    {
        t.im->Left += X - x1;
        t.im->Top += Y - y1;
        t.im->Left = x_cursor;
        t.im->Top = y_cursor;
    }
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    t.create(x);
 
    Button1->Enabled = false;
    Button3->Enabled = true;
    x = 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    Form1->Width=Screen->Width;
    Form1->Height=Screen->Height;
    Form1->Left = 0;
    Form1->Top = 0;
    Form1->BorderStyle = bsDialog;
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
    x = 1;
    Button1->Enabled = true;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::SpeedButton2Click(TObject *Sender)
{
    x = 2;
    Button1->Enabled = true;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ScrollBox1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
{
    x_cursor=X;
    y_cursor=Y;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.11.2018, 09:54
Ответы с готовыми решениями:

Узнать имя динамически созданного объекта
Проблема вот в чем: На форме размещен компонент CategoryPanelGroup В нем динамически созданы категории в цикле, а в этих...

Перемещение созданного объекта в Canvas
Здравствуйте дорогие друзья. Помогите пожалуйста с одной прогой. Нужно создать любой объект в Canvas, чтобы он мог перемещаться при...

Поле динамически созданного Edit-a
Разбирался с динамическим созданием компонентов и наткнулся на проблему: из созданного Edit-а не копируется текст. void __fastcall...

1
0 / 0 / 0
Регистрация: 03.11.2018
Сообщений: 2
07.11.2018, 20:03  [ТС]
В общем через одно место реализовал выбор объекта для перемещения. Создал массив объектов класса, и номера заносил в комбобокс.

Теперь мне нужно сделать это обращение не через комбобокс, а через нажатие по картинке (через ее номер например).
Собственно в этом и есть вся проблема.

Вот код:
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
 class block
{
public:
    TImage *im;
    void createlog(int x);
    void createpr(int x);
    void createviv(int x);
 
    void __fastcall omd(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
    void __fastcall omu(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
    void __fastcall omm(TObject *Sender, TShiftState Shift, int X, int Y);
};
 
void block::createlog(int x)
{
    int n1 = a1, m1 = b1, d1 = num;
 
    im=new TImage(Form1);
    im->Parent = Form1->ScrollBox1;
    im->Left = n1;
    im->Top = m1;
 
    if(x == 1) { im->Picture->LoadFromFile("AND2B.bmp"); im->Transparent = true;    b1 = b1 + 110;}
    else if (x == 2) { im->Picture->LoadFromFile("NOR2B.bmp"); im->Transparent = true;  b1 = b1 + 110;}
    else if (x == 3) { im->Picture->LoadFromFile("BUFFERB.bmp"); im->Transparent = true;    b1 = b1 + 110;}
    else if (x == 4) { im->Picture->LoadFromFile("INVERTB.bmp"); im->Transparent = true;    b1 = b1 + 110;}
    else if (x == 5) { im->Picture->LoadFromFile("NAND2B.bmp"); im->Transparent = true; b1 = b1 + 110;}
    else if (x == 6) { im->Picture->LoadFromFile("OR2B.bmp"); im->Transparent = true;   b1 = b1 + 110;}
    else if (x == 7) { im->Picture->LoadFromFile("XNOR2B.bmp"); im->Transparent = true; b1 = b1 + 110;}
    else if (x == 8) { im->Picture->LoadFromFile("XOR2B.bmp"); im->Transparent = true;  b1 = b1 + 110;}
    im->Stretch=true;
 
    im->OnMouseDown = omd;
    im->OnMouseMove = omm;
    im->OnMouseUp = omu;
 
    pp = p; p++; Form1->ComboBox1->Items->Add(pp);
}
 
 
block * t = new block[p];
 
 
void __fastcall block::omd(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
    if(Button == mbLeft) { x1 = X; y1 = Y;  }
}
 
 
void __fastcall block::omm(TObject *Sender, TShiftState Shift, int X, int Y)
{
    if (Shift.Contains(ssLeft))
    {
           t[StrToInt(Form1->ComboBox1->Text)].im->Left+=X-x1;
           t[StrToInt(Form1->ComboBox1->Text)].im->Top+=Y-y1;
    }
}
 
void __fastcall block::omu(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
    //t[0].im->Tag = 0;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    t[p].createlog(x);
 
    Button1->Enabled = false;
    Button3->Enabled = true;
    x = 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.11.2018, 20:03
Помогаю со студенческими работами здесь

Изменение свойст динамически созданного обьекта
Суть проблемы заключается в том что мне нужно в одном обработчике событий изменить свойство обьекта созданного в другом обработчике при...

Как обратиться к функции динамически созданного компонента?
Динамически создаю кнопку: TButton *button = new TButton(this); button->Parent = this; button->Name =...

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

Как изменить Name у созданного объекта класса TImage?
TImage *Im = new TImage(Form1); Im>Parent=Form1; Im->Name="Pole1"; Как изменить имя? Когда я написал строчку изменения имени, то у...

Перемещение динамически созданой компоненты
Кто знает, можна ли изменять координаты динамически созданой компоненты в программе??? TImage *image = new TImage(this); ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru