Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 299

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!

Прокоментируйте пожалуйста, за что отвечает каждая процедура следующей программы, хочу сделать подобие, буду очень признателен!!!!!!

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

HEJY Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: HEJY (статус: Посетитель)
Вопрос отправлен: 8 июня 2010, 15:26
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Откомментировал.
Не знаю, поможет это тебе или нет.

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, ExtCtrls, Menus, ComCtrls, Buttons, StdCtrls, ExtDlgs;
  8.  
  9. type
  10. TToolType=(ttline, ttrect, ttellipse, ttroundrect, ttspray, ttpen);
  11. TForm1 = class(TForm)
  12. MainMenu1: TMainMenu;
  13. Panel1: TPanel;
  14. ScrollBox1: TScrollBox;
  15. StatusBar1: TStatusBar;
  16. N1: TMenuItem;
  17. N2: TMenuItem;
  18. N3: TMenuItem;
  19. N5: TMenuItem;
  20. N6: TMenuItem;
  21. Image1: TImage;
  22. SpeedButton1: TSpeedButton;
  23. SpeedButton4: TSpeedButton;
  24. SpeedButton7: TSpeedButton;
  25. SpeedButton2: TSpeedButton;
  26. SpeedButton5: TSpeedButton;
  27. SpeedButton6: TSpeedButton;
  28. OpenPictureDialog1: TOpenPictureDialog;
  29.  
  30. ColorDialog1: TColorDialog;
  31. SpeedButton8: TSpeedButton;
  32. SpeedButton9: TSpeedButton;
  33. Label1: TLabel;
  34.  
  35. procedure SpeedButton1Click(Sender: TObject);
  36. procedure N6Click(Sender: TObject);
  37. procedure N3Click(Sender: TObject);
  38.  
  39. procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
  40. Shift: TShiftState; X, Y: Integer);
  41. procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
  42. Shift: TShiftState; X, Y: Integer);
  43. procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  44. Y: Integer);
  45. procedure SpeedButton2Click(Sender: TObject);
  46. procedure SpeedButton5Click(Sender: TObject);
  47. procedure SpeedButton4Click(Sender: TObject);
  48. procedure SpeedButton6Click(Sender: TObject);
  49.  
  50. procedure N2Click(Sender: TObject);
  51. procedure SpeedButton8Click(Sender: TObject);
  52.  
  53.  
  54.  
  55. procedure SpeedButton7Click(Sender: TObject);
  56.  
  57.  
  58. private
  59. { Private declarations }
  60. public
  61. { Public declarations }
  62. PenWide: Integer;
  63. Drawing: Boolean;
  64. mousepos1, mousepos2: TPoint;
  65. activeTool: TToolType;
  66. procedure DrawShape(TopLeft, BottomRight: TPoint; AMode: TPenMode);
  67. end;
  68.  
  69. var
  70. Form1: TForm1;
  71.  
  72. implementation
  73.  
  74. {$R *.dfm}
  75.  
  76.  
  77.  
  78. procedure TForm1.SpeedButton1Click(Sender: TObject);
  79. begin
  80. label1.Visible:=true;
  81. speedbutton9.Visible:=false;
  82. speedbutton8.Visible:=true;
  83. activetool:= ttpen;
  84.  
  85. end;
  86.  
  87.  
  88. procedure TForm1.N6Click(Sender: TObject);
  89. begin
  90. close;
  91. end;
  92.  
  93.  
  94. procedure TForm1.N3Click(Sender: TObject);
  95. begin
  96. if openpicturedialog1.Execute then
  97. image1.Picture.LoadFromFile(openpicturedialog1.FileName);
  98. end;
  99.  
  100.  
  101.  
  102.  
  103.  
  104. procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  105. Shift: TShiftState; X, Y: Integer);
  106. begin
  107. Drawing:=true;
  108. mousepos1:=point(x,y);
  109. mousepos2:=mousepos1;
  110.  
  111. image1.Canvas.MoveTo(x,y);
  112. end;
  113.  
  114.  
  115. procedure TForm1.DrawShape(TopLeft, BottomRight: TPoint; AMode: TPenMode);
  116. var
  117. i:integer;
  118. begin
  119. with Image1.Canvas do
  120. begin
  121. Pen.Mode := AMode;
  122. case activeTool of
  123.  
  124. begin
  125. image1.Canvas.Pen.Width:=40;
  126. Image1.Canvas.LineTo(BottomRight.X, BottomRight.Y);
  127. end;
  128.  
  129. begin
  130. Image1.Canvas.MoveTo(TopLeft.X, TopLeft.Y);
  131. Image1.Canvas.LineTo(BottomRight.X, BottomRight.Y);
  132. end;
  133.  
  134. begin
  135. image1.Canvas.Brush.Style:=bsclear;
  136. Image1.Canvas.Rectangle(TopLeft.X, TopLeft.Y, BottomRight.X,BottomRight.Y);
  137. end;
  138.  
  139. begin
  140. image1.Canvas.Brush.Style:=bsclear;
  141. Image1.Canvas.Ellipse(Topleft.X, TopLeft.Y, BottomRight.X, BottomRight.Y);
  142. end;
  143.  
  144. begin
  145. image1.Canvas.Brush.Style:=bsclear;
  146. Image1.Canvas.RoundRect(TopLeft.X, TopLeft.Y, BottomRight.X, BottomRight.Y, (TopLeft.X - BottomRight.X) div 2, (TopLeft.Y - BottomRight.Y) div 2);
  147. end;
  148.  
  149. randomize;
  150. image1.Canvas.Pixels[topleft.x+random(image1.Canvas.Pen.Width), topleft.y+random(image1.Canvas.Pen.Width)]:=image1.Canvas.Pen.Color;
  151. image1.Canvas.Pixels[bottomright.x+random(image1.Canvas.Pen.Width), bottomright.y+random(image1.Canvas.Pen.Width)]:=image1.Canvas.Pen.Color;
  152. end;
  153. end;
  154. end;
  155. end;
  156.  
  157.  
  158.  
  159.  
  160. procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  161. Shift: TShiftState; X, Y: Integer);
  162. begin
  163. if Drawing then
  164. begin
  165. DrawShape(mousepos1, Point(X, Y), pmCopy);
  166. Drawing := False;
  167. end;
  168. end;
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175. procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  176. Y: Integer);
  177. begin
  178. if Drawing then
  179. begin
  180. DrawShape(mousepos1, mousepos2, pmNotXor);
  181. mousepos2 := Point(X, Y);
  182. DrawShape(mousepos1, mousepos2, pmNotXor);
  183. end;
  184. StatusBar1.Panels[0].Text := Format('X=%d, Y=%d', [X, Y]);
  185. end;
  186.  
  187.  
  188. procedure TForm1.SpeedButton2Click(Sender: TObject);
  189. begin
  190. label1.Visible:=true;
  191. speedbutton9.Visible:=false;
  192. speedbutton8.Visible:=true;
  193. activetool:= ttline;
  194.  
  195. end;
  196.  
  197.  
  198. procedure TForm1.SpeedButton5Click(Sender: TObject);
  199. begin
  200. label1.Visible:=true;
  201. speedbutton9.Visible:=false;
  202. speedbutton8.Visible:=true;
  203. activetool:=ttellipse;
  204.  
  205. end;
  206.  
  207.  
  208. procedure TForm1.SpeedButton4Click(Sender: TObject);
  209. begin
  210. label1.Visible:=true;
  211. speedbutton9.Visible:=false;
  212. speedbutton8.Visible:=true;
  213. activetool:=ttrect;
  214.  
  215. end;
  216.  
  217.  
  218. procedure TForm1.SpeedButton6Click(Sender: TObject);
  219. begin
  220. label1.Visible:=true;
  221. speedbutton9.Visible:=false;
  222. speedbutton8.Visible:=true;
  223. activetool:=ttroundrect;
  224.  
  225. end;
  226.  
  227.  
  228. procedure TForm1.N2Click(Sender: TObject);
  229. var
  230. Bitmap: TBitmap;
  231. begin
  232. Bitmap := nil;
  233. try
  234.  
  235. Bitmap.Width := 800;
  236. Bitmap.Height := 800;
  237. Image1.Picture.Graphic := Bitmap;
  238. finally
  239. Bitmap.Free;
  240. end;
  241. end;
  242.  
  243.  
  244. procedure TForm1.SpeedButton8Click(Sender: TObject);
  245. begin
  246. if colordialog1.Execute then
  247. image1.Canvas.Pen.Color:=colordialog1.Color;
  248. speedbutton8.Glyph:=tbitmap.create;
  249. speedbutton8.Glyph.Width:=speedbutton8.Width;
  250. speedbutton8.Glyph.Height:=speedbutton8.Height;
  251. speedbutton8.Glyph.Canvas.Brush.Color:=colordialog1.Color;
  252. speedbutton8.Caption:='';
  253. speedbutton8.Glyph.Canvas.Rectangle(2,2,speedbutton8.Width-6,speedbutton8.Height-6);
  254. end;
  255.  
  256.  
  257. procedure TForm1.SpeedButton7Click(Sender: TObject);
  258. begin
  259. label1.Visible:=true;
  260. speedbutton9.Visible:=false;
  261. speedbutton8.Visible:=true;
  262. activetool:=ttspray;
  263. end;
  264.  
  265. end.


Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 8 июня 2010, 15:57
Оценка за ответ: 4

