菜鸟问题,帮帮忙

leek2000 2002-07-25 09:45:58
比如说,一个Panel上面有100个shape,
怎么能判断在那一个shape被鼠标点中了,并且返回他的名称。需要在那里加程序
请给出相关代码,谢谢。
...全文
38 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sleeepboy 2002-07-25
  • 打赏
  • 举报
回复
楼上的办法不错!
我怎么没想到
leek2000 2002-07-25
  • 打赏
  • 举报
回复
谢谢zswang(伴水)(努力工作中)
马上结帐
王集鹄 2002-07-25
  • 打赏
  • 举报
回复
//.....
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
FMouseDown: Boolean;
FOldPoint: TPoint;
procedure ShapeMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ShapeMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ShapeMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
I: Integer;
begin
for I := 0 to ComponentCount - 1 do
if Components[I] is TShape then begin
TShape(Components[I]).Cursor := crSizeAll;
TShape(Components[I]).OnMouseDown := ShapeMouseDown;
TShape(Components[I]).OnMouseMove := ShapeMouseMove;
TShape(Components[I]).OnMouseUp := ShapeMouseUp;
end;
end;

procedure TForm1.ShapeMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
FMouseDown := Button = mbLeft;
FOldPoint := Point(X, Y);
Caption := TComponent(Sender).Name;
end;

procedure TForm1.ShapeMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
FMouseDown := False;
end;

procedure TForm1.ShapeMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if not FMouseDown then Exit;
TControl(Sender).Left := TControl(Sender).Left + (X - FOldPoint.X);
TControl(Sender).Top := TControl(Sender).Top + (Y - FOldPoint.Y);
end;

//.....
sleeepboy 2002-07-25
  • 打赏
  • 举报
回复
楼上两位说的 只能在每个Shape的事件中处理
所以 还是建议派生一个子类
leek2000 2002-07-25
  • 打赏
  • 举报
回复
很难么?
sleeepboy 2002-07-25
  • 打赏
  • 举报
回复
这个不行 只能返回类名TShape
我建议从TShape派生一个自己的子类
yc_hjh 2002-07-25
  • 打赏
  • 举报
回复
procedure TForm1.Shape3MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (Sender is TShape) then
showmessage((Sender as TShape).Name);
end;
Black 2002-07-25
  • 打赏
  • 举报
回复
tshape(sender).Name返回他的名称
Black 2002-07-25
  • 打赏
  • 举报
回复
tshape(sender).Name返回他的名称
  • 打赏
  • 举报
回复
有一个Sender参数
(Sender as TCompoment).ClassName

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