![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сделать выделение прямоугольника мышью
AlexeyT © (2006-06-07 18:18:00)Hello All,
Хочу сделать на компоненте выделение прямоугольной области мышью.
Соотв-но, нужно иметь реакцию на: 1. нажатие мыши - начать выделение, 2. перетаскивание, 3. отпускание мыши - конец выделения.
Какие события нужно для этого (для пунктов 1-3) перехватить?
OnClick не подходит, OnBeginDrag тоже...
AlexeyT (2006-06-07 19:35:00) [1]Спасибо.
AlexanderMS (2006-06-07 18:52:00) [2]Что-то наподобие:
unit MainUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm1 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
OldPenMode:TPenMode;
StartX, StartY, OldX, OldY:Integer;
dragging:Boolean;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
dragging:=false;
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Canvas.Brush.Color:=clWhite;
OldPenMode:=Canvas.Pen.Mode;
Canvas.Pen.Mode:=pmNotXor;
StartX:=X;
StartY:=Y;
OldX:=X;
OldY:=Y;
dragging:=true;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if dragging=false then exit;
Canvas.Rectangle(StartX, StartY, OldX, OldY);
Canvas.Rectangle(StartX, StartY, X, Y);
OldX:=X;
OldY:=Y;
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
dragging:=false;
Canvas.Pen.Mode:=OldPenMode;
Canvas.Rectangle(StartX, StartY, X, Y);
end;
end.
Некий житель, Ваш сосед (2006-06-07 18:48:00) [3]1) OnMouseDown
2) OnMouseMove
3) OnMouseUp