我要把当在界面上按下鼠标左键(mousedown)直到鼠标左键松开(mouseup)这部分选中的矩形区域用虚线(或者实线)括起来,就向我们在桌面上按下鼠标左键一样,这种效果应该如何实现呀,如果知情,多谢指导。
解决方案 »
- 如何实现鼠标处气泡显示屏幕坐标?
- 在线等待 ,我用delphi7写程序,要用sql 随机抽取表a中按字段zd降序排列的前30条记录中的任意十条记录,请问如何写sql语句?
- [求助]我想在StringGrid自带的ScrollBar改变时处理一些事情
- 怎么结帖?
- 哪儿有免费的MSDN中文版下载?
- 有人听说过友劲吗
- 如何在DBGrid中完成分页显示?
- 怎样改变引用参数为字符串数组的值?
- 全国各地搞软件销售的底薪是什么水平?在没有业绩的情况下,怎么维持基本生活,了解的,麻烦说两句
- Delphi与C++哪一种好?
- 谁有Tadvstringgrid控件使用例子发一份给我,收到即刻给分!
- ??这个问题很奇怪?用BeginTread开始的线程,不能用操作其中的堆内存??我怎么才能里面线程中的数据传出来?
就可以得到最后画的框了
用这个
Canvas.FillRect(Canvas.ClipRect);
清除原来画的矩形
还有就是Canvas.FillRect(Canvas.ClipRect)实现不了。GetCursorPos该怎么用呢?
我用着好好的啊
在你onmousedown的事件里调用的,把以前的清掉
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;type
TForm1 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}var
oldx,oldy,ox,oy:word;
started:boolean;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
oldx:=x;
oldy:=y;
ox:=x;
oy:=y;
started:=true;
end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if started then
begin
form1.Canvas.Brush.Style:=bsclear;
form1.Canvas.Rectangle(ox,oy,x,y);
form1.Canvas.Rectangle(ox,oy,oldx,oldy);
oldx:=x;
oldy:=y;
end;
end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
started:=false;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
form1.Canvas.Pen.Mode:=pmNot;
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;type
TForm1 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}var
ox,oy,oldx,oldy:integer;
started:boolean;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ox:=x;
oy:=y;
oldx:=x;
oldy:=y;
started:=true;
end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if started then
begin
drawFocusRect(getdc(form1.Handle),rect(ox,oy,x,y));
drawFocusRect(getdc(form1.Handle),rect(ox,oy,oldx,oldy));
oldx:=x;
oldy:=y;
end;
end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
started:=false;
end;end.
CLientDC dc(this);
dc.SetROP2(R2_NOT);
反色就实现画橡皮筋了。不过在delphi中的思路是一样的,当每次mousemove时,将原来画的线再用反色覆盖,然后画新的
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;type
TForm1 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}var
ox,oy,oldx,oldy:integer;
started:boolean;
oldRect:TRect;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ox:=x;
oy:=y;
oldx:=x;
oldy:=y;
started:=true; drawFocusRect(getdc(form1.Handle),oldrect); oldrect.Left:=x;
oldRect.Top:=y;
end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if started then
begin
drawFocusRect(getdc(form1.Handle),rect(ox,oy,x,y));
oldRect.Right:=x;
oldRect.Bottom:=y;
drawFocusRect(getdc(form1.Handle),rect(ox,oy,oldx,oldy));
oldx:=x;
oldy:=y;
end;
end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
started:=false;
end;end.