Вниз
Скачать: 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.025 c
15-1148853316
vidiv
2006-05-29 01:55
2006.06.25
Знатокам Kylix


15-1149084945
Palladin
2006-05-31 18:15
2006.06.25
Delphi10 который Lite


15-1149121986
dancer
2006-06-01 04:33
2006.06.25
PHP: выборка из массива


4-1143474014
ZeBriD
2006-03-27 19:40
2006.06.25
Перехват содержимого TMemo другой программы


15-1149145793
vecna
2006-06-01 11:09
2006.06.25
Темы XP, опять все не слава богу =(




   Наверх