Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/30: Рейтинг темы: голосов - 30, средняя оценка - 4.77
1 / 1 / 0
Регистрация: 10.06.2014
Сообщений: 9

Как рисовать на форме простые фигуры?

14.06.2014, 03:21. Показов 6426. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть похожие темы, но ни в одной нет ясного ответа и, хотя бы одного примитивного примера. Как с помощью NET нарисовать на форме простую точку, например (линию, круг и т.д.). В GraphABC более менее ясно, а вот в System.Drawing ничего не понятно.

Добавлено через 1 час 27 минут
Кое что из NET я взял и получилось примерно так. А что дальше, не знаю.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{$reference 'System.Windows.Forms.dll'}
{$reference 'System.Drawing.dll'}
 
uses 
  System, System.Windows.Forms;
  
var Pen : System.Drawing.Pen;  
 
begin
  Pen := new System.Drawing.Pen(System.Drawing.Color.Black);
  Pen.Width := 8.0;
  Pen.LineJoin := System.Drawing.Drawing2D.LineJoin.Bevel;
    
  Application.Run(new Form);
end.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.06.2014, 03:21
Ответы с готовыми решениями:

Как рисовать фигуры
Нужно на C# нарисовать заданную фигуру... а я с рисованием вообще не дружу. Помогите пожалуйста.

Как рисовать фигуры?
Не так давно начал работать на си. Помогите пожалуйста. с помощью графики нарисовать такие картинки:

Как рисовать несложные фигуры
например вот такую балку !! и спасибо за ранее!

4
 Аватар для serёга
47 / 42 / 12
Регистрация: 27.08.2012
Сообщений: 290
14.06.2014, 11:24
Лучший ответ Сообщение было отмечено niburiec как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{$reference 'System.Windows.Forms.dll'}
{$reference 'System.Drawing.dll'}
 
uses 
System.Windows.Forms;
  
var f : Form;
    g : System.Drawing.Graphics;  
procedure xxx (sender : object; e : System.EventArgs);
 begin
   g.DrawLine (new System.Drawing.Pen (system.Drawing.Color.Black), 0, 0,50, 50);
 end;
begin
  f := new Form ();
  
  f.Shown += xxx;
  g := System.Drawing.Graphics.FromHwnd (f.Handle); //присвоить дескриптор окна 
  Application.Run(f);
end.
Кстати дескриптор можно использовать любого control например textbox, panel, button, и др и рисовать в них
1
1 / 1 / 0
Регистрация: 10.06.2014
Сообщений: 9
14.06.2014, 22:01  [ТС]
Благодаря серьёзной подсказке форумчанина serёга, и большой помощи и пошаговым объяснениям форумчанина pavelDev, я составил для себя и других начинающих маленькую программку-демонстрацию с почти всеми простыми фигурами. Хотя основная работа проделана pavelDev, а я всего лишь всё собрал.
Pascal
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
{$reference 'System.Windows.Forms.dll'}
{$reference 'System.Drawing.dll'}
{$apptype windows}
uses 
      System, System.Windows.Forms;
var //Описываем 
      Form1 : System.Windows.Forms.Form; 
      Graf1 : System.Drawing.Graphics;
      point1 : array of System.Drawing.PointF;
      point2 : array of System.Drawing.PointF;
      point3 : array of System.Drawing.PointF;
 
procedure  risuem_figury (sender : object; e : System.EventArgs); //Процедура рисования
      begin
            Graf1.DrawLine (new System.Drawing.Pen (System.Drawing.Color.Aqua,5), 0, 0,250, 250);
            //Рисуем линию где 5 это её ширина
            // 0,0 координаты начала а 250,250 координаты конца линии
            
            Graf1.DrawRectangle(new System.Drawing.Pen(System.Drawing.Color.Red,3),70,10,40,90);
            //Рисуем прямоугольник где 3 ширина линии
            // 70,10 координаты левого верхнего угла
            // 40 ширина а 90 высота прямоугольника
            
            Graf1.DrawEllipse (new System.Drawing.Pen(System.Drawing.Color.Gold,3),170,90,140,90);
            // Рисуем элипс
            
            Graf1.DrawEllipse (new System.Drawing.Pen(System.Drawing.Color.GreenYellow,3),320,50,90,90);
            // Таким же образом рисуем круг, только ширина и высота одинаковы
            
            Graf1.FillRectangle(System.Drawing.Brushes.Blue,10,140,120,50);
            // Рисуем закрашенный прямоугольник
            
            Graf1.FillEllipse(System.Drawing.Brushes.Green,170,10,50,50);
            // Рисуем закрашенный круг
            
            Graf1.DrawArc(new System.Drawing.Pen(System.Drawing.Color.DeepPink,3),450,20,100,100,90,180);
            //Рисуем дугу где первые четыре координаты - начало и размер прямоугольника
            // 35 поворот в градусах по часовой стрелке
            // 180 длина дуги в градусах
            
            Graf1.DrawBezier (new System.Drawing.Pen(System.Drawing.Color.Lavender,3),10,300,50,50,100,400,150,200);
            //Рисуем кривую Безье парами координат точек
            
            Graf1.DrawClosedCurve(new System.Drawing.Pen(System.Drawing.Color.Red,2),point1,0.0,System.Drawing.Drawing2D.FillMode.Alternate);
            //Замкнутая кривая по точкам массива - треугольник полый
            
            Graf1.FillPolygon(System.Drawing.Brushes.Blue,point2);
            //Заполненный многоугольник по точкам массива - треугольник закрашенный
            
            Graf1.DrawCurve(new System.Drawing.Pen(System.Drawing.Color.SaddleBrown,5),point3);
            //Просто кривая по точкам массива
            
            //Graf1.DrawPolygon
            //Многоугольник по точкам массива - почти тоже, что и <Замкнутая кривая>
            
            Graf1.DrawString('Привет !',new System.Drawing.Font ( ' Times New Roman ' , 36 , System.Drawing.FontStyle.Bold ),System.Drawing.Brushes.Lime,380,200);
            //Текстовая строка
            
            //Graf1.FillClosedCurve
            //Замкнутая кривая заполненная цветом по точкам массива - почти то же, что и <Заполненный многоугольник>
            
      end;
