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

Создание простейших графических примитивов в Delphi

06.12.2012, 20:30. Показов 2987. Ответов 8

Задание. С использованием графических примитивов осуществите рисование представленных рисунков. К каждому рисунку должна идти сопровождающая надпись синего цвета. Рисование должно осуществляться в месте и по щелчку левой кнопкой мыши.
Код для рисования рисунка есть, а вот как сделать сопровождающую надпись синего цвета не знаю. Что нужно добавить к этой программке.
Delphi
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
102
103
104
105
106
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;
 
type
  TForm1 = class(TForm)
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
var
  a,b, h, x1, y1, x2, y2:integer;
  point: array[1..4] of TPoint;
  p:array[1..4] of TPoint; x,y:integer;c:TCanvas;
implementation
{$R *.dfm}
 
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
//координаты вершин многоугольника
point: array[1..25]of TPoint;
 
begin
case Button of 
mbLeft:
begin
//Координаты первой точки
point[1].X:=20+X; point[1].Y:=20+Y;
//Координаты второй точки
point[2].X:=30+X; point[2].Y:=20+Y;
//Координаты третьей точки
point[3].X:=40+X; point[3].Y:=0+Y;
//Координаты четвертой точки
point[4].X:=50+X; point[4].Y:=20+Y;
point[5].X:=130+X; point[5].Y:=20+Y;
point[6].X:=140+X; point[6].Y:=0+Y;
point[7].X:=150+X; point[7].Y:=20+Y;
point[8].X:=160+X; point[8].Y:=20+Y;
point[9].X:=120+X; point[9].Y:=100+Y;
point[10].X:=160+X; point[10].Y:=210+Y;
point[11].X:=200+X; point[11].Y:=80+Y;
point[12].X:=240+X; point[12].Y:=120+Y;
point[13].X:=160+X; point[13].Y:=210+Y;
point[14].X:=170+X; point[14].Y:=240+Y;
point[15].X:=140+X; point[15].Y:=240+Y;
point[16].X:=150+X; point[16].Y:=260+Y;
point[17].X:=130+X; point[17].Y:=260+Y;
point[18].X:=120+X; point[18].Y:=240+Y;
point[19].X:=50+X; point[19].Y:=240+Y;
point[20].X:=40+X; point[20].Y:=260+Y;
point[21].X:=20+X; point[21].Y:=260+Y;
point[22].X:=30+X; point[22].Y:=240+Y;
point[23].X:=0+X; point[23].Y:=240+Y;
point[24].X:=60+X; point[24].Y:=100+Y;
point[25].X:=20+X; point[25].Y:=20+Y;
Form1.Canvas.Polygon(point);
form1.Canvas.MoveTo(20+X,20+y); // Задаем начальную точку
form1.Canvas.LineTo(160+X,20+y); // Рисуем первую линию
form1.Canvas.MoveTo(0+X,240+y); // Задаем начальную точку
form1.Canvas.LineTo(170+X,240+y); // Рисуем первую линию
 // левый глаз
form1.Canvas.MoveTo(50+X,50+y); // Задаем начальную точку
form1.Canvas.LineTo(60+X,40+y); // Рисуем первую линию
form1.Canvas.LineTo(70+X,50+y); // Рисуем первую линию
form1.Canvas.LineTo(60+X,60+y); // Рисуем первую линию
form1.Canvas.LineTo(50+X,50+y); // Рисуем первую линию
 
 // правый глаз
form1.Canvas.MoveTo(110+X,50+y); // Задаем начальную точку
form1.Canvas.LineTo(120+X,40+y); // Рисуем первую линию
form1.Canvas.LineTo(130+X,50+y); // Рисуем первую линию
form1.Canvas.LineTo(120+X,60+y); // Рисуем первую линию
form1.Canvas.LineTo(110+X,50+y); // Рисуем первую линию
 
//нос
form1.Canvas.MoveTo(80+X,70+y); // Задаем начальную точку
form1.Canvas.LineTo(100+X,70+y); // Рисуем первую линию
form1.Canvas.LineTo(90+X,80+y); // Рисуем первую линию
form1.Canvas.LineTo(80+X,70+y); // Рисуем первую линию
 
form1.Canvas.MoveTo(80+X,80+y); // Задаем начальную точку
form1.Canvas.LineTo(10+X,60+y); // Рисуем первую линию
form1.Canvas.MoveTo(80+X,80+y); // Задаем начальную точку
form1.Canvas.LineTo(20+X,90+y); // Рисуем первую линию
 
form1.Canvas.MoveTo(100+X,80+y); // Задаем начальную точку
form1.Canvas.LineTo(160+X,60+y); // Рисуем первую линию
form1.Canvas.MoveTo(100+X,80+y); // Задаем начальную точку
form1.Canvas.LineTo(150+X,90+y); // Рисуем первую линию
end;
end;
end;
 
end.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.12.2012, 20:30
Ответы с готовыми решениями:

Использование графических примитивов
Добрый вечер уважаемые форумчане! Необходима ваша помощь в решении следующей задачи. Требуется...

Распознавание графических примитивов на изображениях
Что можете посоветовать с чего начать? Распознавание графических примитивов на изображениях (круг,...

Использование графических примитивов для создания статических и динамических изображений
Здравствуйте! А кто-то уже делал нечто подобное в Делфи? Лично у меня фантазии вообще нету, дабы...

С помощью графических примитивов создайте программу, выполняющую рисование конфеты
С помощью графических примитивов создайте программу, выполняющую рисование конфеты.,то есть...

8
249 / 153 / 31
Регистрация: 07.10.2012
Сообщений: 401
06.12.2012, 21:48 2
Delphi
1
2
3
 Form1.Canvas.Font.Color := clBlue;            // цвет шрифта
 Form1.Canvas.Font.Size := 25;                 // размер шрифта
 Form1.Canvas.TextOut(x + 20, y + 260, 'Животное'); // вывод текста
0
0 / 0 / 0
Регистрация: 06.12.2012
Сообщений: 25
07.12.2012, 16:08  [ТС] 3
А что нужно сделать чтобы это изображение перемещалось по форме?
0
249 / 153 / 31
Регистрация: 07.10.2012
Сообщений: 401
07.12.2012, 16:16 4
Цитата Сообщение от алиюша Посмотреть сообщение
А что нужно сделать чтобы это изображение перемещалось по форме?
Само по себе что-ли?
0
0 / 0 / 0
Регистрация: 06.12.2012
Сообщений: 25
07.12.2012, 16:25  [ТС] 5
само задание звучит так: "Создайте программу, которая будет осуществлять перемещение по экрану рисунка, созданного вами в предыдущей лабораторной работе." Ну я так думаю да..хотя можно сделать кнопочку которая будет ее запускать
0
249 / 153 / 31
Регистрация: 07.10.2012
Сообщений: 401
07.12.2012, 16:41 6
Поместить отрисовку в отдельную процедуру и вызывать передавая координаты.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
Prpcedure DrawPic(X,Y);
begin
  //Координаты первой точки
  point[1].X:=20+X; point[1].Y:=20+Y;
  //Координаты второй точки
  point[2].X:=30+X; point[2].Y:=20+Y;
  //Координаты третьей точки
  point[3].X:=40+X; point[3].Y:=0+Y;
  //Координаты четвертой точки
  // И так далее ...
 ...
end;
Можно таймером вызывать, чтобы сама двигалась картинка.
0
0 / 0 / 0
Регистрация: 06.12.2012
Сообщений: 25
07.12.2012, 16:45  [ТС] 7
чет я не очень поняла
0
249 / 153 / 31
Регистрация: 07.10.2012
Сообщений: 401
07.12.2012, 16:55 8
Вот так например:
Delphi
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
var
  a,b, h, x1, y1, x2, y2:integer;
  point: array[1..4] of TPoint;
  p:array[1..4] of TPoint;
  x,y:integer;
  c:TCanvas;
implementation
{$R *.dfm}
 
procedure DrawPic( X, Y: Integer);
var
  //координаты вершин многоугольника
  point: array[1..25]of TPoint;
 
  begin
  //Координаты первой точки
  point[1].X:=20+X; point[1].Y:=20+Y;
  //Координаты второй точки
  point[2].X:=30+X; point[2].Y:=20+Y;
  //Координаты третьей точки
  point[3].X:=40+X; point[3].Y:=0+Y;
  //Координаты четвертой точки
  point[4].X:=50+X; point[4].Y:=20+Y;
  point[5].X:=130+X; point[5].Y:=20+Y;
  point[6].X:=140+X; point[6].Y:=0+Y;
  point[7].X:=150+X; point[7].Y:=20+Y;
  point[8].X:=160+X; point[8].Y:=20+Y;
  point[9].X:=120+X; point[9].Y:=100+Y;
  point[10].X:=160+X; point[10].Y:=210+Y;
  point[11].X:=200+X; point[11].Y:=80+Y;
  point[12].X:=240+X; point[12].Y:=120+Y;
  point[13].X:=160+X; point[13].Y:=210+Y;
  point[14].X:=170+X; point[14].Y:=240+Y;
  point[15].X:=140+X; point[15].Y:=240+Y;
  point[16].X:=150+X; point[16].Y:=260+Y;
  point[17].X:=130+X; point[17].Y:=260+Y;
  point[18].X:=120+X; point[18].Y:=240+Y;
  point[19].X:=50+X; point[19].Y:=240+Y;
  point[20].X:=40+X; point[20].Y:=260+Y;
  point[21].X:=20+X; point[21].Y:=260+Y;
  point[22].X:=30+X; point[22].Y:=240+Y;
  point[23].X:=0+X; point[23].Y:=240+Y;
  point[24].X:=60+X; point[24].Y:=100+Y;
  point[25].X:=20+X; point[25].Y:=20+Y;
 
  Form1.Canvas.Font.Color := clBlue;            // цвет шрифта
  Form1.Canvas.Font.Size := 25;                 // размер шрифта
  Form1.Canvas.TextOut(x + 20, y + 260, 'Животное'); // вывод текста
 
  Form1.Canvas.Polygon(point);
  form1.Canvas.MoveTo(20+X,20+y); // Задаем начальную точку
  form1.Canvas.LineTo(160+X,20+y); // Рисуем первую линию
  form1.Canvas.MoveTo(0+X,240+y); // Задаем начальную точку
  form1.Canvas.LineTo(170+X,240+y); // Рисуем первую линию
   // левый глаз
  form1.Canvas.MoveTo(50+X,50+y); // Задаем начальную точку
  form1.Canvas.LineTo(60+X,40+y); // Рисуем первую линию
  form1.Canvas.LineTo(70+X,50+y); // Рисуем первую линию
  form1.Canvas.LineTo(60+X,60+y); // Рисуем первую линию
  form1.Canvas.LineTo(50+X,50+y); // Рисуем первую линию
 
   // правый глаз
  form1.Canvas.MoveTo(110+X,50+y); // Задаем начальную точку
  form1.Canvas.LineTo(120+X,40+y); // Рисуем первую линию
  form1.Canvas.LineTo(130+X,50+y); // Рисуем первую линию
  form1.Canvas.LineTo(120+X,60+y); // Рисуем первую линию
  form1.Canvas.LineTo(110+X,50+y); // Рисуем первую линию
 
  //нос
  form1.Canvas.MoveTo(80+X,70+y); // Задаем начальную точку
  form1.Canvas.LineTo(100+X,70+y); // Рисуем первую линию
  form1.Canvas.LineTo(90+X,80+y); // Рисуем первую линию
  form1.Canvas.LineTo(80+X,70+y); // Рисуем первую линию
 
  form1.Canvas.MoveTo(80+X,80+y); // Задаем начальную точку
  form1.Canvas.LineTo(10+X,60+y); // Рисуем первую линию
  form1.Canvas.MoveTo(80+X,80+y); // Задаем начальную точку
  form1.Canvas.LineTo(20+X,90+y); // Рисуем первую линию
 
  form1.Canvas.MoveTo(100+X,80+y); // Задаем начальную точку
  form1.Canvas.LineTo(160+X,60+y); // Рисуем первую линию
  form1.Canvas.MoveTo(100+X,80+y); // Задаем начальную точку
  form1.Canvas.LineTo(150+X,90+y); // Рисуем первую линию
end;
 
 
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Repaint;
  DrawPic(Random(width - 200),Random(height - 300));
end;
 
end.
0
0 / 0 / 0
Регистрация: 06.12.2012
Сообщений: 25
07.12.2012, 17:51  [ТС] 9
DrawPic это что?

Добавлено через 17 минут
ааа...пасибо большое))

Добавлено через 27 секунд
такая прикольненькая получилась))

Добавлено через 11 минут
это код графического редактора...но там есть небольшой косячок..например, нарисовали рисунок и хотим залить фон..и когда он заливает фон нарисованная картинка как бы остается под ним и пропадает..что нужно сделать чтоб нормально заливалось как в Paint.

unit Unit4;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, ExtDlgs;

type
TForm4 = class(TForm)
Image1: TImage;
Button1: TButton;
Button2: TButton;
SaveDialog1: TSaveDialog;
EditSize: TEdit;
ColorBox1: TColorBox;
Button3: TButton;
Button4: TButton;
OpenPictureDialog1: TOpenPictureDialog;
procedure FormShow(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form4: TForm4;
gg:Boolean;
implementation

{$R *.dfm}

procedure TForm4.Button1Click(Sender: TObject);
begin
if SaveDialog1.Execute then
Image1.Picture.Bitmap.SaveToFile (SaveDialog1.FileName);
end;

procedure TForm4.Button2Click(Sender: TObject);
begin
Image1.Canvas.FillRect(ClientRect);
end;

procedure TForm4.Button3Click(Sender: TObject);
begin
Image1.Canvas.Brush.Color:=ColorBox1.Selected;
Image1.Canvas.FillRect(ClientRect);

end;

procedure TForm4.Button4Click(Sender: TObject);
Var
bmp:TBitmap;
begin
bmp:=TBitmap.Create;
if OpenPictureDialog1.Execute then
begin
bmp.LoadFromFile(OpenPictureDialog1.FileName);
Image1.Canvas.Draw(10,10,bmp);
end;
end;

procedure TForm4.FormShow(Sender: TObject);
begin
Image1.Canvas.FillRect(ClientRect); //для очищения Image при открытии формы
end;

procedure TForm4.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
gg:=True;
Image1.Canvas.MoveTo(x,y);
end;

procedure TForm4.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if gg then
begin
Image1.Canvas.Pen.Color:=ColorBox1.Selected;
Image1.Canvas.Pen.Width:=strToInt(EditSize.Text);
Image1.Canvas.LineTo(x,y);
end;
end;

procedure TForm4.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
gg:=False;
end;

end.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.12.2012, 17:51

Обновление графических элементов в Delphi
Прошу помощи, и желательно поскорей. Сделал программу, которая меняет режим видимости изображений и...

Использование графических возможностей Delphi
Вычислить n значений функции y=f(x) на отрезке и построить график функции. Вычисленные значения...

Создание элементарных графических объектов
Разработать проект фасада кирпичного двухэтажного дома. Разработать дизайн двери и окон....

Создание графических примитивов
Здравствуйте ,помогите пожалуйста С помощью средства Visual C++ создать на экране чертеж.


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

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

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