问题描述如下:比如多组checkbox,类似
1 2 3
4 5 6
7 8 9
这样排列鼠标拖动时,能出现个方框
框中哪些checkbox时,其状态会checkbox.checked=not checkbox.checked跟开发时按住CTRL拖选控件一样的意思
1 2 3
4 5 6
7 8 9
这样排列鼠标拖动时,能出现个方框
框中哪些checkbox时,其状态会checkbox.checked=not checkbox.checked跟开发时按住CTRL拖选控件一样的意思
解决方案 »
- BDS2006和D7哪个版本好?
- 简单问题:日期变量声明
- xp下用delphi写的COM+,将msi安装到win2000+sp4 系统下出错!!!!
- 怎样实现"每月一日零点,统计上个月的数据生成文本文件,保存到指定的目录里,同时将文本文件发送个指定的EMail中"?
- 能不能给一个adostoredproc的例子,最好是输入输出参数都有的?
- 强烈要求与新加坡断交,外交绥靖路线可以休矣
- 那有D7下可用的像金山词霸每日一贴那样的控件
- 一主表二个从表并列问题
- 求解答:THemisphereButton、TDLPortIO、TApdComPort
- 应收帐冲销问题,请进。当天结贴
- 进销存设计问题
- 下班了,放松一下
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
CheckBox4: TCheckBox;
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
x1,y1,x2,y2:Integer; procedure SetCheck;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.SetCheck;
var
i:Integer;
begin
for i := 0 to Self.ComponentCount - 1 do
begin
if Self.Components[i] is TCheckBox then
begin
if (TCheckBox(Self.Components[i]).Left >x1) and (TCheckBox(Self.Components[i]).Left<x2) and (TCheckBox(Self.Components[i]).Top>y1) and (TCheckBox(Self.Components[i]).Top<y2) then
TCheckBox(Self.Components[i]).Checked := True;
end;
end;
end;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
x1 := X;
y1 := Y;
end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
x2 := X;
y2 := Y;
SetCheck;
end;end.这里是在由左到右的拖动鼠标,如果由右到左的话,只需要做一点处理即可
panel不支持Canvas.DrawFocusRect吗?fDrag: Boolean;
fRect: TRect;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
begin
fDrag:= True;
SetCapture (Handle);
fRect.Left := X;
fRect.Top := Y;
fRect.BottomRight := fRect.TopLeft;
Canvas.DrawFocusRect (fRect);
end;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if fDrag then
begin
Canvas.DrawFocusRect (fRect);
fRect.Right := X;
fRect.Bottom := Y;
Canvas.DrawFocusRect (fRect);
end;
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if fDrag then
begin
ReleaseCapture;
fDrag := False;
Invalidate;
end;
end;有个类似的但画出来的是在form上 不是在panel里
本人愚笨 请高手解答 谢谢