鼠标按住后拖动StringGrid

本文介绍了一种使用Delphi实现的表格控件操作方法,包括表格的初始化、鼠标事件处理及滚动条位置调整等。通过自定义表格控件的行为,如响应Ctrl键进行拖动选择、调整水平和垂直滚动条的位置,使表格具备更灵活的交互能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

var
  flag: Boolean;
  x1,y1: Integer;

{初始化测试数据}
procedure TForm1.FormCreate(Sender: TObject);
var
  i,j: Integer;
begin
  StringGrid1.ColCount := 100;
  StringGrid1.RowCount := 100;
  StringGrid1.Align := alClient;
  for i := 0 to StringGrid1.ColCount - 1 do
    for j := 0 to StringGrid1.RowCount - 1 do
      StringGrid1.Cells[i,j] := IntToStr(i*j);
end;

procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if not(ssCtrl in Shift) then Exit; {假如是按住 Ctrl 才能拖动}
  flag := True;
  x1 := X;
  y1 := Y;
  StringGrid1.Options := StringGrid1.Options - [goRangeSelect];
end;procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);var px,py: Integer;begin if not flag then Exit; //if not(ssCtrl in Shift) then Exit; px := GetScrollPos(StringGrid1.Handle, SB_HORZ); py := GetScrollPos(StringGrid1.Handle, SB_VERT); px := px - (X - x1); py := py - (Y - y1); StringGrid1.Perform(WM_HSCROLL, px shl 16 or SB_THUMBPOSITION, 0); StringGrid1.Perform(WM_VSCROLL, py shl 16 or SB_THUMBPOSITION, 0); x1 := X; y1 := Y;end;procedure TForm1.StringGrid1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin flag := False;
  StringGrid1.Options := StringGrid1.Options + [goRangeSelect];
end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值