简单问题:怎么能使一个窗体在最底层,有标题栏但不能移动, 现在我想控制另外一个程序,就象外挂一样,用FindWindow找到以后要他在在所有桌面窗体最底层,不能单击激活上来,而且不要他随便移动! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你是想让你的控制程序还是被控制程序不能移动?如果是前者那比较好办,你在OnMove里判断一下,如果有移动就回复到原来位置,原先的位置你可以先固定好,或放在配置文件里。如果要是后者估计就比较麻烦了。对于最底层的问题,我觉得你其实可以考虑将你自己的控制程序最小化,这样也就不会在界面上显示了。 unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); private { Private declarations } procedure wmnchittest(var msg:twmnchittest);message wm_nchittest; public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}{无法移动}procedure TForm1.wmnchittest(var msg:twmnchittest);begin inherited; if (htcaption=msg.result) then msg.result:=htclient;end;{嵌入桌面}procedure TForm1.FormCreate(Sender: TObject);var hDeskTop:THandle;begin hDeskTop:=FindWindow('Progman', 'Program Manager'); windows.SetParent(handle,hDeskTop);end;end. jinjazz(近身剪(N-P攻略)) 的方法可以满足了^_^ 我想下面的才是楼主需要的。(用记事本来举例。同时,设置本窗体的BorderStyle为bsNone)unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } procedure SetPos(var msg: TWMWINDOWPOSCHANGED); message WM_WindowPosChanging; public { Public declarations } end;var Form1: TForm1; h : hwnd;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);begin // application.OnMessage := ApplicationEvents1Message; h:= FindWindow(nil,'未定标题 - 记事本'); windows.SetParent(h,handle); PostMessage(h,WM_SYSCOMMAND,SC_MAXIMIZE,0); SetWindowLong(h, GWL_STYLE, GetWindowLong(h,GWL_STYLE) AND NOT WS_CAPTION);end;procedure TForm1.SetPos(var msg: TWMWINDOWPOSCHANGED);begin msg.WindowPos.hwndInsertAfter:=1;end;end. fbysss(独孤求败) 的方法比较灵活,建议采用 高性能大容量SOCKET并发(四):粘包、分包、解包 TStringGrid滚动条的问题. 怎样用程序控制桌面图标文字背景色为透明? 求教有什么好的Script控件? 我在到入数据的时候,从execl到表,出错了,帮看看 关于TStorecProc的问题!至还今无人解决,求了!有人用成功过吗?急急急!!! 关于delphi开发组件的问题? 自己写的initialization和finalization应放在程序的什么部分? 各位高手,我这个问题请帮忙解决一下啦:) WINNT装上ORACLE后,DELPHI如何使用? 一个较难的问题: 新手请教
对于最底层的问题,我觉得你其实可以考虑将你自己的控制程序最小化,这样也就不会在界面上显示了。
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure wmnchittest(var msg:twmnchittest);message wm_nchittest;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}{无法移动}
procedure TForm1.wmnchittest(var msg:twmnchittest);
begin
inherited;
if (htcaption=msg.result) then msg.result:=htclient;
end;
{嵌入桌面}
procedure TForm1.FormCreate(Sender: TObject);
var hDeskTop:THandle;
begin
hDeskTop:=FindWindow('Progman', 'Program Manager');
windows.SetParent(handle,hDeskTop);
end;end.
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm) procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure SetPos(var msg: TWMWINDOWPOSCHANGED); message WM_WindowPosChanging;
public
{ Public declarations }
end;var
Form1: TForm1;
h : hwnd;
implementation{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);begin
// application.OnMessage := ApplicationEvents1Message;
h:= FindWindow(nil,'未定标题 - 记事本');
windows.SetParent(h,handle);
PostMessage(h,WM_SYSCOMMAND,SC_MAXIMIZE,0);
SetWindowLong(h, GWL_STYLE, GetWindowLong(h,GWL_STYLE) AND NOT WS_CAPTION);
end;procedure TForm1.SetPos(var msg: TWMWINDOWPOSCHANGED);
begin
msg.WindowPos.hwndInsertAfter:=1;
end;end.