Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.023 c
2-1149674285
Fiallo4ka
2006-06-07 13:58
2006.06.25
глупый вопрос


6-1139695044
Yeg
2006-02-12 00:57
2006.06.25
Изменения в ICQ-протоколе...


15-1148984742
Nic
2006-05-30 14:25
2006.06.25
Курсовик по VBA ...


2-1149278751
Vitv
2006-06-03 00:05
2006.06.25
Ошибка при создании потока!!


15-1149167898
Der Nechk@ssoff
2006-06-01 17:18
2006.06.25
Button




   Наверх