首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

fsAlwaysontop,setwindowpos(.hwnd_topmost) 均无成效

2013-06-26 
fsAlwaysontop,setwindowpos(...hwnd_topmost) 均无效果将窗口的formstyle属性设置为fsAlwaysontop,无法将

fsAlwaysontop,setwindowpos(...hwnd_topmost) 均无效果
将窗口的formstyle属性设置为fsAlwaysontop,无法将窗口置顶
用setwindowpaos api也不行

有谁遇到过这种情况?

[解决办法]
你建个新程序, 设formstyle 为 fsAlwaysontop试试
[解决办法]
重写CreateParams怎样?


procedure CreateParams(var params: TCreateParams); override;

procedure TForm1.CreateParams(var params: TCreateParams);
begin
  inherited;
  params.ExStyle:=  params.ExStyle or WS_EX_TOPMOST;
end;

[解决办法]
如果是在游戏开启的全屏下可能不行。


function BringWindowToTopEx(hWnd: HWND): Boolean;
begin
  if IsIconic(hWnd) then //最小化
    ShowWindow(hWnd, SW_RESTORE);
  if GetForegroundWindow <> hWnd then
    SetForegroundWindow(hWnd);//enabled
    //BringWindowToTop(hWnd);//not enabled
    //ForceForegroundWindow(hWnd);//enabled
    {SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
    SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);//enabled}
    //SwitchToThisWindow(hWnd, True);//enabled
  Result := GetForegroundWindow = hWnd;
end;

function BringWindowToTopMost(hWnd: HWND; bTopMost: Boolean): Boolean;
begin
  if IsIconic(hWnd) then //最小化
    ShowWindow(hWnd, SW_RESTORE);
  if bTopMost then
    SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE)
  else
    SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
end;

function BringWindowToTopXY(hWnd: HWND; X, Y: Integer;
  hWndInsertAfter: HWND): Boolean;
begin
  Result := BringWindowToTopEx(hWnd);
  Result := SetWindowPos(hWnd, hWndInsertAfter, X, Y, 0, 0, SWP_NOSIZE)
    and Result;
end;

热点排行