dephi XE - 实现主窗口在任务栏上不显示 (转)

方法一

以前的代码不能用。貌似在Delphi2010后就开始不行了,搜索了一下,得到办法: 1 修改工程文件添加一句:Application.MainFormOnTaskbar := False; 2 在主窗体的 OnShow 事件中写下 varStyle: Integer;beginStyle := GetWindowLong(Handle, GWL_EXSTYLE);SetWindowLong(Handle, GWL_EXSTYLE, Style and (not WS_EX_APPWINDOW)); ShowWindow(Application.Handle, SW_HIDE);end;

方法二

作者:兰若笑

Delphi XE2写的程序,希望主窗口在任务栏上不显示,而非主窗口则在任务栏上显示。

unit MyForm; { 将在Form1和Form2中被引用 }
interface
uses
  Winapi.Windows, Winapi.Messages, Vcl.Controls, Vcl.Forms;
type
  TForm = class(Vcl.Forms.TForm)
  private
    FIsMainForm: Boolean;
    FShowInTaskbar: Boolean;
    function GetShowInTaskbar(IsMainForm: Boolean): Boolean;
    procedure SetShowInTaskbar(IsMainForm: Boolean; const Value: Boolean);
  protected
    procedure CreateParams(var Params: TCreateParams); override;
    procedure WndProc(var Message: TMessage); override;
  public
    property ShowInTaskbar[IsMainForm: Boolean]: Boolean read GetShowInTaskbar write SetShowInTaskbar;
  end;
implementation
{ TForm }
procedure TForm.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  if not FIsMainForm then
  begin
    if FShowInTaskbar then
      Params.WndParent := GetDesktopWindow
    else
      Params.WndParent := Application.Handle;
  end;
end;
function TForm.GetShowInTaskbar(IsMainForm: Boolean): Boolean;
begin
  FIsMainForm := IsMainForm;
  if FIsMainForm then
    Result := Application.MainFormOnTaskBar
  else
    Result := FShowInTaskbar;
end;
procedure TForm.SetShowInTaskbar(IsMainForm: Boolean;
  const Value: Boolean);
begin
  FIsMainForm := IsMainForm;
  if FIsMainForm then
    Application.MainFormOnTaskBar := Value
  else
    FShowInTaskbar := Value;
  Perform(CM_RECREATEWND, 0, 0);
end;
procedure TForm.WndProc(var Message: TMessage);
begin
  inherited WndProc(Message);
  if FIsMainForm and (not Application.MainFormOnTaskBar) and (Message.Msg = WM_SHOWWINDOW) then
  begin
    ShowWindow(Application.Handle, SW_HIDE);
    SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
  end;
end;
end.

unit Unit1; { 主窗口 }
interface
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, MyForm;
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
uses Unit2;
procedure TForm1.FormCreate(Sender: TObject);
begin
  ShowInTaskbar[True] := False;    { 主窗口不在任务栏上显示 }
  TForm2.Create(Application).Show; { 显示Form2 }
end;
end.

unit Unit2;
interface
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, MyForm;
type
  TForm2 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
  ShowInTaskbar[False] := True; { 本窗口将在任务栏上显示 }
end;
end.

dephi XE - 实现主窗口在任务栏上不显示 (转),布布扣,bubuko.com

时间: 2024-08-01 22:47:14

dephi XE - 实现主窗口在任务栏上不显示 (转)的相关文章

[UWP开发] - 修改应用程序在任务栏上的显示Logo

用VS2015在windows 10上开发一个UWP的应用,由于windows 10对store应用进行了窗口化,因此可以看到在任务栏上看到应用程序的图标,但是看起来会感觉应用Logo会被嵌在另一个容器里,而且被缩小了,对比windows 10系统应用 Mail,它的Logo看起来好多了: 步骤: 1.打开UWP应用程序的清单,找到给任务栏指定图片的元素那行代码:"Square44x44Logo="Assets\storelogn.png" 2.复制这张图片两次,然后分别命名

修复窗口不再任务栏上的脚本.vbs

'xp_taskbar_desktop_fixall.vbs - Repairs the Taskbar when minimized programs don't show.  '?Kelly Theriot and Doug Knox - 8/22/2003 Set WSHShell = WScript.CreateObject("WScript.Shell") Message = "To work correctly, the script will close&quo

iOS在导航栏上居中显示分段控件(UISegmentedControl)

UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:nil]; segmentedControl.tintColor = [UIColor orangeColor]; //渲染色彩 [segmentedControl insertSegmentWithTitle:@"专家介绍"atIndex:0 animated:NO]; [segmentedControl insertSeg

Delphi主窗口任务栏菜单的问题(转发WM_SYSCOMMAND到Application)

Delphi的VCL框架在创建应用时TApplication是一个自动创建的隐藏窗口,其它创建的窗口是自动以该窗口为窗口,这就导致创始的主窗口在任务栏的系统菜单只有三项,只要在主窗口的Create事件中将系统菜单用Application的系统菜单替换,并将SysCommand消息转发到主窗口就正常了. unit Unit1; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Fo

SWT中子窗口始终显示在主窗口上面的方法

只需要在创建子窗口的时候,设置一下其属性就可以了,所设置的属性为:SWT.ON_TOP.例如: PopUpChartWin win = new PopUpChartWin(display, SWT.SHELL_TRIM | SWT.ON_TOP); 就这样了.另外附窗口设置的属性参数一览表(别处拷贝粘贴来的). BORDER--当只有BORDER的时候,窗口是一个只有细细白色边框的空白窗口,没有title那一圈蓝色的边框,也没有最大化,最小化,关闭.不能resize,不能移动.在任务栏里右键没有

QT开发(二十二)——QMainWindow主窗口

QT开发(二十二)--QMainWindow主窗口 一.主窗口简介 应用程序中的主窗口是与用户进行长时间交互的顶层窗口,提供了应用程序的大部分功能,通常是应用程序启动后的第一个窗口,应用程序一般由一个主窗口和多个对话框组成. QT中直接支持主窗口,QMainWindow是QT中主窗口的基类,是继承于QWidget类的容器型组件. QMainWindow内部封装了菜单栏.工具栏.中心组件.停靠组件.状态栏等. QMainWindow内置了布局管理器,基本的组件布局如下: 二.菜单栏 QT中提供了预

最近玩了一下qt5.2.1,顺着写点东西,关于这个版本设置程序主窗口居中

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include <QtGui/QGuiApplication> #include <QDebug> #include <QScreen> #include "qtquick2applicationviewer.h" int main(int argc, char *argv[]) {     QGuiApplication app(arg

Eclipse中的Console控制台视图脱离主窗口解决办法

在eclipse主窗口最上面的工具条选项中,找到Window,点击里面的Reset Perspective,即可,这样视图就重置了. Path: Window>>>>Perspective>>>>Reset Perspective...

setCentralWidget就可以把Qwidget设置为QMainWindow的主窗口

前面说的return app.exec() 这句话是用来使程序进入事件循环,除了直接递交的事件外,所有的事件都要在这个循环中被一层一层的分发,最后找到相应的处理函数来处理事件. 顶级窗口和顶级窗口是存在两个不同的事件循环中的,比如说QMainWindow和QWidget,想让一个顶级窗口中的事件能够在另外一个顶级窗口中响应,必须把两个顶级窗口合并,比如setCentralWidget就可以把Qwidget设置为QMainWindow的主窗口. http://blog.csdn.net/ftwor