小弟想写一个显示天气预报、时间、新闻滚动条、邮件信息、博客信息等等在一起的程序,希望能像系统任务栏一样永远占据屏幕的顶端或者左端或者右端的一部分,而且即使其他窗体最大化,也无法占据它的位置。可以实现么?

解决方案 »

  1.   

    這個問題不難,真的不難,而且非常簡單,簡單到你根本不相信自己查 SystemParametersInfo() 有關桌面操作的函數先,這裡賣個關子,因為授人以魚不如授人與漁。
      

  2.   

    var
      Rect: TRect;
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      SystemParametersInfo(SPI_GETWORKAREA, 0, @Rect, 0);
      Rect.Top := 100;
      SystemParametersInfo(SPI_SETWORKAREA, 0, @Rect, 0);
      Left := 0;
      Top := 0;
      Height := 100;
      Width := Screen.Width;
      FormStyle := fsStayOnTop;
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      Rect.Top := 0;
      SystemParametersInfo(SPI_SETWORKAREA, 0, @Rect, 0);
    end;
      

  3.   

    重载Createparams,改变窗体风格,设置父句柄为桌面,代码大概如下:private 
       procedure Createparams(var params: TCreateParams);override;
    procedure TForm1.Createparams(var params: TCreateParams);
    begin
      inherited CreateParams(Params);
      with params do
      begin
        Style:=WS_POPUP;
        ExStyle :=  WS_EX_TOOLWINDOW or WS_EX_TOPMOST or WS_EX_NOACTIVATE or WS_EX_WINDOWEDGE;
        WndParent := GetWindow(FindWindow('Progman', nil), GW_CHILD);
      end;
    end;
      

  4.   

    http://support.microsoft.com/kb/134206