如何显示子form的时候保持主form的Focus(就象显示hint一样)(200分)

  • 主题发起人 主题发起人 luyear
  • 开始时间 开始时间
L

luyear

Unregistered / Unconfirmed
GUEST, unregistred user!
我的主form是form1
我想在form2.show的时候,焦点依然在form1(象hint一样)
我目前的临时办法是在form的某个事件里面用Form1.setfocus把焦点给回form1
但是窗口会闪
---------最好的办法就是把form2变成一个没有焦点的form??怎么做呢?
 
你把Form2的ParentWindow属性设置为Form1的Handle试一下!
 
不用 form ,用frame 或 label 之类的。
 
按‘一只没有缺点的狼’的做法确实可以实现form2不取得焦点,但是form2的边界不能超过
form1的边界,hint是可以的,jsxjd做那样也是
 
拦截Form2的WM_ACTIVATE消息
 
with tform2.Create(self) do
begin
show;
self.SetFocus;
end;
 
unit Unit2;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
TForm2 = class(TForm)
private
{ Private declarations }
public
procedure MyWmActivate(var Message: TMessage); message WM_ACTIVATE;
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.DFM}

procedure TForm2.MyWmActivate(var Message: TMessage);
begin
if (Message.wParamlo = WA_ACTIVE) or (Message.wParamlo = WA_CLICKACTIVE) then
SetActiveWindow(message.lParam);
inherited;
end;

end.
 
setwindowpos(form2.Handle,HWND_TOP,0,0,0,0,SWP_NOMOVE+SWP_NOSIZE+swp_showwindow+SWP_NOACTIVATE);
 
想要实现Hint的效果就去研究一下THintWindow,应该有所帮助
在Controls.pas里面
 
问题已经解决,发分
 
后退
顶部