如何使需要显示的窗体在主窗体最小化时也弹出显示?

blog9496 2010-03-09 03:58:41
程序里一个定时器,15秒刷新一次,发现条件符合时就显示一个窗体提醒,想了两个办法:

1,用MessageBox弹出窗体,这个窗体在条件符合的时候就弹出来,若没有条件符合就应该不显示,那么在没有条件符合的时候该怎么把上一次条件符合的已经在显示的MessageBox删除呢?

2,在程序里添加了一个窗体,在有条件符合的时候show,在没有条件符合的时候hide。这样做的问题是:当主窗体最小化的时候,或者切换到其他程序的时候,这个窗体即便设置了FormStyle=fsStayOnTop也还是不能弹出来,只有切换到这个程序后,窗体才能显示出来。


请大侠帮助解决,谢谢!!!
...全文
222 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
blog9496 2010-03-11
  • 打赏
  • 举报
回复
加了这句:
SetWindowPos(Form3->Handle, HWND_TOPMOST, 0, 0,
0, 0, SWP_NOMOVE|SWP_NOSIZE);

确实可以了。但是还是有点小问题,就是在弹出窗口正在显示的时候,这个时候若主窗口处于最小化状态时,无法激活显示主窗口,也就是主窗口在这个时候无法最大化,挺烦人的,是否大侠能够再帮帮忙,解决一下这个问题?谢谢!!!
周药师 2010-03-10
  • 打赏
  • 举报
回复
引用 6 楼 blog9496 的回复:
也不论是哪个程序处于激活状态,这个frmTest都要能弹出显示在最上层,就是这个问题没有解决,请大侠帮助啊,是不是有什么激活窗体的函数,能使其在最上层显示的。

frmTest->FormStyle = fsStayOnTop ;
blog9496 2010-03-10
  • 打赏
  • 举报
回复
在主窗体的构造函数里面加了这句:

frmTest = new TfrmTest(Application);

之后,可以在主窗体最小化的时候显示frmTest,但是,它只有在所有程序都最小化也就是只显示桌面的情况下才能显示出来,比如若资源管理器没有最小化,那么就显示不出来这个frmTest,而我需要的是不论桌面上打开了多少个别的应用程序,也不论是哪个程序处于激活状态,这个frmTest都要能弹出显示在最上层,就是这个问题没有解决,请大侠帮助啊,是不是有什么激活窗体的函数,能使其在最上层显示的。
mabaoyes 2010-03-10
  • 打赏
  • 举报
回复
关注! 关注! 关注!
ydlchina 2010-03-10
  • 打赏
  • 举报
回复

//上面有点问题
//我的系统是GHOST SP3,按照你的方法,没有你那些操作也不能奔跑在前,试试这个,我使用没有问题
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if(Form3->Showing)
Form3->Hide();
else
{

//Form3->FormStyle = fsStayOnTop;

Form3->Show();
SetWindowPos(Form3->Handle, HWND_TOPMOST, 0, 0,
0, 0, SWP_NOMOVE|SWP_NOSIZE);
}
}
//---------------------------------------------------------------------------



void __fastcall TForm1::Button3Click(TObject *Sender)
{
Form3 = new TForm3(this);
Form3->Show();
Timer1->Enabled = true;

SetWindowPos(Form3->Handle, HWND_TOPMOST, 0, 0,
0, 0, SWP_NOMOVE|SWP_NOSIZE);
}
//-------------------


ydlchina 2010-03-10
  • 打赏
  • 举报
回复

//我的系统是GHOST SP3,按照你的方法,没有你那些操作也不能奔跑在前,试试这个,我使用没有问题
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if(Form3->Showing)
Form3->Hide();
else
{

Form3->FormStyle = fsStayOnTop;

Form3->Show();
SetWindowPos(Form3->Handle, HWND_TOPMOST, 0, 0,
0, 0, SWP_NOMOVE|SWP_NOSIZE);
}
}
//---------------------------------------------------------------------------



void __fastcall TForm1::Button3Click(TObject *Sender)
{
Form3 = new TForm3(this);
Form3->Show();
Timer1->Enabled = true;

SetWindowPos(Form3->Handle, HWND_TOPMOST, 0, 0,
0, 0, SWP_NOMOVE|SWP_NOSIZE);
}
//-------------------
blog9496 2010-03-10
  • 打赏
  • 举报
回复
用TrayIcon怎么实现在系统托盘那里弹出一个消息窗口?能否给个代码?谢谢。
blog9496 2010-03-10
  • 打赏
  • 举报
回复
现在是这样的:
放两个Form1,Form2,然后在Form1里面放个全局变量int i和一个定时器Timer1;在Form1构造函数里:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Form2 = new TForm2(Application);
i = 0;
}

Timer1默认的1秒,函数这样的:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Form2->Hide();
i++;
if( i==1 )
{
Form2->FormStyle = fsStayOnTop;
Form2->Show();
}
if( i==2 )
{
i = 0;
}
}
编译好Project1.exe

然后打开资源管理器,还有MYIE,对不起,这个古老的东西网上大概找不到了,但我估计maxthon也应该一样的。然后运行Project1.exe,并把Form1最小化,开始是可以弹出来Form2的,然后把MYIE最小化到系统托盘里面再弹出来,然后再切换到资源管理器,再把MYIE最小化到系统托盘里面再弹出来,总之多这么切换几次后,发现Form2就弹不到最上层了。

晕了,不知道怎么回事啊。是我的系统有问题?现在是XP SP3。
周药师 2010-03-09
  • 打赏
  • 举报
回复
引用 3 楼 keiy 的回复:
第一个问题,最简的方法是不用MessageBox而自己用Form写一个弹出窗体,这样就可以随意控制它的开关。(以前我就是这样做的)

还是用Form做弹出窗体,这样即容易控制,而且功能也强大,还可以扩展很多工作
CACACACACA 2010-03-09
  • 打赏
  • 举报
回复
procedure TForm1.Timer1Timer(Sender: TObject);
var
buf: array[0..100] of char;
begin
GetWindowText(GetActiveWindow, Buf, 100);
if string(buf)<>'aa' then
MessageBox(Handle, 'dd', 'aa', MB_OK);
end;
柯本 2010-03-09
  • 打赏
  • 举报
回复
第一个问题,最简的方法是不用MessageBox而自己用Form写一个弹出窗体,这样就可以随意控制它的开关。(以前我就是这样做的)
ydlchina 2010-03-09
  • 打赏
  • 举报
回复
void __fastcall TForm1::Button3Click(TObject *Sender)
{

Form3 = new TForm3(this);
Form3->Show();
Timer1->Enabled = true;
}
//-
ydlchina 2010-03-09
  • 打赏
  • 举报
回复
我做个测试没有问题,这个窗体不要是子窗体试试

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if(Form3->Showing)
Form3->Hide();
else
Form3->Show();
}
//---------------------------------------------------------------------------



void __fastcall TForm1::Button3Click(TObject *Sender)
{
Form3 = new TForm3(this);
Form3->Show();
}

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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