很急!关于两个窗口的问题请讨论!(100分)

  • 主题发起人 主题发起人 Ccmake
  • 开始时间 开始时间
C

Ccmake

Unregistered / Unconfirmed
GUEST, unregistred user!
我建立了一个主窗口还有一个信息窗口及多个付窗口:
信息窗口的作用是当用户操作主窗口或付窗口时将一些信息写到信息窗口中去,
使用户能看到处理信息,信息窗口隔2秒自动关闭。
但有一个问题当信息窗口以SHOW的方式显示时,有信息传来时主窗口标题栏变灰,
要待信息窗口关闭后才得到焦点。有什么方法才能使用信息窗口SHOW之后立即失去焦点,
而使得主窗口得到焦点。
最好能由信息窗口自己处理,不要在信息窗口中使用uses unit1 。
 
form1.setforse;
信息窗口
alwaysontop
理论上可以
 
不知道是否可以使用发消息的方式?
给信息窗体发送自己定义的消息,要显示的消息作为消息的参数
而在消息窗体中定义一个消息处理方法,然后再做相应的处理?
 
我实验了一下下面的方法:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const WM_INFO=WM_USER+1000;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
if(Trim(Edit1.Text)='') then
Exit;
SendMessage(Form2.Handle,WM_INFO,-1,0);
for i:=0 to Length(Edit1.Text)do
SendMessage(Form2.Handle,WM_INFO,1,Ord(Edit1.Text));
SendMessage(Form2.Handle,WM_INFO,-2,0);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Form2.Show;
end;

end.
上面是主窗体,需要把信息窗体uses进来
下面是信息窗体:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
WM_INFO=WM_USER+1000;
type
TForm2 = class(TForm)
Edit1: TEdit;
private
{ Private declarations }
strInfo:AnsiString;
public
{ Public declarations }
procedure GetInfo(var Msg:TMessage);message WM_INFO;
end;

var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.GetInfo(var Msg:TMessage);
begin
if(Msg.WParam=-1) then
strInfo:=''
else
if(Msg.WParam=1) then
strInfo:=Trim(strInfo)+Trim(Chr(Msg.LParam))
else
if(Msg.WParam=-2) then
Edit1.Text:=strInfo;
end;

end.

 
很容易:
ShowWindow(信息窗口.Handle, SW_SHOWNOACTIVATE);
如果有OnShow事件,还需要执行 信息窗口.FormShow(信息窗口)
 
后退
顶部