|
Вопрос # 4 299/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Прокоментируйте пожалуйста, за что отвечает каждая процедура следующей программы, хочу сделать подобие, буду очень признателен!!!!!!
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
 |
Вопрос задал: HEJY (статус: Посетитель)
Вопрос отправлен: 8 июня 2010, 15:26
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: min@y™
Откомментировал.
Не знаю, поможет это тебе или нет.
Приложение: Переключить в обычный режим- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, ExtCtrls, Menus, ComCtrls, Buttons, StdCtrls, ExtDlgs;
-
- type
- TToolType=(ttline, ttrect, ttellipse, ttroundrect, ttspray, ttpen);
- TForm1 = class(TForm)
- MainMenu1: TMainMenu;
- Panel1: TPanel;
- ScrollBox1: TScrollBox;
- StatusBar1: TStatusBar;
- N1: TMenuItem;
- N2: TMenuItem;
- N3: TMenuItem;
- N5: TMenuItem;
- N6: TMenuItem;
- Image1: TImage;
- SpeedButton1: TSpeedButton;
- SpeedButton4: TSpeedButton;
- SpeedButton7: TSpeedButton;
- SpeedButton2: TSpeedButton;
- SpeedButton5: TSpeedButton;
- SpeedButton6: TSpeedButton;
- OpenPictureDialog1: TOpenPictureDialog;
-
- ColorDialog1: TColorDialog;
- SpeedButton8: TSpeedButton;
- SpeedButton9: TSpeedButton;
- Label1: TLabel;
-
- procedure SpeedButton1Click(Sender: TObject);
- procedure N6Click(Sender: TObject);
- procedure N3Click(Sender: TObject);
-
- procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
- Y: Integer);
- procedure SpeedButton2Click(Sender: TObject);
- procedure SpeedButton5Click(Sender: TObject);
- procedure SpeedButton4Click(Sender: TObject);
- procedure SpeedButton6Click(Sender: TObject);
-
- procedure N2Click(Sender: TObject);
- procedure SpeedButton8Click(Sender: TObject);
-
-
-
- procedure SpeedButton7Click(Sender: TObject);
-
-
- private
- { Private declarations }
- public
- { Public declarations }
- PenWide: Integer;
- Drawing: Boolean;
- mousepos1, mousepos2: TPoint;
- activeTool: TToolType;
- procedure DrawShape(TopLeft, BottomRight: TPoint; AMode: TPenMode);
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.dfm}
-
-
-
- procedure TForm1.SpeedButton1Click(Sender: TObject);
- begin
- label1.Visible:=true;
- speedbutton9.Visible:=false;
- speedbutton8.Visible:=true;
- activetool:= ttpen;
-
- end;
-
-
- procedure TForm1.N6Click(Sender: TObject);
- begin
- close;
- end;
-
-
- procedure TForm1.N3Click(Sender: TObject);
- begin
- if openpicturedialog1.Execute then
- image1.Picture.LoadFromFile(openpicturedialog1.FileName);
- end;
-
-
-
-
-
- procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- begin
- Drawing:=true;
- mousepos1:=point(x,y);
- mousepos2:=mousepos1;
-
- image1.Canvas.MoveTo(x,y);
- end;
-
-
- procedure TForm1.DrawShape(TopLeft, BottomRight: TPoint; AMode: TPenMode);
- var
- i:integer;
- begin
- with Image1.Canvas do
- begin
- Pen.Mode := AMode;
- case activeTool of
-
- begin
- image1.Canvas.Pen.Width:=40;
- Image1.Canvas.LineTo(BottomRight.X, BottomRight.Y);
- end;
-
- begin
- Image1.Canvas.MoveTo(TopLeft.X, TopLeft.Y);
- Image1.Canvas.LineTo(BottomRight.X, BottomRight.Y);
- end;
-
- begin
- image1.Canvas.Brush.Style:=bsclear;
- Image1.Canvas.Rectangle(TopLeft.X, TopLeft.Y, BottomRight.X,BottomRight.Y);
- end;
-
- begin
- image1.Canvas.Brush.Style:=bsclear;
- Image1.Canvas.Ellipse(Topleft.X, TopLeft.Y, BottomRight.X, BottomRight.Y);
- end;
-
- begin
- image1.Canvas.Brush.Style:=bsclear;
- Image1.Canvas.RoundRect(TopLeft.X, TopLeft.Y, BottomRight.X, BottomRight.Y, (TopLeft.X -
BottomRight.X) div 2, (TopLeft.Y - BottomRight.Y) div 2);
- end;
-
- randomize;
- image1.Canvas.Pixels[topleft.x+random(image1.Canvas.Pen.Width),
topleft.y+random(image1.Canvas.Pen.Width)]:=image1.Canvas.Pen.Color;
- image1.Canvas.Pixels[bottomright.x+random(image1.Canvas.Pen.Width),
bottomright.y+random(image1.Canvas.Pen.Width)]:=image1.Canvas.Pen.Color;
- end;
- end;
- end;
- end;
-
-
-
-
- procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- begin
- if Drawing then
- begin
- DrawShape(mousepos1, Point(X, Y), pmCopy);
- Drawing := False;
- end;
- end;
-
-
-
-
-
-
- procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
- Y: Integer);
- begin
- if Drawing then
- begin
- DrawShape(mousepos1, mousepos2, pmNotXor);
- mousepos2 := Point(X, Y);
- DrawShape(mousepos1, mousepos2, pmNotXor);
- end;
- StatusBar1.Panels[0].Text := Format('X=%d, Y=%d', [X, Y]);
- end;
-
-
- procedure TForm1.SpeedButton2Click(Sender: TObject);
- begin
- label1.Visible:=true;
- speedbutton9.Visible:=false;
- speedbutton8.Visible:=true;
- activetool:= ttline;
-
- end;
-
-
- procedure TForm1.SpeedButton5Click(Sender: TObject);
- begin
- label1.Visible:=true;
- speedbutton9.Visible:=false;
- speedbutton8.Visible:=true;
- activetool:=ttellipse;
-
- end;
-
-
- procedure TForm1.SpeedButton4Click(Sender: TObject);
- begin
- label1.Visible:=true;
- speedbutton9.Visible:=false;
- speedbutton8.Visible:=true;
- activetool:=ttrect;
-
- end;
-
-
- procedure TForm1.SpeedButton6Click(Sender: TObject);
- begin
- label1.Visible:=true;
- speedbutton9.Visible:=false;
- speedbutton8.Visible:=true;
- activetool:=ttroundrect;
-
- end;
-
-
- procedure TForm1.N2Click(Sender: TObject);
- var
- Bitmap: TBitmap;
- begin
- Bitmap := nil;
- try
-
- Bitmap.Width := 800;
- Bitmap.Height := 800;
- Image1.Picture.Graphic := Bitmap;
- finally
- Bitmap.Free;
- end;
- end;
-
-
- procedure TForm1.SpeedButton8Click(Sender: TObject);
- begin
- if colordialog1.Execute then
- image1.Canvas.Pen.Color:=colordialog1.Color;
- speedbutton8.Glyph:=tbitmap.create;
- speedbutton8.Glyph.Width:=speedbutton8.Width;
- speedbutton8.Glyph.Height:=speedbutton8.Height;
- speedbutton8.Glyph.Canvas.Brush.Color:=colordialog1.Color;
- speedbutton8.Caption:='';
- speedbutton8.Glyph.Canvas.Rectangle(2,2,speedbutton8.Width-6,speedbutton8.Height-6);
- end;
-
-
- procedure TForm1.SpeedButton7Click(Sender: TObject);
- begin
- label1.Visible:=true;
- speedbutton9.Visible:=false;
- speedbutton8.Visible:=true;
- activetool:=ttspray;
- end;
-
- end.
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 8 июня 2010, 15:57
Оценка за ответ: 4
Комментарий к оценке: Спасибо, почти все понятно))))
|
Мини-форум вопроса
Всего сообщений: 10; последнее сообщение — 8 июня 2010, 22:34; участников в обсуждении: 2.
|
min@y™ (статус: Доктор наук), 8 июня 2010, 16:25 [#1]:
А чо 4?
Я что-то неправильно написал?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
IlluminatI (статус: 2-ой класс), 8 июня 2010, 20:01 [#2]:
to min@y™:
Bitmap := TBitmap.Create; // неправильный подход, возможны утечки памяти
а какой правильный? просто интересно стало. всегда так создавал битмапы о_О
|
|
min@y™ (статус: Доктор наук), 8 июня 2010, 20:36 [#3]:
Цитата (IlluminatI):
а какой правильный? просто интересно стало. всегда так создавал битмапы о_О
Правильно так:
MyClass:= TMyClass.Create(...);
try
// Работа с экземпляром
finally
MyClass.Free(); // Или FreeAndNil(MyClass);
end;
Надо объяснять, почему или сам догадаешься?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
IlluminatI (статус: 2-ой класс), 8 июня 2010, 20:42 [#4]:
Внутри try нельзя создавать?
|
|
min@y™ (статус: Доктор наук), 8 июня 2010, 20:46 [#5]:
Цитата (IlluminatI):
Внутри try нельзя создавать?
Не советую.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
IlluminatI (статус: 2-ой класс), 8 июня 2010, 20:47 [#6]:
Почему? Объясни
|
|
min@y™ (статус: Доктор наук), 8 июня 2010, 20:56 [#7]:
Цитата (IlluminatI):
Почему? Объясни
Вот тебе ссылка. Пройди тест и посмотри потом на результаты и трактовку правильных ответов. Обрати внимание на 5-й вопрос.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
IlluminatI (статус: 2-ой класс), 8 июня 2010, 21:13 [#8]:
Спасибо. Хорошая вещь
|
|
min@y™ (статус: Доктор наук), 8 июня 2010, 21:42 [#9]:
Цитата (IlluminatI):
Спасибо. Хорошая вещь
min@y™ никогда гамна не посоветует. Ему просто лень гнать порожняк, поверь!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
IlluminatI (статус: 2-ой класс), 8 июня 2010, 22:34 [#10]:
Поверю =)
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|