Комментарий к оценке: Спасибо, почти все понятно))))

Мини-форум вопроса

Всего сообщений: 10; последнее сообщение — 8 июня 2010, 22:34; участников в обсуждении: 2.
min@y™

min@y™ (статус: Доктор наук), 8 июня 2010, 16:25 [#1]:

А чо 4?
Я что-то неправильно написал?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
IlluminatI

IlluminatI (статус: 2-ой класс), 8 июня 2010, 20:01 [#2]:

to min@y™:
Bitmap := TBitmap.Create; // неправильный подход, возможны утечки памяти

а какой правильный? просто интересно стало. всегда так создавал битмапы о_О
min@y™

min@y™ (статус: Доктор наук), 8 июня 2010, 20:36 [#3]:

Цитата (IlluminatI):

а какой правильный? просто интересно стало. всегда так создавал битмапы о_О

Правильно так:
MyClass:= TMyClass.Create(...);
try
  // Работа с экземпляром
finally
  MyClass.Free(); // Или FreeAndNil(MyClass);
end;
Надо объяснять, почему или сам догадаешься?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
IlluminatI

IlluminatI (статус: 2-ой класс), 8 июня 2010, 20:42 [#4]:

Внутри try нельзя создавать?
min@y™

min@y™ (статус: Доктор наук), 8 июня 2010, 20:46 [#5]:

Цитата (IlluminatI):

Внутри try нельзя создавать?

Не советую.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
IlluminatI

IlluminatI (статус: 2-ой класс), 8 июня 2010, 20:47 [#6]:

Почему? Объясни :)
min@y™

min@y™ (статус: Доктор наук), 8 июня 2010, 20:56 [#7]:

Цитата (IlluminatI):

Почему? Объясни :)

Вот тебе ссылка. Пройди тест и посмотри потом на результаты и трактовку правильных ответов. Обрати внимание на 5-й вопрос.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
IlluminatI

IlluminatI (статус: 2-ой класс), 8 июня 2010, 21:13 [#8]:

Спасибо. Хорошая вещь
min@y™

min@y™ (статус: Доктор наук), 8 июня 2010, 21:42 [#9]:

Цитата (IlluminatI):

Спасибо. Хорошая вещь

min@y™ никогда гамна не посоветует. Ему просто лень гнать порожняк, поверь!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
IlluminatI

IlluminatI (статус: 2-ой класс), 8 июня 2010, 22:34 [#10]:

Поверю =)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:42
Выполнено за 0.03 сек.