From d50a0855a07789a61776c7ceb723efeeb94e45a2 Mon Sep 17 00:00:00 2001 From: kassslll <144980044+kassslll@users.noreply.github.com> Date: Sun, 18 Feb 2024 08:02:04 +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=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ProjectLiner/ProjectLiner/DirectionType.cs | 27 +++ ProjectLiner/ProjectLiner/DrawningLiner.cs | 205 ++++++++++++++++++ ProjectLiner/ProjectLiner/EntityLiner.cs | 68 ++++++ ProjectLiner/ProjectLiner/Form1.Designer.cs | 39 ---- ProjectLiner/ProjectLiner/Form1.cs | 10 - .../ProjectLiner/FormLiner.Designer.cs | 133 ++++++++++++ ProjectLiner/ProjectLiner/FormLiner.cs | 91 ++++++++ .../{Form1.resx => FormLiner.resx} | 50 ++--- ProjectLiner/ProjectLiner/Program.cs | 2 +- ProjectLiner/ProjectLiner/ProjectLiner.csproj | 15 ++ .../Properties/Resources.Designer.cs | 103 +++++++++ .../ProjectLiner/Properties/Resources.resx | 133 ++++++++++++ .../ProjectLiner/Resources/bottom.png | Bin 0 -> 5805 bytes ProjectLiner/ProjectLiner/Resources/left.png | Bin 0 -> 5248 bytes ProjectLiner/ProjectLiner/Resources/right.png | Bin 0 -> 5026 bytes ProjectLiner/ProjectLiner/Resources/top.png | Bin 0 -> 5585 bytes 16 files changed, 801 insertions(+), 75 deletions(-) create mode 100644 ProjectLiner/ProjectLiner/DirectionType.cs create mode 100644 ProjectLiner/ProjectLiner/DrawningLiner.cs create mode 100644 ProjectLiner/ProjectLiner/EntityLiner.cs delete mode 100644 ProjectLiner/ProjectLiner/Form1.Designer.cs delete mode 100644 ProjectLiner/ProjectLiner/Form1.cs create mode 100644 ProjectLiner/ProjectLiner/FormLiner.Designer.cs create mode 100644 ProjectLiner/ProjectLiner/FormLiner.cs rename ProjectLiner/ProjectLiner/{Form1.resx => FormLiner.resx} (93%) create mode 100644 ProjectLiner/ProjectLiner/Properties/Resources.Designer.cs create mode 100644 ProjectLiner/ProjectLiner/Properties/Resources.resx create mode 100644 ProjectLiner/ProjectLiner/Resources/bottom.png create mode 100644 ProjectLiner/ProjectLiner/Resources/left.png create mode 100644 ProjectLiner/ProjectLiner/Resources/right.png create mode 100644 ProjectLiner/ProjectLiner/Resources/top.png diff --git a/ProjectLiner/ProjectLiner/DirectionType.cs b/ProjectLiner/ProjectLiner/DirectionType.cs new file mode 100644 index 0000000..12c5fb2 --- /dev/null +++ b/ProjectLiner/ProjectLiner/DirectionType.cs @@ -0,0 +1,27 @@ +namespace ProjectLiner; + +/// +/// Направление перемещения +/// +public enum DirectionType +{ + /// + /// Вверх + /// + Up = 1, + + /// + /// Вниз + /// + Down = 2, + + /// + /// Влево + /// + Left = 3, + + /// + /// Вправо + /// + Right = 4 +} \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/DrawningLiner.cs b/ProjectLiner/ProjectLiner/DrawningLiner.cs new file mode 100644 index 0000000..76d0856 --- /dev/null +++ b/ProjectLiner/ProjectLiner/DrawningLiner.cs @@ -0,0 +1,205 @@ +namespace ProjectLiner; + +/// +/// Класс, отвечающий за прорисовку и перемещение объекта-сущности +/// +public class DrawningLiner +{ + /// + /// Класс-сущность + /// + public EntityLiner? EntityLiner { get; private set; } + + /// + /// Ширина окна + /// + private int? _pictureWidth; + + /// + /// Высота окна + /// + private int? _pictureHeight; + + /// + /// Левая координата прорисовки лайнера + /// + private int? _startPosX; + + /// + /// Верхняя кооридната прорисовки лайнера + /// + private int? _startPosY; + + /// + /// Ширина прорисовки лайнера + /// + private readonly int _drawningLinerWidth = 180; + + /// + /// Высота прорисовки лайнера + /// + private readonly int _drawningLinerHeight = 125; + + /// + /// Инициализация свойств + /// + /// Скорость + /// Вес + /// Основной цвет + /// Дополнительный цвет + /// Признак наличия якоря + /// Признак наличия шлюпок + /// Признак наличия трубы + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool anchor, bool boats, bool pipe) + { + EntityLiner = new EntityLiner(); + EntityLiner.Init(speed, weight, bodyColor, additionalColor, anchor, boats, pipe); + _pictureWidth = null; + _pictureHeight = null; + _startPosX = null; + _startPosY = null; + } + + /// + /// Установка границ поля + /// + /// Ширина поля + /// Высота поля + /// true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах + public bool SetPictureSize(int width, int height) + { + _pictureWidth = width; + _pictureHeight = height; + return true; + } + + /// + /// Установка позиции + /// + /// Координата X + /// Координата Y + public void SetPosition(int x, int y) + { + if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) + { + return; + } + + if (x < 0 || y < 0) + { + return; + } + + _startPosX = x; + _startPosY = y; + } + + /// + /// Изменение направления перемещения + /// + /// Направление + /// true - перемещене выполнено, false - перемещение невозможно + public bool MoveTransport(DirectionType direction) + { + if (EntityLiner == null || !_startPosX.HasValue || !_startPosY.HasValue) + { + return false; + } + + switch (direction) + { + //влево + case DirectionType.Left: + if (_startPosX.Value - EntityLiner.Step > 0) + { + _startPosX -= (int)EntityLiner.Step; + } + return true; + //вверх + case DirectionType.Up: + if (_startPosY.Value - EntityLiner.Step > 0) + { + _startPosY -= (int)EntityLiner.Step; + } + return true; + // вправо + case DirectionType.Right: + if (_startPosX.Value + EntityLiner.Step < _pictureWidth-_drawningLinerWidth) + { + _startPosX += (int)EntityLiner.Step; + } + return true; + //вниз + case DirectionType.Down: + if (_startPosY.Value + EntityLiner.Step < _pictureHeight-_drawningLinerHeight) + { + _startPosY += (int)EntityLiner.Step; + } + return true; + default: + return false; + } + } + + /// + /// Прорисовка объекта + /// + /// + public void DrawTransport(Graphics g) + { + if (EntityLiner == null || !_startPosX.HasValue || !_startPosY.HasValue) + { + return; + } + + Pen pen = new(Color.Black); + Brush additionalBrush = new SolidBrush(EntityLiner.AdditionalColor); + Brush br = new SolidBrush(EntityLiner.BodyColor); + + // якорь + if (EntityLiner.Anchor) + { + g.DrawLine(pen, _startPosX.Value + 45, _startPosY.Value + 85, _startPosX.Value + 45, _startPosY.Value + 115); + g.DrawLine(pen, _startPosX.Value + 30, _startPosY.Value + 95, _startPosX.Value + 60, _startPosY.Value + 95); + g.DrawLine(pen, _startPosX.Value + 25, _startPosY.Value + 100, _startPosX.Value + 45, _startPosY.Value + 115); + g.DrawLine(pen, _startPosX.Value + 45, _startPosY.Value + 115, _startPosX.Value + 65, _startPosY.Value + 100); + } + + // кузов лайнера + Point point1 = new Point(_startPosX.Value, _startPosY.Value + 80); + Point point2 = new Point(_startPosX.Value + 50, _startPosY.Value + 130); + Point point3 = new Point(_startPosX.Value + 135, _startPosY.Value + 130); + Point point4 = new Point(_startPosX.Value + 185, _startPosY.Value + 80); + Point[] curvePoints = { point1, point2, point3, point4 }; + g.FillPolygon(br, curvePoints); + + + // борт лайнера + Point point5 = new Point(_startPosX.Value+40, _startPosY.Value + 40); + Point point6 = new Point(_startPosX.Value + 140, _startPosY.Value + 40); + Point point7 = new Point(_startPosX.Value + 140, _startPosY.Value + 80); + Point point8 = new Point(_startPosX.Value + 40, _startPosY.Value + 80); + Point[] curvePoints2 = { point5, point6, point7, point8 }; + g.FillPolygon(additionalBrush, curvePoints2); + + // шлюпки + if (EntityLiner.Boats) + { + g.FillEllipse(additionalBrush, _startPosX.Value + 60, _startPosY.Value + 85, 30, 15); + g.FillEllipse(additionalBrush, _startPosX.Value + 95, _startPosY.Value + 85, 30, 15); + g.FillEllipse(additionalBrush, _startPosX.Value + 130, _startPosY.Value + 85, 30, 15); + } + + // труба + if (EntityLiner.Pipe) + { + + Point point9 = new Point(_startPosX.Value + 90, _startPosY.Value + 10); + Point point10 = new Point(_startPosX.Value + 90, _startPosY.Value + 40); + Point point11 = new Point(_startPosX.Value + 115, _startPosY.Value + 40); + Point point12 = new Point(_startPosX.Value + 115, _startPosY.Value + 10); + Point[] curvePoints3 = { point9, point10, point11, point12 }; + g.FillPolygon(br, curvePoints3); + } + } +} diff --git a/ProjectLiner/ProjectLiner/EntityLiner.cs b/ProjectLiner/ProjectLiner/EntityLiner.cs new file mode 100644 index 0000000..66d27c1 --- /dev/null +++ b/ProjectLiner/ProjectLiner/EntityLiner.cs @@ -0,0 +1,68 @@ +namespace ProjectLiner; + +/// +/// Класс-сущность "Лайнер" +/// +public class EntityLiner +{ + /// + /// Скорость + /// + 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 Anchor { get; private set; } + + /// + /// Признак (опция) наличия шлюпок + /// + public bool Boats { get; private set; } + + /// + /// Признак (опция) наличия трубы + /// + public bool Pipe { get; private set; } + + /// + /// Шаг перемещения автомобиля + /// + public double Step => Speed * 100 / Weight; + + /// + /// Инициализация полей объекта-класса спортивного автомобиля + /// + /// Скорость + /// Вес автомобиля + /// Основной цвет + /// Дополнительный цвет + /// Признак наличия якоря + /// Признак наличия шлюпок + /// Признак наличия трубы + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool anchor, bool boats, bool pipe) + { + Speed = speed; + Weight = weight; + BodyColor = bodyColor; + AdditionalColor = additionalColor; + Anchor = anchor; + Boats = boats; + Pipe = pipe; + } +} \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/Form1.Designer.cs b/ProjectLiner/ProjectLiner/Form1.Designer.cs deleted file mode 100644 index 054e711..0000000 --- a/ProjectLiner/ProjectLiner/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace ProjectLiner -{ - 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 - } -} \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/Form1.cs b/ProjectLiner/ProjectLiner/Form1.cs deleted file mode 100644 index 9b44028..0000000 --- a/ProjectLiner/ProjectLiner/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ProjectLiner -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/FormLiner.Designer.cs b/ProjectLiner/ProjectLiner/FormLiner.Designer.cs new file mode 100644 index 0000000..e55a740 --- /dev/null +++ b/ProjectLiner/ProjectLiner/FormLiner.Designer.cs @@ -0,0 +1,133 @@ +namespace ProjectLiner +{ + partial class FormLiner + { + /// + /// 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() + { + pictureBoxLiner = new PictureBox(); + buttonCreate = new Button(); + buttonDown = new Button(); + buttonUp = new Button(); + buttonLeft = new Button(); + buttonRight = new Button(); + ((System.ComponentModel.ISupportInitialize)pictureBoxLiner).BeginInit(); + SuspendLayout(); + // + // pictureBoxLiner + // + pictureBoxLiner.Dock = DockStyle.Fill; + pictureBoxLiner.Location = new Point(0, 0); + pictureBoxLiner.Name = "pictureBoxLiner"; + pictureBoxLiner.Size = new Size(948, 614); + pictureBoxLiner.TabIndex = 0; + pictureBoxLiner.TabStop = false; + // + // buttonCreate + // + buttonCreate.Location = new Point(12, 520); + buttonCreate.Name = "buttonCreate"; + buttonCreate.Size = new Size(150, 82); + buttonCreate.TabIndex = 1; + buttonCreate.Text = "Создать"; + buttonCreate.UseVisualStyleBackColor = true; + buttonCreate.Click += buttonCreate_Click; + // + // buttonDown + // + buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonDown.BackgroundImage = Properties.Resources.bottom; + buttonDown.BackgroundImageLayout = ImageLayout.Stretch; + buttonDown.Location = new Point(830, 552); + buttonDown.Name = "buttonDown"; + buttonDown.Size = new Size(50, 50); + buttonDown.TabIndex = 2; + buttonDown.UseVisualStyleBackColor = true; + buttonDown.Click += ButtonMove_Click; + // + // buttonUp + // + buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonUp.BackgroundImage = Properties.Resources.top; + buttonUp.BackgroundImageLayout = ImageLayout.Stretch; + buttonUp.Location = new Point(830, 496); + buttonUp.Name = "buttonUp"; + buttonUp.Size = new Size(50, 50); + buttonUp.TabIndex = 3; + buttonUp.UseVisualStyleBackColor = true; + buttonUp.Click += ButtonMove_Click; + // + // buttonLeft + // + buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonLeft.BackgroundImage = Properties.Resources.left; + buttonLeft.BackgroundImageLayout = ImageLayout.Stretch; + buttonLeft.Location = new Point(774, 552); + buttonLeft.Name = "buttonLeft"; + buttonLeft.Size = new Size(50, 50); + buttonLeft.TabIndex = 4; + buttonLeft.UseVisualStyleBackColor = true; + buttonLeft.Click += ButtonMove_Click; + // + // buttonRight + // + buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonRight.BackgroundImage = Properties.Resources.right; + buttonRight.BackgroundImageLayout = ImageLayout.Stretch; + buttonRight.Location = new Point(886, 552); + buttonRight.Name = "buttonRight"; + buttonRight.Size = new Size(50, 50); + buttonRight.TabIndex = 5; + buttonRight.UseVisualStyleBackColor = true; + buttonRight.Click += ButtonMove_Click; + // + // FormLiner + // + AutoScaleDimensions = new SizeF(11F, 25F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(948, 614); + Controls.Add(buttonRight); + Controls.Add(buttonLeft); + Controls.Add(buttonUp); + Controls.Add(buttonDown); + Controls.Add(buttonCreate); + Controls.Add(pictureBoxLiner); + Name = "FormLiner"; + Text = "Лайнер"; + ((System.ComponentModel.ISupportInitialize)pictureBoxLiner).EndInit(); + ResumeLayout(false); + } + + #endregion + + private PictureBox pictureBoxLiner; + private Button buttonCreate; + private Button buttonDown; + private Button buttonUp; + private Button buttonLeft; + private Button buttonRight; + } +} \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/FormLiner.cs b/ProjectLiner/ProjectLiner/FormLiner.cs new file mode 100644 index 0000000..e370c8b --- /dev/null +++ b/ProjectLiner/ProjectLiner/FormLiner.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ProjectLiner +{ + public partial class FormLiner : Form + { + private DrawningLiner? _drawningLiner; + public FormLiner() + { + InitializeComponent(); + } + + /// + /// Метод прорисовки лайнера + /// + private void Draw() + { + if (_drawningLiner == null) + { + return; + } + + Bitmap bmp = new(pictureBoxLiner.Width, pictureBoxLiner.Height); + Graphics gr = Graphics.FromImage(bmp); + _drawningLiner.DrawTransport(gr); + pictureBoxLiner.Image = bmp; + } + + /// + /// Обработка нажатия кнопки "Создать" + /// + /// + /// + private void buttonCreate_Click(object sender, EventArgs e) + { + Random random = new(); + _drawningLiner = new DrawningLiner(); + _drawningLiner.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)), Convert.ToBoolean(random.Next(0, 2))); + _drawningLiner.SetPictureSize(pictureBoxLiner.Width, pictureBoxLiner.Height); + _drawningLiner.SetPosition(random.Next(10, 100), random.Next(10, 100)); + Draw(); + } + + /// + /// Перемещение объекта по форме (нажатие кнопок навигации) + /// + /// + /// + private void ButtonMove_Click(object sender, EventArgs e) + { + if (_drawningLiner == null) + { + return; + } + + string name = ((Button)sender)?.Name ?? string.Empty; + bool result = false; + switch (name) + { + case "buttonUp": + result = _drawningLiner.MoveTransport(DirectionType.Up); + break; + case "buttonDown": + result = _drawningLiner.MoveTransport(DirectionType.Down); + break; + case "buttonLeft": + result = _drawningLiner.MoveTransport(DirectionType.Left); + break; + case "buttonRight": + result = _drawningLiner.MoveTransport(DirectionType.Right); + break; + } + + if (result) + { + Draw(); + } + } + } +} diff --git a/ProjectLiner/ProjectLiner/Form1.resx b/ProjectLiner/ProjectLiner/FormLiner.resx similarity index 93% rename from ProjectLiner/ProjectLiner/Form1.resx rename to ProjectLiner/ProjectLiner/FormLiner.resx index 1af7de1..af32865 100644 --- a/ProjectLiner/ProjectLiner/Form1.resx +++ b/ProjectLiner/ProjectLiner/FormLiner.resx @@ -1,17 +1,17 @@  - diff --git a/ProjectLiner/ProjectLiner/Program.cs b/ProjectLiner/ProjectLiner/Program.cs index 6a14f7d..b3dc92e 100644 --- a/ProjectLiner/ProjectLiner/Program.cs +++ b/ProjectLiner/ProjectLiner/Program.cs @@ -11,7 +11,7 @@ namespace ProjectLiner // 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 FormLiner()); } } } \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/ProjectLiner.csproj b/ProjectLiner/ProjectLiner/ProjectLiner.csproj index e1a0735..244387d 100644 --- a/ProjectLiner/ProjectLiner/ProjectLiner.csproj +++ b/ProjectLiner/ProjectLiner/ProjectLiner.csproj @@ -8,4 +8,19 @@ enable + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/Properties/Resources.Designer.cs b/ProjectLiner/ProjectLiner/Properties/Resources.Designer.cs new file mode 100644 index 0000000..478d0e0 --- /dev/null +++ b/ProjectLiner/ProjectLiner/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace ProjectLiner.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("ProjectLiner.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 bottom { + get { + object obj = ResourceManager.GetObject("bottom", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap left { + get { + object obj = ResourceManager.GetObject("left", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap right { + get { + object obj = ResourceManager.GetObject("right", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap top { + get { + object obj = ResourceManager.GetObject("top", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/ProjectLiner/ProjectLiner/Properties/Resources.resx b/ProjectLiner/ProjectLiner/Properties/Resources.resx new file mode 100644 index 0000000..b1de66a --- /dev/null +++ b/ProjectLiner/ProjectLiner/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\bottom.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\left.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\right.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\top.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/Resources/bottom.png b/ProjectLiner/ProjectLiner/Resources/bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..504bf06beab336162136cb7976b7d38001d1a10c GIT binary patch literal 5805 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 literal 0 HcmV?d00001 diff --git a/ProjectLiner/ProjectLiner/Resources/right.png b/ProjectLiner/ProjectLiner/Resources/right.png new file mode 100644 index 0000000000000000000000000000000000000000..f97b115950f804f40e403e50357cb7e3ced79620 GIT binary patch literal 5026 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