如何把窗口始终在最后?(50分)

  • 主题发起人 主题发起人 WilliamGui
  • 开始时间 开始时间
W

WilliamGui

Unregistered / Unconfirmed
GUEST, unregistred user!
一个exe,调用多个dll,并以Show方式显示窗口,
如何使exe主窗口始终在下面?

procedure WMACTIVATE(var msg:TMessage); message WM_ACTIVATE;
Self.SendToBack;

这样写不行!
 
呵呵.这个问题有意思.也想知道..
 
SetWindowPos( Form1.Handle,
HWND_BOTTOM,
0,0,0,0,
SWP_NOMOVE or SWP_NOSIZE);
 
把动态连接库里面的窗体设置成exe的子窗体啊,那样不就不需要考虑防在后面了。
 
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
private
{ Private declarations }
procedure StayDown(var m: TWMWINDOWPOSCHANGED);
message WM_WindowPosChanging;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.StayDown(var m: TWMWINDOWPOSCHANGED);
begin
m.WindowPos.hwndInsertAfter:=HWND_BOTTOM;
end;

end.
 
To kaida:
这问题越来越有意思了,我试了你的方法,不符合我的要求。
我的意思是exe的主窗口在其它dll show出来的窗口下面,并不是对整个Windows所有窗口来说的。况且测试过,点击exe主窗口, Show的dll窗口会到下面去。当然,调用dll的窗口,我传递了Applictaion.Handle进去。
谢谢你了。还有什么方法,或思路。
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3438588
 
这样行吗?

library dllTest;
uses
Forms,
Windows,
SysUtils,
Classes,
dllFormTest in 'dllFormTest.pas' {Form1};

procedure showDllForm(Handle: THandle); stdcall;
begin
Application.Handle := Handle;
Form1:=TForm1.Create(nil);
Form1.FormStyle:=fsStayOnTop;
Form1.Show;
end;

exports
showDllForm;

begin
end.

//-----------------

procedure showDllForm(Handle: THandle); stdcall; external 'dllTest.dll' name 'showDllForm';

procedure TForm1.Button1Click(Sender: TObject);
begin
showDllForm(Application.Handle);
end;
 
To All:
luzhouman的方法可以做到,原来只是需要这样!

谢谢大家了
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部