不用form的属性,通过api能不能使窗体永远在最前面?

lk2000 2003-08-09 02:49:25
nil
...全文
24 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
王集鹄 2003-08-10
  • 打赏
  • 举报
回复
procedure TCustomForm.CreateWnd;
var
ClientCreateStruct: TClientCreateStruct;
begin
inherited CreateWnd;
if NewStyleControls then
if BorderStyle <> bsDialog then
SendMessage(Handle, WM_SETICON, 1, GetIconHandle) else
SendMessage(Handle, WM_SETICON, 1, 0);
if not (csDesigning in ComponentState) then
case FormStyle of
fsMDIForm:
begin
with ClientCreateStruct do
begin
idFirstChild := $FF00;
hWindowMenu := 0;
if FWindowMenu <> nil then hWindowMenu := FWindowMenu.Handle;
end;
FClientHandle := Windows.CreateWindowEx(WS_EX_CLIENTEDGE, 'MDICLIENT',
nil, WS_CHILD or WS_VISIBLE or WS_GROUP or WS_TABSTOP or
WS_CLIPCHILDREN or WS_HSCROLL or WS_VSCROLL or WS_CLIPSIBLINGS or
MDIS_ALLCHILDSTYLES, 0, 0, ClientWidth, ClientHeight, Handle, 0,
HInstance, @ClientCreateStruct);
FClientInstance := Classes.MakeObjectInstance(ClientWndProc);
FDefClientProc := Pointer(GetWindowLong(FClientHandle, GWL_WNDPROC));
SetWindowLong(FClientHandle, GWL_WNDPROC, Longint(FClientInstance));
end;
////////////////////////////////////
fsStayOnTop:
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or
SWP_NOSIZE or SWP_NOACTIVATE);
//////////////////////////////////// VCL里就是这样的,如果设置FormStyle都不行那就是其他问题了~~
end;
end;
cxz7531 2003-08-09
  • 打赏
  • 举报
回复
SetForegroundWindow(Hwnd); 把窗口放在最前面,是不是永远在最前面?你试一试
lk2000 2003-08-09
  • 打赏
  • 举报
回复
我用 SetWindowPos(Handle, HWND_TOPMOST,
Left, Top, Width, Height,
SWP_NOZORDER + SWP_NOMOVE + SWP_NOSIZE );
居然都不行
郁闷啊
lk2000 2003-08-09
  • 打赏
  • 举报
回复
真没人知道?
lk2000 2003-08-09
  • 打赏
  • 举报
回复
测试了,不行
cgh93829 2003-08-09
  • 打赏
  • 举报
回复
SetWindowLong(Handle,SW_TOPMOST);

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