Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
3 / 3 / 0
Регистрация: 19.11.2010
Сообщений: 17
1

Canvas

15.12.2010, 01:21. Показов 915. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени.
Небольшая проблемка. Не получается рисовать произвольную линию.Квадраты, эллипсы, линии,перо и смена заливки, работает всё. Окромя "карандаша"
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, ExtCtrls, StdCtrls;
 
type
  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    ColorBox1: TColorBox;
    ColorBox2: TColorBox;
    Label1: TLabel;
    Label2: TLabel;
    CheckBox1: TCheckBox;
    SpeedButton3: TSpeedButton;
    SpeedButton4: TSpeedButton;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormPaint(Sender: TObject);
    procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure repa;
  end;
 
var
  Form1: TForm1;
  bm:TBitmap;
  knp:Byte;
  x1,y1,x2,y2,X3,Y3:Integer;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.repa;
begin
  PaintBox1.Canvas.Draw(0,0,bm);
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
   bm:=TBitmap.Create;
   bm.Height:=800;
   bm.Width:=600;
   bm.Canvas.Brush.Color:=clWhite;
   bm.Canvas.Rectangle(0,0,799,599);
 
   //PaintBox1.Canvas.Pen.Style:=psDot;
   knp:=0;
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  bm.Free;
end;
 
procedure TForm1.FormPaint(Sender: TObject);
begin
  repa;
end;
 
procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if SpeedButton1.Down then knp:=1;
  if SpeedButton2.Down then knp:=2;
  if SpeedButton3.Down then knp:=3;
  if SpeedButton4.Down then knp:=4;
  x1:=X;
  y1:=Y;
  
end;
 
procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if knp=1 then begin
     repa;
     PaintBox1.Canvas.MoveTo(x1,y1);
     PaintBox1.Canvas.LineTo(X,Y);
  end;
  if knp=2 then begin
     repa;
     PaintBox1.Canvas.Brush.Style:=bsClear;
     PaintBox1.Canvas.Rectangle(x1,y1,x,y);
  end;
  if knp=3 then begin
     repa;
     PaintBox1.Canvas.Brush.Style:=bsClear;
     PaintBox1.Canvas.Ellipse(x1,y1,x,y);
  end;
  if knp=4 then begin
      
     PaintBox1.Canvas.MoveTo(x1,y1);
     x1:=x;
     y1:=y;
     PaintBox1.Canvas.LineTo(x,y);
  end;
  x2:=X;
  y2:=Y;
 
end;
 
procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  bm.Canvas.Pen.Color:=ColorBox1.Selected;
  bm.Canvas.Brush.Color:=ColorBox2.Selected;
  bm.Canvas.Brush.Style:=bsSolid;
  if CheckBox1.Checked then bm.Canvas.Brush.Style:=bsClear;
  if knp=1 then begin
    bm.Canvas.MoveTo(x1,y1);
    bm.Canvas.LineTo(x2,y2);
  end;
  if knp=2 then begin
    bm.Canvas.Rectangle(x1,y1,x2,y2);
  end;
  if knp=3 then begin
    bm.Canvas.Ellipse(x1,y1,x2,y2);
  end;
  if knp=4 then begin
 
     bm.Canvas.MoveTo(x1,y1);
     x1:=x;
     y1:=y;
     bm.Canvas.LineTo(x,y);
    end;
  knp:=0;
  repa;
end;
 
end.
Извините за невыделенный код . И вообще как его выделять?
 Комментарий модератора 
В случае Delphi, выделять так - перед первой строкой кода пишется тег:
[ DELPHI ] (без пробеллов),
затем записываются строки кода и после последней строки ставится тег:
[ /DELPHI ] (без пробелов).
Либо можно выделить строки кода и нажать кнопку с надписью "DELPHI" - в результате, выделенный текст автоматически будет обрамлён тегами.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.12.2010, 01:21
Ответы с готовыми решениями:

Можно ли одной процедурой рисовать на Image.Canvas и Printer.Canvas
Здравствуйте, пожалуйста, подскажите можно ли одной процедурой рисовать на Image.Canvas и...

Как добиться одинакового размера шрифта при выводе на Image.Canvas и Printer.Canvas
Здравствуйте! Подскажите, пожалуйста, как добиться одинакового размера шрифта при выводе на...

Canvas
Ребятки нужна помощь. Решите хотя бы 1ю задачу. 1) Напишите приложение, в окне которого изображен...

Canvas
Можно ли, как-то сделать для окружности что то типа hits?

2
3218 / 2361 / 540
Регистрация: 11.09.2009
Сообщений: 8,604
15.12.2010, 01:59 2
Навскидку:
X, Y - координаты мыши на PaintBox1, а рисуете вы на bm.
knp не устанавливается равным 4.
1
3 / 3 / 0
Регистрация: 19.11.2010
Сообщений: 17
15.12.2010, 12:22  [ТС] 3
Всё решил сам в процедуре -procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); рисовать надо было не в PaintBox1 а в bm.

Добавлено через 2 минуты
Тема закрыта
0
15.12.2010, 12:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.12.2010, 12:22
Помогаю со студенческими работами здесь

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

Canvas.
Я конечно извиняюсь за глупый вопрос но кто то может мне объяснить как включить етот Canvas и как с...

Canvas
Нарисована схема в Canvas. Схема прописана для Form1 в OnPaint. При нажатии на один их пунктов меню...

canvas
можно ли избавиться от наложения фигур друг на друга кроме построения по точкам единственное что...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru