From 74c1c59b699074e06623bf5b00d9dc08d2585f6c Mon Sep 17 00:00:00 2001 From: vsdth Date: Sun, 17 Mar 2024 11:17:47 +0300 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 --- .../ProjectGasolineTanker/DirectionType.cs | 27 ++ .../DrawningGasolineTanker.cs | 264 ++++++++++++++++++ .../EntityGasolineTanker.cs | 63 +++++ .../ProjectGasolineTanker/Form1.Designer.cs | 39 --- .../ProjectGasolineTanker/Form1.cs | 10 - .../FormGasolineTanker.Designer.cs | 134 +++++++++ .../FormGasolineTanker.cs | 92 ++++++ .../{Form1.resx => FormGasolineTanker.resx} | 50 ++-- .../ProjectGasolineTanker/Program.cs | 2 +- .../ProjectGasolineTanker.csproj | 15 + .../Properties/Resources.Designer.cs | 103 +++++++ .../Properties/Resources.resx | 133 +++++++++ .../Resources/arrowDown.png | Bin 0 -> 4571 bytes .../Resources/arrowLeft.png | Bin 0 -> 4545 bytes .../Resources/arrowRight.png | Bin 0 -> 2054 bytes .../Resources/arrowUp.png | Bin 0 -> 4552 bytes 16 files changed, 857 insertions(+), 75 deletions(-) create mode 100644 ProjectGasolineTanker/ProjectGasolineTanker/DirectionType.cs create mode 100644 ProjectGasolineTanker/ProjectGasolineTanker/DrawningGasolineTanker.cs create mode 100644 ProjectGasolineTanker/ProjectGasolineTanker/EntityGasolineTanker.cs delete mode 100644 ProjectGasolineTanker/ProjectGasolineTanker/Form1.Designer.cs delete mode 100644 ProjectGasolineTanker/ProjectGasolineTanker/Form1.cs create mode 100644 ProjectGasolineTanker/ProjectGasolineTanker/FormGasolineTanker.Designer.cs create mode 100644 ProjectGasolineTanker/ProjectGasolineTanker/FormGasolineTanker.cs rename ProjectGasolineTanker/ProjectGasolineTanker/{Form1.resx => FormGasolineTanker.resx} (93%) create mode 100644 ProjectGasolineTanker/ProjectGasolineTanker/Properties/Resources.Designer.cs create mode 100644 ProjectGasolineTanker/ProjectGasolineTanker/Properties/Resources.resx create mode 100644 ProjectGasolineTanker/ProjectGasolineTanker/Resources/arrowDown.png create mode 100644 ProjectGasolineTanker/ProjectGasolineTanker/Resources/arrowLeft.png create mode 100644 ProjectGasolineTanker/ProjectGasolineTanker/Resources/arrowRight.png create mode 100644 ProjectGasolineTanker/ProjectGasolineTanker/Resources/arrowUp.png diff --git a/ProjectGasolineTanker/ProjectGasolineTanker/DirectionType.cs b/ProjectGasolineTanker/ProjectGasolineTanker/DirectionType.cs new file mode 100644 index 0000000..dbd37c8 --- /dev/null +++ b/ProjectGasolineTanker/ProjectGasolineTanker/DirectionType.cs @@ -0,0 +1,27 @@ +namespace ProjectGasolineTanker; + +/// +/// Направление перемещения +/// +public enum DirectionType +{ + /// + /// Вверх + /// + Up = 1, + + /// + /// Вниз + /// + Down = 2, + + /// + /// Влево + /// + Left = 3, + + /// + /// Вправо + /// + Right = 4, +} diff --git a/ProjectGasolineTanker/ProjectGasolineTanker/DrawningGasolineTanker.cs b/ProjectGasolineTanker/ProjectGasolineTanker/DrawningGasolineTanker.cs new file mode 100644 index 0000000..d53985d --- /dev/null +++ b/ProjectGasolineTanker/ProjectGasolineTanker/DrawningGasolineTanker.cs @@ -0,0 +1,264 @@ +namespace ProjectGasolineTanker; + +/// +/// Класс, отвечающий за прорисовку и перемещение объекта-сущности +/// + +public class DrawningGasolineTanker +{ + /// + /// Класс-сущность + /// + public EntityGasolineTanker? EntityGasolineTanker { get; set; } + + /// + /// Ширина окна + /// + private int? _pictureWidth; + + /// + /// Высота окна + /// + private int? _pictureHeight; + + /// + /// Левая координата прорисовки бензовоза + /// + private int? _startPosX; + + /// + /// Верхняя координата прорисовки берзовоза + /// + private int? _startPosY; + + /// + /// Ширина прорисовки бензовоза + /// + private readonly int _drawningGasolineTankerWidth = 105; + + /// + /// Высота прорисовки бензовоза + /// + private readonly int _drawningGasolineTankerHeight = 75; + + /// + /// + /// + /// Скорость + /// Вес + /// Основной цвет + /// Дополнительный цввет + /// Признак наличия бака под бензин + /// Признак наличия сигнального маяка + + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool gasolineTank, bool signalBeacon) + { + EntityGasolineTanker = new EntityGasolineTanker(); + EntityGasolineTanker.Init(speed, weight, bodyColor, additionalColor, gasolineTank, signalBeacon); + _pictureWidth = null; + _pictureHeight = null; + _startPosX = null; + _startPosY = null; + } + + /// + /// Установка границ поля + /// + /// Ширина поля + /// Высота поля + /// tre - границы заданы, false - проверка не пройдена, нельзя поместить объект в этих размерах returns> + public bool SetPictureSize(int width, int height) + { + if (width >= _drawningGasolineTankerWidth || height >= _drawningGasolineTankerHeight) + { + _pictureWidth = width; + _pictureHeight = height; + if (_startPosX.HasValue && _startPosY.HasValue) + { + SetPosition(_startPosX.Value, _startPosY.Value); + } + return true; + } + return false; + } + + /// + /// Установка позиции + /// + /// Координата x + /// Координата y + public void SetPosition(int x, int y) + { + if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) + { + return; + } + + if (x < 0) + { + x = 0; + } + else if (x > _pictureWidth - _drawningGasolineTankerWidth) + { + x = _pictureWidth.Value - _drawningGasolineTankerWidth; + } + + if (y < 0) + { + y = 0; + } + else if (y > _pictureHeight - _drawningGasolineTankerHeight) + { + y = _pictureHeight.Value - _drawningGasolineTankerHeight; + } + + _startPosX = x; + _startPosY = y; + } + + /// + /// Изменение направления перемещения + /// + /// Направление + /// true - перемещение выполнено, false - перемещение невозможно + public bool MoveTranpsort(DirectionType direction) + { + if (EntityGasolineTanker == null || !_startPosX.HasValue || !_startPosY.HasValue) + { + return false; + } + + switch (direction) + { + //влево + case DirectionType.Left: + if (_startPosX.Value - EntityGasolineTanker.Step > 0) + { + _startPosX -= (int)EntityGasolineTanker.Step; + } + return true; + //вверх + case DirectionType.Up: + if (_startPosY.Value - EntityGasolineTanker.Step > 0) + { + _startPosY -= (int)EntityGasolineTanker.Step; + } + return true; + //вправо + case DirectionType.Right: + if (_startPosX.Value + EntityGasolineTanker.Step < _pictureWidth - _drawningGasolineTankerWidth) + { + _startPosX += (int)EntityGasolineTanker.Step; + } + return true; + //вниз + case DirectionType.Down: + if (_startPosY.Value + EntityGasolineTanker.Step < _pictureHeight - _drawningGasolineTankerHeight) + { + _startPosY += (int)EntityGasolineTanker.Step; + } + //TODO прописать логику сдвига вниз + return true; + default: + return false; + } + } + + /// + /// Прорисовка объекта + /// + /// + public void DrawTransport(Graphics g) + { + if (EntityGasolineTanker == null || !_startPosX.HasValue || !_startPosY.HasValue) + { + return; + } + + + //кузов + Brush br = new SolidBrush(EntityGasolineTanker.BodyColor); + Pen pen = new(Color.Black); + + g.FillRectangle(br, _startPosX.Value + 5, _startPosY.Value + 40, 100, + 10); + + //Кабина + g.FillRectangle(br, _startPosX.Value + 75, _startPosY.Value + 4, 30, + 35); + + //Колеса (справа-налево) + //Колесо №1 + g.FillEllipse(br, _startPosX.Value + 5, _startPosY.Value + 50, 25, + 25); + //Колесо №2 + g.FillEllipse(br, _startPosX.Value + 30, _startPosY.Value + 50, 25, + 25); + + //Колесо №3 + g.FillEllipse(br, _startPosX.Value + 80, _startPosY.Value + 50, 25, + 25); + + + //Границы бензовоза + + + g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value + 40, 100, + 10); + + g.DrawRectangle(pen, _startPosX.Value + 75, _startPosY.Value + 4, 30, + 35); + + //Колесо №1 + g.DrawEllipse(pen, _startPosX.Value + 5, _startPosY.Value + 50, 25, + 25); + //Колесо №2 + g.DrawEllipse(pen, _startPosX.Value + 30, _startPosY.Value + 50, 25, + 25); + + //Колесо №3 + g.DrawEllipse(pen, _startPosX.Value + 80, _startPosY.Value + 50, 25, + 25); + + + + + // Бак для бензина + + Brush ab = new SolidBrush(EntityGasolineTanker.AdditionalColor); + + if (EntityGasolineTanker.GasolineTank) + { + g.FillRectangle(ab, _startPosX.Value + 5, _startPosY.Value + 15, + 65, 20); + g.FillEllipse(ab, _startPosX.Value + 4, _startPosY.Value + 15, + 45, 25); + g.FillEllipse(ab, _startPosX.Value + 25, _startPosY.Value + 10, + 25, 15); + + + + + } + + // Сигнаяльный маяк на кабине + + + if (EntityGasolineTanker.SignalBeacon) + { + g.FillRectangle(ab, _startPosX.Value + 93, _startPosY.Value, + 10, 8); + g.FillEllipse(ab, _startPosX.Value + 93, _startPosY.Value, + 10, 10); + + + g.DrawRectangle(pen, _startPosX.Value + 93, _startPosY.Value, + 10, 8); + g.DrawEllipse(pen, _startPosX.Value + 93, _startPosY.Value, + 10, 10); + + } + + + } +} \ No newline at end of file diff --git a/ProjectGasolineTanker/ProjectGasolineTanker/EntityGasolineTanker.cs b/ProjectGasolineTanker/ProjectGasolineTanker/EntityGasolineTanker.cs new file mode 100644 index 0000000..8205e81 --- /dev/null +++ b/ProjectGasolineTanker/ProjectGasolineTanker/EntityGasolineTanker.cs @@ -0,0 +1,63 @@ +namespace ProjectGasolineTanker; + +/// +/// Класс-сущность "Бензовоз" +/// +public class EntityGasolineTanker +{ + /// + /// Скорость + /// + 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 GasolineTank { get; private set; } + + /// + /// Признак(опция) наличия сигнального маяка + /// + public bool SignalBeacon { get; private set; } + + /// + /// Шаг пермещения бензовоза + /// + public double Step => Speed * 100 / Weight; + + /// + /// + /// + /// Скорость + /// Вес бензовоза + /// Основной цвет + /// Дополнительный цвет + /// Признак наличия бака под бензин + /// Признак наличия сигнального маяка + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool gasolineTank, bool signalBeacon) + { + Speed = speed; + Weight = weight; + BodyColor = bodyColor; + AdditionalColor = additionalColor; + GasolineTank = gasolineTank; + SignalBeacon = signalBeacon; + + } + +} diff --git a/ProjectGasolineTanker/ProjectGasolineTanker/Form1.Designer.cs b/ProjectGasolineTanker/ProjectGasolineTanker/Form1.Designer.cs deleted file mode 100644 index 68688cc..0000000 --- a/ProjectGasolineTanker/ProjectGasolineTanker/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace ProjectGasolineTanker -{ - partial class Form1 - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - 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"; - } - - #endregion - } -} diff --git a/ProjectGasolineTanker/ProjectGasolineTanker/Form1.cs b/ProjectGasolineTanker/ProjectGasolineTanker/Form1.cs deleted file mode 100644 index 2b3e94c..0000000 --- a/ProjectGasolineTanker/ProjectGasolineTanker/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ProjectGasolineTanker -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} diff --git a/ProjectGasolineTanker/ProjectGasolineTanker/FormGasolineTanker.Designer.cs b/ProjectGasolineTanker/ProjectGasolineTanker/FormGasolineTanker.Designer.cs new file mode 100644 index 0000000..1bff6eb --- /dev/null +++ b/ProjectGasolineTanker/ProjectGasolineTanker/FormGasolineTanker.Designer.cs @@ -0,0 +1,134 @@ +namespace ProjectGasolineTanker +{ + partial class FormGasolineTanker + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + pictureBoxGasolineTanker = new PictureBox(); + buttonCreateGasolineTanker = new Button(); + buttonLeft = new Button(); + buttonRight = new Button(); + buttonUp = new Button(); + buttonDown = new Button(); + ((System.ComponentModel.ISupportInitialize)pictureBoxGasolineTanker).BeginInit(); + SuspendLayout(); + // + // pictureBoxGasolineTanker + // + pictureBoxGasolineTanker.Dock = DockStyle.Fill; + pictureBoxGasolineTanker.Location = new Point(0, 0); + pictureBoxGasolineTanker.Name = "pictureBoxGasolineTanker"; + pictureBoxGasolineTanker.Size = new Size(770, 357); + pictureBoxGasolineTanker.TabIndex = 0; + pictureBoxGasolineTanker.TabStop = false; + // + // buttonCreateGasolineTanker + // + buttonCreateGasolineTanker.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonCreateGasolineTanker.Location = new Point(12, 322); + buttonCreateGasolineTanker.Name = "buttonCreateGasolineTanker"; + buttonCreateGasolineTanker.Size = new Size(75, 23); + buttonCreateGasolineTanker.TabIndex = 1; + buttonCreateGasolineTanker.Text = "Создать"; + buttonCreateGasolineTanker.UseVisualStyleBackColor = true; + buttonCreateGasolineTanker.Click += buttonCreateGasolineTanker_Click; + // + // buttonLeft + // + buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonLeft.BackgroundImage = Properties.Resources.arrowLeft; + buttonLeft.BackgroundImageLayout = ImageLayout.Stretch; + buttonLeft.Location = new Point(640, 310); + buttonLeft.Name = "buttonLeft"; + buttonLeft.Size = new Size(35, 35); + buttonLeft.TabIndex = 2; + buttonLeft.UseVisualStyleBackColor = true; + buttonLeft.Click += ButtonMove_Click; + // + // buttonRight + // + buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonRight.BackgroundImage = Properties.Resources.arrowRight; + buttonRight.BackgroundImageLayout = ImageLayout.Stretch; + buttonRight.Location = new Point(722, 310); + buttonRight.Name = "buttonRight"; + buttonRight.Size = new Size(35, 35); + buttonRight.TabIndex = 3; + buttonRight.UseVisualStyleBackColor = true; + buttonRight.Click += ButtonMove_Click; + // + // buttonUp + // + buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonUp.BackgroundImage = Properties.Resources.arrowUp; + buttonUp.BackgroundImageLayout = ImageLayout.Stretch; + buttonUp.Location = new Point(681, 269); + buttonUp.Name = "buttonUp"; + buttonUp.Size = new Size(35, 35); + buttonUp.TabIndex = 4; + buttonUp.UseVisualStyleBackColor = true; + buttonUp.Click += ButtonMove_Click; + // + // buttonDown + // + buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonDown.BackgroundImage = Properties.Resources.arrowDown; + buttonDown.BackgroundImageLayout = ImageLayout.Stretch; + buttonDown.Location = new Point(681, 310); + buttonDown.Name = "buttonDown"; + buttonDown.Size = new Size(35, 35); + buttonDown.TabIndex = 5; + buttonDown.UseVisualStyleBackColor = true; + buttonDown.Click += ButtonMove_Click; + // + // FormGasolineTanker + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(770, 357); + Controls.Add(buttonDown); + Controls.Add(buttonUp); + Controls.Add(buttonRight); + Controls.Add(buttonLeft); + Controls.Add(buttonCreateGasolineTanker); + Controls.Add(pictureBoxGasolineTanker); + Name = "FormGasolineTanker"; + Text = "Бензовоз"; + ((System.ComponentModel.ISupportInitialize)pictureBoxGasolineTanker).EndInit(); + ResumeLayout(false); + } + + #endregion + + private PictureBox pictureBoxGasolineTanker; + private Button buttonCreateGasolineTanker; + private Button buttonLeft; + private Button buttonRight; + private Button buttonUp; + private Button buttonDown; + } +} \ No newline at end of file diff --git a/ProjectGasolineTanker/ProjectGasolineTanker/FormGasolineTanker.cs b/ProjectGasolineTanker/ProjectGasolineTanker/FormGasolineTanker.cs new file mode 100644 index 0000000..dc4f28a --- /dev/null +++ b/ProjectGasolineTanker/ProjectGasolineTanker/FormGasolineTanker.cs @@ -0,0 +1,92 @@ +namespace ProjectGasolineTanker; + +/// +/// Форма работы с объектом "бензовоз" +/// +public partial class FormGasolineTanker : Form +{ + /// + /// Поле-объект для прорисовки объекта + /// + private DrawningGasolineTanker? _drawningGasolineTanker; + + /// + /// Конструктор формы + /// + public FormGasolineTanker() + { + InitializeComponent(); + } + + /// + /// Метод прорисовки машины + /// + private void Draw() + { + if (_drawningGasolineTanker == null) + { + return; + } + + Bitmap bmp = new(pictureBoxGasolineTanker.Width, pictureBoxGasolineTanker.Height); + Graphics gr = Graphics.FromImage(bmp); + _drawningGasolineTanker.DrawTransport(gr); + pictureBoxGasolineTanker.Image = bmp; + } + + /// + /// Обработка нажатия кнопки "Создать" + /// + /// + /// + private void buttonCreateGasolineTanker_Click(object sender, EventArgs e) + { + Random random = new(); + _drawningGasolineTanker = new DrawningGasolineTanker(); + _drawningGasolineTanker.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))); + _drawningGasolineTanker.SetPictureSize(pictureBoxGasolineTanker.Width, pictureBoxGasolineTanker.Height); + _drawningGasolineTanker.SetPosition(random.Next(10, 100), random.Next(10, 100)); + + Draw(); + } + + /// + /// Перемещение объекта по форме (нажатие кнопок навигации) + /// + /// + /// + private void ButtonMove_Click(object sender, EventArgs e) + { + + if (_drawningGasolineTanker == null) + { + return; + } + + + string name = ((Button)sender)?.Name ?? string.Empty; + bool result = false; + switch (name) + { + case "buttonUp": + result = _drawningGasolineTanker.MoveTranpsort(DirectionType.Up); + break; + case "buttonDown": + result = _drawningGasolineTanker.MoveTranpsort(DirectionType.Down); + break; + case "buttonLeft": + result = _drawningGasolineTanker.MoveTranpsort(DirectionType.Left); + break; + case "buttonRight": + result = _drawningGasolineTanker.MoveTranpsort(DirectionType.Right); + break; + } + if (result) + { + Draw(); + } + } +} diff --git a/ProjectGasolineTanker/ProjectGasolineTanker/Form1.resx b/ProjectGasolineTanker/ProjectGasolineTanker/FormGasolineTanker.resx similarity index 93% rename from ProjectGasolineTanker/ProjectGasolineTanker/Form1.resx rename to ProjectGasolineTanker/ProjectGasolineTanker/FormGasolineTanker.resx index 1af7de1..af32865 100644 --- a/ProjectGasolineTanker/ProjectGasolineTanker/Form1.resx +++ b/ProjectGasolineTanker/ProjectGasolineTanker/FormGasolineTanker.resx @@ -1,17 +1,17 @@  - diff --git a/ProjectGasolineTanker/ProjectGasolineTanker/Program.cs b/ProjectGasolineTanker/ProjectGasolineTanker/Program.cs index 3fee9b4..12d41fa 100644 --- a/ProjectGasolineTanker/ProjectGasolineTanker/Program.cs +++ b/ProjectGasolineTanker/ProjectGasolineTanker/Program.cs @@ -11,7 +11,7 @@ namespace ProjectGasolineTanker // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new Form1()); + Application.Run(new FormGasolineTanker()); } } } \ No newline at end of file diff --git a/ProjectGasolineTanker/ProjectGasolineTanker/ProjectGasolineTanker.csproj b/ProjectGasolineTanker/ProjectGasolineTanker/ProjectGasolineTanker.csproj index 663fdb8..af03d74 100644 --- a/ProjectGasolineTanker/ProjectGasolineTanker/ProjectGasolineTanker.csproj +++ b/ProjectGasolineTanker/ProjectGasolineTanker/ProjectGasolineTanker.csproj @@ -8,4 +8,19 @@ enable + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file diff --git a/ProjectGasolineTanker/ProjectGasolineTanker/Properties/Resources.Designer.cs b/ProjectGasolineTanker/ProjectGasolineTanker/Properties/Resources.Designer.cs new file mode 100644 index 0000000..fbd60a3 --- /dev/null +++ b/ProjectGasolineTanker/ProjectGasolineTanker/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace ProjectGasolineTanker.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("ProjectGasolineTanker.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/ProjectGasolineTanker/ProjectGasolineTanker/Properties/Resources.resx b/ProjectGasolineTanker/ProjectGasolineTanker/Properties/Resources.resx new file mode 100644 index 0000000..dc6b4c5 --- /dev/null +++ b/ProjectGasolineTanker/ProjectGasolineTanker/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/ProjectGasolineTanker/ProjectGasolineTanker/Resources/arrowDown.png b/ProjectGasolineTanker/ProjectGasolineTanker/Resources/arrowDown.png new file mode 100644 index 0000000000000000000000000000000000000000..8ac49a715db107d4db3c0c6d6785f3d043333da4 GIT binary patch literal 4571 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