窗口显示问题??(有点难度) 能不能使窗口显示以独占的方式显示?如:窗口在屏幕的最上方,其他应用程序最大化时,也只是在我创建窗口的下方。就像Windows的任务栏(taskbar)一样,我们最大化窗口时,也只是在taskbar的上面。。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 现在设置 form 的fsStyle = fsStayOnTop 没用吗?不行可用 SetWindowPos(handle,hwnd_topmost,0,0,0,0,swp_nomove or swp_nosize); 用下面的API置顶后, SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); 怎么再把窗口改成正常的状态呢? SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);我GOOGLE的, 最后还是在CSDN里找到答案,呵呵 一个例子, 通过SystemParametersInfo函数来设置Windows的工作区(WorkArea),这样桌面上的图标和设置之后运行的程序都会在新的工作区中显示了。unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) btnExit: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure btnExitClick(Sender: TObject); private procedure MyFormMove(var Msg: TMessage); message WM_NCHITTEST; end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.MyFormMove(var Msg: TMessage);begin //nothing to do...end;procedure TForm1.FormCreate(Sender: TObject);var WorkArea: TRect;begin Self.BorderStyle := bsNone; Self.FormStyle := fsStayOnTop; Self.Left := 0; Self.Top := 0; Self.Width := Screen.Width; SystemParametersInfo(SPI_GETWORKAREA, 0, @WorkArea, 0); WorkArea.Top := WorkArea.Top + Self.Height; SystemParametersInfo(SPI_SETWORKAREA, 0, @WorkArea, SPIF_SENDCHANGE);end;procedure TForm1.FormDestroy(Sender: TObject);var WorkArea: TRect;begin SystemParametersInfo(SPI_GETWORKAREA, 0, @WorkArea, 0); WorkArea.Top := WorkArea.Top - Self.Height; SystemParametersInfo(SPI_SETWORKAREA, 0, @WorkArea, SPIF_SENDCHANGE);end;procedure TForm1.btnExitClick(Sender: TObject);begin Self.Close;end;end. SetWindowPos(handle,hwnd_topmost,0,0,0,0,swp_nomove or swp_nosize); D5开发人员指南第24章 扩展Windows外壳24.2 应用程序桌面工具栏TAppBar 我想用hook,期待你更简单的解决 感谢jadeluo(秀峰) 的回答:现在还有一个问题,在该窗口启动后,后面启动的窗口是在新设定的WordArea里面,在他前面启动的窗口的WorkArea,还是全屏。我要的效果如:Oracle8.0.0.5服务器版本中的Administrator Toolbar(VOM.exe) setwindowpos(application.handle,hwnd_top,0,0,0,0,swp_hidewindow); To slzzg:测试了一下, 遍历目前显示在桌面上的窗体, 给它们发送最小化消息,然后再发送还原消息,应该能解决问题。 delphi7的控件可不可以导入到delphi xe3里面来,让项目可以继续使用 字符串yyyy-mm-dd转换为日期格式,然后做运算 dbgrid中体现Adoquery的查询出来的数据的运算结果可以么? 看看中国的美工模仿韩国美工 用write函数写表数据导出到文本文件中怎样换行? 怎么样才能真正的断开程序与数据库之间的连接??急用?? 请教高手,谢谢帮助!~_~ 急问!!delphi中如何操纵MSMQ 高分!! 选择开发语言,请提供参考意见 比如,一个Button是动态创建出来的如何写它的onclick事件? 变量赋值后仍为nil的问题 如何继承父窗体中的过程或函数?
不行可用 SetWindowPos(handle,hwnd_topmost,0,0,0,0,swp_nomove or swp_nosize);
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
怎么再把窗口改成正常的状态呢? SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);我GOOGLE的, 最后还是在CSDN里找到答案,呵呵
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
btnExit: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btnExitClick(Sender: TObject);
private
procedure MyFormMove(var Msg: TMessage); message WM_NCHITTEST;
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.MyFormMove(var Msg: TMessage);
begin
//nothing to do...
end;procedure TForm1.FormCreate(Sender: TObject);
var
WorkArea: TRect;
begin
Self.BorderStyle := bsNone;
Self.FormStyle := fsStayOnTop;
Self.Left := 0;
Self.Top := 0;
Self.Width := Screen.Width;
SystemParametersInfo(SPI_GETWORKAREA, 0, @WorkArea, 0);
WorkArea.Top := WorkArea.Top + Self.Height;
SystemParametersInfo(SPI_SETWORKAREA, 0, @WorkArea, SPIF_SENDCHANGE);
end;procedure TForm1.FormDestroy(Sender: TObject);
var
WorkArea: TRect;
begin
SystemParametersInfo(SPI_GETWORKAREA, 0, @WorkArea, 0);
WorkArea.Top := WorkArea.Top - Self.Height;
SystemParametersInfo(SPI_SETWORKAREA, 0, @WorkArea, SPIF_SENDCHANGE);
end;procedure TForm1.btnExitClick(Sender: TObject);
begin
Self.Close;
end;end.
第24章 扩展Windows外壳
24.2 应用程序桌面工具栏
TAppBar
测试了一下, 遍历目前显示在桌面上的窗体, 给它们发送最小化消息,然后再发送还原消息,应该能解决问题。