Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.96/96: Рейтинг темы: голосов - 96, средняя оценка - 4.96
 Аватар для RiG1
28 / 28 / 4
Регистрация: 12.03.2011
Сообщений: 474

Шарики двигаются внутри pictereBox-a и отталкиваются от стенок

09.07.2011, 20:31. Показов 20685. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Балуясь, написал программульку. Шарики двигаются внутри pictereBox-a и отталкиваются от стенок.
Вот как это выглядит

Вот выкладываю прогу в текущем состоянии. WindowsFormsApplication7.zip
Переписал полностью, вывел шары в отдельный класс. На данный момент 2 проблемы:
1) Создание шаров "один в другом". Решение с помощью проверки на пересечение при генерации не подходит я думаю, т.к. при большом кол-ве шаров им просто не будет хватать места... нужно что-то другое
2) Так и не смог ничего сделать чтобы шары реалистично отталкивались. Пока тупо отправляются в разные стороны при соударении.
Подскажите как решить это, желательно в виде кода).

Код
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication7
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        List<shar> balllist = new List<shar>(); // список экземпляров (шаров)
        int razmer,kolvo;
        Random rand = new Random(DateTime.Now.Millisecond);
 
        public class shar
        {
            public int X,Y; // Координаты
            public int R; // Радиус (половина размера)
            public int dX,dY; // Путь за 1 тик таймера
 
            // Заполнение данных о шаре 
            public shar(int Razm,Random rand)
            {
                R = Razm; // Размер шара        
                X = rand.Next(R, 700); // Координаты центра
                Y = rand.Next(R, 300);
                dX = rand.Next(1, 10); // Путь за один tick таймера (в пикселях)
                dY = rand.Next(1, 10);
            }
 
            // Рисование
            public void drawBall(PaintEventArgs e)
            {
                Graphics rg = e.Graphics;
                Pen pen = new Pen(Color.Red);
                // Отрисовка шаров
                rg.DrawEllipse(pen, X-(R/2), Y-(R/2), R, R);
            }
 
            //рассчет траектории
            public void beginBall(int width, int height, int razm)
            {
                if (X <= (razm/2)) dX = -dX; // Если координата Х <= 10 то меняем направление движения по оси Х на противоположное
                if (X >= width - (razm/2)) dX = -dX;
                if (Y <= (razm/2)) dY = -dY; // Если координата У <= 10 то меняем направление движения по оси У на противоположное
                if (Y >= height - (razm / 2)) dY = -dY;
 
                // прибавляем к текущей координате изменение пути
                X += dX;
                Y += dY;
            }
 
            // соударение шаров друг с другом
            public void collisionball(shar ball1,int razmer)
            {
                if ((Math.Pow(X - ball1.X, 2) + Math.Pow(Y - ball1.Y, 2) <= Math.Pow(razmer, 2)))
                {
                    dX = -dX;
                   // dY = -dY;
                }
                
 
            }
      
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;
            razmer = Convert.ToInt32(textBox2.Text);
            kolvo = Convert.ToInt32(textBox1.Text);
            balllist.Clear(); // Очищаем список шаров
            for (int i = 0; i < kolvo; i++)
            {
                balllist.Add(new shar(Convert.ToInt32(textBox2.Text), rand)); // Заполнение списка шаров
            }
            
        }
 
        private void tick(object sender, EventArgs e)
        {
            // Метод проверки соударения друг с другом
            for (int i = 0; i < balllist.Count; i++)
                for (int j = 0; j < balllist.Count; j++)
                {
                    if (i != j)
                        balllist[i].collisionball(balllist[j], razmer);
                }
 
            // Метод проверки соударения со стенками
            foreach (shar ball in balllist)
                ball.beginBall(pictureBox1.Width,pictureBox1.Height,razmer);
 
            pictureBox1.Invalidate(); // Перерисовка
        }
 
        private void paint(object sender, PaintEventArgs e)
        {
            foreach (shar ball in balllist)
                ball.drawBall(e); // Само рисование
        }
 
        private void speed(object sender, EventArgs e)
        {
            timer1.Interval = (trackBar1.Maximum + 1 - trackBar1.Value) * 10; // Скорость
        }
    }
}
2
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.07.2011, 20:31
Ответы с готовыми решениями:

