很急的问题!关于窗口的Handle(50分)

  • 主题发起人 主题发起人 MicroZeng
  • 开始时间 开始时间
M

MicroZeng

Unregistered / Unconfirmed
GUEST, unregistred user!
一个窗口,当我把它设置成formStyle := fsStayOnTop时,当调用<br>TOpenDialog、MessageDlg等时,这些对话框却跑到窗口的后边。<br><br>但是当我使用MessageBox(EditForm.Handle, 'Save?', 'Config', id_OK)<br>(设:这个窗口名为EditForm)时,就没有问题。<br><br>我想问题应该出在于窗口的Handle,对话框的等级没有窗口的等级高。<br>但是我该怎么办呢?请个位帮忙.<br>
 
form1.formStyle := fsStayOnTop<br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br>&nbsp; if MessageDlg('Welcome to my Object Pascal application. &nbsp;Exit now?',<br>&nbsp; &nbsp; mtConfirmation, [mbYes, mbNo], 0) = mrYes then<br>&nbsp; begin<br>&nbsp; &nbsp; MessageDlg('Exiting the Object Pascal application.', mtInformation,<br>&nbsp; &nbsp; &nbsp; [mbOk], 0);<br>&nbsp; &nbsp; Close;<br>&nbsp; end;<br>end;<br>我用怎么没问题
 
把窗口也设成对话框类型就是了。
 
to hubDog: 我刚刚开始也是没有问题的,但是后来确有问题,一个主窗口MDIFrom,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;加一个MDIChild, 而这个窗口是一个弹出式的窗口。<br><br>to amo: 不行,这个窗口必须是bsSizeable。<br><br>有别的办法吗?<br>
 
我照你说的试了一下,没问题,你最好给一个最简单的例子。
 
关注,我也有类似问题.
 
有些不明白,到底哪一个是alwaysontop的?mdiform?请详细说说。
 
我觉得主要的问题出在:<br>procedure CreateParams(VAR Params: TCreateParams); override;<br>procedure TEditForm.CreateParams(VAR Params: TCreateParams);<br>begin<br>&nbsp; Inherited CreateParams(Params);<br><br>&nbsp; Params.WndParent := {MainForm.Handle} GetDesktopWindow;<br>end;<br><br>我的原来的意思是在EditForm创建时, 在任务栏上生成一个图标,<br>所以Params.WndParent := {MainForm.Handle} GetDesktopWindow;<br>但是因为MessageDlg的Handle是属于TApplication的,就跑到后面了.<br><br>使用MessageBox时,可以指定MessageBox的Handle, 如<br>MessageBox(EditForm.Handle, '','', id_ok),所以它就能够在<br>EditForm的上端了.<br><br>同理,对于一些OpenDialog, SaveDialog等,因为其缺省的Handle都是<br>TApplication的, 也就跑到Editform的后面了.<br><br>但是我不知道如何解决.我对API不熟.<br>
 
呵呵,又是mdiform闹的:-)
 
这与MDIForm有关?<br>
 
把谈出的对话框设置称敞口的字窗口就可以了
 
to Eldorado: 是什么意思?
 
艘主义:<br>form1.formstyle := fsNormal;<br>dlg.excute;<br>for1.formstyle := fsStayOnTop<br><br>haha
 
to CJ:<br>&nbsp; 这样是不行的。问题出现不在于fsStayOnTop。而是在于我在EditForm的Create事<br>件中调用<br>&nbsp;Params.WndParent := {MainForm.Handle} GetDesktopWindow;<br>如果能把OpenDialog1的Handle也等于GetDesktopWindow就没有问题。<br>但是怎么办呢?
 
这个问题还有办法解决吗?
 
自己作一个MessageGorm<br>Use SetWindowPos<br>try
 
windows.setparent(opendialog1.handle, getdesktopwindow);
 
hehe, 那messagebox呢?
 
使用以下代码:<br><br>Begin<br>&nbsp; with Application do<br>&nbsp; begin<br>&nbsp; &nbsp; NormalizeTopMosts;<br>&nbsp; &nbsp; MessageBox('This should be on top.', 'Look', MB_OK);<br>&nbsp; &nbsp; RestoreTopMosts;<br>&nbsp; end;<br>end;<br><br>这是从Delphi的联机帮助中抄来的(查一下TApplication对象的Methods)。
 
后退
顶部