试着copy部分TForm中的CreateParams方法代码没试成功

解决方案 »

  1.   

    有意思,为什么要这样子弄呢。。可不可以参考Application.MessageBox的代码。。
      

  2.   

    如果想研究,最好看一下Windows编程。
    因为这是基本知识,CreateParams中把WS_CHILD去掉。http://blog.csdn.net/linzhengqun
      

  3.   

    看看  frame 的 CreateParams 过程
    procedure TCustomFrame.CreateParams(var Params: TCreateParams);
    begin
      inherited;
      if Parent = nil then
        Params.WndParent := Application.Handle;
    end;
      

  4.   

    parent是一定要指定的,不过有些时候指定的是desktop
      

  5.   


    type
      TTest = class(TWinControl)
      protected
        procedure CreateParams(var Params: TCreateParams); override;
      end;{ TTest }procedure TTest.CreateParams(var Params: TCreateParams);
    begin
      inherited;
      with Params do
      begin
        if (Parent = nil) and (ParentWindow = 0) then
        begin
          WndParent := Application.Handle;
          Style := Style and not (WS_CHILD or WS_GROUP or WS_TABSTOP);
        end;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      aa: TTest;
    begin
      aa := TTest.Create(self);
      aa.HandleNeeded;
      aa.SetBounds(0, 0, 200, 200);
      aa.Show;
    end;
    我试了啊,可是没效果
      

  6.   

    再强调一次,如果想研究,学Windows编程,否则你会被引入岐途的:type
      TMyWindow = class(TWinControl)
      protected
        procedure CreateParams(var Params: TCreateParams); override;
      end;{ TMyWindow }procedure TMyWindow.CreateParams(var Params: TCreateParams);
    begin
      inherited;
      Params.Style := WS_POPUP or WS_BORDER or WS_OVERLAPPEDWINDOW;
    end;function ShowYourWindow: TMyWindow;
    begin
      Result := TMyWindow.Create(nil);
      Result.Width := 200;
      Result.Height := 200;
      ShowWindow(Result.Handle, SW_SHOWNORMAL);
    end;