Форум программистов, компьютерный форум, киберфорум
Наши страницы
PascalABC.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.81/16: Рейтинг темы: голосов - 16, средняя оценка - 4.81
niburiec
0 / 0 / 0
Регистрация: 10.06.2014
Сообщений: 9
1

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

14.06.2014, 03:21. Просмотров 3172. Ответов 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2014, 03:21
Ответы с готовыми решениями:

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

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

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

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

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

4
serёга
46 / 41 / 12
Регистрация: 27.08.2012
Сообщений: 290
14.06.2014, 11:24 2
Лучший ответ Сообщение было отмечено 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
niburiec
0 / 0 / 0
Регистрация: 10.06.2014
Сообщений: 9
14.06.2014, 22:01  [ТС] 3
Благодаря серьёзной подсказке форумчанина 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
pavelDev
51 / 51 / 26
Регистрация: 13.11.2013
Сообщений: 214
Записей в блоге: 1
14.06.2014, 23:22 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

к сожалению тут имеется серьёзная ошибка если свернуть и развернуть форму то всё это пропадает,я же поправил (изменил событие 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
Montarano
0 / 0 / 0
Регистрация: 29.10.2017
Сообщений: 1
29.10.2017, 12:53 5
Хорошая программка, спасибо. Неплохо было бы её дополнить таким элементом управления как меню и по команде из меню рисовать нужную фигуру.
0
29.10.2017, 12:53
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2017, 12:53

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.