From 30e54d1d430af58fc7dd6e4cc897ae8d5f28af89 Mon Sep 17 00:00:00 2001 From: H0llowVoid Date: Sun, 25 Feb 2024 22:52:09 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=20=E2=84=961?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProjectHoistingCrane/DirectionType.cs | 30 +++ .../DrawingHoistingCrane.cs | 249 ++++++++++++++++++ .../EntityHoistingCrane.cs | 57 ++++ .../ProjectHoistingCrane/Form1.Designer.cs | 122 ++++++++- .../ProjectHoistingCrane/Form1.cs | 84 ++++++ .../ProjectHoistingCrane/Form1.resx | 50 ++-- .../ProjectHoistingCrane.csproj | 15 ++ .../Properties/Resources.Designer.cs | 103 ++++++++ .../Properties/Resources.resx | 133 ++++++++++ .../Resources/arrowDown.png | Bin 0 -> 8021 bytes .../Resources/arrowLeft.png | Bin 0 -> 7827 bytes .../Resources/arrowRight.png | Bin 0 -> 7907 bytes .../Resources/arrowUp.png | Bin 0 -> 7741 bytes 13 files changed, 814 insertions(+), 29 deletions(-) create mode 100644 ProjectHoistingCrane/ProjectHoistingCrane/DirectionType.cs create mode 100644 ProjectHoistingCrane/ProjectHoistingCrane/DrawingHoistingCrane.cs create mode 100644 ProjectHoistingCrane/ProjectHoistingCrane/EntityHoistingCrane.cs create mode 100644 ProjectHoistingCrane/ProjectHoistingCrane/Properties/Resources.Designer.cs create mode 100644 ProjectHoistingCrane/ProjectHoistingCrane/Properties/Resources.resx create mode 100644 ProjectHoistingCrane/ProjectHoistingCrane/Resources/arrowDown.png create mode 100644 ProjectHoistingCrane/ProjectHoistingCrane/Resources/arrowLeft.png create mode 100644 ProjectHoistingCrane/ProjectHoistingCrane/Resources/arrowRight.png create mode 100644 ProjectHoistingCrane/ProjectHoistingCrane/Resources/arrowUp.png diff --git a/ProjectHoistingCrane/ProjectHoistingCrane/DirectionType.cs b/ProjectHoistingCrane/ProjectHoistingCrane/DirectionType.cs new file mode 100644 index 0000000..f3ef53c --- /dev/null +++ b/ProjectHoistingCrane/ProjectHoistingCrane/DirectionType.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectHoistingCrane; + +/// +/// Направление перемещения +/// +public enum DirectionType +{ + /// + /// Вверх + /// + Up = 1, + /// + /// Вниз + /// + Down = 2, + /// + /// Влево + /// + Left = 3, + /// + /// Вправо + /// + Right = 4 +} diff --git a/ProjectHoistingCrane/ProjectHoistingCrane/DrawingHoistingCrane.cs b/ProjectHoistingCrane/ProjectHoistingCrane/DrawingHoistingCrane.cs new file mode 100644 index 0000000..0f71b92 --- /dev/null +++ b/ProjectHoistingCrane/ProjectHoistingCrane/DrawingHoistingCrane.cs @@ -0,0 +1,249 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectHoistingCrane; + +public class DrawningHoistingCrane +{ + /// + /// Класс-сущность + /// + public EntityHoistingCrane? EntityHoistingCrane { get; private set; } + /// + /// Ширина окна + /// + private int? _pictureWidth; + /// + /// Высота окна + /// + private int? _pictureHeight; + /// + /// Левая координата прорисовки автомобиля + /// + private int? _startPosX; + /// + /// Верхняя кооридната прорисовки автомобиля + /// + private int? _startPosY; + /// + /// Ширина прорисовки автомобиля + /// + private readonly int _drawningCraneWidth = 110; + /// + /// Высота прорисовки автомобиля + /// + private readonly int _drawningCraneHeight = 56; + /// + /// Инициализация свойств + /// + /// Скорость + /// Вес + /// Основной цвет + /// Дополнительный цвет + /// Признак наличия противовеса + /// Признак наличия крана + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool counterweight, bool crane) + { + EntityHoistingCrane = new EntityHoistingCrane(); + EntityHoistingCrane.Init(speed, weight, bodyColor, additionalColor, + counterweight, crane); + _pictureWidth = null; + _pictureHeight = null; + _startPosX = null; + _startPosY = null; + } + /// + /// Установка границ поля + /// + /// Ширина поля + /// Высота поля + /// true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах + public bool SetPictureSize(int width, int height) + { + // TODO проверка, что объект "влезает" в размеры поля + // если влезает, сохраняем границы и корректируем позицию объекта, если она была уже установлена + + if (width <= _drawningCraneWidth || height <= _drawningCraneHeight) + { + return false; + } + + _pictureWidth = width; + _pictureHeight = height; + + if (_startPosX != null || _startPosY != null) + { + if (_startPosX + _drawningCraneWidth > _pictureWidth) _startPosX = _pictureWidth - _drawningCraneWidth; + if (_startPosY + _drawningCraneHeight > _pictureHeight) _startPosY = _pictureHeight - _drawningCraneHeight; + if (_startPosX < 0) _startPosX = 0; + if (_startPosY < 0) _startPosY = 0; + } + + return true; + } + + /// + /// Установка позиции + /// + /// Координата X + /// Координата Y + public void SetPosition(int x, int y) + { + if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) + { + return; + } + + // TODO если при установке объекта в эти координаты, он будет "выходить" за границы формы + // то надо изменить координаты, чтобы он оставался в этих границах + + _startPosX = x; + _startPosY = y; + if (_startPosX + _drawningCraneWidth > _pictureWidth) _startPosX = _pictureWidth - _drawningCraneWidth; + if (_startPosY + _drawningCraneHeight > _pictureHeight) _startPosY = _pictureHeight - _drawningCraneHeight; + if (_startPosX < 0) _startPosX = 0; + if (_startPosY < 0) _startPosY = 0; + } + + /// + /// Изменение направления перемещения + /// + /// Направление + /// true - перемещене выполнено, false - перемещение невозможно + public bool MoveTransport(DirectionType direction) + { + if (EntityHoistingCrane == null || !_startPosX.HasValue || + !_startPosY.HasValue) + { + return false; + } + switch (direction) + { + //влево + case DirectionType.Left: + if (_startPosX.Value - EntityHoistingCrane.Step > 0) + { + _startPosX -= (int)EntityHoistingCrane.Step; + } + return true; + //вверх + case DirectionType.Up: + if (_startPosY.Value - EntityHoistingCrane.Step > 0) + { + _startPosY -= (int)EntityHoistingCrane.Step; + } + return true; + // вправо + case DirectionType.Right: + if (_startPosX.Value + EntityHoistingCrane.Step < _pictureWidth - _drawningCraneWidth) + { + _startPosX += (int)EntityHoistingCrane.Step; + } + //TODO прописать логику сдвига в право + return true; + //вниз + case DirectionType.Down: + if (_startPosY.Value + EntityHoistingCrane.Step < _pictureHeight - _drawningCraneHeight) + { + _startPosY += (int)EntityHoistingCrane.Step; + } + //TODO прописать логику сдвига в вниз + return true; + default: + return false; + } + } + + /// + /// Прорисовка объекта + /// + /// + public void DrawTransport(Graphics g) + { + if (EntityHoistingCrane == null || !_startPosX.HasValue || !_startPosY.HasValue) + { + return; + } + Pen pen = new(Color.Black); + Brush additionalBrush = new SolidBrush(EntityHoistingCrane.AdditionalColor); + Brush BodyBrush = new SolidBrush(EntityHoistingCrane.BodyColor); + Brush CraneBrush = new SolidBrush(Color.Black); + + + //корпус + g.FillRectangle(BodyBrush, _startPosX.Value + 10, _startPosY.Value + 30, 62, 12); + g.DrawRectangle(pen, _startPosX.Value + 10, _startPosY.Value + 30, 62, 12); + g.FillRectangle(BodyBrush, _startPosX.Value + 22, _startPosY.Value + 16, 4, 15); + g.DrawRectangle(pen, _startPosX.Value + 22, _startPosY.Value + 16, 4, 14); + g.FillRectangle(BodyBrush, _startPosX.Value + 37, _startPosY.Value + 8, 5, 23); + g.DrawRectangle(pen, _startPosX.Value + 37, _startPosY.Value + 8, 5, 22); + + //стекло + g.FillRectangle(additionalBrush, _startPosX.Value + 52, _startPosY.Value + 14, 21, 16); + g.DrawRectangle(pen, _startPosX.Value + 52, _startPosY.Value + 14, 20, 16); + + //гусеницы + g.DrawLine(pen, _startPosX.Value + 8, _startPosY.Value + 42, _startPosX.Value + 10, _startPosY.Value + 42); + g.DrawLine(pen, _startPosX.Value + 7, _startPosY.Value + 43, _startPosX.Value + 7, _startPosY.Value + 53); + g.DrawLine(pen, _startPosX.Value + 8, _startPosY.Value + 54, _startPosX.Value + 12, _startPosY.Value + 54); + g.DrawLine(pen, _startPosX.Value + 13, _startPosY.Value + 55, _startPosX.Value + 69, _startPosY.Value + 55); + g.DrawLine(pen, _startPosX.Value + 70, _startPosY.Value + 54, _startPosX.Value + 73, _startPosY.Value + 54); + g.DrawLine(pen, _startPosX.Value + 74, _startPosY.Value + 53, _startPosX.Value + 74, _startPosY.Value + 43); + g.DrawLine(pen, _startPosX.Value + 71, _startPosY.Value + 42, _startPosX.Value + 73, _startPosY.Value + 42); + + //колеса + g.FillEllipse(BodyBrush, _startPosX.Value + 10, _startPosY.Value + 44, 9, 9); + g.DrawEllipse(pen, _startPosX.Value + 10, _startPosY.Value + 44, 9, 9); + g.FillEllipse(BodyBrush, _startPosX.Value + 63, _startPosY.Value + 44, 9, 9); + g.DrawEllipse(pen, _startPosX.Value + 63, _startPosY.Value + 44, 9, 9); + + g.FillEllipse(BodyBrush, _startPosX.Value + 25, _startPosY.Value + 48, 6, 6); + g.DrawEllipse(pen, _startPosX.Value + 25, _startPosY.Value + 48, 6, 6); + g.FillEllipse(BodyBrush, _startPosX.Value + 38, _startPosY.Value + 48, 6, 6); + g.DrawEllipse(pen, _startPosX.Value + 38, _startPosY.Value + 48, 6, 6); + g.FillEllipse(BodyBrush, _startPosX.Value + 50, _startPosY.Value + 48, 6, 6); + g.DrawEllipse(pen, _startPosX.Value + 50, _startPosY.Value + 48, 6, 6); + + g.FillEllipse(BodyBrush, _startPosX.Value + 33, _startPosY.Value + 44, 4, 4); + g.DrawEllipse(pen, _startPosX.Value + 33, _startPosY.Value + 44, 4, 4); + g.FillEllipse(BodyBrush, _startPosX.Value + 45, _startPosY.Value + 44, 4, 4); + g.DrawEllipse(pen, _startPosX.Value + 45, _startPosY.Value + 44, 4, 4); + + //кран + if (EntityHoistingCrane.Crane) + { + //балка + g.FillRectangle(BodyBrush, _startPosX.Value, _startPosY.Value, 110, 9); + g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value, 109, 8); + + //крюк + g.FillRectangle(CraneBrush , _startPosX.Value + 107, _startPosY.Value + 8, 3, 13); + g.FillRectangle(CraneBrush, _startPosX.Value + 102, _startPosY.Value + 18, 8, 3); + g.FillRectangle(CraneBrush, _startPosX.Value + 102, _startPosY.Value + 16, 3, 5); + } + + //противовес + if (EntityHoistingCrane.Сounterweight) + { + g.FillRectangle(additionalBrush, _startPosX.Value + 35, _startPosY.Value, 10, 9); + g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value, 9, 8); + + g.DrawLine(pen, _startPosX.Value + 35, _startPosY.Value + 2, _startPosX.Value + 44, _startPosY.Value + 2); + g.DrawLine(pen, _startPosX.Value + 35, _startPosY.Value + 4, _startPosX.Value + 44, _startPosY.Value + 4); + g.DrawLine(pen, _startPosX.Value + 35, _startPosY.Value + 6, _startPosX.Value + 44, _startPosY.Value + 6); + } + } +} + + + + + + + + + + diff --git a/ProjectHoistingCrane/ProjectHoistingCrane/EntityHoistingCrane.cs b/ProjectHoistingCrane/ProjectHoistingCrane/EntityHoistingCrane.cs new file mode 100644 index 0000000..60d33be --- /dev/null +++ b/ProjectHoistingCrane/ProjectHoistingCrane/EntityHoistingCrane.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectHoistingCrane; + +public class EntityHoistingCrane +{ + /// + /// Скорость + /// + public int Speed { get; private set; } + /// + /// Вес + /// + public double Weight { get; private set; } + /// + /// Основной цвет + /// + public Color BodyColor { get; private set; } + /// + /// Дополнительный цвет (для опциональных элементов) + /// + public Color AdditionalColor { get; private set; } + /// + /// Признак (опция) наличия противовеса + /// + public bool Сounterweight { get; private set; } + /// + /// Признак (опция) наличия крана + /// + public bool Crane { get; private set; } + /// + /// Шаг перемещения автомобиля + /// + public double Step => Speed * 100 / Weight; + /// + /// Инициализация полей объекта-класса спортивного автомобиля + /// + /// Скорость + /// Вес автомобиля + /// Основной цвет + /// Дополнительный цвет + /// Признак наличия обвеса + /// Признак наличия крана + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool counterweight, bool crane) + { + Speed = speed; + Weight = weight; + BodyColor = bodyColor; + AdditionalColor = additionalColor; + Сounterweight = counterweight; + Crane = crane; + } +} diff --git a/ProjectHoistingCrane/ProjectHoistingCrane/Form1.Designer.cs b/ProjectHoistingCrane/ProjectHoistingCrane/Form1.Designer.cs index 0a9528c..f64d119 100644 --- a/ProjectHoistingCrane/ProjectHoistingCrane/Form1.Designer.cs +++ b/ProjectHoistingCrane/ProjectHoistingCrane/Form1.Designer.cs @@ -28,12 +28,126 @@ /// private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 450); - this.Text = "Form1"; + pictureBox1 = new PictureBox(); + pictureBoxHoistingCrane = new PictureBox(); + buttonCreate = new Button(); + buttonLeft = new Button(); + buttonUp = new Button(); + buttonRight = new Button(); + buttonDown = new Button(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit(); + ((System.ComponentModel.ISupportInitialize)pictureBoxHoistingCrane).BeginInit(); + SuspendLayout(); + // + // pictureBox1 + // + pictureBox1.Dock = DockStyle.Fill; + pictureBox1.Location = new Point(0, 0); + pictureBox1.Name = "pictureBox1"; + pictureBox1.Size = new Size(682, 453); + pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize; + pictureBox1.TabIndex = 0; + pictureBox1.TabStop = false; + // + // pictureBoxHoistingCrane + // + pictureBoxHoistingCrane.Dock = DockStyle.Fill; + pictureBoxHoistingCrane.Location = new Point(0, 0); + pictureBoxHoistingCrane.Name = "pictureBoxHoistingCrane"; + pictureBoxHoistingCrane.Size = new Size(682, 453); + pictureBoxHoistingCrane.SizeMode = PictureBoxSizeMode.AutoSize; + pictureBoxHoistingCrane.TabIndex = 1; + pictureBoxHoistingCrane.TabStop = false; + // + // buttonCreate + // + buttonCreate.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonCreate.Location = new Point(24, 402); + buttonCreate.Name = "buttonCreate"; + buttonCreate.Size = new Size(94, 29); + buttonCreate.TabIndex = 2; + buttonCreate.Text = "Создать"; + buttonCreate.UseVisualStyleBackColor = true; + buttonCreate.Click += buttonCreate_Click; + // + // buttonLeft + // + buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonLeft.BackgroundImage = Properties.Resources.arrowLeft; + buttonLeft.BackgroundImageLayout = ImageLayout.Zoom; + buttonLeft.Location = new Point(550, 402); + buttonLeft.Name = "buttonLeft"; + buttonLeft.Size = new Size(30, 30); + buttonLeft.TabIndex = 3; + buttonLeft.UseVisualStyleBackColor = true; + buttonLeft.Click += buttonMove_Click; + // + // buttonUp + // + buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonUp.BackgroundImage = Properties.Resources.arrowUp; + buttonUp.BackgroundImageLayout = ImageLayout.Zoom; + buttonUp.Location = new Point(586, 365); + buttonUp.Name = "buttonUp"; + buttonUp.Size = new Size(30, 30); + buttonUp.TabIndex = 4; + buttonUp.UseVisualStyleBackColor = true; + buttonUp.Click += buttonMove_Click; + // + // buttonRight + // + buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonRight.BackgroundImage = Properties.Resources.arrowRight; + buttonRight.BackgroundImageLayout = ImageLayout.Zoom; + buttonRight.Location = new Point(622, 401); + buttonRight.Name = "buttonRight"; + buttonRight.Size = new Size(30, 30); + buttonRight.TabIndex = 5; + buttonRight.UseVisualStyleBackColor = true; + buttonRight.Click += buttonMove_Click; + // + // buttonDown + // + buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonDown.BackgroundImage = Properties.Resources.arrowDown; + buttonDown.BackgroundImageLayout = ImageLayout.Zoom; + buttonDown.Location = new Point(586, 402); + buttonDown.Name = "buttonDown"; + buttonDown.Size = new Size(30, 30); + buttonDown.TabIndex = 6; + buttonDown.UseVisualStyleBackColor = true; + buttonDown.Click += buttonMove_Click; + // + // Form1 + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(682, 453); + Controls.Add(buttonDown); + Controls.Add(buttonRight); + Controls.Add(buttonUp); + Controls.Add(buttonLeft); + Controls.Add(buttonCreate); + Controls.Add(pictureBoxHoistingCrane); + Controls.Add(pictureBox1); + Name = "Form1"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Form1"; + + ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit(); + ((System.ComponentModel.ISupportInitialize)pictureBoxHoistingCrane).EndInit(); + ResumeLayout(false); + PerformLayout(); } #endregion + + private PictureBox pictureBox1; + private PictureBox pictureBoxHoistingCrane; + private Button buttonCreate; + private Button buttonLeft; + private Button buttonUp; + private Button buttonRight; + private Button buttonDown; } } diff --git a/ProjectHoistingCrane/ProjectHoistingCrane/Form1.cs b/ProjectHoistingCrane/ProjectHoistingCrane/Form1.cs index cf5008d..3ca129a 100644 --- a/ProjectHoistingCrane/ProjectHoistingCrane/Form1.cs +++ b/ProjectHoistingCrane/ProjectHoistingCrane/Form1.cs @@ -2,9 +2,93 @@ namespace ProjectHoistingCrane { public partial class Form1 : Form { + /// + /// - + /// + private DrawningHoistingCrane? _drawningHoistingCrane; + /// + /// + /// public Form1() { InitializeComponent(); } + + + /// + /// + /// + private void Draw() + { + if (_drawningHoistingCrane == null) + { + return; + } + Bitmap bmp = new(pictureBoxHoistingCrane.Width, + pictureBoxHoistingCrane.Height); + Graphics gr = Graphics.FromImage(bmp); + _drawningHoistingCrane.DrawTransport(gr); + pictureBoxHoistingCrane.Image = bmp; + } + + + + /// + /// "" + /// + /// + /// + private void buttonCreate_Click(object sender, EventArgs e) + { + Random random = new(); + _drawningHoistingCrane = new DrawningHoistingCrane(); + _drawningHoistingCrane.Init(random.Next(100, 300), random.Next(1000, 3000), + Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), + Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), + Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); + _drawningHoistingCrane.SetPictureSize(pictureBoxHoistingCrane.Width, pictureBoxHoistingCrane.Height); + _drawningHoistingCrane.SetPosition(random.Next(10, 100), random.Next(10, 100)); + //_drawningHoistingCrane.SetPosition(random.Next(pictureBoxHoistingCrane.Width - 210, pictureBoxHoistingCrane.Width - 66), random.Next(10, 100)); + Draw(); + } + + /// + /// ( ) + /// + /// + /// + private void buttonMove_Click(object sender, EventArgs e) + { + if (_drawningHoistingCrane == null) + { + return; + } + string name = ((Button)sender)?.Name ?? string.Empty; + bool result = false; + switch (name) + { + case "buttonUp": + result = + _drawningHoistingCrane.MoveTransport(DirectionType.Up); + break; + case "buttonDown": + result = + _drawningHoistingCrane.MoveTransport(DirectionType.Down); + break; + case "buttonLeft": + result = + _drawningHoistingCrane.MoveTransport(DirectionType.Left); + break; + case "buttonRight": + result = + _drawningHoistingCrane.MoveTransport(DirectionType.Right); + break; + } + if (result) + { + Draw(); + } + } } } + diff --git a/ProjectHoistingCrane/ProjectHoistingCrane/Form1.resx b/ProjectHoistingCrane/ProjectHoistingCrane/Form1.resx index 1af7de1..af32865 100644 --- a/ProjectHoistingCrane/ProjectHoistingCrane/Form1.resx +++ b/ProjectHoistingCrane/ProjectHoistingCrane/Form1.resx @@ -1,17 +1,17 @@  - diff --git a/ProjectHoistingCrane/ProjectHoistingCrane/ProjectHoistingCrane.csproj b/ProjectHoistingCrane/ProjectHoistingCrane/ProjectHoistingCrane.csproj index 663fdb8..af03d74 100644 --- a/ProjectHoistingCrane/ProjectHoistingCrane/ProjectHoistingCrane.csproj +++ b/ProjectHoistingCrane/ProjectHoistingCrane/ProjectHoistingCrane.csproj @@ -8,4 +8,19 @@ enable + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file diff --git a/ProjectHoistingCrane/ProjectHoistingCrane/Properties/Resources.Designer.cs b/ProjectHoistingCrane/ProjectHoistingCrane/Properties/Resources.Designer.cs new file mode 100644 index 0000000..96efc7c --- /dev/null +++ b/ProjectHoistingCrane/ProjectHoistingCrane/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace ProjectHoistingCrane.Properties { + using System; + + + /// + /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д. + /// + // Этот класс создан автоматически классом StronglyTypedResourceBuilder + // с помощью такого средства, как ResGen или Visual Studio. + // Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen + // с параметром /str или перестройте свой проект VS. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ProjectHoistingCrane.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Перезаписывает свойство CurrentUICulture текущего потока для всех + /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrowDown { + get { + object obj = ResourceManager.GetObject("arrowDown", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrowLeft { + get { + object obj = ResourceManager.GetObject("arrowLeft", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrowRight { + get { + object obj = ResourceManager.GetObject("arrowRight", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrowUp { + get { + object obj = ResourceManager.GetObject("arrowUp", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/ProjectHoistingCrane/ProjectHoistingCrane/Properties/Resources.resx b/ProjectHoistingCrane/ProjectHoistingCrane/Properties/Resources.resx new file mode 100644 index 0000000..dc6b4c5 --- /dev/null +++ b/ProjectHoistingCrane/ProjectHoistingCrane/Properties/Resources.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\arrowDown.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrowLeft.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrowRight.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrowUp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/ProjectHoistingCrane/ProjectHoistingCrane/Resources/arrowDown.png b/ProjectHoistingCrane/ProjectHoistingCrane/Resources/arrowDown.png new file mode 100644 index 0000000000000000000000000000000000000000..a96c44a652d7ded6b7396a9200c36975518f8878 GIT binary patch literal 8021 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 Dp$a)r literal 0 HcmV?d00001 diff --git a/ProjectHoistingCrane/ProjectHoistingCrane/Resources/arrowRight.png b/ProjectHoistingCrane/ProjectHoistingCrane/Resources/arrowRight.png new file mode 100644 index 0000000000000000000000000000000000000000..cfed98c18fa15867247a4c131fa04d70fa4918db GIT binary patch literal 7907 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 literal 0 HcmV?d00001