Шарики двигаются внутри pictereBox-a и отталкиваются от стенок.
Балуясь, написал программульку. Шарики двигаются внутри pictereBox-a и отталкиваются от стенок. Вот как это выглядит Хочется...

Анимация. Два квадрата двигаются в противоположном направлении и отталкиваются от стенок синего квадрата
Два квадрата двигаются в противоположном направлении и отталкиваются от стенок синего квадрата:

Шарики отталкиваются от стен и друг друга
Нужна помощь с программой, где несколько шариков отталкиваются от стен и бьются друг об друга. Вот код, где один шар летает по форме и...

22
09.07.2011, 21:20

Не по теме:

Хех, прикольно.

0
155 / 155 / 30
Регистрация: 19.10.2009
Сообщений: 319
09.07.2011, 23:01
Я б стал это делать с помощью векторов. В WPF есть класс Vector, здесь, похоже, WinForms, но можно его сделать самостоятельно, например:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Vector{
public Vector(double x, double y){
X=x;
Y=y;
}
 
public double X{get;set;}
public double Y{get;set;}
 
public static operator+ Vector (Vector v1, Vector v2){
 return new Vector(v1.X+v2.X,v1.Y+v2.Y);
}
 
public void Rotate(double angle){
  X=X*Math.Cos(angle)-Y*Math.Sin(angle);
  Y=X*Math.Sin(angle)+Y*Math.Cos(angle);
}
 
public double Length{get{return Math.Sqrt(Math.Pow(X,2)+Math.Pow(Y,2));}}
 
}
И так далее. Схему векторов по мне лучше всего изобразить на бумажке, как-то так

А потом уже выполнить действия над векторами в программе.
0
 Аватар для RiG1
28 / 28 / 4
Регистрация: 12.03.2011
Сообщений: 474
10.07.2011, 00:04  [ТС]
Цитата Сообщение от Ilya81 Посмотреть сообщение
Я б стал это делать с помощью векторов. В WPF есть класс Vector, здесь, похоже, WinForms, но можно его сделать самостоятельно, например:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Vector{
public Vector(double x, double y){
X=x;
Y=y;
}
 
public double X{get;set;}
public double Y{get;set;}
 
public static operator+ Vector (Vector v1, Vector v2){
 return new Vector(v1.X+v2.X,v1.Y+v2.Y);
}
 
public void Rotate(double angle){
  X=X*Math.Cos(angle)-Y*Math.Sin(angle);
  Y=X*Math.Sin(angle)+Y*Math.Cos(angle);
}
 
public double Length{get{return Math.Sqrt(Math.Pow(X,2)+Math.Pow(Y,2));}}
 
}
И так далее. Схему векторов по мне лучше всего изобразить на бумажке, как-то так
Вложение 87497
А потом уже выполнить действия над векторами в программе.
Честно говоря не понял
0
 Аватар для Питекантроп
251 / 145 / 21
Регистрация: 14.06.2010
Сообщений: 340
10.07.2011, 03:48
Лучший ответ Сообщение было отмечено как решение

Решение

RiG1,
Сделайте так.
И будет все ОК.

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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication7
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        List<shar> balllist = new List<shar>(); // список экземпляров (шаров)
        int razmer,kolvo;
        Random rand = new Random(DateTime.Now.Millisecond);
 
        public class shar
        {
            public double X, Y; // Координаты
            public int R; // Радиус (половина размера)
            public double dX, dY; // Путь за 1 тик таймера
            public bool flag = false;
            public int radius;
 
            // Заполнение данных о шаре 
            public shar(int Razm,Random rand)
            {
                radius = (R = Razm) / 2;
                dX = (rand.NextDouble() - 0.5) * 5; // Путь за один tick таймера (в пикселях)
                dY = (rand.NextDouble() - 0.5) * 5;
            }
 
            // Рисование
            public void drawBall(PaintEventArgs e)
            {
                Graphics rg = e.Graphics;
                Pen pen = new Pen(Color.Red);
                // Отрисовка шаров
                rg.DrawEllipse(pen, (float)X - radius, (float)Y - radius, R, R);
            }
 
            //рассчет траектории
            public void beginBall(int width, int height, int razm)
            {
                if (X <= (razm/2) && dX<0) dX = -dX; // Если координата Х <= 10 то меняем направление движения по оси Х на противоположное
                if (X >= width - (razm/2) && dX>0) dX = -dX;
                if (Y <= (razm/2) && dY<0) dY = -dY; // Если координата У <= 10 то меняем направление движения по оси У на противоположное
                if (Y >= height - (razm / 2) && dY > 0) dY = -dY;
                radius = razm/2;
                // прибавляем к текущей координате изменение пути
                X += dX;
                Y += dY;
            }
 
            // соударение шаров друг с другом
            public bool BallOwerlap(shar ball1)
            {
                return (X - ball1.X) * (X - ball1.X) + (Y - ball1.Y) * (Y - ball1.Y) <= 
                    (radius + ball1.radius) * (radius + ball1.radius);
            }
            public bool collisionball(shar ball1, bool enable)
            {
                if (BallOwerlap(ball1))
                {
                    if (enable)
                    {
                        double dx = ball1.X - X, dy = ball1.Y - Y;
                        double alfa = Math.Atan2(dy, dx);
                        double angle = Math.Atan2(dY, dX) - alfa, angleBall = Math.Atan2(ball1.dY, ball1.dX) - alfa,
                            mod = Math.Sqrt(dX * dX + dY * dY), modBall = Math.Sqrt(ball1.dX * ball1.dX + ball1.dY * ball1.dY);
                        double newDX1 = mod * Math.Cos(angle), newDY = mod * Math.Sin(angle),
                            newDX = modBall * Math.Cos(angleBall), newDY1 = modBall * Math.Sin(angleBall);
                        angle = Math.Atan2(newDY, newDX) + alfa;
                        angleBall = Math.Atan2(newDY1, newDX1) + alfa;
                        mod = Math.Sqrt(newDX * newDX + newDY * newDY);
                        modBall = Math.Sqrt(newDX1 * newDX1 + newDY1 * newDY1); 
                        dX = mod * Math.Cos(angle);
                        dY = mod * Math.Sin(angle);
                        ball1.dX = modBall * Math.Cos(angleBall);
                        ball1.dY = modBall * Math.Sin(angleBall);
 
                    }
                    return true;
                }
                return false; 
            }
      
        }
 
        bool[,] colisions;
        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;
            timer1.Interval = (trackBar1.Maximum + 1 - trackBar1.Value) * 3;
            razmer = Convert.ToInt32(textBox2.Text);
            int r = razmer / 2;
            kolvo = Convert.ToInt32(textBox1.Text);
            balllist.Clear(); // Очищаем список шаров
            colisions = new bool[kolvo, kolvo];
                
                for (int i = 0; i < kolvo; i++)
                {
                    for (int j = 0; j < kolvo; j++) colisions[i,j] = false;
                    shar s = new shar(Convert.ToInt32(textBox2.Text), rand);
                    bool collis = true;
                    do{
                        s.X = rand.Next(10, pictureBox1.Width - r);
                        s.Y = rand.Next(r, pictureBox1.Height - r);
                        collis = false;
                        foreach (shar s1 in balllist) if (collis = s.BallOwerlap(s1)) break;
                    } while (collis);
                    balllist.Add(s); // Заполнение списка шаров
                }
        }
 
        private void tick(object sender, EventArgs e)
        {
            // Метод проверки соударения друг с другом
            for (int i = 0; i < balllist.Count-1; i++)
                for (int j = i+1; j < balllist.Count; j++)
                {
                    colisions[i, j] = balllist[i].collisionball(balllist[j], !colisions[i, j]);
                }
            // Метод проверки соударения со стенками
            foreach (shar ball in balllist)
                ball.beginBall(pictureBox1.Width,pictureBox1.Height,razmer);
 
            pictureBox1.Invalidate(); // Перерисовка
        }
 
        private void paint(object sender, PaintEventArgs e)
        {
            foreach (shar ball in balllist)
                ball.drawBall(e); // Само рисование
        }
 
        private void speed(object sender, EventArgs e)
        {
            timer1.Interval = (trackBar1.Maximum + 1 - trackBar1.Value) * 3; // Скорость
        }
    }
}
5
 Аватар для RiG1
28 / 28 / 4
Регистрация: 12.03.2011
Сообщений: 474
10.07.2011, 13:15  [ТС]
Питекантроп, спасибо, а можно немного откомментить код?
0
7 / 15 / 0
Регистрация: 08.03.2011
Сообщений: 100
10.07.2011, 13:36
А как сделать так , чтобы когда два шарика соприкасаются, они не отталкивались бы друг от друга, а слиплялись в более большой шарик?
0
 Аватар для Питекантроп
251 / 145 / 21
Регистрация: 14.06.2010
Сообщений: 340
11.07.2011, 00:00
Цитата Сообщение от Питекантроп Посмотреть сообщение
public double X, Y;
public double dX, dY;
// сделали координаты double, чтобы не было ошибок целочисленного счета.
Цитата Сообщение от Питекантроп Посмотреть сообщение
bool[,] colisions;
Если шары ударились, то соответствующий элемент этого массива - тру. Если на следующей итерации они будут еще пересекаться (такое бывает), то операцию расчета траектории не производить. Последнее реализовано в проверке
C#
1
2
3
4
                    if (enable)
                    {
..............
                    }
Сам процесс расчета траектории исходит из закона сохранения энергии, имплульса и геометрических проеобразований.
Смысл такой:
1. узнать угол между столкнувшимся шарами.
2. перевести вектора движений шаров в систему координат А,В (центры шаров)
3. составить систему из двух уравнений в системе АВ, решить, решение - новые направления.
4. перевести решения в исходную систему координат.
Если кому интересно - даю скрин рассчетов. Довольно сумбурно, но разобрать можно.

теперь код.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
                        double dx = ball1.X - X, dy = ball1.Y - Y;
                        double alfa = Math.Atan2(dy, dx); // нашли угол между центрами шаров
                        double angle = Math.Atan2(dY, dX) - alfa, angleBall = Math.Atan2(ball1.dY, ball1.dX) - alfa,
                            mod = Math.Sqrt(dX * dX + dY * dY), modBall = Math.Sqrt(ball1.dX * ball1.dX + ball1.dY * ball1.dY); // angle,angleBall - сразу ищем угол в системе координат АВ, mod,modBall - нашли модули
                        double newDX1 = mod * Math.Cos(angle), newDY = mod * Math.Sin(angle),
                            newDX = modBall * Math.Cos(angleBall), newDY1 = modBall * Math.Sin(angleBall);  
// рассчитали новые величины (Vx, Vy на скрине) в системе координат АВ. Тут смысл в том, что Х составляющие меняем между шарами, У составляющие оставляем прежними. Т.к. Х - направление силы между шарами (см. расчеты). А У в данном случае - ортогональная сила, на нее ни что не действует, она остается прежней.
 
 
                        angle = Math.Atan2(newDY, newDX) + alfa;
                        angleBall = Math.Atan2(newDY1, newDX1) + alfa;
                        mod = Math.Sqrt(newDX * newDX + newDY * newDY);
                        modBall = Math.Sqrt(newDX1 * newDX1 + newDY1 * newDY1); 
// рассчитали новый угол и модуль векторов 
                        dX = mod * Math.Cos(angle);
                        dY = mod * Math.Sin(angle);
                        ball1.dX = modBall * Math.Cos(angleBall);
                        ball1.dY = modBall * Math.Sin(angleBall);
// рассчитали координаты векторов. Для справки  Для справки: угол, модуль и составляющие Х,У - взаимозависимы и взаимовычисляемы. Физика, 7 класс.
Миниатюры
Шарики двигаются внутри pictereBox-a и отталкиваются от стенок  
0
155 / 155 / 30
Регистрация: 19.10.2009
Сообщений: 319
11.07.2011, 11:12
Цитата Сообщение от RiG1 Посмотреть сообщение
Честно говоря не понял
Ну я имею в виду, раз
сделать чтобы шары реалистично отталкивались. Пока тупо отправляются в разные стороны при соударении.
то для правильного моделирования нужно выполнить сложение исходного вектора скорости с новым, который получается при соударении. Если брать их массу равной, то имульсы будут определять скорости. При расчёте новых скоростей, насколько я помню, учитывается закон сохранения импульса и закон сохранения энергии. Энергия в данном случае пропорциональна квадрату длины вектора. Я б даже при перемещении стал б выполнять сложение исходных координат с вектором скорости (опять ж, если принять, что интервалы времени фиксированы). В общем, лучше всего именно как-то так описать класс вектора, и на бумажке решить несколько несложных уравнений ньютоновской механики, и тогда реалистичность будет.
0
 Аватар для Питекантроп
251 / 145 / 21
Регистрация: 14.06.2010
Сообщений: 340
12.07.2011, 14:34
Лучший ответ Сообщение было отмечено как решение

Решение

Если будет интересно - можете посмотреть проект. Я исправил некоторые баги и добавил физики.
Еще когда-то давно хотел замутить такую штуку, а тут RiG1 мне напомнил =))

Barmaglo, кстати, тут есть и ответ на ваш вопрос. Слияние шариков тоже добавлено.
Вложения
Тип файла: zip WindowsFormsApplication7.zip (72.7 Кб, 58360 просмотров)
7
 Аватар для RiG1
28 / 28 / 4
Регистрация: 12.03.2011
Сообщений: 474
12.07.2011, 20:15  [ТС]
Питекантроп, браво!) яб о таком и не подумал бы даже)
0
7 / 7 / 1
Регистрация: 29.05.2011
Сообщений: 45
15.11.2011, 01:57
А за программирование магнетизма (или гравитации) сделать в таком примере как? Взять грубо говоря два радиуса, где один - внутрненний (сам шар), а второй - внешний (предел действия самой силы) и если по внешнему радиусу идёт столкновение, то начинается непосредственное сближение, но как сделать именно реалистичное сближение? Или есть более удобный способ?
0
0 / 0 / 0
Регистрация: 22.03.2012
Сообщений: 4
24.03.2012, 19:30
проект скачал шарики что надо. НО проблема. при попытке воспроизвести у себя путем набора кода или копировании, ошибок в компиляции не возникает но шарики почему то не отображаются. Может подскажите в чем причина?
0
 Аватар для Yukikaze
352 / 331 / 49
Регистрация: 12.12.2011
Сообщений: 563
24.03.2012, 20:18
Rooke, там рисование идет по событию Paint, инициализируйте его для вашей панели, ну или на чем вы рисуете
0
0 / 0 / 0
Регистрация: 22.03.2012
Сообщений: 4
24.03.2012, 21:34
да действительно. у самих компонентов надо было просто выставить обработчики. спасибо большое. туплю просто чета.
0
ReZart
04.07.2013, 18:10
А можно переделать эту программу для С++?
Если да,то не могли бы посоветовать в каком именно компиляторе и хотя бы общий смысл кода
0 / 0 / 0
Регистрация: 18.01.2023
Сообщений: 3
18.01.2023, 11:52
Добрый день, хочу скачать этот файл, но он не скачивается. Могли бы вы отправить его снова если у вас получится его скачать или он остался у вас с 2011 года?
0
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,768
18.01.2023, 12:01
Цитата Сообщение от Vladislav Sheva Посмотреть сообщение
но он не скачивается
Скачивается и корректно запускается в VS2022. Попробуйте из другого браузера или через другого провайдера.
0
0 / 0 / 0
Регистрация: 18.01.2023
Сообщений: 3
18.01.2023, 12:03
можно ссылочку на google disk??
0
0 / 0 / 0
Регистрация: 18.01.2023
Сообщений: 3
18.01.2023, 12:08
вот как это выглядит, попробовал с телефона через мобильную сеть, не грузит.
Миниатюры
Шарики двигаются внутри pictereBox-a и отталкиваются от стенок   Шарики двигаются внутри pictereBox-a и отталкиваются от стенок  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.01.2023, 12:08
Помогаю со студенческими работами здесь

Шарики отскакивают от стенок
Сделал, чтобы 1 шарик отскакивал от стенок. А можете сделать, чтобы так себя вели 2 шарика и отталкивались друг от друга?

Шарики отскакивают от стенок
подскажите: как сделать что бы шары отталкивались от стенок?

Шарики отбиваются от стенок и друг от друга ...
реализовал шарик который отбивается от стенок. вот то что у меня получилось: #include &lt;vcl.h&gt; #pragma hdrstop #include...

Изобразить движение шарика внутри коробки с отражением от стенок
Создать массив из 8-ми объектов, изображающих движение шарика внутри коробки с отражением от стенок. Форма и размер коробки, скорость...

Как можно сделать, чтобы шары отскакивали внутри круга от стенок и между собой?
Как можно сделать, что-бы шары отскакивали внутри круга от стенок и между собой?


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru