运行-光标位置的时间分量

Run-time Component at cursor position

我在网络上的任何地方都找不到答案。尝试了 Google 和许多其他方法。

在Delphi7中如何在光标位置创建一个运行时间组件?

我尝试了一个简单的代码:

procedure TForm1.TButton1Click(Sender: TObject);
var NewCheckBox: TCheckBox;
MB: TMouseButton;
CPos: TPoint;
begin
  GetCursorPos(CPos);
  NewCheckBox:=TCheckBox.Create(Self);
  NewCheckBox.Parent:=Form1;
  NewCheckBox.Caption:='NewCheckBox';
  NewCheckBox.Left:=CPos.X;
  NewCheckBox.Top:=CPos.Y;
end;

但这行不通。这些组件不出现在光标处,我无法将它们放在任何我想要的地方。代码放置组件就像我单击按钮一样,而不是当我单击要放置它的表单时。我想为即将创建的组件创建一个视觉效果,并将其从工具栏上的按钮一直拖到窗体。

我试过拖放但没有任何效果,拖放过程总是向我显示一个拒绝标志并且什么都不做。

当您右键单击表单时,下面的代码将创建您的复选框。它可以做一些改进,例如处理添加多个复选框等,但可能会帮助您朝着正确的方向前进。

procedure TForm1.CreateCheckBox(X, Y : Integer);
begin
  // NewCheckBox is a Form variable
  NewCheckBox:=TCheckBox.Create(Self);
  NewCheckBox.Parent:=Form1;
  NewCheckBox.Caption:='NewCheckBox';
  NewCheckBox.Left:= X;
  NewCheckBox.Top:= Y;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift:
    TShiftState; X, Y: Integer);
begin
   if Button = mbRight then
     if NewCheckbox = Nil then
       CreateCheckBox(X, Y);
end;

顺便说一句,当您在表单上使用拖放时,获得输入符号意味着您还没有为将 Accept 参数设置为 True 的表单设置 OnDragOver 事件。