Parent为包含该控件的父控件,这不是OOP的思想,是‘MS的MDI思想’

解决方案 »

  1.   

    unit Unit10;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Panel1: TPanel;
        Panel2: TPanel;
        procedure Button1Click(Sender: TObject);
        procedure Panel1Click(Sender: TObject);
        procedure Panel2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
       Button1.Parent := Panel1;
       Button1.SetBounds(0, 0, Button1.Width, Button1.Height);
    end;procedure TForm1.Panel1Click(Sender: TObject);
    begin
       Button1.Parent := Panel1;
       Button1.SetBounds(0, 0, Button1.Width, Button1.Height);
    end;procedure TForm1.Panel2Click(Sender: TObject);
    begin
       Button1.Parent := Panel2;
       Button1.SetBounds(0, 0, Button1.Width, Button1.Height);
    end;end.
    这个不是OOP的东西,windows的东西
    当设置Parent时,会导致delphi调用DestroyHandle,
    接着调用CreateHandle,
    重建Button, 在CreateParams时,
      if Parent <> nil then
          WndParent := Parent.GetHandle
    取相应的Parent的Handle, 
    然后CreateWindowEx,
      

  2.   

    恐怕不能放到一个很大的按钮上,因为Parent必须是个容器,象:form,panel,groupbox……
      

  3.   

    >恐怕不能放到一个很大的按钮上,因为Parent必须是个容器,象:form,panel,groupboxThe fact is I put the buttons on a very large button!!!!