begin
      //Свойства формы
      Form1 := new Form();
      Form1.Text := 'Простые фигуры с помощью System.Drawing.Graphics'; //Текст заголовка
      Form1.Width := 640; //Размер
      Form1.Height := 480;
      Form1.StartPosition := FormStartPosition.CenterScreen; //Устонавливаем по центру экрана
      Form1.BackColor := System.Drawing.Color.Black; //Закрашиваем форму
      Form1.MaximizeBox := false; // Кнопка <Развернуть> заблокирована
      Form1.Shown += risuem_figury; //Передаем управление подпрограмме <risuem_figury>
      
      //Свойства рисования
      Graf1 := System.Drawing.Graphics.FromHwnd (Form1.Handle);; //присвоить дескриптор окна 
      {или любого другого control например : textbox, panel, button, и др и рисовать на них} 
      
      //замкнутая кривая массив
      SetLength(point1,3);
      point1[0]:=new System.Drawing.Point(270,270);
      point1[1]:=new System.Drawing.Point(350,350);
      point1[2]:=new System.Drawing.Point(350,270);
      
      //Заполненный многоугольник массив
      SetLength(point2,4);
      point2[0]:=new System.Drawing.Point(170,170);
      point2[1]:=new System.Drawing.Point(200,200);
      point2[2]:=new System.Drawing.Point(220,270);
      point2[3]:=new System.Drawing.Point(270,170);
      
      //Просто кривая массив
      SetLength(point3,5);
      point3[0]:=new System.Drawing.Point(70,430);
      point3[1]:=new System.Drawing.Point(90,350);
      point3[2]:=new System.Drawing.Point(110,430);
      point3[3]:=new System.Drawing.Point(130,320);
      point3[4]:=new System.Drawing.Point(150,430);
      
      
      Application.Run(Form1);
end.
Хотя может быть я что-то не так назвал и не очень пояснил, но думаю за отсутствием лучшего и это хорошо.
0
56 / 56 / 26
Регистрация: 13.11.2013
Сообщений: 234
Записей в блоге: 1
14.06.2014, 23:22
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

к сожалению тут имеется серьёзная ошибка если свернуть и развернуть форму то всё это пропадает,я же поправил (изменил событие show на paint)
Pascal
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
{$reference 'System.Windows.Forms.dll'}
{$reference 'System.Drawing.dll'}
{$apptype windows}
uses 
      System, System.Windows.Forms;
var //Описываем 
      Form1 : System.Windows.Forms.Form;
      point1 : array of System.Drawing.PointF;
      point2 : array of System.Drawing.PointF;
      point3 : array of System.Drawing.PointF;
 
