Label,Panel,Button,SpeedButton.在这些组件下如何用鼠标进行拖拉操作,并且可以显示出被选中组件的状态。最好给出源代码。我是初学者,希望各位大虾说详细点。谢谢了!

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        ListBox1: TListBox;
        procedure Edit1MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
          State: TDragState; var Accept: Boolean);
        procedure ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Edit1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if Button=mbLeft then
        TEdit(Sender).BeginDrag(False,10);
    end;procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
      if Source=Edit1 then
        begin
          Accept:=true;
          Edit1.DragCursor:=crHandPoint;
        end;
    end;procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
    begin
      if (Source=Edit1) and (Sender=ListBox1) then
        ListBox1.Items.Add(Edit1.Text);
    end;end.
      

  2.   

    procedure ShiftStation(Control: TControl; Shift: TShiftState; X, Y, Precision: integer);
    var
      SC_MANIPULATE: Word;
      ShiftStationPos: integer;
      StationBeginPos: integer;
    begin
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      //光标在控件的最左侧*******************************************************
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      if (X<=Precision) and (Y>Precision) and (Y<Control.Height-Precision) then
      begin
        SC_MANIPULATE := $F001;
        Control.Cursor := crSizeWE;
      end
        //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        //光标在控件的最右侧*****************************************************
        //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      else
      if (X>=Control.Width-Precision) and (Y>Precision) and (Y<Control.Height-Precision) then
      begin
        SC_MANIPULATE := $F002;
        Control.Cursor := crSizeWE;
      end
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      //光标在控件的最上侧*******************************************************
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      else
      if (X>Precision) and (X<Control.Width-Precision) and (Y<=Precision) then
      begin
        SC_MANIPULATE := $F003;
        Control.Cursor := crSizeNS;
      end
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      //光标在控件的左上角*******************************************************
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      else
      if (X<=Precision) and (Y<=Precision) then
      begin
        SC_MANIPULATE := $F004;
        Control.Cursor := crSizeNWSE;
      end
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      //光标在控件的右上角*******************************************************
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      else
      if (X>=Control.Width-Precision) and (Y<=Precision) then
      begin
        SC_MANIPULATE := $F005;
        Control.Cursor := crSizeNESW ;
      end
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      //光标在控件的最下侧*******************************************************
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      else
      if (X>Precision) and (X<Control.Width-Precision) and (Y>=Control.Height-Precision) then
      begin
        SC_MANIPULATE := $F006;
        Control.Cursor := crSizeNS;
      end
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      //光标在控件的左下角*******************************************************
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      else
      if (X<=Precision) and (Y>=Control.Height-Precision) then
      begin
        SC_MANIPULATE := $F007;
        Control.Cursor := crSizeNESW;
      end
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      //光标在控件的右下角*******************************************************
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      else
      if (X>=Control.Width-Precision) and (Y>=Control.Height-Precision) then
      begin
        SC_MANIPULATE := $F008;
        Control.Cursor := crSizeNWSE;
      end
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      //光标在控件的客户区(移动整个控件)***************************************
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      else
      if (X > 5) and (Y > 5) and (X < Control.Width - 5) and (Y < Control.Height - 5) then
      begin
        SC_MANIPULATE := $F009;
        Control.Cursor := crSizeAll;
      end
      else
      begin
        SC_MANIPULATE := $F000;
        Control.Cursor := crDefault;
      end;
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      if Shift = [ssLeft] then
      begin
        ReleaseCapture;
        Control.Perform(WM_SYSCOMMAND, SC_MANIPULATE, 0);
      end;
    end;在控件的mousemove事件中调用上面过程
    Procedure TMainFormF.StationMouseMove(Sender: TObject; Shift: TShiftState;
      X, Y: Integer);
    begin
        ShiftStation((Sender as TControl), Shift, X, Y, 10);
    end;
    其中的奥秘自己慢慢体会吧,可以托动控件,可以改变控件得大小
    对有些控件可能不管用
      

  3.   

    d6f9b(patriot)所说的功能不是我想要的。
    我的意思是说,现在有几个Button按钮在窗体上,我用鼠标通过拉出个矩形框选择几个按钮,
    比方说现在有五个按钮,我只想选中其中三个按钮,然后可以通过程序只对这几个我选择的按钮进行操作。总之非常感谢以上的两位朋友。只有100分。那就三七开吧。