通过一个事件想令一个窗体为最上层窗体:
procedure TFlshClckFrm.StayOnTopPMClick(Sender: TObject);
begin
IF (Sender As TMenuItem).Checked Then
Begin
SetWindowPos(Self.Handle,HWND_TOPMOST,Self.Left,Self.Top,Self.Width,Self.Height,0)
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE or SWP_NOACTIVATE);
End
Else
Begin
SetWindowPos (Self.Handle,HWND_NoTOPMOST,Self.Left,Self.Top,Self.Width,Self.Height,SWP_SHOWWINDOW)
End;
end;
总不成功,只是本程序的最上层窗口;该窗体内的特殊处理事件有:
程序运行时:
begin
Application.Initialize;
SetAppFrmStyle_NoShowOnTaskBar(Application.Handle);
Application.ShowMainForm:=False;
Application.CreateForm(TDMFrm, DMFrm);
Application.CreateForm(TMyClockFrm, MyClockFrm);
FlshClckFrm:=TFlshClckFrm.Create(Application);
FlshClckFrm.Show;
Application.Title := 'Hu Sir''s Assistant!';
Application.Run;
end.SetAppFrmStyle_NoShowOnTaskBar(Application.Handle):处理过程为:
Procedure SetAppFrmStyle_NoShowOnTaskBar(Wnd:THandle);
Var
Style:DWord;
Begin
IF Wnd=0 Then Exit;
Style:=GetWindowLong(Wnd,GWL_EXSTYLE);
Style:=Style And Not WS_EX_APPWINDOW Or WS_EX_TOOLWINDOW;
SetWindowLong(Wnd,GWL_EXSTYLE,Style);
End;窗体FlshClckFrm的OnCreate
begin
Application.OnMessage:=PopMyMenuOnRightClick
Self.BorderStyle:=BsNone;
End;
在窗体TFlshClckFrm内截获所有消息处理:
procedure TFlshClckFrm.PopMyMenuOnRightClick(var Msg: TMsg;
Var Handled: Boolean);
Var
sTmp:String;
begin
IF (Msg.message=WM_RBUTTONDOWN) And (Msg.hwnd=MyFlashPlayer.Handle) Then
Begin
MainPM.Popup(Mouse.CursorPos.X,Mouse.CursorPos.Y);
Handled:=True;
End; If (Msg.message=WM_LBUTTONDOWN) And (Msg.hwnd=MyFlashPlayer.Handle) Then
Begin
SendMessage (self.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
Handled:=True;
End;
end;其他没有特殊的处理了
请教不能令窗体FlshClckFrm成为最上层窗体的原因是什么?
procedure TFlshClckFrm.StayOnTopPMClick(Sender: TObject);
begin
IF (Sender As TMenuItem).Checked Then
Begin
SetWindowPos(Self.Handle,HWND_TOPMOST,Self.Left,Self.Top,Self.Width,Self.Height,0)
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE or SWP_NOACTIVATE);
End
Else
Begin
SetWindowPos (Self.Handle,HWND_NoTOPMOST,Self.Left,Self.Top,Self.Width,Self.Height,SWP_SHOWWINDOW)
End;
end;
总不成功,只是本程序的最上层窗口;该窗体内的特殊处理事件有:
程序运行时:
begin
Application.Initialize;
SetAppFrmStyle_NoShowOnTaskBar(Application.Handle);
Application.ShowMainForm:=False;
Application.CreateForm(TDMFrm, DMFrm);
Application.CreateForm(TMyClockFrm, MyClockFrm);
FlshClckFrm:=TFlshClckFrm.Create(Application);
FlshClckFrm.Show;
Application.Title := 'Hu Sir''s Assistant!';
Application.Run;
end.SetAppFrmStyle_NoShowOnTaskBar(Application.Handle):处理过程为:
Procedure SetAppFrmStyle_NoShowOnTaskBar(Wnd:THandle);
Var
Style:DWord;
Begin
IF Wnd=0 Then Exit;
Style:=GetWindowLong(Wnd,GWL_EXSTYLE);
Style:=Style And Not WS_EX_APPWINDOW Or WS_EX_TOOLWINDOW;
SetWindowLong(Wnd,GWL_EXSTYLE,Style);
End;窗体FlshClckFrm的OnCreate
begin
Application.OnMessage:=PopMyMenuOnRightClick
Self.BorderStyle:=BsNone;
End;
在窗体TFlshClckFrm内截获所有消息处理:
procedure TFlshClckFrm.PopMyMenuOnRightClick(var Msg: TMsg;
Var Handled: Boolean);
Var
sTmp:String;
begin
IF (Msg.message=WM_RBUTTONDOWN) And (Msg.hwnd=MyFlashPlayer.Handle) Then
Begin
MainPM.Popup(Mouse.CursorPos.X,Mouse.CursorPos.Y);
Handled:=True;
End; If (Msg.message=WM_LBUTTONDOWN) And (Msg.hwnd=MyFlashPlayer.Handle) Then
Begin
SendMessage (self.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
Handled:=True;
End;
end;其他没有特殊的处理了
请教不能令窗体FlshClckFrm成为最上层窗体的原因是什么?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货