procedure  risuem_figury (sender : object; graf1 : System.Windows.Forms.PaintEventArgs); //Процедура рисования
      begin
            Graf1.Graphics.DrawLine (new System.Drawing.Pen (System.Drawing.Color.Aqua,5), 0, 0,250, 250);
            
            //Рисуем линию где 5 это её ширина
            // 0,0 координаты начала а 250,250 координаты конца линии
            
            Graf1.Graphics.DrawRectangle(new System.Drawing.Pen(System.Drawing.Color.Red,3),70,10,40,90);
            //Рисуем прямоугольник где 3 ширина линии
            // 70,10 координаты левого верхнего угла
            // 40 ширина а 90 высота прямоугольника
            
            Graf1.Graphics.DrawEllipse (new System.Drawing.Pen(System.Drawing.Color.Gold,3),170,90,140,90);
            // Рисуем элипс
            
            Graf1.Graphics.DrawEllipse (new System.Drawing.Pen(System.Drawing.Color.GreenYellow,3),320,50,90,90);
            // Таким же образом рисуем круг, только ширина и высота одинаковы
            
            Graf1.Graphics.FillRectangle(System.Drawing.Brushes.Blue,10,140,120,50);
            // Рисуем закрашенный прямоугольник
            
            Graf1.Graphics.FillEllipse(System.Drawing.Brushes.Green,170,10,50,50);
            // Рисуем закрашенный круг
            
            Graf1.Graphics.DrawArc(new System.Drawing.Pen(System.Drawing.Color.DeepPink,3),450,20,100,100,90,180);
            //Рисуем дугу где первые четыре координаты - начало и размер прямоугольника
            // 35 поворот в градусах по часовой стрелке
            // 180 длина дуги в градусах
            
            Graf1.Graphics.DrawBezier (new System.Drawing.Pen(System.Drawing.Color.Lavender,3),10,300,50,50,100,400,150,200);
            //Рисуем кривую Безье парами координат точек
            
            Graf1.Graphics.DrawClosedCurve(new System.Drawing.Pen(System.Drawing.Color.Red,2),point1,0.0,System.Drawing.Drawing2D.FillMode.Alternate);
            //Замкнутая кривая по точкам массива - треугольник полый
            
            Graf1.Graphics.FillPolygon(System.Drawing.Brushes.Blue,point2);
            //Заполненный многоугольник по точкам массива - треугольник закрашенный
            
            Graf1.Graphics.DrawCurve(new System.Drawing.Pen(System.Drawing.Color.SaddleBrown,5),point3);
            //Просто кривая по точкам массива
            
            //Graf1.DrawPolygon
            //Многоугольник по точкам массива - почти тоже, что и <Замкнутая кривая>
            
            Graf1.Graphics.DrawString('Привет !',new System.Drawing.Font ( ' Times New Roman ' , 36 , System.Drawing.FontStyle.Bold ),System.Drawing.Brushes.Lime,380,200);
            //Текстовая строка
            
            //Graf1.FillClosedCurve
            //Замкнутая кривая заполненная цветом по точкам массива - почти то же, что и <Заполненный многоугольник>
            
      end;
begin
      //Свойства формы
      Form1 := new Form();
      Form1.Text := 'Простые фигуры с помощью System.Drawing.Graphics'; //Текст заголовка
      Form1.Width := 640; //Размер
      Form1.Height := 480;
      Form1.StartPosition := FormStartPosition.CenterScreen; //Устонавливаем по центру экрана
      Form1.BackColor := System.Drawing.Color.Black; //Закрашиваем форму
      Form1.MaximizeBox := false; // Кнопка <Развернуть> заблокирована
  Form1.Paint+=risuem_figury;    
  
      //замкнутая кривая массив
      SetLength(point1,3);
      point1[0]:=new System.Drawing.Point(270,270);
      point1[1]:=new System.Drawing.Point(350,350);
      point1[2]:=new System.Drawing.Point(350,270);
      
      //Заполненный многоугольник массив
      SetLength(point2,4);
      point2[0]:=new System.Drawing.Point(170,170);
      point2[1]:=new System.Drawing.Point(200,200);
      point2[2]:=new System.Drawing.Point(220,270);
      point2[3]:=new System.Drawing.Point(270,170);
      
      //Просто кривая массив
      SetLength(point3,5);
      point3[0]:=new System.Drawing.Point(70,430);
      point3[1]:=new System.Drawing.Point(90,350);
      point3[2]:=new System.Drawing.Point(110,430);
      point3[3]:=new System.Drawing.Point(130,320);
      point3[4]:=new System.Drawing.Point(150,430);
      
      
      Application.Run(Form1);
end.
3
0 / 0 / 0
Регистрация: 29.10.2017
Сообщений: 1
29.10.2017, 12:53
Хорошая программка, спасибо. Неплохо было бы её дополнить таким элементом управления как меню и по команде из меню рисовать нужную фигуру.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.10.2017, 12:53
Помогаю со студенческими работами здесь

Как рисовать элементарные геометрические фигуры?
Всем привет!!! Вопрос конечно гулповатый, но все же. Нужно про помощи WinApi прорисовывать элементарные геометрические фигуры на какой либо...

Как рисовать символами различные фигуры
Здравствуйте такой вопрос: в общем в учебнике задания рисовать звёздочками (*) букву О, стрелочку, прямоугольник, ромбик и потом там ещё...

Как рисовать трехмерные фигуры на плоскости?
Здарвствуйте, столкнулся с такой проблемой: не могу корретктно нарисовать каую либо трехмерную фигуру. Суть программы: в программу вводится...

Как рисовать на форме
есть файл его надо быстро рисовать на форме, подскажите как ? Добавлено через 30 секунд или желательно нарисовать изобаржение быстро...

Как рисовать на форме?
Есть задача - нарисовать что то типа Paint'а. Уже облазил все форумы и гугл, ничего не нашёл. Подскажите пожалуйста как это можно...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru