光标位置的运行时组件

时间:2017-03-10 14:55:15

标签: delphi runtime components delphi-7

我无法在网络上的任何地方找到答案。试过谷歌和其他许多人。

在Delphi 7中如何在光标位置创建运行时组件?

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

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;

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

我尝试拖拽然后没有任何作用,Drop程序总是向我显示一个拒绝的标志并且什么都不做。

1 个答案:

答案 0 :(得分:2)

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

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;

顺便说一句,当你使用拖动和放大器时放弃表单,获取输入标志意味着您尚未为表单设置OnDragOver事件,该表单将Accept参数设置为True。