Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.25;
Скачать: CL | DM;

Вниз

Сделать выделение прямоугольника мышью   Найти похожие ветки 

 
AlexeyT ©   (2006-06-07 18:18) [0]

Hello All,

Хочу сделать на компоненте выделение прямоугольной области мышью.
Соотв-но, нужно иметь реакцию на: 1. нажатие мыши - начать выделение, 2. перетаскивание, 3. отпускание мыши - конец выделения.

Какие события нужно для этого (для пунктов 1-3) перехватить?
OnClick не подходит, OnBeginDrag тоже...


 
Некий житель, Ваш сосед   (2006-06-07 18:48) [1]

1) OnMouseDown
2) OnMouseMove
3) OnMouseUp


 
AlexanderMS ©   (2006-06-07 18:52) [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.


 
AlexeyT ©   (2006-06-07 19:35) [3]

Спасибо.



Страницы: 1 вся ветка

Текущий архив: 2006.06.25;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.047 c
2-1149362980
barzini
2006-06-03 23:29
2006.06.25
Дипломная. БД. Хелп.


15-1149048331
tsa
2006-05-31 08:05
2006.06.25
31 Мая - День без табака!


3-1146076512
makvell
2006-04-26 22:35
2006.06.25
Исключения


15-1149056419
Piero
2006-05-31 10:20
2006.06.25
обновление программы


1-1147839082
WhiteGuy
2006-05-17 08:11
2006.06.25
Telnet