1 / 1 / 0
Регистрация: 10.06.2014
Сообщений: 9

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

14.06.2014, 03:21. Показов 6567. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru