我需要从任务栏隐藏Windows窗体但我不能使用 WS_EX_TOOLWINDOW ,因为我需要窗体标题栏上的系统菜单和最小/最大按钮。

如果我在运行时将表单切换到工具窗口,表单外观会被填满。从Web上搜索,我发现VB有一个ShowInTaskbar属性,我想知道这是否能做我想要的,以及它是否可以在Delphi 2006中实现。此项目也是一个COM服务器,没有MainForm等。

有帮助吗?

解决方案

有一个有趣的讨论这个确切的问题这里(从VB6开始)。

你问题的观点中最相关的一点是:

  

"当您创建窗口时,任务栏   检查窗口的扩展风格   看看是否有WS_EX_APPWINDOW   (& H40000)或WS_EX_TOOLWINDOW(& H80)   风格已打开。如果是WS_EX_APPWINDOW   打开,任务栏显示一个   窗口的按钮,如果WS_EX_   任务栏打开了TOOLWINDOW   没有显示窗口的按钮。   一个窗口永远不应该同时拥有   这些扩展的风格。如果是窗口   没有这些风格,   任务栏决定创建一个按钮   如果窗户是无主的,那么   如果窗口是,则创建一个按钮   资"

     

顺便说一句,您使用GetWindow   具有GW_OWNER标志的API函数   确定窗口是否拥有。

其他提示

感谢Stu让我快速回答问题。在我的情况下,我不得不手动将拥有表单的句柄添加到CreateParams中,但在其他/正常情况下可能不需要。

procedure TfrmWord2Site.CreateParams(var Params:TCreateParams);
begin
  inherited CreateParams(Params);
  Params.WndParent := <your owner form>.Handle;
  Params.ExStyle := Params.ExStyle and not WS_EX_APPWINDOW;
end;

感谢 http://www.scalabium.com/faq/dct0096.htm

procedure TForm1.FormCreate(Sender: TObject);
begin
  ShowWindow(Application.Handle, SW_HIDE);
  SetWindowLong(Application.Handle, GWL_EXSTYLE,
    GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
  ShowWindow(Application.Handle, SW_SHOW);
end;

我测试了它,它与Delphi2006一起使用。窗口菜单和最小/最大按钮仍然可见。

在Delphi XE(2010)中,这非常有效: 你应该编辑主表格,

program prog;  

uses
Forms,
Unit1 in 'Unit1.pas' {Form1};

begin
Application.Initialize;

// this value is set to "true", but you shoud set it "false"
Application.MainFormOnTaskbar := false;

Application.CreateForm(TForm1, Form1);
Application.Run;
end.

(对于“建模视图”窗口中的主要表单搜索)

之后,转到unit1.pas,您的主表单单元和“OnShow”。 form1事件:

procedure TForm1.FormShow(Sender: TObject);

begin

ShowWindow(Application.Handle, SW_HIDE);

end;

这将有所帮助,我有同样的问题,搜索整个网但没有resolt

通过BordersStyle bsDialog / bsToolWindow解决了我在这个领域的问题(但后来我不需要min / max ......)。但我想知道为什么你应该想要结合这些属性..它会不会混淆'普通'用户?

我正在寻找一段代码来将文本框集成到Windows任务栏。

我计划创建一个工具栏,我无法将其“集成到任务栏。”

感谢您的帮助 PJ

在C#中执行此操作的一种方法是:

ShowWindow(_window, SWHide);

int style = GetWindowLong(_window, GWL_EXSTYLE);
style |= WS_EX_TOOLWINDOW;
SetWindowLong(_window, GWL_EXSTYLE, style);

ShowWindow(_window, SWShow);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top