简体   繁体   中英

Run-time Component at cursor position

I couldn't find the answer anywhere on the web. Tried Google and many others.

In Delphi 7 how to create a run-time component at cursor position?

I tried a simple code:

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;

But this doesn't work right. The components appear not at the cursor and I cannot place them wherever I want. The code places the component just as I click the button not when I click on the form where I want it to be placed. I want to create a visual of the component that is about to be created and drag it all the way to the form from the button on a toolbar.

I tried Drag-And-Drop but nothing works then, the Drop procedure always shows me a deny sign and does nothing.

The code below will create your checkbox when you right-click on the form. It could do with a bit of refinement, eg to handle adding multiple checkboxes, etc, but might help you get going in the right direction.

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;

Btw, when you use drag & drop on your form, getting the entry sign means that you have not set up an OnDragOver event for the form which sets the Accept parameter to True.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM