![]() |
![]() ![]() ![]() ![]() |
|
Пример реализации резиновой нитиDelphi , Графика и Игры , Графика
unit Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, ComCtrls;
type
TMainForm = class(TForm)
ColorDlg: TColorDialog;
StatusBar: TStatusBar;
Timer: TTimer;
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure TimerTimer(Sender: TObject);
private
MouseRect: TRect;
IsDown: Boolean;
RectColor: TColor;
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
{$R *.DFM}
procedure TMainForm.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
with MouseRect do
begin
IsDown := True;
Left := X;
Top := Y;
Right := X;
Bottom := Y;
Canvas.Pen.Color := RectColor;
end;
if (Button = mbRight) and ColorDlg.Execute
then RectColor := ColorDlg.Color;
end;
procedure TMainForm.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
IsDown := False;
Canvas.Pen.Color := Color;
with MouseRect do
Canvas.Polyline([Point(Left, Top), Point(Right, Top), Point(Right, Bottom),
Point(Left, Bottom), Point(Left, Top)]);
with StatusBar do
begin
Panels[4].Text := '';
Panels[5].Text := '';
end;
end;
procedure TMainForm.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
with StatusBar do
begin
Panels[2].Text := 'X: ' + IntToStr(X);
Panels[3].Text := 'Y: ' + IntToStr(Y);
end;
if not IsDown then Exit;
Canvas.Pen.Color := Color;
with mouserect do
begin
Canvas.Polyline([Point(Left, Top), Point(Right, Top), Point(Right, Bottom),
Point(Left, Bottom), Point(Left, Top)]);
Right := X;
Bottom := Y;
Canvas.Pen.Color := RectColor;
Canvas.Polyline([Point(Left, Top), Point(Right, Top), Point(Right, Bottom),
Point(Left, Bottom), Point(Left, Top)]);
end;
with StatusBar do
begin
Panels[4].Text := 'Ширина: ' + IntToStr(Abs(MouseRect.Right - MouseRect.Left));
Panels[5].Text := 'Высота: ' + IntToStr(Abs(MouseRect.Bottom - MouseRect.Top));
end;
end;
procedure TMainForm.TimerTimer(Sender: TObject);
begin
with StatusBar do
begin
Panels[0].Text := 'Дата: ' + DateToStr(Now);
Panels[1].Text := 'Время: ' + TimeToStr(Now);
end;
end;
end.
Скачать весь проект
Эта проект Delphi демонстрирует реализацию эффекта "rubber banding", также известного как инструмент "lasso" или "rubber band". Программа позволяет пользователю нарисовать прямоугольник на форме, кликнув и перетаскивая мышь. Вот разбивка кода: Основная форма
Основная форма определена как Процедуры событий В этой форме определены четыре процедуры событий:
Имплементация Секция реализации содержит код для каждой процедуры событий. Код относительно прост, но есть несколько заметных точек:
Заключение
Этот проект демонстрирует основной эффект "rubber banding" в Delphi, позволяя пользователям рисовать прямоугольники на форме, кликнув и перетаскивая мышь. Код относительно прост, но он демонстрирует некоторые общепринятые техники, используемые в программировании графики, такие как использование метода Пример реализации программы на языке Delphi, которая позволяет рисовать резиновую нить на форме при помощи левого и правого кликов мыши. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 | ||||